diff --git a/INSTALL.md b/INSTALL.md index 00c724b11b4..a2137fdf69d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -51,19 +51,21 @@ Apache CloudStack uses some ports, make sure at least those used by the manageme server are available and not blocked by any local firewall. Following ports are used by Apache CloudStack and its entities: - 8787: Apache CloudStack (Tomcat) debug socket - 9090, 8250, 8080: Apache CloudStack Management Server, User/Client API - 8096: User/Client to CloudStack Management Server (unauthenticated) - 7080: AWS API Server - 3306: MySQL Server - 3922, 8250, 80/443, 111/2049, 53: Secondary Storage VM - 3922, 8250, 53: Console Proxy VM - 3922, 8250, 53: Virtual Router + 8080: API Server (authenticated), browser or CLI client to management server + 8096: API Server (unauthenticated), browser or CLI client to management server + 8787: Remote java debug debugging port, from IDE to management server + 9090: Management server to management server (cluster) + 7080: AWS API Server to which an AWS client can connect + 80/443: HTTP client to Secondary Storage VM (template download) + 111/2049: Secondary Storage to NFS server + 3922: Port used to ssh/scp into system vms (SSVM, CPVM, VR) + 8250: Agent (SSVM, CPVM, VR) to management server 22, 80, 443: XenServer, XAPI 22: KVM 443: vCenter - DNS: 53 - NFS: 111/2049 + 53: DNS + 111/2049: NFS + 3306: MySQL Server to which the management server connects ### Configuring MySQL Server @@ -93,8 +95,7 @@ For example, for master: Clean and build: - $ mvn clean - $ mvn install + $ mvn clean install -P systemvm,developer In case you want support for VMWare, SRX and other non-Apache (referred to as nonoss) compliant libs, you may download the following jar artifacts from respective vendors: @@ -112,9 +113,9 @@ Install them to ~/.m2 so maven can get them as dependencies: $ cd deps $ ./install-non-oss.sh -And build them with the nonoss flag: +To build with nonoss components, use the build command with the nonoss flag: - $ mvn install -Dnonoss + $ mvn clean install -P systemvm,developer -Dnonoss Clear old database (if any) and deploy the database schema: @@ -122,7 +123,7 @@ Clear old database (if any) and deploy the database schema: Export the following variable if you need to run and debug the management server: - $ export MAVEN_OPTS="-Xmx1024m -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n" + $ export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=500m -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n" Start the management server: diff --git a/LICENSE b/LICENSE index 73bc738391f..5e29e2b12bc 100644 --- a/LICENSE +++ b/LICENSE @@ -180,7 +180,6 @@ Copyright (c) 2013 The Apache Software Foundation This distribution contains third party resources. - Within the . directory licensed under the BSD (3-clause) http://www.opensource.org/licenses/BSD-3-Clause (as follows) @@ -209,10 +208,9 @@ Within the . directory CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + from Thomas Nagy http://code.google.com/p/waf/ - waf - + waf Within the awsapi directory licensed under the BSD (3-clause) http://www.opensource.org/licenses/BSD-3-Clause (as follows) @@ -242,10 +240,9 @@ Within the awsapi directory CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + from Thomas Nagy http://code.google.com/p/waf/ - waf - + waf Within the console-proxy/js directory licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) @@ -270,10 +267,9 @@ Within the console-proxy/js directory LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + from John Resig - jquery.js - + jquery.js Within the deps directory licensed under the BSD (2-clause) for XenServerJava http://www.opensource.org/licenses/BSD-2-Clause (as follows) @@ -304,28 +300,27 @@ Within the deps directory THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + from Citrix Systems, Inc http://www.citrix.com/ - XenServerJava http://community.citrix.com/cdn/xs/sdks/ - + XenServerJava from http://community.citrix.com/cdn/xs/sdks/ Within the patches/systemvm/debian/config/etc directory placed in the public domain + by Adiscon GmbH http://www.adiscon.com/ + rsyslog.conf by Simon Kelley - dnsmasq.conf - vpcdnsmasq.conf - + dnsmasq.conf + vpcdnsmasq.conf Within the patches/systemvm/debian/config/etc/apache2 directory licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above) Copyright (c) 2012 The Apache Software Foundation from The Apache Software Foundation http://www.apache.org/ - httpd.conf - ports.conf - sites-available/default - sites-available/default-ssl - vhostexample.conf - + httpd.conf + ports.conf + sites-available/default + sites-available/default-ssl + vhostexample.conf Within the patches/systemvm/debian/config/etc/ssh/ directory licensed under the BSD (2-clause) http://www.opensource.org/licenses/BSD-2-Clause (as follows) @@ -354,40 +349,95 @@ Within the patches/systemvm/debian/config/etc/ssh/ directory ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + from OpenSSH Project http://www.openssh.org/ - sshd_config - + sshd_config Within the patches/systemvm/debian/config/root/redundant_router directory placed in the public domain by The netfilter.org project http://www.netfilter.org/ - conntrackd.conf.templ - + conntrackd.conf.templ Within the scripts/storage/secondary directory licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above) Copyright (c) 2010-2011 OpenStack, LLC. from OpenStack, LLC http://www.openstack.org - swift - + swift Within the scripts/vm/hypervisor/xenserver directory licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above) Copyright (c) 2010-2011 OpenStack, LLC. from OpenStack, LLC http://www.openstack.org - swift + swift +Within the tools/appliance/definitions/systemvmtemplate directory + licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) + + Copyright (c) 2010-2012 Patrick Debois + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + from Patrick Debois http://www.jedi.be/blog/ + base.sh from https://github.com/jedi4ever/veewee + cleanup.sh from https://github.com/jedi4ever/veewee + definition.rb from https://github.com/jedi4ever/veewee + preseed.cfg from https://github.com/jedi4ever/veewee + zerodisk.sh from https://github.com/jedi4ever/veewee + +Within the tools/devcloud/src/deps/boxes/basebox-build directory + licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) + + Copyright (c) 2010-2012 Patrick Debois + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + from Patrick Debois http://www.jedi.be/blog/ + definition.rb from https://github.com/jedi4ever/veewee + preseed.cfg from https://github.com/jedi4ever/veewee Within the ui/lib directory placed in the public domain by Eric Meyer http://meyerweb.com/eric/ - reset.css + reset.css from http://meyerweb.com/eric/tools/css/reset/ licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above) Copyright (c) 2006 Google Inc. from Google Inc. http://google.com - excanvas.js http://code.google.com/p/explorercanvas/ + excanvas.js from http://code.google.com/p/explorercanvas/ licensed under the BSD (2-clause) http://www.opensource.org/licenses/BSD-2-Clause (as follows) @@ -417,9 +467,34 @@ Within the ui/lib directory ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - + from George McGinley Smith - jquery.easing.js + jquery.easing.js + + licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) + + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + from The Dojo Foundation http://dojofoundation.org/ + require.js from http://github.com/jrburke/requirejs licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) @@ -443,9 +518,9 @@ Within the ui/lib directory LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + from John Resig - jquery.js + jquery.js licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) @@ -469,9 +544,9 @@ Within the ui/lib directory LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + from Jorn Zaefferer - jquery.validate.js + jquery.validate.js licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) @@ -495,9 +570,9 @@ Within the ui/lib directory LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + from Sebastian Tschan https://blueimp.net - jquery.md5.js + jquery.md5.js licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) @@ -521,10 +596,9 @@ Within the ui/lib directory LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + from Klaus Hartl http://stilbuero.de - jquery.cookies.js - + jquery.cookies.js Within the ui/lib/flot directory licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) @@ -549,18 +623,18 @@ Within the ui/lib/flot directory LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + from IOLA http://www.iola.dk/ - jquery.flot.crosshair.js - jquery.flot.fillbetween.js - jquery.flot.image.js - jquery.flot.js - jquery.flot.navigate.js - jquery.flot.resize.js - jquery.flot.selection.js - jquery.flot.stack.js - jquery.flot.symbol.js - jquery.flot.threshold.js + jquery.flot.crosshair.js + jquery.flot.fillbetween.js + jquery.flot.image.js + jquery.flot.js + jquery.flot.navigate.js + jquery.flot.resize.js + jquery.flot.selection.js + jquery.flot.stack.js + jquery.flot.symbol.js + jquery.flot.threshold.js licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) @@ -585,9 +659,9 @@ Within the ui/lib/flot directory LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + from Brian Medendorp - jquery.pie.js + jquery.pie.js licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) @@ -610,10 +684,9 @@ Within the ui/lib/flot directory LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + from Ole Laursen - jquery.colorhelpers.js - + jquery.colorhelpers.js Within the ui/lib/jquery-ui directory licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) @@ -637,12 +710,11 @@ Within the ui/lib/jquery-ui directory LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + from jQuery UI Developers http://jqueryui.com/about - css/jquery-ui.css - index.html - js/jquery-ui.js - + css/jquery-ui.css + index.html + js/jquery-ui.js Within the ui/lib/qunit directory licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows) @@ -667,14 +739,14 @@ Within the ui/lib/qunit directory LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - + from Jorn Zaefferer - qunit.css http://docs.jquery.com/QUnit - qunit.js http://docs.jquery.com/QUnit - + qunit.css from http://docs.jquery.com/QUnit + qunit.js from http://docs.jquery.com/QUnit Within the utils/src/com/cloud/utils/db directory licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above) Copyright (c) 2004 Clinton Begin from Clinton Begin http://code.google.com/p/mybatis/ - ScriptRunner.java http://code.google.com/p/mybatis/ + ScriptRunner.java from http://code.google.com/p/mybatis/ + diff --git a/NOTICE b/NOTICE index 5cdd9fcee19..d36048aabda 100644 --- a/NOTICE +++ b/NOTICE @@ -6,30 +6,7 @@ - Source code distribution if this software contains third party resources requiring - the following notices: - - - For - jquery.md5.js - - - jQuery MD5 Plugin 1.2.1 - https://github.com/blueimp/jQuery-MD5 - - Copyright 2010, Sebastian Tschan - https://blueimp.net - - Licensed under the MIT license: - http://creativecommons.org/licenses/MIT/ - - Based on - A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - Digest Algorithm, as defined in RFC 1321. - Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - Distributed under the BSD License - See http://pajhome.org.uk/crypt/md5 for more info. + This distribution contains third party resources requiring the following notices: For @@ -66,6 +43,28 @@ Date: Thu May 12 15:04:36 2011 -0400 + For + jquery.md5.js + + + jQuery MD5 Plugin 1.2.1 + https://github.com/blueimp/jQuery-MD5 + + Copyright 2010, Sebastian Tschan + https://blueimp.net + + Licensed under the MIT license: + http://creativecommons.org/licenses/MIT/ + + Based on + A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + Digest Algorithm, as defined in RFC 1321. + Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + Distributed under the BSD License + See http://pajhome.org.uk/crypt/md5 for more info. + + For jquery.colorhelpers.js @@ -76,4 +75,4 @@ Inspiration from jQuery color animation plugin by John Resig. - Released under the MIT license by Ole Laursen, October 2009. \ No newline at end of file + Released under the MIT license by Ole Laursen, October 2009. diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties index 74cfd1c21d6..f7eac674712 100644 --- a/agent/conf/agent.properties +++ b/agent/conf/agent.properties @@ -79,4 +79,4 @@ domr.scripts.dir=scripts/network/domr/kvm # be overridden here. # native = com.cloud.hypervisor.kvm.resource.BridgeVifDriver # openvswitch = com.cloud.hypervisor.kvm.resource.OvsBridgeDriver -#libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.BridgeVifDriver \ No newline at end of file +#libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.BridgeVifDriver diff --git a/agent/pom.xml b/agent/pom.xml index 810f33fc572..0f44c1aa297 100644 --- a/agent/pom.xml +++ b/agent/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT @@ -35,8 +35,6 @@ org.apache.cloudstack cloud-utils ${project.version} - tests - test @@ -83,7 +81,7 @@ + value="${cs.replace.properties}" /> @@ -97,7 +95,7 @@ + value="${cs.replace.properties}" /> @@ -106,6 +104,24 @@ + + org.apache.maven.plugins + maven-dependency-plugin + 2.5.1 + + + copy-dependencies + package + + copy-dependencies + + + ${project.build.directory}/dependencies + runtime + + + + diff --git a/agent/src/com/cloud/agent/AgentShell.java b/agent/src/com/cloud/agent/AgentShell.java index 0e020935e90..9cb3c3db3ff 100644 --- a/agent/src/com/cloud/agent/AgentShell.java +++ b/agent/src/com/cloud/agent/AgentShell.java @@ -48,6 +48,7 @@ import com.cloud.agent.dao.StorageComponent; import com.cloud.agent.dao.impl.PropertiesStorage; import com.cloud.host.Host; import com.cloud.resource.ServerResource; +import com.cloud.utils.LogUtils; import com.cloud.utils.NumbersUtil; import com.cloud.utils.ProcessUtil; import com.cloud.utils.PropertiesUtil; @@ -552,6 +553,9 @@ public class AgentShell implements IAgentShell { public void start() { try { + /* By default we only search for log4j.xml */ + LogUtils.initLog4j("log4j-cloud.xml"); + System.setProperty("java.net.preferIPv4Stack", "true"); String instance = getProperty(null, "instance"); diff --git a/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java b/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java index 8a3a271c4f4..516430b2fed 100644 --- a/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java +++ b/agent/src/com/cloud/agent/resource/consoleproxy/ConsoleProxyResource.java @@ -26,6 +26,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import java.net.URLConnection; +import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -77,7 +78,7 @@ import com.google.gson.Gson; * server. * */ -public abstract class ConsoleProxyResource extends ServerResourceBase implements +public class ConsoleProxyResource extends ServerResourceBase implements ServerResource { static final Logger s_logger = Logger.getLogger(ConsoleProxyResource.class); @@ -489,4 +490,26 @@ public abstract class ConsoleProxyResource extends ServerResourceBase implements } } } + + @Override + public void setName(String name) { + } + + @Override + public void setConfigParams(Map params) { + } + + @Override + public Map getConfigParams() { + return new HashMap(); + } + + @Override + public int getRunLevel() { + return 0; + } + + @Override + public void setRunLevel(int level) { + } } diff --git a/agent/test/com/cloud/agent/TestAgentShell.java b/agent/test/com/cloud/agent/TestAgentShell.java index 0e9be0f1312..b0f748067d0 100644 --- a/agent/test/com/cloud/agent/TestAgentShell.java +++ b/agent/test/com/cloud/agent/TestAgentShell.java @@ -30,7 +30,7 @@ public class TestAgentShell extends TestCase { File file = null; try { file = File.createTempFile("wget", ".html"); - AgentShell.wget("http://www.google.com/", file); + AgentShell.wget("http://www.apache.org/", file); if (s_logger.isDebugEnabled()) { s_logger.debug("file saved to " + file.getAbsolutePath()); diff --git a/api/pom.xml b/api/pom.xml index 7461c67aaa2..8ca258f12e3 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT diff --git a/api/src/com/cloud/agent/api/CreateVMSnapshotAnswer.java b/api/src/com/cloud/agent/api/CreateVMSnapshotAnswer.java new file mode 100644 index 00000000000..f9fb1642b3f --- /dev/null +++ b/api/src/com/cloud/agent/api/CreateVMSnapshotAnswer.java @@ -0,0 +1,62 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.agent.api; + +import java.util.List; + +import com.cloud.agent.api.to.VolumeTO; + +public class CreateVMSnapshotAnswer extends Answer { + + private List volumeTOs; + private VMSnapshotTO vmSnapshotTo; + + + public List getVolumeTOs() { + return volumeTOs; + } + + public void setVolumeTOs(List volumeTOs) { + this.volumeTOs = volumeTOs; + } + + public VMSnapshotTO getVmSnapshotTo() { + return vmSnapshotTo; + } + + public void setVmSnapshotTo(VMSnapshotTO vmSnapshotTo) { + this.vmSnapshotTo = vmSnapshotTo; + } + + public CreateVMSnapshotAnswer() { + + } + + public CreateVMSnapshotAnswer(CreateVMSnapshotCommand cmd, boolean success, + String result) { + super(cmd, success, result); + } + + public CreateVMSnapshotAnswer(CreateVMSnapshotCommand cmd, + VMSnapshotTO vmSnapshotTo, List volumeTOs) { + super(cmd, true, ""); + this.vmSnapshotTo = vmSnapshotTo; + this.volumeTOs = volumeTOs; + } + +} diff --git a/api/src/com/cloud/agent/api/CreateVMSnapshotCommand.java b/api/src/com/cloud/agent/api/CreateVMSnapshotCommand.java new file mode 100644 index 00000000000..478987d993b --- /dev/null +++ b/api/src/com/cloud/agent/api/CreateVMSnapshotCommand.java @@ -0,0 +1,42 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.agent.api; + +import java.util.List; + +import com.cloud.agent.api.to.VolumeTO; +import com.cloud.vm.VirtualMachine; + +public class CreateVMSnapshotCommand extends VMSnapshotBaseCommand { + + public CreateVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List volumeTOs, String guestOSType, VirtualMachine.State vmState) { + super(vmName, snapshot, volumeTOs, guestOSType); + this.vmState = vmState; + } + + private VirtualMachine.State vmState; + + + public VirtualMachine.State getVmState() { + return vmState; + } + + public void setVmState(VirtualMachine.State vmState) { + this.vmState = vmState; + } + +} diff --git a/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java b/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java index a19d34436f7..fbf6121f543 100644 --- a/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java +++ b/api/src/com/cloud/agent/api/CreateVolumeFromSnapshotCommand.java @@ -18,6 +18,7 @@ package com.cloud.agent.api; import com.cloud.storage.StoragePool; + /** * This currently assumes that both primary and secondary storage are mounted on the XenServer. */ diff --git a/api/src/com/cloud/agent/api/CreateVolumeFromVMSnapshotAnswer.java b/api/src/com/cloud/agent/api/CreateVolumeFromVMSnapshotAnswer.java new file mode 100644 index 00000000000..ed3bc62ccba --- /dev/null +++ b/api/src/com/cloud/agent/api/CreateVolumeFromVMSnapshotAnswer.java @@ -0,0 +1,54 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.agent.api; + +import com.cloud.agent.api.to.VolumeTO; + +public class CreateVolumeFromVMSnapshotAnswer extends Answer { + private String path; + private VolumeTO volumeTo; + + public VolumeTO getVolumeTo() { + return volumeTo; + } + + public CreateVolumeFromVMSnapshotAnswer( + CreateVolumeFromVMSnapshotCommand cmd, VolumeTO volumeTo) { + super(cmd, true, ""); + this.volumeTo = volumeTo; + } + + public String getPath() { + return path; + } + + protected CreateVolumeFromVMSnapshotAnswer() { + + } + + public CreateVolumeFromVMSnapshotAnswer( + CreateVolumeFromVMSnapshotCommand cmd, String path) { + super(cmd, true, ""); + this.path = path; + } + + public CreateVolumeFromVMSnapshotAnswer( + CreateVolumeFromVMSnapshotCommand cmd, boolean result, String string) { + super(cmd, result, string); + } +} diff --git a/api/src/com/cloud/agent/api/CreateVolumeFromVMSnapshotCommand.java b/api/src/com/cloud/agent/api/CreateVolumeFromVMSnapshotCommand.java new file mode 100644 index 00000000000..634e15c9f04 --- /dev/null +++ b/api/src/com/cloud/agent/api/CreateVolumeFromVMSnapshotCommand.java @@ -0,0 +1,88 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.agent.api; + +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.vm.DiskProfile; + +public class CreateVolumeFromVMSnapshotCommand extends Command { + + protected String path; + protected String name; + protected Boolean fullClone; + protected String storagePoolUuid; + private StorageFilerTO pool; + private DiskProfile diskProfile; + private Long volumeId; + + public DiskProfile getDskch() { + return diskProfile; + } + + public String getPath() { + return path; + } + + public Long getVolumeId() { + return volumeId; + } + + protected CreateVolumeFromVMSnapshotCommand() { + + } + + public CreateVolumeFromVMSnapshotCommand(String path, String name, + Boolean fullClone, String storagePoolUuid) { + this.path = path; + this.name = name; + this.fullClone = fullClone; + this.storagePoolUuid = storagePoolUuid; + } + + public CreateVolumeFromVMSnapshotCommand(String path, String name, + Boolean fullClone, String storagePoolUuid, StorageFilerTO pool, + DiskProfile diskProfile, Long volumeId) { + this.path = path; + this.name = name; + this.fullClone = fullClone; + this.storagePoolUuid = storagePoolUuid; + this.pool = pool; + this.diskProfile = diskProfile; + this.volumeId = volumeId; + } + + @Override + public boolean executeInSequence() { + return false; + } + + public String getName() { + return name; + } + + public Boolean getFullClone() { + return fullClone; + } + + public String getStoragePoolUuid() { + return storagePoolUuid; + } + + public StorageFilerTO getPool() { + return pool; + } +} diff --git a/api/src/com/cloud/agent/api/DeleteVMSnapshotAnswer.java b/api/src/com/cloud/agent/api/DeleteVMSnapshotAnswer.java new file mode 100644 index 00000000000..8f4ecad3d80 --- /dev/null +++ b/api/src/com/cloud/agent/api/DeleteVMSnapshotAnswer.java @@ -0,0 +1,49 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.agent.api; + +import java.util.List; + +import com.cloud.agent.api.to.VolumeTO; + +public class DeleteVMSnapshotAnswer extends Answer { + private List volumeTOs; + + public DeleteVMSnapshotAnswer() { + } + + public DeleteVMSnapshotAnswer(DeleteVMSnapshotCommand cmd, boolean result, + String message) { + super(cmd, result, message); + } + + public DeleteVMSnapshotAnswer(DeleteVMSnapshotCommand cmd, + List volumeTOs) { + super(cmd, true, ""); + this.volumeTOs = volumeTOs; + } + + public List getVolumeTOs() { + return volumeTOs; + } + + public void setVolumeTOs(List volumeTOs) { + this.volumeTOs = volumeTOs; + } + + +} diff --git a/api/src/com/cloud/agent/api/DeleteVMSnapshotCommand.java b/api/src/com/cloud/agent/api/DeleteVMSnapshotCommand.java new file mode 100644 index 00000000000..c213448bf9c --- /dev/null +++ b/api/src/com/cloud/agent/api/DeleteVMSnapshotCommand.java @@ -0,0 +1,28 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License +package com.cloud.agent.api; + +import java.util.List; + +import com.cloud.agent.api.to.VolumeTO; + + +public class DeleteVMSnapshotCommand extends VMSnapshotBaseCommand { + public DeleteVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List volumeTOs, String guestOSType) { + super( vmName, snapshot, volumeTOs, guestOSType); + } +} diff --git a/api/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java b/api/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java new file mode 100644 index 00000000000..848ffc0ebf8 --- /dev/null +++ b/api/src/com/cloud/agent/api/RevertToVMSnapshotAnswer.java @@ -0,0 +1,63 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.agent.api; + +import java.util.List; + +import com.cloud.agent.api.to.VolumeTO; +import com.cloud.vm.VirtualMachine; + +public class RevertToVMSnapshotAnswer extends Answer { + + private List volumeTOs; + private VirtualMachine.State vmState; + + public RevertToVMSnapshotAnswer(RevertToVMSnapshotCommand cmd, boolean result, + String message) { + super(cmd, result, message); + } + + public RevertToVMSnapshotAnswer() { + super(); + } + + public RevertToVMSnapshotAnswer(RevertToVMSnapshotCommand cmd, + List volumeTOs, + VirtualMachine.State vmState) { + super(cmd, true, ""); + this.volumeTOs = volumeTOs; + this.vmState = vmState; + } + + public VirtualMachine.State getVmState() { + return vmState; + } + + public List getVolumeTOs() { + return volumeTOs; + } + + public void setVolumeTOs(List volumeTOs) { + this.volumeTOs = volumeTOs; + } + + public void setVmState(VirtualMachine.State vmState) { + this.vmState = vmState; + } + +} diff --git a/api/src/com/cloud/agent/api/RevertToVMSnapshotCommand.java b/api/src/com/cloud/agent/api/RevertToVMSnapshotCommand.java new file mode 100644 index 00000000000..429a186e0dc --- /dev/null +++ b/api/src/com/cloud/agent/api/RevertToVMSnapshotCommand.java @@ -0,0 +1,29 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.agent.api; + +import java.util.List; + +import com.cloud.agent.api.to.VolumeTO; + +public class RevertToVMSnapshotCommand extends VMSnapshotBaseCommand { + + public RevertToVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List volumeTOs, String guestOSType) { + super(vmName, snapshot, volumeTOs, guestOSType); + } + +} diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalCmdbDao.java b/api/src/com/cloud/agent/api/ScaleVmAnswer.java old mode 100755 new mode 100644 similarity index 76% rename from plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalCmdbDao.java rename to api/src/com/cloud/agent/api/ScaleVmAnswer.java index 0f20c677f5d..31d6e44155f --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalCmdbDao.java +++ b/api/src/com/cloud/agent/api/ScaleVmAnswer.java @@ -5,21 +5,24 @@ // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -// -// Automatically generated by addcopyright.py at 01/29/2013 -package com.cloud.baremetal.database; - -import com.cloud.utils.db.GenericDao; - -public interface BaremetalCmdbDao extends GenericDao { - -} +package com.cloud.agent.api; + +public class ScaleVmAnswer extends Answer { + + protected ScaleVmAnswer() { + } + + public ScaleVmAnswer(ScaleVmCommand cmd, boolean result, String detail) { + super(cmd, result, detail); + } + +} diff --git a/api/src/com/cloud/agent/api/ScaleVmCommand.java b/api/src/com/cloud/agent/api/ScaleVmCommand.java new file mode 100644 index 00000000000..e5078d5e8c0 --- /dev/null +++ b/api/src/com/cloud/agent/api/ScaleVmCommand.java @@ -0,0 +1,113 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.agent.api; + +import com.cloud.agent.api.to.VirtualMachineTO; + +public class ScaleVmCommand extends Command { + + VirtualMachineTO vm; + String vmName; + int cpus; + Integer speed; + long minRam; + long maxRam; + + public VirtualMachineTO getVm() { + return vm; + } + + public void setVm(VirtualMachineTO vm) { + this.vm = vm; + } + + public int getCpus() { + return cpus; + } + + public ScaleVmCommand(String vmName, int cpus, + Integer speed, long minRam, long maxRam) { + super(); + this.vmName = vmName; + this.cpus = cpus; + //this.speed = speed; + this.minRam = minRam; + this.maxRam = maxRam; + this.vm = new VirtualMachineTO(1L, vmName, null, cpus, null, minRam, maxRam, null, null, false, false, null); + /*vm.setName(vmName); + vm.setCpus(cpus); + vm.setRam(minRam, maxRam);*/ + } + + public void setCpus(int cpus) { + this.cpus = cpus; + } + + public Integer getSpeed() { + return speed; + } + + public void setSpeed(Integer speed) { + this.speed = speed; + } + + public long getMinRam() { + return minRam; + } + + public void setMinRam(long minRam) { + this.minRam = minRam; + } + + public long getMaxRam() { + return maxRam; + } + + public void setMaxRam(long maxRam) { + this.maxRam = maxRam; + } + + public String getVmName() { + return vmName; + } + + public void setVmName(String vmName) { + this.vmName = vmName; + } + + public VirtualMachineTO getVirtualMachine() { + return vm; + } + + @Override + public boolean executeInSequence() { + return true; + } + + protected ScaleVmCommand() { + } + + public ScaleVmCommand(VirtualMachineTO vm) { + this.vm = vm; + } + + public boolean getLimitCpuUse() { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/api/src/com/cloud/agent/api/VMSnapshotBaseCommand.java b/api/src/com/cloud/agent/api/VMSnapshotBaseCommand.java new file mode 100644 index 00000000000..2120f2f73b1 --- /dev/null +++ b/api/src/com/cloud/agent/api/VMSnapshotBaseCommand.java @@ -0,0 +1,74 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.agent.api; + +import java.util.List; + +import com.cloud.agent.api.to.VolumeTO; + +public class VMSnapshotBaseCommand extends Command{ + protected List volumeTOs; + protected VMSnapshotTO target; + protected String vmName; + protected String guestOSType; + + + public VMSnapshotBaseCommand(String vmName, VMSnapshotTO snapshot, List volumeTOs, String guestOSType) { + this.vmName = vmName; + this.target = snapshot; + this.volumeTOs = volumeTOs; + this.guestOSType = guestOSType; + } + + public List getVolumeTOs() { + return volumeTOs; + } + + public void setVolumeTOs(List volumeTOs) { + this.volumeTOs = volumeTOs; + } + + public VMSnapshotTO getTarget() { + return target; + } + + public void setTarget(VMSnapshotTO target) { + this.target = target; + } + + public String getVmName() { + return vmName; + } + + public void setVmName(String vmName) { + this.vmName = vmName; + } + + @Override + public boolean executeInSequence() { + return false; + } + + public String getGuestOSType() { + return guestOSType; + } + + public void setGuestOSType(String guestOSType) { + this.guestOSType = guestOSType; + } +} diff --git a/api/src/com/cloud/agent/api/VMSnapshotTO.java b/api/src/com/cloud/agent/api/VMSnapshotTO.java new file mode 100644 index 00000000000..c7b42d25bc9 --- /dev/null +++ b/api/src/com/cloud/agent/api/VMSnapshotTO.java @@ -0,0 +1,90 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.agent.api; + +import com.cloud.vm.snapshot.VMSnapshot; + +public class VMSnapshotTO { + private Long id; + private String snapshotName; + private VMSnapshot.Type type; + private Long createTime; + private Boolean current; + private String description; + private VMSnapshotTO parent; + + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public VMSnapshotTO(Long id, String snapshotName, + VMSnapshot.Type type, Long createTime, + String description, Boolean current, VMSnapshotTO parent) { + super(); + this.id = id; + this.snapshotName = snapshotName; + this.type = type; + this.createTime = createTime; + this.current = current; + this.description = description; + this.parent = parent; + } + public VMSnapshotTO() { + + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public Boolean getCurrent() { + return current; + } + public void setCurrent(Boolean current) { + this.current = current; + } + public Long getCreateTime() { + return createTime; + } + public void setCreateTime(Long createTime) { + this.createTime = createTime; + } + + public VMSnapshot.Type getType() { + return type; + } + public void setType(VMSnapshot.Type type) { + this.type = type; + } + + public String getSnapshotName() { + return snapshotName; + } + public void setSnapshotName(String snapshotName) { + this.snapshotName = snapshotName; + } + public VMSnapshotTO getParent() { + return parent; + } + public void setParent(VMSnapshotTO parent) { + this.parent = parent; + } + +} diff --git a/api/src/com/cloud/agent/api/routing/DhcpEntryCommand.java b/api/src/com/cloud/agent/api/routing/DhcpEntryCommand.java index f0ce70e9a80..fd8d84c8c3a 100644 --- a/api/src/com/cloud/agent/api/routing/DhcpEntryCommand.java +++ b/api/src/com/cloud/agent/api/routing/DhcpEntryCommand.java @@ -31,6 +31,7 @@ public class DhcpEntryCommand extends NetworkElementCommand { String vmIp6Address; String ip6Gateway; String duid; + private boolean isDefault; protected DhcpEntryCommand() { @@ -46,6 +47,7 @@ public class DhcpEntryCommand extends NetworkElementCommand { this.vmIpAddress = vmIpAddress; this.vmName = vmName; this.vmIp6Address = vmIp6Address; + this.setDefault(true); } public DhcpEntryCommand(String vmMac, String vmIpAddress, String vmName, String vmIp6Address, String dns, String gateway, String ip6Gateway) { @@ -129,4 +131,12 @@ public class DhcpEntryCommand extends NetworkElementCommand { public void setVmIp6Address(String ip6Address) { this.vmIp6Address = ip6Address; } + + public boolean isDefault() { + return isDefault; + } + + public void setDefault(boolean isDefault) { + this.isDefault = isDefault; + } } diff --git a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java index 8f3f0eb39d6..b84d20a9239 100644 --- a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java +++ b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java @@ -28,7 +28,20 @@ public class VirtualMachineTO { private BootloaderType bootloader; Type type; int cpus; + + /** + 'speed' is still here since 4.0.X/4.1.X management servers do not support + the overcommit feature yet. + + The overcommit feature sends minSpeed and maxSpeed + + So this is here for backwards compatibility with 4.0.X/4.1.X management servers + and newer agents. + */ Integer speed; + Integer minSpeed; + Integer maxSpeed; + long minRam; long maxRam; String hostName; @@ -62,6 +75,22 @@ public class VirtualMachineTO { this.vncPassword = vncPassword; } + public VirtualMachineTO(long id, String instanceName, VirtualMachine.Type type, int cpus, Integer minSpeed, Integer maxSpeed, long minRam, long maxRam, BootloaderType bootloader, String os, boolean enableHA, boolean limitCpuUse, String vncPassword) { + this.id = id; + this.name = instanceName; + this.type = type; + this.cpus = cpus; + this.minSpeed = minSpeed; + this.maxSpeed = maxSpeed; + this.minRam = minRam; + this.maxRam = maxRam; + this.bootloader = bootloader; + this.os = os; + this.enableHA = enableHA; + this.limitCpuUse = limitCpuUse; + this.vncPassword = vncPassword; + } + protected VirtualMachineTO() { } @@ -105,6 +134,13 @@ public class VirtualMachineTO { return speed; } + public Integer getMinSpeed() { + return minSpeed; + } + + public Integer getMaxSpeed() { + return maxSpeed; + } public boolean getLimitCpuUse() { return limitCpuUse; } diff --git a/api/src/com/cloud/agent/api/to/VolumeTO.java b/api/src/com/cloud/agent/api/to/VolumeTO.java index a8846b96261..4cbe82b357b 100644 --- a/api/src/com/cloud/agent/api/to/VolumeTO.java +++ b/api/src/com/cloud/agent/api/to/VolumeTO.java @@ -124,6 +124,10 @@ public class VolumeTO implements InternalIdentity { public String getOsType() { return guestOsType; } + + public void setPath(String path){ + this.path = path; + } @Override public String toString() { diff --git a/api/src/com/cloud/alert/Alert.java b/api/src/com/cloud/alert/Alert.java index 050f97f2ef3..31768cf193d 100644 --- a/api/src/com/cloud/alert/Alert.java +++ b/api/src/com/cloud/alert/Alert.java @@ -30,4 +30,5 @@ public interface Alert extends Identity, InternalIdentity { Date getCreatedDate(); Date getLastSent(); Date getResolved(); + boolean getArchived(); } diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java index a9595fe7574..e63fcece525 100644 --- a/api/src/com/cloud/configuration/ConfigurationService.java +++ b/api/src/com/cloud/configuration/ConfigurationService.java @@ -264,6 +264,8 @@ public interface ConfigurationService { boolean removeLDAP(LDAPRemoveCmd cmd); + LDAPConfigCmd listLDAPConfig(LDAPConfigCmd cmd); + /** * @param offering * @return diff --git a/api/src/com/cloud/configuration/Resource.java b/api/src/com/cloud/configuration/Resource.java index 7f551d6b52c..7614c8a4b43 100644 --- a/api/src/com/cloud/configuration/Resource.java +++ b/api/src/com/cloud/configuration/Resource.java @@ -28,7 +28,9 @@ public interface Resource { template("template", 4, ResourceOwnerType.Account, ResourceOwnerType.Domain), project("project", 5, ResourceOwnerType.Account, ResourceOwnerType.Domain), network("network", 6, ResourceOwnerType.Account, ResourceOwnerType.Domain), - vpc("vpc", 7, ResourceOwnerType.Account, ResourceOwnerType.Domain); + vpc("vpc", 7, ResourceOwnerType.Account, ResourceOwnerType.Domain), + cpu("cpu", 8, ResourceOwnerType.Account, ResourceOwnerType.Domain), + memory("memory", 9, ResourceOwnerType.Account, ResourceOwnerType.Domain); private String name; private ResourceOwnerType[] supportedOwners; diff --git a/api/src/com/cloud/dao/EntityManager.java b/api/src/com/cloud/dao/EntityManager.java index b8fdaa7e9a7..8e6a438d011 100644 --- a/api/src/com/cloud/dao/EntityManager.java +++ b/api/src/com/cloud/dao/EntityManager.java @@ -38,6 +38,16 @@ public interface EntityManager { */ public T findById(Class entityType, K id); + /** + * Finds an entity by its id including removed. + * @param class of the entity you're trying to find. + * @param class of the id that the entity uses. + * @param entityType Type of the entity. + * @param id id value + * @return T if found; null if not. + */ + public T findByIdIncludingRemoved(Class entityType, K id); + /** * Finds a unique entity by uuid string * @param entity class diff --git a/api/src/com/cloud/dc/DataCenter.java b/api/src/com/cloud/dc/DataCenter.java index 0c77c670dd1..5f32988da50 100644 --- a/api/src/com/cloud/dc/DataCenter.java +++ b/api/src/com/cloud/dc/DataCenter.java @@ -37,6 +37,10 @@ public interface DataCenter extends InfrastructureEntity, Grouping, Identity, In String getDns2(); + String getIp6Dns1(); + + String getIp6Dns2(); + String getGuestNetworkCidr(); String getName(); diff --git a/api/src/com/cloud/event/Event.java b/api/src/com/cloud/event/Event.java index 1a61636828a..b8def4c6281 100644 --- a/api/src/com/cloud/event/Event.java +++ b/api/src/com/cloud/event/Event.java @@ -40,4 +40,5 @@ public interface Event extends ControlledEntity, Identity, InternalIdentity { String getLevel(); long getStartId(); String getParameters(); + boolean getArchived(); } diff --git a/api/src/com/cloud/event/EventTypes.java b/api/src/com/cloud/event/EventTypes.java index 8620e2dbbe2..8f7c92580a0 100755 --- a/api/src/com/cloud/event/EventTypes.java +++ b/api/src/com/cloud/event/EventTypes.java @@ -337,6 +337,11 @@ public class EventTypes { // tag related events public static final String EVENT_TAGS_CREATE = "CREATE_TAGS"; public static final String EVENT_TAGS_DELETE = "DELETE_TAGS"; + + // vm snapshot events + public static final String EVENT_VM_SNAPSHOT_CREATE = "VMSNAPSHOT.CREATE"; + public static final String EVENT_VM_SNAPSHOT_DELETE = "VMSNAPSHOT.DELETE"; + public static final String EVENT_VM_SNAPSHOT_REVERT = "VMSNAPSHOT.REVERTTO"; // external network device events public static final String EVENT_EXTERNAL_NVP_CONTROLLER_ADD = "PHYSICAL.NVPCONTROLLER.ADD"; diff --git a/api/src/com/cloud/exception/PermissionDeniedException.java b/api/src/com/cloud/exception/PermissionDeniedException.java index b95d49b662a..718de0df7a9 100644 --- a/api/src/com/cloud/exception/PermissionDeniedException.java +++ b/api/src/com/cloud/exception/PermissionDeniedException.java @@ -32,6 +32,10 @@ public class PermissionDeniedException extends CloudRuntimeException { super(message); } + public PermissionDeniedException(String message, Throwable cause){ + super(message, cause); + } + protected PermissionDeniedException() { super(); } diff --git a/api/src/com/cloud/exception/RequestLimitException.java b/api/src/com/cloud/exception/RequestLimitException.java index 0142f8e8726..4d7504ed66d 100644 --- a/api/src/com/cloud/exception/RequestLimitException.java +++ b/api/src/com/cloud/exception/RequestLimitException.java @@ -17,14 +17,12 @@ package com.cloud.exception; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.exception.CloudRuntimeException; /** * Exception thrown if number of requests is over api rate limit set. - * @author minc * */ -public class RequestLimitException extends CloudRuntimeException { +public class RequestLimitException extends PermissionDeniedException { private static final long serialVersionUID = SerialVersionUID.AccountLimitException; diff --git a/api/src/com/cloud/hypervisor/HypervisorCapabilities.java b/api/src/com/cloud/hypervisor/HypervisorCapabilities.java index d52c36b12f5..aff81b0018d 100644 --- a/api/src/com/cloud/hypervisor/HypervisorCapabilities.java +++ b/api/src/com/cloud/hypervisor/HypervisorCapabilities.java @@ -46,4 +46,10 @@ public interface HypervisorCapabilities extends Identity, InternalIdentity{ * @return the max. data volumes per VM supported by hypervisor */ Integer getMaxDataVolumesLimit(); + + /** + * @return the max. hosts per cluster supported by hypervisor + */ + Integer getMaxHostsPerCluster(); + } diff --git a/api/src/com/cloud/network/IpAddress.java b/api/src/com/cloud/network/IpAddress.java index 47df4d6523b..fce8f38c2f2 100644 --- a/api/src/com/cloud/network/IpAddress.java +++ b/api/src/com/cloud/network/IpAddress.java @@ -87,4 +87,7 @@ public interface IpAddress extends ControlledEntity, Identity, InternalIdentity * @param vpcId */ void setVpcId(Long vpcId); + String getVmIp(); + void setVmIp(String vmIp); + } diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index 889b9afd1e4..efed5cd4f8b 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -135,7 +135,8 @@ public interface Network extends ControlledEntity, StateObject, I public static final Provider SecurityGroupProvider = new Provider("SecurityGroupProvider", false); public static final Provider VPCVirtualRouter = new Provider("VpcVirtualRouter", false); public static final Provider None = new Provider("None", false); - public static final Provider NiciraNvp = new Provider("NiciraNvp", true); + // NiciraNvp is not an "External" provider, otherwise we get in trouble with NetworkServiceImpl.providersConfiguredForExternalNetworking + public static final Provider NiciraNvp = new Provider("NiciraNvp", false); public static final Provider MidokuraMidonet = new Provider("MidokuraMidonet", true); private String name; @@ -282,12 +283,21 @@ public interface Network extends ControlledEntity, StateObject, I String getGateway(); + // "cidr" is the Cloudstack managed address space, all CloudStack managed vms get IP address from "cidr", + // In general "cidr" also serves as the network CIDR + // But in case IP reservation is configured for a Guest network, "networkcidr" is the Effective network CIDR for that network, + // "cidr" will still continue to be the effective address space for CloudStack managed vms in that Guest network String getCidr(); + // "networkcidr" is the network CIDR of the guest network which uses IP reservation. + // It is the summation of "cidr" and the reservedIPrange(the address space used for non CloudStack purposes). + // For networks not configured with IP reservation, "networkcidr" is always null + String getNetworkCidr(); + String getIp6Gateway(); - + String getIp6Cidr(); - + long getDataCenterId(); long getNetworkOfferingId(); diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index 7e17405f434..9731a61667d 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -24,6 +24,7 @@ import java.util.Set; import com.cloud.dc.Vlan; import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InvalidParameterValueException; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; @@ -249,5 +250,11 @@ public interface NetworkModel { boolean isNetworkInlineMode(Network network); - Vlan getVlanForNetwork(long networkId); + boolean isIP6AddressAvailableInNetwork(long networkId); + + boolean isIP6AddressAvailableInVlan(long vlanId); + + void checkIp6Parameters(String startIPv6, String endIPv6, String ip6Gateway, String ip6Cidr) throws InvalidParameterValueException; + + void checkRequestedIpAddresses(long networkId, String ip4, String ip6) throws InvalidParameterValueException; } \ No newline at end of file diff --git a/api/src/com/cloud/network/NetworkProfile.java b/api/src/com/cloud/network/NetworkProfile.java index 37d46ac8395..2f56645139c 100644 --- a/api/src/com/cloud/network/NetworkProfile.java +++ b/api/src/com/cloud/network/NetworkProfile.java @@ -38,6 +38,7 @@ public class NetworkProfile implements Network { private TrafficType trafficType; private String gateway; private String cidr; + private String networkCidr; private String ip6Gateway; private String ip6Cidr; private long networkOfferingId; @@ -65,6 +66,7 @@ public class NetworkProfile implements Network { this.trafficType = network.getTrafficType(); this.gateway = network.getGateway(); this.cidr = network.getCidr(); + this.networkCidr = network.getNetworkCidr(); this.ip6Gateway = network.getIp6Gateway(); this.ip6Cidr = network.getIp6Cidr(); this.networkOfferingId = network.getNetworkOfferingId(); @@ -162,6 +164,11 @@ public class NetworkProfile implements Network { return cidr; } + @Override + public String getNetworkCidr() { + return networkCidr; + } + @Override public long getNetworkOfferingId() { return networkOfferingId; diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index ace1bb6c45e..ab6d7bfd882 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -19,9 +19,10 @@ package com.cloud.network; import java.util.List; import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; +import org.apache.cloudstack.api.command.user.vm.ListNicsCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; @@ -33,6 +34,8 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.utils.Pair; +import com.cloud.vm.Nic; +import com.cloud.vm.NicSecondaryIp; /** * The NetworkService interface is the "public" api to entities that make requests to the orchestration engine @@ -66,10 +69,8 @@ public interface NetworkService { IpAddress getIp(long id); - Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, User callerUser, - String domainSuffix, Long networkOfferingId, Boolean changeCidr); - + String domainSuffix, Long networkOfferingId, Boolean changeCidr, String guestVmCidr); PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List isolationMethods, String broadcastDomainRange, Long domainId, List tags, String name); @@ -155,5 +156,13 @@ public interface NetworkService { Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException; - + + /* Requests an IP address for the guest nic */ + String allocateSecondaryGuestIP(Account account, long zoneId, Long nicId, + Long networkId, String ipaddress) throws InsufficientAddressCapacityException; + + boolean releaseSecondaryIpFromNic(long ipAddressId); + + /* lists the nic informaton */ + List listNics(ListNicsCmd listNicsCmd); } diff --git a/server/src/com/cloud/baremetal/PxeServerService.java b/api/src/com/cloud/network/NetworkUsageService.java similarity index 56% rename from server/src/com/cloud/baremetal/PxeServerService.java rename to api/src/com/cloud/network/NetworkUsageService.java index 0a9918450f5..1cfea24d05a 100644 --- a/server/src/com/cloud/baremetal/PxeServerService.java +++ b/api/src/com/cloud/network/NetworkUsageService.java @@ -14,22 +14,24 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.baremetal; +package com.cloud.network; + +import java.util.List; -import com.cloud.baremetal.PxeServerManager.PxeServerType; -import com.cloud.deploy.DeployDestination; import com.cloud.host.Host; -import com.cloud.uservm.UserVm; -import com.cloud.utils.component.Adapter; -import com.cloud.vm.ReservationContext; -import com.cloud.vm.UserVmVO; -import com.cloud.vm.VirtualMachineProfile; -public interface PxeServerService extends Adapter { - - public Host addPxeServer(PxeServerProfile profile); - - public boolean prepare(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context, Long pxeServerId); +import org.apache.cloudstack.api.command.admin.usage.AddTrafficMonitorCmd; +import org.apache.cloudstack.api.command.admin.usage.DeleteTrafficMonitorCmd; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficMonitorsCmd; +import org.apache.cloudstack.api.response.TrafficMonitorResponse; +import com.cloud.utils.component.Manager; + +public interface NetworkUsageService extends Manager { + + Host addTrafficMonitor(AddTrafficMonitorCmd cmd); + + boolean deleteTrafficMonitor(DeleteTrafficMonitorCmd cmd); + + List listTrafficMonitors(ListTrafficMonitorsCmd cmd); - public boolean prepareCreateTemplate(Long pxeServerId, UserVm vm, String templateUrl); } diff --git a/core/src/com/cloud/resource/DiskPreparer.java b/api/src/com/cloud/network/TrafficLabel.java similarity index 52% rename from core/src/com/cloud/resource/DiskPreparer.java rename to api/src/com/cloud/network/TrafficLabel.java index 77b8f7c1b7f..782df14b7dc 100644 --- a/core/src/com/cloud/resource/DiskPreparer.java +++ b/api/src/com/cloud/network/TrafficLabel.java @@ -14,29 +14,23 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.resource; +package com.cloud.network; -import com.cloud.storage.VolumeVO; -import com.cloud.template.VirtualMachineTemplate.BootloaderType; -import com.cloud.utils.component.Adapter; +import com.cloud.network.Networks.TrafficType; -/** - * DiskMounter mounts and unmounts disk for VMs - * to consume. - * +/* User can provide a Label, while configuring a zone, to specify + * a physical network that is to be used for a traffic type defined + * by CloudStack. See the enum data type TrafficType. This label is + * called Traffic label. This might encapsulate physical network + * specific properties like VLAN ID, name of virtual network object or more. + * The name of virtual network object is dependent on type of hypervisor. + * For example it is name of xenserver bridge in case of XenServer and + * name of virtual switch in case of VMware hypervisor */ -public interface DiskPreparer extends Adapter { - /** - * Mounts a volumeVO and returns a path. - * - * @param vol - * @return - */ - public String mount(String vmName, VolumeVO vol, BootloaderType type); - - /** - * Unmounts - */ - public boolean unmount(String path); +public interface TrafficLabel { + + public TrafficType getTrafficType(); + + public String getNetworkLabel(); } diff --git a/api/src/com/cloud/network/rules/RulesService.java b/api/src/com/cloud/network/rules/RulesService.java index 921a86e865f..d47b38f9d43 100644 --- a/api/src/com/cloud/network/rules/RulesService.java +++ b/api/src/com/cloud/network/rules/RulesService.java @@ -25,6 +25,7 @@ import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; import com.cloud.utils.Pair; +import com.cloud.utils.net.Ip; public interface RulesService { Pair, Integer> searchStaticNatRules(Long ipId, Long id, Long vmId, Long start, Long size, String accountName, Long domainId, Long projectId, boolean isRecursive, boolean listAll); @@ -43,7 +44,7 @@ public interface RulesService { * @throws NetworkRuleConflictException * if conflicts in the network rules are detected. */ - PortForwardingRule createPortForwardingRule(PortForwardingRule rule, Long vmId, boolean openFirewall) throws NetworkRuleConflictException; + PortForwardingRule createPortForwardingRule(PortForwardingRule rule, Long vmId, Ip vmIp, boolean openFirewall) throws NetworkRuleConflictException; /** * Revokes a port forwarding rule @@ -66,7 +67,7 @@ public interface RulesService { boolean applyPortForwardingRules(long ipAdddressId, Account caller) throws ResourceUnavailableException; - boolean enableStaticNat(long ipAddressId, long vmId, long networkId, boolean isSystemVm) throws NetworkRuleConflictException, ResourceUnavailableException; + boolean enableStaticNat(long ipAddressId, long vmId, long networkId, boolean isSystemVm, String vmGuestIp) throws NetworkRuleConflictException, ResourceUnavailableException; PortForwardingRule getPortForwardigRule(long ruleId); diff --git a/api/src/com/cloud/network/vpc/VpcService.java b/api/src/com/cloud/network/vpc/VpcService.java index cc66b58fe64..9bf1beea5f0 100644 --- a/api/src/com/cloud/network/vpc/VpcService.java +++ b/api/src/com/cloud/network/vpc/VpcService.java @@ -41,7 +41,7 @@ public interface VpcService { public VpcOffering getVpcOffering(long vpcOfferingId); - public VpcOffering createVpcOffering(String name, String displayText, List supportedServices); + public VpcOffering createVpcOffering(String name, String displayText, List supportedServices, Map> serviceProviders); public Vpc getVpc(long vpcId); @@ -246,5 +246,5 @@ public interface VpcService { InsufficientAddressCapacityException, ConcurrentOperationException; public Network updateVpcGuestNetwork(long networkId, String name, String displayText, Account callerAccount, - User callerUser, String domainSuffix, Long ntwkOffId, Boolean changeCidr); + User callerUser, String domainSuffix, Long ntwkOffId, Boolean changeCidr, String guestVmCidr); } diff --git a/api/src/com/cloud/offering/ServiceOffering.java b/api/src/com/cloud/offering/ServiceOffering.java index 4d715898a75..d6c215f42f0 100755 --- a/api/src/com/cloud/offering/ServiceOffering.java +++ b/api/src/com/cloud/offering/ServiceOffering.java @@ -77,6 +77,11 @@ public interface ServiceOffering extends InfrastructureEntity, InternalIdentity, */ boolean getLimitCpuUse(); + /** + * @return Does this service plan support Volatile VM that is, discard VM's root disk and create a new one on reboot? + */ + boolean getVolatileVm(); + /** * @return the rate in megabits per sec to which a VM's network interface is throttled to */ diff --git a/api/src/com/cloud/resource/ResourceService.java b/api/src/com/cloud/resource/ResourceService.java index 1e77cc8a4e2..08e2585d1a7 100755 --- a/api/src/com/cloud/resource/ResourceService.java +++ b/api/src/com/cloud/resource/ResourceService.java @@ -71,7 +71,7 @@ public interface ResourceService { boolean deleteCluster(DeleteClusterCmd cmd); - Cluster updateCluster(Cluster cluster, String clusterType, String hypervisor, String allocationState, String managedstate); + Cluster updateCluster(Cluster cluster, String clusterType, String hypervisor, String allocationState, String managedstate,Float memoryOvercommitRatio, Float cpuOvercommitRatio); List discoverHosts(AddHostCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index 1736da3778c..1e6ca8d0b67 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -29,6 +29,8 @@ import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; +import org.apache.cloudstack.api.command.admin.resource.ArchiveAlertsCmd; +import org.apache.cloudstack.api.command.admin.resource.DeleteAlertsCmd; import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd; import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd; @@ -40,12 +42,12 @@ import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd; import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd; import org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.command.user.config.ListCapabilitiesCmd; +import org.apache.cloudstack.api.command.user.event.ArchiveEventsCmd; +import org.apache.cloudstack.api.command.user.event.DeleteEventsCmd; import org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd; import org.apache.cloudstack.api.command.user.guest.ListGuestOsCmd; import org.apache.cloudstack.api.command.user.iso.ListIsosCmd; import org.apache.cloudstack.api.command.user.iso.UpdateIsoCmd; -import org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd; -import org.apache.cloudstack.api.command.user.offering.ListServiceOfferingsCmd; import org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd; import org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd; import org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd; @@ -55,12 +57,10 @@ import org.apache.cloudstack.api.command.user.template.UpdateTemplateCmd; import org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd; import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd; import org.apache.cloudstack.api.command.user.volume.ExtractVolumeCmd; -import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd; import com.cloud.alert.Alert; import com.cloud.capacity.Capacity; import com.cloud.configuration.Configuration; -import com.cloud.dc.DataCenter; import com.cloud.dc.Pod; import com.cloud.dc.Vlan; import com.cloud.domain.Domain; @@ -72,8 +72,6 @@ import com.cloud.host.Host; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorCapabilities; import com.cloud.network.IpAddress; -import com.cloud.offering.DiskOffering; -import com.cloud.offering.ServiceOffering; import com.cloud.org.Cluster; import com.cloud.storage.GuestOS; import com.cloud.storage.GuestOsCategory; @@ -194,6 +192,34 @@ public interface ManagementService { */ Pair, Integer> searchForAlerts(ListAlertsCmd cmd); + /** + * Archive alerts + * @param cmd + * @return True on success. False otherwise. + */ + boolean archiveAlerts(ArchiveAlertsCmd cmd); + + /** + * Delete alerts + * @param cmd + * @return True on success. False otherwise. + */ + boolean deleteAlerts(DeleteAlertsCmd cmd); + + /** + * Archive events + * @param cmd + * @return True on success. False otherwise. + */ + boolean archiveEvents(ArchiveEventsCmd cmd); + + /** + * Delete events + * @param cmd + * @return True on success. False otherwise. + */ + boolean deleteEvents(DeleteEventsCmd cmd); + /** * list all the capacity rows in capacity operations table * diff --git a/api/src/com/cloud/server/ResourceTag.java b/api/src/com/cloud/server/ResourceTag.java index 5ec9f0171cc..ee56748640c 100644 --- a/api/src/com/cloud/server/ResourceTag.java +++ b/api/src/com/cloud/server/ResourceTag.java @@ -37,7 +37,8 @@ public interface ResourceTag extends ControlledEntity, Identity, InternalIdentit Project, Vpc, NetworkACL, - StaticRoute + StaticRoute, + VMSnapshot } /** diff --git a/api/src/com/cloud/storage/Snapshot.java b/api/src/com/cloud/storage/Snapshot.java index 3f6b8f5a8e4..f71265cd230 100644 --- a/api/src/com/cloud/storage/Snapshot.java +++ b/api/src/com/cloud/storage/Snapshot.java @@ -19,7 +19,6 @@ package com.cloud.storage; import java.util.Date; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.utils.fsm.StateMachine2; import com.cloud.utils.fsm.StateObject; import org.apache.cloudstack.acl.ControlledEntity; import org.apache.cloudstack.api.Identity; @@ -55,28 +54,13 @@ public interface Snapshot extends ControlledEntity, Identity, InternalIdentity, } public enum State { + Allocated, Creating, CreatedOnPrimary, BackingUp, BackedUp, Error; - private final static StateMachine2 s_fsm = new StateMachine2(); - - public static StateMachine2 getStateMachine() { - return s_fsm; - } - - static { - s_fsm.addTransition(null, Event.CreateRequested, Creating); - s_fsm.addTransition(Creating, Event.OperationSucceeded, CreatedOnPrimary); - s_fsm.addTransition(Creating, Event.OperationNotPerformed, BackedUp); - s_fsm.addTransition(Creating, Event.OperationFailed, Error); - s_fsm.addTransition(CreatedOnPrimary, Event.BackupToSecondary, BackingUp); - s_fsm.addTransition(BackingUp, Event.OperationSucceeded, BackedUp); - s_fsm.addTransition(BackingUp, Event.OperationFailed, Error); - } - public String toString() { return this.name(); } @@ -107,7 +91,7 @@ public interface Snapshot extends ControlledEntity, Identity, InternalIdentity, Date getCreated(); - Type getType(); + Type getRecurringType(); State getState(); diff --git a/api/src/com/cloud/storage/StoragePool.java b/api/src/com/cloud/storage/StoragePool.java index f517927eac1..091eef182cc 100644 --- a/api/src/com/cloud/storage/StoragePool.java +++ b/api/src/com/cloud/storage/StoragePool.java @@ -99,10 +99,7 @@ public interface StoragePool extends Identity, InternalIdentity { /** * @return */ - String getStorageProvider(); - - /** - * @return - */ - String getStorageType(); + Long getStorageProviderId(); + + boolean isInMaintenance(); } diff --git a/api/src/com/cloud/storage/StoragePoolStatus.java b/api/src/com/cloud/storage/StoragePoolStatus.java index 94dd686a8f0..a35f706d702 100644 --- a/api/src/com/cloud/storage/StoragePoolStatus.java +++ b/api/src/com/cloud/storage/StoragePoolStatus.java @@ -17,11 +17,6 @@ package com.cloud.storage; public enum StoragePoolStatus { - Creating, - Up, - PrepareForMaintenance, - ErrorInMaintenance, - CancelMaintenance, - Maintenance, - Removed; + Initial, Initialized, Creating, Attaching, Up, PrepareForMaintenance, + ErrorInMaintenance, CancelMaintenance, Maintenance, Removed; } diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index bd7dfd3a67a..63c5023ee91 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -22,17 +22,10 @@ import org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaint import org.apache.cloudstack.api.command.admin.storage.CreateStoragePoolCmd; import org.apache.cloudstack.api.command.admin.storage.DeletePoolCmd; import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd; -import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; -import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd; -import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; -import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.PermissionDeniedException; -import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.user.Account; public interface StorageService{ /** @@ -51,37 +44,6 @@ public interface StorageService{ StoragePool createPool(CreateStoragePoolCmd cmd) throws ResourceInUseException, IllegalArgumentException, UnknownHostException, ResourceUnavailableException; - /** - * Creates the database object for a volume based on the given criteria - * - * @param cmd - * the API command wrapping the criteria (account/domainId [admin only], zone, diskOffering, snapshot, - * name) - * @return the volume object - * @throws PermissionDeniedException - */ - Volume allocVolume(CreateVolumeCmd cmd) throws ResourceAllocationException; - - /** - * Creates the volume based on the given criteria - * - * @param cmd - * the API command wrapping the criteria (account/domainId [admin only], zone, diskOffering, snapshot, - * name) - * @return the volume object - */ - Volume createVolume(CreateVolumeCmd cmd); - - - /** - * Resizes the volume based on the given criteria - * - * @param cmd - * the API command wrapping the criteria - * @return the volume object - */ - Volume resizeVolume(ResizeVolumeCmd cmd); - /** * Delete the storage pool * @@ -120,19 +82,4 @@ public interface StorageService{ public StoragePool updateStoragePool(UpdateStoragePoolCmd cmd) throws IllegalArgumentException; public StoragePool getStoragePool(long id); - - Volume migrateVolume(Long volumeId, Long storagePoolId) throws ConcurrentOperationException; - - - /** - * Uploads the volume to secondary storage - * - * @param UploadVolumeCmd cmd - * - * @return Volume object - */ - Volume uploadVolume(UploadVolumeCmd cmd) throws ResourceAllocationException; - - boolean deleteVolume(long volumeId, Account caller) throws ConcurrentOperationException; - } diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index 284c83d9e93..4903594f0af 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -39,9 +39,12 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba Snapshotting("There is a snapshot created on this volume, not backed up to secondary storage yet"), Resizing("The volume is being resized"), Expunging("The volume is being expunging"), + Expunged("The volume is being expunging"), Destroy("The volume is destroyed, and can't be recovered."), Destroying("The volume is destroying, and can't be recovered."), - UploadOp ("The volume upload operation is in progress or in short the volume is on secondary storage"); + UploadOp ("The volume upload operation is in progress or in short the volume is on secondary storage"), + Uploading("volume is uploading"), + Uploaded("volume is uploaded"); String _description; @@ -70,12 +73,15 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba s_fsm.addTransition(Resizing, Event.OperationSucceeded, Ready); s_fsm.addTransition(Resizing, Event.OperationFailed, Ready); s_fsm.addTransition(Allocated, Event.UploadRequested, UploadOp); - s_fsm.addTransition(UploadOp, Event.CopyRequested, Creating);// CopyRequested for volume from sec to primary storage + s_fsm.addTransition(Uploaded, Event.CopyRequested, Creating);// CopyRequested for volume from sec to primary storage s_fsm.addTransition(Creating, Event.CopySucceeded, Ready); - s_fsm.addTransition(Creating, Event.CopyFailed, UploadOp);// Copying volume from sec to primary failed. + s_fsm.addTransition(Creating, Event.CopyFailed, Uploaded);// Copying volume from sec to primary failed. s_fsm.addTransition(UploadOp, Event.DestroyRequested, Destroy); s_fsm.addTransition(Ready, Event.DestroyRequested, Destroy); s_fsm.addTransition(Destroy, Event.ExpungingRequested, Expunging); + s_fsm.addTransition(Expunging, Event.ExpungingRequested, Expunging); + s_fsm.addTransition(Expunging, Event.OperationSucceeded, Expunged); + s_fsm.addTransition(Expunging, Event.OperationFailed, Expunging); s_fsm.addTransition(Ready, Event.SnapshotRequested, Snapshotting); s_fsm.addTransition(Snapshotting, Event.OperationSucceeded, Ready); s_fsm.addTransition(Snapshotting, Event.OperationFailed, Ready); @@ -83,6 +89,9 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba s_fsm.addTransition(Migrating, Event.OperationSucceeded, Ready); s_fsm.addTransition(Migrating, Event.OperationFailed, Ready); s_fsm.addTransition(Destroy, Event.OperationSucceeded, Destroy); + s_fsm.addTransition(UploadOp, Event.OperationSucceeded, Uploaded); + s_fsm.addTransition(UploadOp, Event.OperationFailed, Allocated); + s_fsm.addTransition(Uploaded, Event.DestroyRequested, Destroy); } } @@ -110,7 +119,7 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba /** * @return total size of the partition */ - long getSize(); + Long getSize(); /** * @return the vm instance id diff --git a/api/src/com/cloud/storage/VolumeApiService.java b/api/src/com/cloud/storage/VolumeApiService.java new file mode 100644 index 00000000000..8517988dfc6 --- /dev/null +++ b/api/src/com/cloud/storage/VolumeApiService.java @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package com.cloud.storage; + +import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.MigrateVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.user.Account; + +public interface VolumeApiService { + /** + * Creates the database object for a volume based on the given criteria + * + * @param cmd + * the API command wrapping the criteria (account/domainId [admin only], zone, diskOffering, snapshot, + * name) + * @return the volume object + * @throws PermissionDeniedException + */ + Volume allocVolume(CreateVolumeCmd cmd) throws ResourceAllocationException; + + /** + * Creates the volume based on the given criteria + * + * @param cmd + * the API command wrapping the criteria (account/domainId [admin only], zone, diskOffering, snapshot, + * name) + * @return the volume object + */ + Volume createVolume(CreateVolumeCmd cmd); + + + /** + * Resizes the volume based on the given criteria + * + * @param cmd + * the API command wrapping the criteria + * @return the volume object + */ + Volume resizeVolume(ResizeVolumeCmd cmd); + + Volume migrateVolume(MigrateVolumeCmd cmd) throws ConcurrentOperationException; + + /** + * Uploads the volume to secondary storage + * + * @param UploadVolumeCmd cmd + * + * @return Volume object + */ + Volume uploadVolume(UploadVolumeCmd cmd) throws ResourceAllocationException; + + boolean deleteVolume(long volumeId, Account caller) throws ConcurrentOperationException; + + Volume attachVolumeToVM(AttachVolumeCmd command); + + Volume detachVolumeFromVM(DetachVolumeCmd cmmd); +} diff --git a/api/src/com/cloud/template/TemplateService.java b/api/src/com/cloud/template/TemplateService.java index 11475d46b8a..7e831fb0055 100755 --- a/api/src/com/cloud/template/TemplateService.java +++ b/api/src/com/cloud/template/TemplateService.java @@ -25,6 +25,7 @@ import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; import org.apache.cloudstack.api.command.user.iso.ExtractIsoCmd; import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; import org.apache.cloudstack.api.command.user.template.CopyTemplateCmd; +import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd; import org.apache.cloudstack.api.command.user.template.ExtractTemplateCmd; import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; @@ -32,6 +33,8 @@ import org.apache.cloudstack.api.command.user.template.RegisterTemplateCmd; import com.cloud.exception.InternalErrorException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.StorageUnavailableException; +import com.cloud.user.Account; +import com.cloud.utils.exception.CloudRuntimeException; public interface TemplateService { @@ -87,4 +90,11 @@ public interface TemplateService { List listTemplatePermissions(BaseListTemplateOrIsoPermissionsCmd cmd); boolean updateTemplateOrIsoPermissions(BaseUpdateTemplateOrIsoPermissionsCmd cmd); + + VirtualMachineTemplate createPrivateTemplateRecord(CreateTemplateCmd cmd, + Account templateOwner) throws ResourceAllocationException; + + VirtualMachineTemplate createPrivateTemplate(CreateTemplateCmd command) + throws CloudRuntimeException; + } diff --git a/api/src/com/cloud/user/AccountService.java b/api/src/com/cloud/user/AccountService.java index 8026891c5fa..f9c6ddb38ef 100755 --- a/api/src/com/cloud/user/AccountService.java +++ b/api/src/com/cloud/user/AccountService.java @@ -62,7 +62,7 @@ public interface AccountService { * @return the user if created successfully, null otherwise */ UserAccount createUserAccount(String userName, String password, String firstName, String lastName, String email, String timezone, String accountName, short accountType, Long domainId, String networkDomain, - Map details, String accountUUID, String userUUID, Integer regionId); + Map details); /** * Locks a user by userId. A locked user cannot access the API, but will still have running VMs/IP addresses @@ -77,7 +77,7 @@ public interface AccountService { User getSystemUser(); - User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId, String userUUID, Integer regionId); + User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId); boolean isAdmin(short accountType); diff --git a/api/src/com/cloud/user/DomainService.java b/api/src/com/cloud/user/DomainService.java index 1a9635499f1..1f030196420 100644 --- a/api/src/com/cloud/user/DomainService.java +++ b/api/src/com/cloud/user/DomainService.java @@ -27,7 +27,7 @@ import com.cloud.utils.Pair; public interface DomainService { - Domain createDomain(String name, Long parentId, String networkDomain, String domainUUID, Integer regionId); + Domain createDomain(String name, Long parentId, String networkDomain); Domain getDomain(long id); diff --git a/api/src/com/cloud/vm/Nic.java b/api/src/com/cloud/vm/Nic.java index 9d21130327a..b2f6976240c 100644 --- a/api/src/com/cloud/vm/Nic.java +++ b/api/src/com/cloud/vm/Nic.java @@ -151,4 +151,5 @@ public interface Nic extends Identity, InternalIdentity { String getIp6Cidr(); String getIp6Address(); + boolean getSecondaryIp(); } diff --git a/api/src/com/cloud/vm/NicProfile.java b/api/src/com/cloud/vm/NicProfile.java index e9e091cc2d7..5970ccd24ee 100644 --- a/api/src/com/cloud/vm/NicProfile.java +++ b/api/src/com/cloud/vm/NicProfile.java @@ -50,6 +50,8 @@ public class NicProfile implements InternalIdentity { Integer deviceId; String dns1; String dns2; + String ip6Dns1; + String ip6Dns2; Integer networkRate; boolean isSecurityGroupEnabled; String name; @@ -332,4 +334,20 @@ public class NicProfile implements InternalIdentity { this.requestedIpv6 = requestedIpv6; } + public String getIp6Dns1() { + return ip6Dns1; + } + + public void setIp6Dns1(String ip6Dns1) { + this.ip6Dns1 = ip6Dns1; + } + + public String getIp6Dns2() { + return ip6Dns2; + } + + public void setIp6Dns2(String ip6Dns2) { + this.ip6Dns2 = ip6Dns2; + } + } diff --git a/core/src/com/cloud/vm/VirtualEnvironment.java b/api/src/com/cloud/vm/NicSecondaryIp.java similarity index 63% rename from core/src/com/cloud/vm/VirtualEnvironment.java rename to api/src/com/cloud/vm/NicSecondaryIp.java index 79d4a59bbfc..655d172b33f 100644 --- a/core/src/com/cloud/vm/VirtualEnvironment.java +++ b/api/src/com/cloud/vm/NicSecondaryIp.java @@ -16,31 +16,21 @@ // under the License. package com.cloud.vm; -import java.util.List; +import org.apache.cloudstack.acl.ControlledEntity; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + /** - * - * be an information carrier within one thread only. - * + * Nic represents one nic on the VM. */ -public class VirtualEnvironment { +public interface NicSecondaryIp extends ControlledEntity, Identity, InternalIdentity { /** - * The actual machine + * @return id in the CloudStack database */ - public VirtualMachine machine; - - /** - * Disks to assign to the machine in order. - */ - public List disks; - - /** - * Networks to assign to the machine. - */ - public List networks; - - /** - * Boot options to assign to the machine. - */ - public String bootOptions; + long getId(); + long getNicId(); + String getIp4Address(); + long getNetworkId(); + long getVmId(); } diff --git a/api/src/com/cloud/vm/UserVmService.java b/api/src/com/cloud/vm/UserVmService.java index fb574fa5848..ea89eda89d2 100755 --- a/api/src/com/cloud/vm/UserVmService.java +++ b/api/src/com/cloud/vm/UserVmService.java @@ -23,7 +23,6 @@ import javax.naming.InsufficientResourcesException; import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; -import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; import org.apache.cloudstack.api.command.user.vm.AddNicToVMCmd; import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; import org.apache.cloudstack.api.command.user.vm.DestroyVMCmd; @@ -103,24 +102,6 @@ public interface UserVmService { */ UserVm resetVMSSHKey(ResetVMSSHKeyCmd cmd) throws ResourceUnavailableException, InsufficientCapacityException; - /** - * Attaches the specified volume to the specified VM - * - * @param cmd - * - the command specifying volumeId and vmId - * @return the Volume object if attach worked successfully. - */ - Volume attachVolumeToVM(AttachVolumeCmd cmd); - - /** - * Detaches the specified volume from the VM it is currently attached to. - * - * @param cmd - * - the command specifying volumeId - * @return the Volume object if detach worked successfully. - */ - Volume detachVolumeFromVM(DetachVolumeCmd cmmd); - UserVm startVirtualMachine(StartVMCmd cmd) throws StorageUnavailableException, ExecutionException, ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException; @@ -151,28 +132,6 @@ public interface UserVmService { UserVm recoverVirtualMachine(RecoverVMCmd cmd) throws ResourceAllocationException; - /** - * Create a template database record in preparation for creating a private template. - * - * @param cmd - * the command object that defines the name, display text, snapshot/volume, bits, public/private, etc. - * for the - * private template - * @param templateOwner - * TODO - * @return the vm template object if successful, null otherwise - * @throws ResourceAllocationException - */ - VirtualMachineTemplate createPrivateTemplateRecord(CreateTemplateCmd cmd, Account templateOwner) throws ResourceAllocationException; - - /** - * Creates a private template from a snapshot of a VM - * - * @param cmd - * - the command specifying snapshotId, name, description - * @return a template if successfully created, null otherwise - */ - VirtualMachineTemplate createPrivateTemplate(CreateTemplateCmd cmd); /** * Creates a Basic Zone User VM in the database and returns the VM to the caller. diff --git a/api/src/com/cloud/vm/VirtualMachine.java b/api/src/com/cloud/vm/VirtualMachine.java index 248b98247e3..4300dd548c1 100755 --- a/api/src/com/cloud/vm/VirtualMachine.java +++ b/api/src/com/cloud/vm/VirtualMachine.java @@ -112,7 +112,7 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, I s_fsm.addTransition(State.Error, VirtualMachine.Event.DestroyRequested, State.Expunging); s_fsm.addTransition(State.Error, VirtualMachine.Event.ExpungeOperation, State.Expunging); } - + public static boolean isVmStarted(State oldState, Event e, State newState) { if (oldState == State.Starting && newState == State.Running) { return true; @@ -174,7 +174,9 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Identity, I OperationFailedToError, OperationRetry, AgentReportShutdowned, - AgentReportMigrated + AgentReportMigrated, + RevertRequested, + SnapshotRequested }; public enum Type { diff --git a/api/src/com/cloud/vm/VirtualMachineProfile.java b/api/src/com/cloud/vm/VirtualMachineProfile.java index 0fab4436807..33a9171e732 100644 --- a/api/src/com/cloud/vm/VirtualMachineProfile.java +++ b/api/src/com/cloud/vm/VirtualMachineProfile.java @@ -136,4 +136,10 @@ public interface VirtualMachineProfile { BootloaderType getBootLoaderType(); Map getParameters(); + + Float getCpuOvercommitRatio(); + + Float getMemoryOvercommitRatio(); + + } diff --git a/api/src/com/cloud/vm/snapshot/VMSnapshot.java b/api/src/com/cloud/vm/snapshot/VMSnapshot.java new file mode 100644 index 00000000000..f0ee7ee7e8a --- /dev/null +++ b/api/src/com/cloud/vm/snapshot/VMSnapshot.java @@ -0,0 +1,110 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.vm.snapshot; + +import java.util.Date; + +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +import org.apache.cloudstack.acl.ControlledEntity; +import com.cloud.utils.fsm.StateMachine2; +import com.cloud.utils.fsm.StateObject; + +public interface VMSnapshot extends ControlledEntity, Identity, InternalIdentity,StateObject { + + enum State { + Allocated("The VM snapshot is allocated but has not been created yet."), + Creating("The VM snapshot is being created."), + Ready("The VM snapshot is ready to be used."), + Reverting("The VM snapshot is being used to revert"), + Expunging("The volume is being expunging"), + Removed("The volume is destroyed, and can't be recovered."), + Error ("The volume is in error state, and can't be recovered"); + + String _description; + + private State(String description) { + _description = description; + } + + public static StateMachine2 getStateMachine() { + return s_fsm; + } + + public String getDescription() { + return _description; + } + + private final static StateMachine2 s_fsm = new StateMachine2(); + static { + s_fsm.addTransition(Allocated, Event.CreateRequested, Creating); + s_fsm.addTransition(Creating, Event.OperationSucceeded, Ready); + s_fsm.addTransition(Creating, Event.OperationFailed, Error); + s_fsm.addTransition(Ready, Event.RevertRequested, Reverting); + s_fsm.addTransition(Reverting, Event.OperationSucceeded, Ready); + s_fsm.addTransition(Reverting, Event.OperationFailed, Ready); + s_fsm.addTransition(Ready, Event.ExpungeRequested, Expunging); + s_fsm.addTransition(Error, Event.ExpungeRequested, Expunging); + s_fsm.addTransition(Expunging, Event.ExpungeRequested, Expunging); + s_fsm.addTransition(Expunging, Event.OperationSucceeded, Removed); + } + } + + enum Type{ + Disk, DiskAndMemory + } + + enum Event { + CreateRequested, + OperationFailed, + OperationSucceeded, + RevertRequested, + ExpungeRequested, + } + + long getId(); + + public String getName(); + + public Long getVmId(); + + public State getState(); + + public Date getCreated(); + + public String getDescription(); + + public String getDisplayName(); + + public Long getParent(); + + public Boolean getCurrent(); + + public Type getType(); + + public long getUpdatedCount(); + + public void incrUpdatedCount(); + + public Date getUpdated(); + + public Date getRemoved(); + + public long getAccountId(); +} diff --git a/api/src/com/cloud/vm/snapshot/VMSnapshotService.java b/api/src/com/cloud/vm/snapshot/VMSnapshotService.java new file mode 100644 index 00000000000..83f86bc90db --- /dev/null +++ b/api/src/com/cloud/vm/snapshot/VMSnapshotService.java @@ -0,0 +1,48 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.vm.snapshot; + +import java.util.List; + +import org.apache.cloudstack.api.command.user.vmsnapshot.ListVMSnapshotCmd; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InsufficientServerCapacityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.uservm.UserVm; +import com.cloud.vm.VirtualMachine; + +public interface VMSnapshotService { + + List listVMSnapshots(ListVMSnapshotCmd cmd); + + VMSnapshot getVMSnapshotById(Long id); + + VMSnapshot creatVMSnapshot(Long vmId, Long vmSnapshotId); + + VMSnapshot allocVMSnapshot(Long vmId, String vsDisplayName, String vsDescription, Boolean snapshotMemory) + throws ResourceAllocationException; + + boolean deleteVMSnapshot(Long vmSnapshotId); + + UserVm revertToSnapshot(Long vmSnapshotId) throws InsufficientServerCapacityException, InsufficientCapacityException, ResourceUnavailableException, ConcurrentOperationException; + + VirtualMachine getVMBySnapshotId(Long id); +} diff --git a/api/src/org/apache/cloudstack/acl/APIChecker.java b/api/src/org/apache/cloudstack/acl/APIChecker.java index 2e2b73ba782..0d0dfd1be4e 100644 --- a/api/src/org/apache/cloudstack/acl/APIChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIChecker.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.acl; import com.cloud.exception.PermissionDeniedException; -import com.cloud.exception.RequestLimitException; import com.cloud.user.User; import com.cloud.utils.component.Adapter; @@ -27,5 +26,5 @@ public interface APIChecker extends Adapter { // If true, apiChecker has checked the operation // If false, apiChecker is unable to handle the operation or not implemented // On exception, checkAccess failed don't allow - boolean checkAccess(User user, String apiCommandName) throws PermissionDeniedException, RequestLimitException; + boolean checkAccess(User user, String apiCommandName) throws PermissionDeniedException; } diff --git a/api/src/org/apache/cloudstack/api/ACL.java b/api/src/org/apache/cloudstack/api/ACL.java index 3623d1ac523..ce93b6aa7ae 100644 --- a/api/src/org/apache/cloudstack/api/ACL.java +++ b/api/src/org/apache/cloudstack/api/ACL.java @@ -22,10 +22,14 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; + @Retention(RetentionPolicy.RUNTIME) @Target({ FIELD }) public @interface ACL { + AccessType accessType() default AccessType.ListEntry; + boolean checkKeyAccess() default false; boolean checkValueAccess() default false; } diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index e930d861765..0436906bac4 100755 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -46,6 +46,7 @@ public class ApiConstants { public static final String COMPONENT = "component"; public static final String CPU_NUMBER = "cpunumber"; public static final String CPU_SPEED = "cpuspeed"; + public static final String CPU_OVERCOMMIT_RATIO="cpuovercommitratio"; public static final String CREATED = "created"; public static final String CUSTOMIZED = "customized"; public static final String DESCRIPTION = "description"; @@ -58,6 +59,8 @@ public class ApiConstants { public static final String DISPLAY_TEXT = "displaytext"; public static final String DNS1 = "dns1"; public static final String DNS2 = "dns2"; + public static final String IP6_DNS1 = "ip6dns1"; + public static final String IP6_DNS2 = "ip6dns2"; public static final String DOMAIN = "domain"; public static final String DOMAIN_ID = "domainid"; public static final String DURATION = "duration"; @@ -123,6 +126,7 @@ public class ApiConstants { public static final String MAX = "max"; public static final String MAX_SNAPS = "maxsnaps"; public static final String MEMORY = "memory"; + public static final String MEMORY_OVERCOMMIT_RATIO="memoryovercommitratio"; public static final String MODE = "mode"; public static final String NAME = "name"; public static final String METHOD_NAME = "methodname"; @@ -222,6 +226,7 @@ public class ApiConstants { public static final String VM_LIMIT = "vmlimit"; public static final String VM_TOTAL = "vmtotal"; public static final String VNET = "vnet"; + public static final String IS_VOLATILE = "isvolatile"; public static final String VOLUME_ID = "volumeid"; public static final String ZONE_ID = "zoneid"; public static final String ZONE_NAME = "zonename"; @@ -360,7 +365,10 @@ public class ApiConstants { public static final String CUSTOM_DISK_OFF_MAX_SIZE = "customdiskofferingmaxsize"; public static final String DEFAULT_ZONE_ID = "defaultzoneid"; public static final String GUID = "guid"; - + public static final String VSWITCH_TYPE_GUEST_TRAFFIC = "guestvswitchtype"; + public static final String VSWITCH_TYPE_PUBLIC_TRAFFIC = "publicvswitchtype"; + public static final String VSWITCH_NAME_GUEST_TRAFFIC = "guestvswitchname"; + public static final String VSWITCH_NAME_PUBLIC_TRAFFIC = "publicvswitchname"; public static final String EXTERNAL_SWITCH_MGMT_DEVICE_ID = "vsmdeviceid"; public static final String EXTERNAL_SWITCH_MGMT_DEVICE_NAME = "vsmdevicename"; public static final String EXTERNAL_SWITCH_MGMT_DEVICE_STATE = "vsmdevicestate"; @@ -379,9 +387,8 @@ public class ApiConstants { public static final String VSM_CONFIG_STATE = "vsmconfigstate"; public static final String VSM_DEVICE_STATE = "vsmdevicestate"; public static final String ADD_VSM_FLAG = "addvsmflag"; - public static final String END_POINT = "endpoint"; - public static final String REGION_ID = "regionid"; - public static final String IS_PROPAGATE = "ispropagate"; + public static final String END_POINT = "endpoint"; + public static final String REGION_ID = "regionid"; public static final String VPC_OFF_ID = "vpcofferingid"; public static final String NETWORK = "network"; public static final String VPC_ID = "vpcid"; @@ -446,6 +453,21 @@ public class ApiConstants { public static final String GSLB_PROVIDER = "gslbprovider"; public static final String GSLB_PROVIDER_PUBLIC_IP = "gslbproviderpublicip"; public static final String GSLB_PROVIDER_PRIVATE_IP = "gslbproviderprivateip"; + public static final String VM_SNAPSHOT_DESCRIPTION = "description"; + public static final String VM_SNAPSHOT_DISPLAYNAME = "name"; + public static final String VM_SNAPSHOT_ID = "vmsnapshotid"; + public static final String VM_SNAPSHOT_DISK_IDS = "vmsnapshotdiskids"; + public static final String VM_SNAPSHOT_MEMORY = "snapshotmemory"; + public static final String IMAGE_STORE_UUID = "imagestoreuuid"; + public static final String GUEST_VM_CIDR = "guestvmcidr"; + public static final String NETWORK_CIDR = "networkcidr"; + public static final String RESERVED_IP_RANGE = "reservediprange"; + public static final String UCS_MANAGER_ID = "ucsmanagerid"; + public static final String UCS_PROFILE_DN = "profiledn"; + public static final String UCS_BLADE_DN = "bladedn"; + public static final String UCS_BLADE_ID = "bladeid"; + public static final String VM_GUEST_IP = "vmguestip"; + public static final String OLDER_THAN = "olderthan"; public enum HostDetails { all, capacity, events, stats, min; diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java.orig b/api/src/org/apache/cloudstack/api/ApiConstants.java.orig new file mode 100644 index 00000000000..3801506ffaa --- /dev/null +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java.orig @@ -0,0 +1,468 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api; + + +public class ApiConstants { + public static final String ACCOUNT = "account"; + public static final String ACCOUNTS = "accounts"; + public static final String ACCOUNT_TYPE = "accounttype"; + public static final String ACCOUNT_ID = "accountid"; + public static final String ALGORITHM = "algorithm"; + public static final String ALLOCATED_ONLY = "allocatedonly"; + public static final String API_KEY = "userapikey"; + public static final String APPLIED = "applied"; + public static final String AVAILABLE = "available"; + public static final String BITS = "bits"; + public static final String BOOTABLE = "bootable"; + public static final String BIND_DN = "binddn"; + public static final String BIND_PASSWORD = "bindpass"; + public static final String CATEGORY = "category"; + public static final String CERTIFICATE = "certificate"; + public static final String PRIVATE_KEY = "privatekey"; + public static final String DOMAIN_SUFFIX = "domainsuffix"; + public static final String DNS_SEARCH_ORDER = "dnssearchorder"; + public static final String CIDR = "cidr"; + public static final String IP6_CIDR = "ip6cidr"; + public static final String CIDR_LIST = "cidrlist"; + public static final String CLEANUP = "cleanup"; + public static final String CLUSTER_ID = "clusterid"; + public static final String CLUSTER_NAME = "clustername"; + public static final String CLUSTER_TYPE = "clustertype"; + public static final String COMPONENT = "component"; + public static final String CPU_NUMBER = "cpunumber"; + public static final String CPU_SPEED = "cpuspeed"; + public static final String CREATED = "created"; + public static final String CUSTOMIZED = "customized"; + public static final String DESCRIPTION = "description"; + public static final String DESTINATION_ZONE_ID = "destzoneid"; + public static final String DETAILS = "details"; + public static final String DEVICE_ID = "deviceid"; + public static final String DISK_OFFERING_ID = "diskofferingid"; + public static final String DISK_SIZE = "disksize"; + public static final String DISPLAY_NAME = "displayname"; + public static final String DISPLAY_TEXT = "displaytext"; + public static final String DNS1 = "dns1"; + public static final String DNS2 = "dns2"; + public static final String DOMAIN = "domain"; + public static final String DOMAIN_ID = "domainid"; + public static final String DURATION = "duration"; + public static final String EMAIL = "email"; + public static final String END_DATE = "enddate"; + public static final String END_IP = "endip"; + public static final String END_IPV6 = "endipv6"; + public static final String END_PORT = "endport"; + public static final String ENTRY_TIME = "entrytime"; + public static final String FETCH_LATEST = "fetchlatest"; + public static final String FIRSTNAME = "firstname"; + public static final String FORCED = "forced"; + public static final String FORCED_DESTROY_LOCAL_STORAGE = "forcedestroylocalstorage"; + public static final String FORMAT = "format"; + public static final String FOR_VIRTUAL_NETWORK = "forvirtualnetwork"; + public static final String GATEWAY = "gateway"; + public static final String IP6_GATEWAY = "ip6gateway"; + public static final String GROUP = "group"; + public static final String GROUP_ID = "groupid"; + public static final String GUEST_CIDR_ADDRESS = "guestcidraddress"; + public static final String HA_ENABLE = "haenable"; + public static final String HOST_ID = "hostid"; + public static final String HOST_NAME = "hostname"; + public static final String HYPERVISOR = "hypervisor"; + public static final String INLINE = "inline"; + public static final String INSTANCE = "instance"; + public static final String ICMP_CODE = "icmpcode"; + public static final String ICMP_TYPE = "icmptype"; + public static final String ID = "id"; + public static final String IDS = "ids"; + public static final String INTERNAL_DNS1 = "internaldns1"; + public static final String INTERNAL_DNS2 = "internaldns2"; + public static final String INTERVAL_TYPE = "intervaltype"; + public static final String IP_ADDRESS = "ipaddress"; + public static final String IP6_ADDRESS = "ip6address"; + public static final String IP_ADDRESS_ID = "ipaddressid"; + public static final String IS_ASYNC = "isasync"; + public static final String IP_AVAILABLE = "ipavailable"; + public static final String IP_LIMIT = "iplimit"; + public static final String IP_TOTAL = "iptotal"; + public static final String IS_CLEANUP_REQUIRED = "iscleanuprequired"; + public static final String IS_EXTRACTABLE = "isextractable"; + public static final String IS_FEATURED = "isfeatured"; + public static final String IS_PUBLIC = "ispublic"; + public static final String IS_PERSISTENT = "ispersistent"; + public static final String IS_READY = "isready"; + public static final String IS_RECURSIVE = "isrecursive"; + public static final String ISO_FILTER = "isofilter"; + public static final String ISO_GUEST_OS_NONE = "None"; + public static final String JOB_ID = "jobid"; + public static final String JOB_STATUS = "jobstatus"; + public static final String LASTNAME = "lastname"; + public static final String LEVEL = "level"; + public static final String LENGTH = "length"; + public static final String LIMIT_CPU_USE = "limitcpuuse"; + public static final String LOCK = "lock"; + public static final String LUN = "lun"; + public static final String LBID = "lbruleid"; + public static final String MAX = "max"; + public static final String MAX_SNAPS = "maxsnaps"; + public static final String MEMORY = "memory"; + public static final String MODE = "mode"; + public static final String NAME = "name"; + public static final String METHOD_NAME = "methodname"; + public static final String NETWORK_DOMAIN = "networkdomain"; + public static final String NETMASK = "netmask"; + public static final String NEW_NAME = "newname"; + public static final String NUM_RETRIES = "numretries"; + public static final String OFFER_HA = "offerha"; + public static final String IS_SYSTEM_OFFERING = "issystem"; + public static final String IS_DEFAULT_USE = "defaultuse"; + public static final String OP = "op"; + public static final String OS_CATEGORY_ID = "oscategoryid"; + public static final String OS_TYPE_ID = "ostypeid"; + public static final String PARAMS = "params"; + public static final String PARENT_DOMAIN_ID = "parentdomainid"; + public static final String PASSWORD = "password"; + public static final String NEW_PASSWORD = "new_password"; + public static final String PASSWORD_ENABLED = "passwordenabled"; + public static final String SSHKEY_ENABLED = "sshkeyenabled"; + public static final String PATH = "path"; + public static final String POD_ID = "podid"; + public static final String POD_IDS = "podids"; + public static final String POLICY_ID = "policyid"; + public static final String PORT = "port"; + public static final String PORTAL = "portal"; + public static final String PORT_FORWARDING_SERVICE_ID = "portforwardingserviceid"; + public static final String PRIVATE_INTERFACE = "privateinterface"; + public static final String PRIVATE_IP = "privateip"; + public static final String PRIVATE_PORT = "privateport"; + public static final String PRIVATE_START_PORT = "privateport"; + public static final String PRIVATE_END_PORT = "privateendport"; + public static final String PRIVATE_ZONE = "privatezone"; + public static final String PROTOCOL = "protocol"; + public static final String PUBLIC_INTERFACE = "publicinterface"; + public static final String PUBLIC_IP_ID = "publicipid"; + public static final String PUBLIC_IP = "publicip"; + public static final String PUBLIC_PORT = "publicport"; + public static final String PUBLIC_START_PORT = "publicport"; + public static final String PUBLIC_END_PORT = "publicendport"; + public static final String PUBLIC_ZONE = "publiczone"; + public static final String RECEIVED_BYTES = "receivedbytes"; + public static final String REQUIRES_HVM = "requireshvm"; + public static final String RESOURCE_TYPE = "resourcetype"; + public static final String RESPONSE = "response"; + public static final String QUERY_FILTER = "queryfilter"; + public static final String SCHEDULE = "schedule"; + public static final String SCOPE = "scope"; + public static final String SECRET_KEY = "usersecretkey"; + public static final String SINCE = "since"; + public static final String KEY = "key"; + public static final String SEARCH_BASE = "searchbase"; + public static final String SECURITY_GROUP_IDS = "securitygroupids"; + public static final String SECURITY_GROUP_NAMES = "securitygroupnames"; + public static final String SECURITY_GROUP_NAME = "securitygroupname"; + public static final String SECURITY_GROUP_ID = "securitygroupid"; + public static final String SENT = "sent"; + public static final String SENT_BYTES = "sentbytes"; + public static final String SERVICE_OFFERING_ID = "serviceofferingid"; + public static final String SHOW_CAPACITIES = "showcapacities"; + public static final String SIZE = "size"; + public static final String SNAPSHOT_ID = "snapshotid"; + public static final String SNAPSHOT_POLICY_ID = "snapshotpolicyid"; + public static final String SNAPSHOT_TYPE = "snapshottype"; + public static final String SOURCE_ZONE_ID = "sourcezoneid"; + public static final String START_DATE = "startdate"; + public static final String START_IP = "startip"; + public static final String START_IPV6 = "startipv6"; + public static final String START_PORT = "startport"; + public static final String STATE = "state"; + public static final String STATUS = "status"; + public static final String STORAGE_TYPE = "storagetype"; + public static final String SYSTEM_VM_TYPE = "systemvmtype"; + public static final String TAGS = "tags"; + public static final String TARGET_IQN = "targetiqn"; + public static final String TEMPLATE_FILTER = "templatefilter"; + public static final String TEMPLATE_ID = "templateid"; + public static final String ISO_ID = "isoid"; + public static final String TIMEOUT = "timeout"; + public static final String TIMEZONE = "timezone"; + public static final String TYPE = "type"; + public static final String TRUST_STORE = "truststore"; + public static final String TRUST_STORE_PASSWORD = "truststorepass"; + public static final String URL = "url"; + public static final String USAGE_INTERFACE = "usageinterface"; + public static final String USER_DATA = "userdata"; + public static final String USER_ID = "userid"; + public static final String USE_SSL = "ssl"; + public static final String USERNAME = "username"; + public static final String USER_SECURITY_GROUP_LIST = "usersecuritygrouplist"; + public static final String USE_VIRTUAL_NETWORK = "usevirtualnetwork"; + public static final String VALUE = "value"; + public static final String VIRTUAL_MACHINE_ID = "virtualmachineid"; + public static final String VIRTUAL_MACHINE_IDS = "virtualmachineids"; + public static final String VLAN = "vlan"; + public static final String VLAN_ID = "vlanid"; + public static final String VM_AVAILABLE = "vmavailable"; + public static final String VM_LIMIT = "vmlimit"; + public static final String VM_TOTAL = "vmtotal"; + public static final String VNET = "vnet"; + public static final String VOLUME_ID = "volumeid"; + public static final String ZONE_ID = "zoneid"; + public static final String ZONE_NAME = "zonename"; + public static final String NETWORK_TYPE = "networktype"; + public static final String PAGE = "page"; + public static final String PAGE_SIZE = "pagesize"; + public static final String COUNT = "count"; + public static final String TRAFFIC_TYPE = "traffictype"; + public static final String NETWORK_OFFERING_ID = "networkofferingid"; + public static final String NETWORK_IDS = "networkids"; + public static final String NETWORK_ID = "networkid"; + public static final String NIC_ID = "nicid"; + public static final String SPECIFY_VLAN = "specifyvlan"; + public static final String IS_DEFAULT = "isdefault"; + public static final String IS_SYSTEM = "issystem"; + public static final String AVAILABILITY = "availability"; + public static final String NETWORKRATE = "networkrate"; + public static final String HOST_TAGS = "hosttags"; + public static final String SSH_KEYPAIR = "keypair"; + public static final String HOST_CPU_CAPACITY = "hostcpucapacity"; + public static final String HOST_CPU_NUM = "hostcpunum"; + public static final String HOST_MEM_CAPACITY = "hostmemcapacity"; + public static final String HOST_MAC = "hostmac"; + public static final String HOST_TAG = "hosttag"; + public static final String PXE_SERVER_TYPE = "pxeservertype"; + public static final String LINMIN_USERNAME = "linminusername"; + public static final String LINMIN_PASSWORD = "linminpassword"; + public static final String LINMIN_APID = "linminapid"; + public static final String DHCP_SERVER_TYPE = "dhcpservertype"; + public static final String LINK_LOCAL_IP = "linklocalip"; + public static final String LINK_LOCAL_MAC_ADDRESS = "linklocalmacaddress"; + public static final String LINK_LOCAL_MAC_NETMASK = "linklocalnetmask"; + public static final String LINK_LOCAL_NETWORK_ID = "linklocalnetworkid"; + public static final String PRIVATE_MAC_ADDRESS = "privatemacaddress"; + public static final String PRIVATE_NETMASK = "privatenetmask"; + public static final String PRIVATE_NETWORK_ID = "privatenetworkid"; + public static final String ALLOCATION_STATE = "allocationstate"; + public static final String MANAGED_STATE = "managedstate"; + public static final String STORAGE_ID = "storageid"; + public static final String PING_STORAGE_SERVER_IP = "pingstorageserverip"; + public static final String PING_DIR = "pingdir"; + public static final String TFTP_DIR = "tftpdir"; + public static final String PING_CIFS_USERNAME = "pingcifsusername"; + public static final String PING_CIFS_PASSWORD = "pingcifspassword"; + public static final String CHECKSUM = "checksum"; + public static final String NETWORK_DEVICE_TYPE = "networkdevicetype"; + public static final String NETWORK_DEVICE_PARAMETER_LIST = "networkdeviceparameterlist"; + public static final String ZONE_TOKEN = "zonetoken"; + public static final String DHCP_PROVIDER = "dhcpprovider"; + public static final String RESULT = "success"; + public static final String LUN_ID = "lunId"; + public static final String IQN = "iqn"; + public static final String AGGREGATE_NAME = "aggregatename"; + public static final String POOL_NAME = "poolname"; + public static final String VOLUME_NAME = "volumename"; + public static final String SNAPSHOT_POLICY = "snapshotpolicy"; + public static final String SNAPSHOT_RESERVATION = "snapshotreservation"; + public static final String IP_NETWORK_LIST = "iptonetworklist"; + public static final String PARAM_LIST = "param"; + public static final String FOR_LOAD_BALANCING = "forloadbalancing"; + public static final String KEYBOARD = "keyboard"; + public static final String OPEN_FIREWALL = "openfirewall"; + public static final String TEMPLATE_TAG = "templatetag"; + public static final String HYPERVISOR_VERSION = "hypervisorversion"; + public static final String MAX_GUESTS_LIMIT = "maxguestslimit"; + public static final String PROJECT_ID = "projectid"; + public static final String PROJECT_IDS = "projectids"; + public static final String PROJECT = "project"; + public static final String ROLE = "role"; + public static final String USER = "user"; + public static final String ACTIVE_ONLY = "activeonly"; + public static final String TOKEN = "token"; + public static final String ACCEPT = "accept"; + public static final String SORT_KEY = "sortkey"; + public static final String ACCOUNT_DETAILS = "accountdetails"; + public static final String SERVICE_PROVIDER_LIST = "serviceproviderlist"; + public static final String SERVICE_CAPABILITY_LIST = "servicecapabilitylist"; + public static final String CAN_CHOOSE_SERVICE_CAPABILITY = "canchooseservicecapability"; + public static final String PROVIDER = "provider"; + public static final String NETWORK_SPEED = "networkspeed"; + public static final String BROADCAST_DOMAIN_RANGE = "broadcastdomainrange"; + public static final String ISOLATION_METHODS = "isolationmethods"; + public static final String PHYSICAL_NETWORK_ID = "physicalnetworkid"; + public static final String DEST_PHYSICAL_NETWORK_ID = "destinationphysicalnetworkid"; + public static final String ENABLED = "enabled"; + public static final String SERVICE_NAME = "servicename"; + public static final String DHCP_RANGE = "dhcprange"; + public static final String UUID = "uuid"; + public static final String SECURITY_GROUP_EANBLED = "securitygroupenabled"; + public static final String LOCAL_STORAGE_ENABLED = "localstorageenabled"; + public static final String GUEST_IP_TYPE = "guestiptype"; + public static final String XEN_NETWORK_LABEL = "xennetworklabel"; + public static final String KVM_NETWORK_LABEL = "kvmnetworklabel"; + public static final String VMWARE_NETWORK_LABEL = "vmwarenetworklabel"; + public static final String NETWORK_SERVICE_PROVIDER_ID = "nspid"; + public static final String SERVICE_LIST = "servicelist"; + public static final String CAN_ENABLE_INDIVIDUAL_SERVICE = "canenableindividualservice"; + public static final String SUPPORTED_SERVICES = "supportedservices"; + public static final String NSP_ID = "nspid"; + public static final String ACL_TYPE = "acltype"; + public static final String SUBDOMAIN_ACCESS = "subdomainaccess"; + public static final String LOAD_BALANCER_DEVICE_ID = "lbdeviceid"; + public static final String LOAD_BALANCER_DEVICE_NAME = "lbdevicename"; + public static final String LOAD_BALANCER_DEVICE_STATE = "lbdevicestate"; + public static final String LOAD_BALANCER_DEVICE_CAPACITY = "lbdevicecapacity"; + public static final String LOAD_BALANCER_DEVICE_DEDICATED = "lbdevicededicated"; + public static final String FIREWALL_DEVICE_ID = "fwdeviceid"; + public static final String FIREWALL_DEVICE_NAME = "fwdevicename"; + public static final String FIREWALL_DEVICE_STATE = "fwdevicestate"; + public static final String FIREWALL_DEVICE_CAPACITY = "fwdevicecapacity"; + public static final String FIREWALL_DEVICE_DEDICATED = "fwdevicededicated"; + public static final String SERVICE = "service"; + public static final String ASSOCIATED_NETWORK_ID = "associatednetworkid"; + public static final String ASSOCIATED_NETWORK_NAME = "associatednetworkname"; + public static final String SOURCE_NAT_SUPPORTED = "sourcenatsupported"; + public static final String RESOURCE_STATE = "resourcestate"; + public static final String PROJECT_INVITE_REQUIRED = "projectinviterequired"; + public static final String REQUIRED = "required"; + public static final String RESTART_REQUIRED = "restartrequired"; + public static final String ALLOW_USER_CREATE_PROJECTS = "allowusercreateprojects"; + public static final String CONSERVE_MODE = "conservemode"; + public static final String TRAFFIC_TYPE_IMPLEMENTOR = "traffictypeimplementor"; + public static final String KEYWORD = "keyword"; + public static final String LIST_ALL = "listall"; + public static final String SPECIFY_IP_RANGES = "specifyipranges"; + public static final String IS_SOURCE_NAT = "issourcenat"; + public static final String IS_STATIC_NAT = "isstaticnat"; + public static final String SORT_BY = "sortby"; + public static final String CHANGE_CIDR = "changecidr"; + public static final String PURPOSE = "purpose"; + public static final String IS_TAGGED = "istagged"; + public static final String INSTANCE_NAME = "instancename"; + public static final String START_VM = "startvm"; + public static final String HA_HOST = "hahost"; + public static final String CUSTOM_DISK_OFF_MAX_SIZE = "customdiskofferingmaxsize"; + public static final String DEFAULT_ZONE_ID = "defaultzoneid"; + public static final String GUID = "guid"; + + public static final String EXTERNAL_SWITCH_MGMT_DEVICE_ID = "vsmdeviceid"; + public static final String EXTERNAL_SWITCH_MGMT_DEVICE_NAME = "vsmdevicename"; + public static final String EXTERNAL_SWITCH_MGMT_DEVICE_STATE = "vsmdevicestate"; + // Would we need to have a capacity field for Cisco N1KV VSM? Max hosts managed by it perhaps? May remove this later. + public static final String EXTERNAL_SWITCH_MGMT_DEVICE_CAPACITY = "vsmdevicecapacity"; + public static final String CISCO_NEXUS_VSM_NAME = "vsmname"; + public static final String VSM_USERNAME = "vsmusername"; + public static final String VSM_PASSWORD = "vsmpassword"; + public static final String VSM_IPADDRESS = "vsmipaddress"; + public static final String VSM_MGMT_VLAN_ID = "vsmmgmtvlanid"; + public static final String VSM_PKT_VLAN_ID = "vsmpktvlanid"; + public static final String VSM_CTRL_VLAN_ID = "vsmctrlvlanid"; + public static final String VSM_STORAGE_VLAN_ID = "vsmstoragevlanid"; + public static final String VSM_DOMAIN_ID = "vsmdomainid"; + public static final String VSM_CONFIG_MODE = "vsmconfigmode"; + public static final String VSM_CONFIG_STATE = "vsmconfigstate"; + public static final String VSM_DEVICE_STATE = "vsmdevicestate"; + public static final String ADD_VSM_FLAG = "addvsmflag"; + public static final String END_POINT = "endpoint"; + public static final String REGION_ID = "regionid"; + public static final String IS_PROPAGATE = "ispropagate"; + public static final String VPC_OFF_ID = "vpcofferingid"; + public static final String NETWORK = "network"; + public static final String VPC_ID = "vpcid"; + public static final String GATEWAY_ID = "gatewayid"; + public static final String CAN_USE_FOR_DEPLOY = "canusefordeploy"; + public static final String RESOURCE_IDS = "resourceids"; + public static final String RESOURCE_ID = "resourceid"; + public static final String CUSTOMER = "customer"; + public static final String S2S_VPN_GATEWAY_ID = "s2svpngatewayid"; + public static final String S2S_CUSTOMER_GATEWAY_ID = "s2scustomergatewayid"; + public static final String IPSEC_PSK = "ipsecpsk"; + public static final String GUEST_IP = "guestip"; + public static final String REMOVED = "removed"; + public static final String IKE_POLICY = "ikepolicy"; + public static final String ESP_POLICY = "esppolicy"; + public static final String IKE_LIFETIME = "ikelifetime"; + public static final String ESP_LIFETIME = "esplifetime"; + public static final String DPD = "dpd"; + public static final String FOR_VPC = "forvpc"; + public static final String SHRINK_OK = "shrinkok"; + public static final String NICIRA_NVP_DEVICE_ID = "nvpdeviceid"; + public static final String NICIRA_NVP_TRANSPORT_ZONE_UUID = "transportzoneuuid"; + public static final String NICIRA_NVP_DEVICE_NAME = "niciradevicename"; + public static final String NICIRA_NVP_GATEWAYSERVICE_UUID = "l3gatewayserviceuuid"; + public static final String S3_ACCESS_KEY = "accesskey"; + public static final String S3_SECRET_KEY = "secretkey"; + public static final String S3_END_POINT = "endpoint"; + public static final String S3_BUCKET_NAME = "bucket"; + public static final String S3_HTTPS_FLAG = "usehttps"; + public static final String S3_CONNECTION_TIMEOUT = "connectiontimeout"; + public static final String S3_MAX_ERROR_RETRY = "maxerrorretry"; + public static final String S3_SOCKET_TIMEOUT = "sockettimeout"; + public static final String INCL_ZONES = "includezones"; + public static final String EXCL_ZONES = "excludezones"; + public static final String SOURCE = "source"; + public static final String COUNTER_ID = "counterid"; + public static final String AGGR_OPERATOR = "aggroperator"; + public static final String AGGR_FUNCTION = "aggrfunction"; + public static final String AGGR_VALUE = "aggrvalue"; + public static final String THRESHOLD = "threshold"; + public static final String RELATIONAL_OPERATOR = "relationaloperator"; + public static final String OTHER_DEPLOY_PARAMS = "otherdeployparams"; + public static final String MIN_MEMBERS = "minmembers"; + public static final String MAX_MEMBERS = "maxmembers"; + public static final String AUTOSCALE_VM_DESTROY_TIME = "destroyvmgraceperiod"; + public static final String VMPROFILE_ID = "vmprofileid"; + public static final String VMGROUP_ID = "vmgroupid"; + public static final String CS_URL = "csurl"; + public static final String SCALEUP_POLICY_IDS = "scaleuppolicyids"; + public static final String SCALEDOWN_POLICY_IDS = "scaledownpolicyids"; + public static final String SCALEUP_POLICIES = "scaleuppolicies"; + public static final String SCALEDOWN_POLICIES = "scaledownpolicies"; + public static final String INTERVAL = "interval"; + public static final String QUIETTIME = "quiettime"; + public static final String ACTION = "action"; + public static final String CONDITION_ID = "conditionid"; + public static final String CONDITION_IDS = "conditionids"; + public static final String COUNTERPARAM_LIST = "counterparam"; + public static final String AUTOSCALE_USER_ID = "autoscaleuserid"; + public static final String BAREMETAL_DISCOVER_NAME = "baremetaldiscovername"; +<<<<<<< HEAD + public static final String UCS_DN = "ucsdn"; +======= + public static final String VM_SNAPSHOT_DESCRIPTION = "description"; + public static final String VM_SNAPSHOT_DISPLAYNAME = "name"; + public static final String VM_SNAPSHOT_ID = "vmsnapshotid"; + public static final String VM_SNAPSHOT_DISK_IDS = "vmsnapshotdiskids"; + public static final String VM_SNAPSHOT_MEMORY = "snapshotmemory"; +>>>>>>> CLOUDSTACK-684 Support VM Snapshot + + public enum HostDetails { + all, capacity, events, stats, min; + } + + public enum VMDetails { + all, group, nics, stats, secgrp, tmpl, servoff, iso, volume, min; + } + + public enum LDAPParams { + hostname, port, usessl, queryfilter, searchbase, dn, passwd, truststore, truststorepass; + + @Override + public String toString() { + return "ldap." + name(); + } + } + + +} diff --git a/api/src/org/apache/cloudstack/api/ApiErrorCode.java b/api/src/org/apache/cloudstack/api/ApiErrorCode.java index ee28fa05878..69bd0284cef 100644 --- a/api/src/org/apache/cloudstack/api/ApiErrorCode.java +++ b/api/src/org/apache/cloudstack/api/ApiErrorCode.java @@ -18,7 +18,6 @@ package org.apache.cloudstack.api; /** * Enum class for various API error code used in CloudStack - * @author minc * */ public enum ApiErrorCode { diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index d8e2bffed3a..816b6deed77 100644 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -29,6 +29,7 @@ import javax.inject.Inject; import org.apache.cloudstack.query.QueryService; import org.apache.cloudstack.region.RegionService; +import org.apache.cloudstack.usage.UsageService; import org.apache.log4j.Logger; import com.cloud.configuration.ConfigurationService; @@ -43,6 +44,7 @@ import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.NetworkService; +import com.cloud.network.NetworkUsageService; import com.cloud.network.StorageNetworkService; import com.cloud.network.VpcVirtualNetworkApplianceService; import com.cloud.network.as.AutoScaleService; @@ -60,6 +62,7 @@ import com.cloud.resource.ResourceService; import com.cloud.server.ManagementService; import com.cloud.server.TaggedResourceService; import com.cloud.storage.StorageService; +import com.cloud.storage.VolumeApiService; import com.cloud.storage.snapshot.SnapshotService; import com.cloud.template.TemplateService; import com.cloud.user.Account; @@ -67,8 +70,8 @@ import com.cloud.user.AccountService; import com.cloud.user.DomainService; import com.cloud.user.ResourceLimitService; import com.cloud.utils.Pair; -import com.cloud.vm.BareMetalVmService; import com.cloud.vm.UserVmService; +import com.cloud.vm.snapshot.VMSnapshotService; public abstract class BaseCmd { private static final Logger s_logger = Logger.getLogger(BaseCmd.class.getName()); @@ -99,6 +102,7 @@ public abstract class BaseCmd { @Inject public UserVmService _userVmService; @Inject public ManagementService _mgr; @Inject public StorageService _storageService; + @Inject public VolumeApiService _volumeService; @Inject public ResourceService _resourceService; @Inject public NetworkService _networkService; @Inject public TemplateService _templateService; @@ -124,6 +128,9 @@ public abstract class BaseCmd { @Inject public Site2SiteVpnService _s2sVpnService; @Inject public QueryService _queryService; + @Inject public UsageService _usageService; + @Inject public NetworkUsageService _networkUsageService; + @Inject public VMSnapshotService _vmSnapshotService; public abstract void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException; diff --git a/api/src/org/apache/cloudstack/api/ResponseGenerator.java b/api/src/org/apache/cloudstack/api/ResponseGenerator.java index 11ca452be02..0b73fd47888 100644 --- a/api/src/org/apache/cloudstack/api/ResponseGenerator.java +++ b/api/src/org/apache/cloudstack/api/ResponseGenerator.java @@ -16,6 +16,91 @@ // under the License. package org.apache.cloudstack.api; +import java.text.DecimalFormat; +import java.util.EnumSet; +import java.util.List; + +import org.apache.cloudstack.api.ApiConstants.HostDetails; +import org.apache.cloudstack.api.ApiConstants.VMDetails; +import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.AsyncJobResponse; +import org.apache.cloudstack.api.response.AutoScalePolicyResponse; +import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; +import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; +import org.apache.cloudstack.api.response.CapacityResponse; +import org.apache.cloudstack.api.response.ClusterResponse; +import org.apache.cloudstack.api.response.ConditionResponse; +import org.apache.cloudstack.api.response.ConfigurationResponse; +import org.apache.cloudstack.api.response.CounterResponse; +import org.apache.cloudstack.api.response.CreateCmdResponse; +import org.apache.cloudstack.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.ExtractResponse; +import org.apache.cloudstack.api.response.FirewallResponse; +import org.apache.cloudstack.api.response.FirewallRuleResponse; +import org.apache.cloudstack.api.response.GuestOSResponse; +import org.apache.cloudstack.api.response.HostResponse; +import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse; +import org.apache.cloudstack.api.response.IPAddressResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; +import org.apache.cloudstack.api.response.IpForwardingRuleResponse; +import org.apache.cloudstack.api.response.LBStickinessResponse; +import org.apache.cloudstack.api.response.LDAPConfigResponse; +import org.apache.cloudstack.api.response.LoadBalancerResponse; +import org.apache.cloudstack.api.response.NetworkACLResponse; +import org.apache.cloudstack.api.response.NetworkOfferingResponse; +import org.apache.cloudstack.api.response.NetworkResponse; +import org.apache.cloudstack.api.response.NicResponse; +import org.apache.cloudstack.api.response.NicSecondaryIpResponse; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.PodResponse; +import org.apache.cloudstack.api.response.PrivateGatewayResponse; +import org.apache.cloudstack.api.response.ProjectAccountResponse; +import org.apache.cloudstack.api.response.ProjectInvitationResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.ProviderResponse; +import org.apache.cloudstack.api.response.RegionResponse; +import org.apache.cloudstack.api.response.RemoteAccessVpnResponse; +import org.apache.cloudstack.api.response.ResourceCountResponse; +import org.apache.cloudstack.api.response.ResourceLimitResponse; +import org.apache.cloudstack.api.response.ResourceTagResponse; +import org.apache.cloudstack.api.response.S3Response; +import org.apache.cloudstack.api.response.SecurityGroupResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; +import org.apache.cloudstack.api.response.ServiceResponse; +import org.apache.cloudstack.api.response.Site2SiteCustomerGatewayResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnConnectionResponse; +import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; +import org.apache.cloudstack.api.response.SnapshotPolicyResponse; +import org.apache.cloudstack.api.response.SnapshotResponse; +import org.apache.cloudstack.api.response.SnapshotScheduleResponse; +import org.apache.cloudstack.api.response.StaticRouteResponse; +import org.apache.cloudstack.api.response.StorageNetworkIpRangeResponse; +import org.apache.cloudstack.api.response.StoragePoolResponse; +import org.apache.cloudstack.api.response.SwiftResponse; +import org.apache.cloudstack.api.response.SystemVmInstanceResponse; +import org.apache.cloudstack.api.response.SystemVmResponse; +import org.apache.cloudstack.api.response.TemplatePermissionsResponse; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.TrafficMonitorResponse; +import org.apache.cloudstack.api.response.TrafficTypeResponse; +import org.apache.cloudstack.api.response.UsageRecordResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VMSnapshotResponse; +import org.apache.cloudstack.api.response.VirtualRouterProviderResponse; +import org.apache.cloudstack.api.response.VlanIpRangeResponse; +import org.apache.cloudstack.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.VpcOfferingResponse; +import org.apache.cloudstack.api.response.VpcResponse; +import org.apache.cloudstack.api.response.VpnUsersResponse; +import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.cloudstack.region.Region; +import org.apache.cloudstack.usage.Usage; + import com.cloud.async.AsyncJob; import com.cloud.capacity.Capacity; import com.cloud.configuration.Configuration; @@ -58,6 +143,9 @@ import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.uservm.UserVm; import com.cloud.vm.InstanceGroup; +import com.cloud.vm.Nic; +import com.cloud.vm.NicSecondaryIp; +import com.cloud.vm.snapshot.VMSnapshot; import com.cloud.vm.VirtualMachine; import org.apache.cloudstack.api.ApiConstants.HostDetails; import org.apache.cloudstack.api.ApiConstants.VMDetails; @@ -285,4 +373,12 @@ public interface ResponseGenerator { GuestOSResponse createGuestOSResponse(GuestOS os); SnapshotScheduleResponse createSnapshotScheduleResponse(SnapshotSchedule sched); + + UsageRecordResponse createUsageResponse(Usage usageRecord); + + TrafficMonitorResponse createTrafficMonitorResponse(Host trafficMonitor); + VMSnapshotResponse createVMSnapshotResponse(VMSnapshot vmSnapshot); + NicSecondaryIpResponse createSecondaryIPToNicResponse(String ip, + Long nicId, Long networkId); + public NicResponse createNicResponse(Nic result); } diff --git a/api/src/org/apache/cloudstack/api/ServerApiException.java b/api/src/org/apache/cloudstack/api/ServerApiException.java index 682e5b7e774..4b0fae58548 100644 --- a/api/src/org/apache/cloudstack/api/ServerApiException.java +++ b/api/src/org/apache/cloudstack/api/ServerApiException.java @@ -43,7 +43,7 @@ public class ServerApiException extends CloudRuntimeException { super(description, cause); _errorCode = errorCode; _description = description; - if (cause instanceof CloudRuntimeException || cause instanceof CloudException ) { + if (cause instanceof CloudRuntimeException) { CloudRuntimeException rt = (CloudRuntimeException) cause; ArrayList idList = rt.getIdProxyList(); if (idList != null) { @@ -52,6 +52,15 @@ public class ServerApiException extends CloudRuntimeException { } } setCSErrorCode(rt.getCSErrorCode()); + } else if (cause instanceof CloudException) { + CloudException rt = (CloudException) cause; + ArrayList idList = rt.getIdProxyList(); + if (idList != null) { + for (int i = 0; i < idList.size(); i++) { + addProxyObject(idList.get(i)); + } + } + setCSErrorCode(rt.getCSErrorCode()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java index b0f73d1d8f8..4121651d499 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java @@ -78,19 +78,7 @@ public class CreateAccountCmd extends BaseCmd { @Parameter(name = ApiConstants.ACCOUNT_DETAILS, type = CommandType.MAP, description = "details for account used to store specific parameters") private Map details; - //@Parameter(name = ApiConstants.REGION_DETAILS, type = CommandType.MAP, description = "details for account used to store region specific parameters") - //private Map regionDetails; - - @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.STRING, description="Account UUID, required for adding account from another Region") - private String accountUUID; - @Parameter(name=ApiConstants.USER_ID, type=CommandType.STRING, description="User UUID, required for adding account from another Region") - private String userUUID; - - @Parameter(name=ApiConstants.REGION_ID, type=CommandType.INTEGER, description="Id of the Region creating the account") - private Integer regionId; - - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -145,18 +133,6 @@ public class CreateAccountCmd extends BaseCmd { return params; } - public String getAccountUUID() { - return accountUUID; - } - - public String getUserUUID() { - return userUUID; - } - - public Integer getRegionId() { - return regionId; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -174,8 +150,8 @@ public class CreateAccountCmd extends BaseCmd { @Override public void execute(){ UserContext.current().setEventDetails("Account Name: "+getAccountName()+", Domain Id:"+getDomainId()); - UserAccount userAccount = _accountService.createUserAccount(getUsername(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimeZone(), getAccountName(), getAccountType(), getDomainId(), getNetworkDomain(), getDetails(), - getAccountUUID(), getUserUUID(), getRegionId()); + UserAccount userAccount = _accountService.createUserAccount(getUsername(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimeZone(), getAccountName(), getAccountType(), + getDomainId(), getNetworkDomain(), getDetails()); if (userAccount != null) { AccountResponse response = _responseGenerator.createUserAccountResponse(userAccount); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java index 959d7ce985b..9895da113f1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -48,11 +48,8 @@ public class DeleteAccountCmd extends BaseAsyncCmd { required=true, description="Account id") private Long id; - @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region") - private Boolean isPropagate; - @Inject RegionService _regionService; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -62,10 +59,6 @@ public class DeleteAccountCmd extends BaseAsyncCmd { return id; } - public Boolean getIsPropagate() { - return isPropagate; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -103,7 +96,7 @@ public class DeleteAccountCmd extends BaseAsyncCmd { @Override public void execute(){ UserContext.current().setEventDetails("Account Id: "+getId()); - + boolean result = _regionService.deleteUserAccount(this); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index 60e9fd5aa60..1f9b8217dd3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -58,11 +58,8 @@ public class DisableAccountCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.LOCK, type=CommandType.BOOLEAN, required=true, description="If true, only lock the account; else disable the account") private Boolean lockRequested; - @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region") - private Boolean isPropagate; - @Inject RegionService _regionService; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -79,14 +76,10 @@ public class DisableAccountCmd extends BaseAsyncCmd { return domainId; } - public Boolean getIsPropagate() { - return isPropagate; - } - public Boolean getLockRequested() { - return lockRequested; - } - + return lockRequested; + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -124,7 +117,7 @@ public class DisableAccountCmd extends BaseAsyncCmd { @Override public void execute() throws ConcurrentOperationException, ResourceUnavailableException{ UserContext.current().setEventDetails("Account Name: "+getAccountName()+", Domain Id:"+getDomainId()); - Account result = _regionService.disableAccount(this); + Account result = _regionService.disableAccount(this); if (result != null){ AccountResponse response = _responseGenerator.createAccountResponse(result); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java index 9a92f789132..b9a9f6d70ba 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java @@ -50,11 +50,8 @@ public class EnableAccountCmd extends BaseCmd { description="Enables specified account in this domain.") private Long domainId; - @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region") - private Boolean isPropagate; - @Inject RegionService _regionService; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -71,10 +68,6 @@ public class EnableAccountCmd extends BaseCmd { return domainId; } - public Boolean getIsPropagate() { - return isPropagate; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -101,7 +94,7 @@ public class EnableAccountCmd extends BaseCmd { @Override public void execute(){ - Account result = _regionService.enableAccount(this); + Account result = _regionService.enableAccount(this); if (result != null){ AccountResponse response = _responseGenerator.createAccountResponse(result); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java index 6fad48bf66e..60d1a97ffac 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java @@ -63,11 +63,8 @@ public class UpdateAccountCmd extends BaseCmd{ @Parameter(name = ApiConstants.ACCOUNT_DETAILS, type = CommandType.MAP, description = "details for account used to store specific parameters") private Map details; - @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region") - private Boolean isPropagate; - @Inject RegionService _regionService; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -102,10 +99,6 @@ public class UpdateAccountCmd extends BaseCmd{ return params; } - public Boolean getIsPropagate() { - return isPropagate; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -131,7 +124,7 @@ public class UpdateAccountCmd extends BaseCmd{ @Override public void execute(){ - Account result = _regionService.updateAccount(this); + Account result = _regionService.updateAccount(this); if (result != null){ AccountResponse response = _responseGenerator.createAccountResponse(result); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java index 912c396bf4f..d55ccd7dd11 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java @@ -20,6 +20,10 @@ package org.apache.cloudstack.api.command.admin.cluster; import java.util.ArrayList; import java.util.List; +import com.cloud.exception.InvalidParameterValueException; +import org.apache.cloudstack.api.*; +import org.apache.log4j.Logger; + import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; @@ -81,6 +85,40 @@ public class AddClusterCmd extends BaseCmd { @Parameter(name = ApiConstants.VSM_IPADDRESS, type = CommandType.STRING, required = false, description = "the ipaddress of the VSM associated with this cluster") private String vsmipaddress; + @Parameter (name=ApiConstants.CPU_OVERCOMMIT_RATIO, type = CommandType.STRING, required = false , description = "value of the cpu overcommit ratio, defaults to 1") + private String cpuovercommitRatio; + + @Parameter(name = ApiConstants.MEMORY_OVERCOMMIT_RATIO, type = CommandType.STRING, required = false ,description = "value of the default ram overcommit ratio, defaults to 1") + private String memoryovercommitratio; + + @Parameter(name = ApiConstants.VSWITCH_TYPE_GUEST_TRAFFIC, type = CommandType.STRING, required = false, description = "Type of virtual switch used for guest traffic in the cluster. Allowed values are, vmwaresvs (for VMware standard vSwitch) and vmwaredvs (for VMware distributed vSwitch)") + private String vSwitchTypeGuestTraffic; + + @Parameter(name = ApiConstants.VSWITCH_TYPE_PUBLIC_TRAFFIC, type = CommandType.STRING, required = false, description = "Type of virtual switch used for public traffic in the cluster. Allowed values are, vmwaresvs (for VMware standard vSwitch) and vmwaredvs (for VMware distributed vSwitch)") + private String vSwitchTypePublicTraffic; + + @Parameter(name = ApiConstants.VSWITCH_TYPE_GUEST_TRAFFIC, type = CommandType.STRING, required = false, description = "Name of virtual switch used for guest traffic in the cluster. This would override zone wide traffic label setting.") + private String vSwitchNameGuestTraffic; + + @Parameter(name = ApiConstants.VSWITCH_TYPE_PUBLIC_TRAFFIC, type = CommandType.STRING, required = false, description = "Name of virtual switch used for public traffic in the cluster. This would override zone wide traffic label setting.") + private String vSwitchNamePublicTraffic; + + public String getVSwitchTypeGuestTraffic() { + return vSwitchTypeGuestTraffic; + } + + public String getVSwitchTypePublicTraffic() { + return vSwitchTypePublicTraffic; + } + + public String getVSwitchNameGuestTraffic() { + return vSwitchNameGuestTraffic; + } + + public String getVSwitchNamePublicTraffic() { + return vSwitchNamePublicTraffic; + } + public String getVSMIpaddress() { return vsmipaddress; } @@ -147,9 +185,26 @@ public class AddClusterCmd extends BaseCmd { this.allocationState = allocationState; } + public Float getCpuOvercommitRatio (){ + if(cpuovercommitRatio != null){ + return Float.parseFloat(cpuovercommitRatio); + } + return 1.0f; + } + + public Float getMemoryOvercommitRaito (){ + if (memoryovercommitratio != null){ + return Float.parseFloat(memoryovercommitratio); + } + return 1.0f; + } + @Override public void execute(){ try { + if ((getMemoryOvercommitRaito().compareTo(1f) < 0) | (getCpuOvercommitRatio().compareTo(1f) < 0)) { + throw new InvalidParameterValueException("Cpu and ram overcommit ratios should not be less than 1"); + } List result = _resourceService.discoverCluster(this); ListResponse response = new ListResponse(); List clusterResponses = new ArrayList(); diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java index 058c7ebc952..95728dd184d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java @@ -54,6 +54,13 @@ public class UpdateClusterCmd extends BaseCmd { @Parameter(name=ApiConstants.MANAGED_STATE, type=CommandType.STRING, description="whether this cluster is managed by cloudstack") private String managedState; + @Parameter(name=ApiConstants.CPU_OVERCOMMIT_RATIO, type = CommandType.STRING, description = "Value of cpu overcommit ratio") + private String cpuovercommitratio; + + @Parameter(name=ApiConstants.MEMORY_OVERCOMMIT_RATIO, type = CommandType.STRING, description = "Value of ram overcommit ratio") + private String memoryovercommitratio; + + public String getClusterName() { return clusterName; } @@ -100,6 +107,20 @@ public class UpdateClusterCmd extends BaseCmd { this.managedState = managedstate; } + public Float getCpuOvercommitRatio (){ + if(cpuovercommitratio != null){ + return Float.parseFloat(cpuovercommitratio); + } + return 1.0f; + } + + public Float getMemoryOvercommitRaito (){ + if (memoryovercommitratio != null){ + return Float.parseFloat(memoryovercommitratio); + } + return 1.0f; + } + @Override public void execute(){ Cluster cluster = _resourceService.getCluster(getId()); @@ -107,7 +128,11 @@ public class UpdateClusterCmd extends BaseCmd { throw new InvalidParameterValueException("Unable to find the cluster by id=" + getId()); } - Cluster result = _resourceService.updateCluster(cluster, getClusterType(), getHypervisor(), getAllocationState(), getManagedstate()); + if ((getMemoryOvercommitRaito().compareTo(1f) < 0) | (getCpuOvercommitRatio().compareTo(1f) < 0)) { + throw new InvalidParameterValueException("Cpu and ram overcommit ratios should be greater than one"); + } + + Cluster result = _resourceService.updateCluster(cluster, getClusterType(), getHypervisor(), getAllocationState(), getManagedstate(), getMemoryOvercommitRaito(), getCpuOvercommitRatio()); if (result != null) { ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster, false); clusterResponse.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java index e0ba69359ad..5eae4865732 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java @@ -49,12 +49,6 @@ public class CreateDomainCmd extends BaseCmd { @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="Network domain for networks in the domain") private String networkDomain; - @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.STRING, description="Domain UUID, required for adding domain from another Region") - private String domainUUID; - - @Parameter(name=ApiConstants.REGION_ID, type=CommandType.INTEGER, description="Id of the Region creating the Domain") - private Integer regionId; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -71,14 +65,6 @@ public class CreateDomainCmd extends BaseCmd { return networkDomain; } - public String getDomainUUID() { - return domainUUID; - } - - public Integer getRegionId() { - return regionId; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -96,7 +82,7 @@ public class CreateDomainCmd extends BaseCmd { @Override public void execute(){ UserContext.current().setEventDetails("Domain Name: "+getDomainName()+((getParentDomainId()!=null)?", Parent DomainId :"+getParentDomainId():"")); - Domain domain = _domainService.createDomain(getDomainName(), getParentDomainId(), getNetworkDomain(), getDomainUUID(), getRegionId()); + Domain domain = _domainService.createDomain(getDomainName(), getParentDomainId(), getNetworkDomain()); if (domain != null) { DomainResponse response = _responseGenerator.createDomainResponse(domain); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java index eae393da81e..488a758caec 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java @@ -50,11 +50,8 @@ public class DeleteDomainCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.CLEANUP, type=CommandType.BOOLEAN, description="true if all domain resources (child domains, accounts) have to be cleaned up, false otherwise") private Boolean cleanup; - @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region") - private Boolean propagate; - @Inject RegionService _regionService; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -67,10 +64,6 @@ public class DeleteDomainCmd extends BaseAsyncCmd { return cleanup; } - public Boolean isPropagate() { - return propagate; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java index c217f16c93a..e658f49ada1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java @@ -52,11 +52,8 @@ public class UpdateDomainCmd extends BaseCmd { @Parameter(name=ApiConstants.NETWORK_DOMAIN, type=CommandType.STRING, description="Network domain for the domain's networks; empty string will update domainName with NULL value") private String networkDomain; - @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region") - private Boolean isPropagate; - @Inject RegionService _regionService; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -73,10 +70,6 @@ public class UpdateDomainCmd extends BaseCmd { return networkDomain; } - public Boolean getIsPropagate() { - return isPropagate; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -95,7 +88,7 @@ public class UpdateDomainCmd extends BaseCmd { public void execute(){ UserContext.current().setEventDetails("Domain Id: "+getId()); Domain domain = _regionService.updateDomain(this); - + if (domain != null) { DomainResponse response = _responseGenerator.createDomainResponse(domain); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java index fbe8ab000e6..2976de4bf28 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/ldap/LDAPConfigCmd.java @@ -31,6 +31,7 @@ import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; +import com.cloud.exception.InvalidParameterValueException; import com.cloud.user.Account; @APICommand(name = "ldapConfig", description="Configure the LDAP context for this site.", responseObject=LDAPConfigResponse.class, since="3.0.0") @@ -43,7 +44,10 @@ public class LDAPConfigCmd extends BaseCmd { //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.HOST_NAME, type=CommandType.STRING, required=true, description="Hostname or ip address of the ldap server eg: my.ldap.com") + @Parameter(name=ApiConstants.LIST_ALL, type=CommandType.STRING, description="Hostname or ip address of the ldap server eg: my.ldap.com") + private String listall; + + @Parameter(name=ApiConstants.HOST_NAME, type=CommandType.STRING, description="Hostname or ip address of the ldap server eg: my.ldap.com") private String hostname; @Parameter(name=ApiConstants.PORT, type=CommandType.INTEGER, description="Specify the LDAP port if required, default is 389.") @@ -52,10 +56,10 @@ public class LDAPConfigCmd extends BaseCmd { @Parameter(name=ApiConstants.USE_SSL, type=CommandType.BOOLEAN, description="Check Use SSL if the external LDAP server is configured for LDAP over SSL.") private Boolean useSSL; - @Parameter(name=ApiConstants.SEARCH_BASE, type=CommandType.STRING, required=true, description="The search base defines the starting point for the search in the directory tree Example: dc=cloud,dc=com.") + @Parameter(name=ApiConstants.SEARCH_BASE, type=CommandType.STRING, description="The search base defines the starting point for the search in the directory tree Example: dc=cloud,dc=com.") private String searchBase; - @Parameter(name=ApiConstants.QUERY_FILTER, type=CommandType.STRING, required=true, description="You specify a query filter here, which narrows down the users, who can be part of this domain.") + @Parameter(name=ApiConstants.QUERY_FILTER, type=CommandType.STRING, description="You specify a query filter here, which narrows down the users, who can be part of this domain.") private String queryFilter; @Parameter(name=ApiConstants.BIND_DN, type=CommandType.STRING, description="Specify the distinguished name of a user with the search permission on the directory.") @@ -74,6 +78,10 @@ public class LDAPConfigCmd extends BaseCmd { /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// + public String getListAll() { + return listall == null ? "false" : listall; + } + public String getBindPassword() { return bindPassword; } @@ -82,30 +90,56 @@ public class LDAPConfigCmd extends BaseCmd { return bindDN; } + public void setBindDN(String bdn) { + this.bindDN=bdn; + } + public String getQueryFilter() { return queryFilter; } + public void setQueryFilter(String queryFilter) { + this.queryFilter=queryFilter; + } public String getSearchBase() { return searchBase; } + public void setSearchBase(String searchBase) { + this.searchBase=searchBase; + } + public Boolean getUseSSL() { - return useSSL == null ? Boolean.FALSE : Boolean.TRUE; + return useSSL == null ? Boolean.FALSE : useSSL; + } + + public void setUseSSL(Boolean useSSL) { + this.useSSL=useSSL; } public String getHostname() { return hostname; } + public void setHostname(String hostname) { + this.hostname=hostname; + } + public Integer getPort() { return port <= 0 ? 389 : port; } + public void setPort(Integer port) { + this.port=port; + } + public String getTrustStore() { return trustStore; } + public void setTrustStore(String trustStore) { + this.trustStore=trustStore; + } public String getTrustStorePassword() { return trustStorePassword; @@ -122,12 +156,25 @@ public class LDAPConfigCmd extends BaseCmd { InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException { try { - boolean result = _configService.updateLDAP(this); - if (result){ - LDAPConfigResponse lr = _responseGenerator.createLDAPConfigResponse(getHostname(), getPort(), getUseSSL(), getQueryFilter(), getSearchBase(), getBindDN()); + if ("true".equalsIgnoreCase(getListAll())){ + // return the existing conf + LDAPConfigCmd cmd = _configService.listLDAPConfig(this); + LDAPConfigResponse lr = _responseGenerator.createLDAPConfigResponse(cmd.getHostname(), cmd.getPort(), cmd.getUseSSL(), + cmd.getQueryFilter(), cmd.getSearchBase(), cmd.getBindDN()); lr.setResponseName(getCommandName()); this.setResponseObject(lr); } + else if (getHostname()==null || getSearchBase() == null || getQueryFilter() == null) { + throw new InvalidParameterValueException("You need to provide hostname, serachbase and queryfilter to configure your LDAP server"); + } + else { + boolean result = _configService.updateLDAP(this); + if (result){ + LDAPConfigResponse lr = _responseGenerator.createLDAPConfigResponse(getHostname(), getPort(), getUseSSL(), getQueryFilter(), getSearchBase(), getBindDN()); + lr.setResponseName(getCommandName()); + this.setResponseObject(lr); + } + } } catch (NamingException ne){ ne.printStackTrace(); diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java index ee1e1b20bfc..e915c48e9b6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java @@ -59,6 +59,9 @@ public class CreateServiceOfferingCmd extends BaseCmd { @Parameter(name=ApiConstants.LIMIT_CPU_USE, type=CommandType.BOOLEAN, description="restrict the CPU usage to committed service offering") private Boolean limitCpuUse; + @Parameter(name=ApiConstants.IS_VOLATILE, type=CommandType.BOOLEAN, description="true if the virtual machine needs to be volatile so that on every reboot of VM, original root disk is dettached then destroyed and a fresh root disk is created and attached to VM") + private Boolean isVolatile; + @Parameter(name=ApiConstants.STORAGE_TYPE, type=CommandType.STRING, description="the storage type of the service offering. Values are local and shared.") private String storageType; @@ -106,11 +109,15 @@ public class CreateServiceOfferingCmd extends BaseCmd { } public Boolean getOfferHa() { - return offerHa; + return offerHa == null ? false : offerHa; } public Boolean GetLimitCpuUse() { - return limitCpuUse; + return limitCpuUse == null ? false : limitCpuUse; + } + + public Boolean getVolatileVm() { + return isVolatile == null ? false : isVolatile; } public String getStorageType() { diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/ArchiveAlertsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/ArchiveAlertsCmd.java new file mode 100644 index 00000000000..2a1a47a13ed --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/ArchiveAlertsCmd.java @@ -0,0 +1,100 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.admin.resource; + +import java.util.Date; +import java.util.List; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.AlertResponse; +import org.apache.cloudstack.api.response.ConditionResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.log4j.Logger; + +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.user.Account; + +@APICommand(name = "archiveAlerts", description = "Archive one or more alerts.", responseObject = SuccessResponse.class) +public class ArchiveAlertsCmd extends BaseCmd { + + public static final Logger s_logger = Logger.getLogger(ArchiveAlertsCmd.class.getName()); + + private static final String s_name = "archivealertsresponse"; + + // /////////////////////////////////////////////////// + // ////////////// API parameters ///////////////////// + // /////////////////////////////////////////////////// + + @Parameter(name = ApiConstants.IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = AlertResponse.class, + description = "the IDs of the alerts") + private List ids; + + @Parameter(name=ApiConstants.OLDER_THAN, type=CommandType.DATE, description="archive alerts older than this date (use format \"yyyy-MM-dd\")") + private Date olderThan; + + @Parameter(name = ApiConstants.TYPE, type = CommandType.STRING, description = "archive by alert type") + private String type; + + // /////////////////////////////////////////////////// + // ///////////////// Accessors /////////////////////// + // /////////////////////////////////////////////////// + + public List getIds() { + return ids; + } + + public Date getOlderThan() { + return olderThan; + } + + public String getType() { + return type; + } + + // /////////////////////////////////////////////////// + // ///////////// API Implementation/////////////////// + // /////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute() { + if(ids == null && type == null && olderThan == null) { + throw new InvalidParameterValueException("either ids, type or olderthan must be specified"); + } + boolean result = _mgr.archiveAlerts(this); + if (result) { + SuccessResponse response = new SuccessResponse(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Unable to archive Alerts, one or more parameters has invalid values"); + } + } +} diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/DeleteAlertsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/DeleteAlertsCmd.java new file mode 100644 index 00000000000..f03793c4f6d --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/DeleteAlertsCmd.java @@ -0,0 +1,99 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.admin.resource; + +import java.util.Date; +import java.util.List; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.AlertResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.log4j.Logger; + +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.user.Account; + +@APICommand(name = "deleteAlerts", description = "Delete one or more alerts.", responseObject = SuccessResponse.class) +public class DeleteAlertsCmd extends BaseCmd { + + public static final Logger s_logger = Logger.getLogger(DeleteAlertsCmd.class.getName()); + + private static final String s_name = "deletealertsresponse"; + + // /////////////////////////////////////////////////// + // ////////////// API parameters ///////////////////// + // /////////////////////////////////////////////////// + + @Parameter(name = ApiConstants.IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = AlertResponse.class, + description = "the IDs of the alerts") + private List ids; + + @Parameter(name=ApiConstants.OLDER_THAN, type=CommandType.DATE, description="delete alerts older than (including) this date (use format \"yyyy-MM-dd\")") + private Date olderThan; + + @Parameter(name = ApiConstants.TYPE, type = CommandType.STRING, description = "delete by alert type") + private String type; + + // /////////////////////////////////////////////////// + // ///////////////// Accessors /////////////////////// + // /////////////////////////////////////////////////// + + public List getIds() { + return ids; + } + + public Date getOlderThan() { + return olderThan; + } + + public String getType() { + return type; + } + + // /////////////////////////////////////////////////// + // ///////////// API Implementation/////////////////// + // /////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute() { + if(ids == null && type == null && olderThan == null) { + throw new InvalidParameterValueException("either ids, type or olderthan must be specified"); + } + boolean result = _mgr.deleteAlerts(this); + if (result) { + SuccessResponse response = new SuccessResponse(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Unable to delete Alerts, one or more parameters has invalid values"); + } + } +} diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java index c2cde163eba..b049f66f648 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java @@ -22,8 +22,8 @@ import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.cloudstack.api.response.DomainRouterResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.log4j.Logger; import com.cloud.network.router.VirtualRouter; @@ -42,7 +42,7 @@ public class UpgradeRouterCmd extends BaseCmd { required=true, description="The ID of the router") private Long id; - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.UUID, entityType = DiskOfferingResponse.class, + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.UUID, entityType = ServiceOfferingResponse.class, required=true, description="the service offering ID to apply to the domain router") private Long serviceOfferingId; diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java index a3497a89f98..b86784ed0b0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java @@ -36,6 +36,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.storage.StoragePool; import com.cloud.user.Account; + @SuppressWarnings("rawtypes") @APICommand(name = "createStoragePool", description="Creates a storage pool.", responseObject=StoragePoolResponse.class) public class CreateStoragePoolCmd extends BaseCmd { @@ -48,7 +49,7 @@ public class CreateStoragePoolCmd extends BaseCmd { ///////////////////////////////////////////////////// @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType = ClusterResponse.class, - required=true, description="the cluster ID for the storage pool") + description="the cluster ID for the storage pool") private Long clusterId; @Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, description="the details for the storage pool") @@ -58,7 +59,7 @@ public class CreateStoragePoolCmd extends BaseCmd { private String storagePoolName; @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType = PodResponse.class, - required=true, description="the Pod ID for the storage pool") + description="the Pod ID for the storage pool") private Long podId; @Parameter(name=ApiConstants.TAGS, type=CommandType.STRING, description="the tags for the storage pool") @@ -70,6 +71,14 @@ public class CreateStoragePoolCmd extends BaseCmd { @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, required=true, description="the Zone ID for the storage pool") private Long zoneId; + + @Parameter(name=ApiConstants.PROVIDER, type=CommandType.STRING, + required=false, description="the storage provider uuid") + private String storageProviderUuid; + + @Parameter(name=ApiConstants.SCOPE, type=CommandType.STRING, + required=false, description="the scope of the storage: cluster or zone") + private String scope; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -102,6 +111,14 @@ public class CreateStoragePoolCmd extends BaseCmd { public Long getZoneId() { return zoneId; } + + public String getStorageProviderUuid() { + return this.storageProviderUuid; + } + + public String getScope() { + return this.scope; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java index a70d927f020..e91d0053c64 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java @@ -23,7 +23,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; -import org.apache.cloudstack.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.SystemVmResponse; import org.apache.log4j.Logger; @@ -48,7 +48,7 @@ public class UpgradeSystemVMCmd extends BaseCmd { required=true, description="The ID of the system vm") private Long id; - @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.UUID, entityType=DiskOfferingResponse.class, + @Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.UUID, entityType=ServiceOfferingResponse.class, required=true, description="the service offering ID to apply to the system vm") private Long serviceOfferingId; diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java similarity index 93% rename from server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java index 8728959017f..48424fef246 100644 --- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficMonitorCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.command.admin.usage; import javax.inject.Inject; @@ -30,7 +30,6 @@ import org.apache.log4j.Logger; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; -import com.cloud.network.NetworkUsageManager; import com.cloud.user.Account; import com.cloud.utils.exception.CloudRuntimeException; @@ -38,7 +37,6 @@ import com.cloud.utils.exception.CloudRuntimeException; public class AddTrafficMonitorCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddTrafficMonitorCmd.class.getName()); private static final String s_name = "addtrafficmonitorresponse"; - @Inject NetworkUsageManager networkUsageMgr; ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -94,8 +92,8 @@ public class AddTrafficMonitorCmd extends BaseCmd { @Override public void execute(){ try { - Host trafficMonitor = networkUsageMgr.addTrafficMonitor(this); - TrafficMonitorResponse response = networkUsageMgr.getApiResponse(trafficMonitor); + Host trafficMonitor = _networkUsageService.addTrafficMonitor(this); + TrafficMonitorResponse response = _responseGenerator.createTrafficMonitorResponse(trafficMonitor); response.setObjectName("trafficmonitor"); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java index 081d0be9e24..e3bb299dc30 100644 --- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficMonitorCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.command.admin.usage; import javax.inject.Inject; @@ -29,14 +29,12 @@ import org.apache.cloudstack.api.response.SuccessResponse; import org.apache.log4j.Logger; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.network.NetworkUsageManager; import com.cloud.user.Account; @APICommand(name = "deleteTrafficMonitor", description="Deletes an traffic monitor host.", responseObject = SuccessResponse.class) public class DeleteTrafficMonitorCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName()); private static final String s_name = "deletetrafficmonitorresponse"; - @Inject NetworkUsageManager _networkUsageMgr; ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -71,7 +69,7 @@ public class DeleteTrafficMonitorCmd extends BaseCmd { @Override public void execute(){ try { - boolean result = _networkUsageMgr.deleteTrafficMonitor(this); + boolean result = _networkUsageService.deleteTrafficMonitor(this); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); response.setResponseName(getCommandName()); diff --git a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java similarity index 94% rename from server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java index 4206cf82885..13710f97490 100644 --- a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/GenerateUsageRecordsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.command.admin.usage; import java.util.Date; @@ -24,7 +24,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.SuccessResponse; -import com.cloud.server.ManagementServerExt; import com.cloud.user.Account; @APICommand(name = "generateUsageRecords", description="Generates usage records. This will generate records only if there any records to be generated, i.e if the scheduled usage job was not run or failed", responseObject=SuccessResponse.class) @@ -79,8 +78,7 @@ public class GenerateUsageRecordsCmd extends BaseCmd { @Override public void execute(){ - ManagementServerExt _mgrExt = (ManagementServerExt)_mgr; - boolean result = _mgrExt.generateUsageRecords(this); + boolean result = _usageService.generateUsageRecords(this); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java new file mode 100644 index 00000000000..f4960dd0e08 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java @@ -0,0 +1,126 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.admin.usage; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.AccountResponse; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.ProjectResponse; +import org.apache.cloudstack.api.response.UsageRecordResponse; +import org.apache.cloudstack.usage.Usage; +import org.apache.log4j.Logger; + +@APICommand(name = "listUsageRecords", description="Lists usage records for accounts", responseObject=UsageRecordResponse.class) +public class GetUsageRecordsCmd extends BaseListCmd { + public static final Logger s_logger = Logger.getLogger(GetUsageRecordsCmd.class.getName()); + + private static final String s_name = "listusagerecordsresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.ACCOUNT, type=CommandType.STRING, description="List usage records for the specified user.") + private String accountName; + + @Parameter(name=ApiConstants.DOMAIN_ID, type=CommandType.UUID, entityType = DomainResponse.class, + description="List usage records for the specified domain.") + private Long domainId; + + @Parameter(name=ApiConstants.END_DATE, type=CommandType.DATE, required=true, description="End date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-03.") + private Date endDate; + + @Parameter(name=ApiConstants.START_DATE, type=CommandType.DATE, required=true, description="Start date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-01.") + private Date startDate; + + @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType = AccountResponse.class, + description="List usage records for the specified account") + private Long accountId; + + @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, + description="List usage records for specified project") + private Long projectId; + + @Parameter(name=ApiConstants.TYPE, type=CommandType.LONG, description="List usage records for the specified usage type") + private Long usageType; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public String getAccountName() { + return accountName; + } + + public Long getDomainId() { + return domainId; + } + + public Date getEndDate() { + return endDate; + } + + public Date getStartDate() { + return startDate; + } + + public Long getAccountId() { + return accountId; + } + + public Long getUsageType() { + return usageType; + } + + public Long getProjectId() { + return projectId; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public void execute(){ + List usageRecords = _usageService.getUsageRecords(this); + ListResponse response = new ListResponse(); + List usageResponses = new ArrayList(); + for(Usage usageRecord: usageRecords){ + UsageRecordResponse usageResponse = _responseGenerator.createUsageResponse(usageRecord); + usageResponse.setObjectName("usagerecord"); + usageResponses.add(usageResponse); + } + + response.setResponses(usageResponses); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } +} diff --git a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java similarity index 91% rename from server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java index 645bf3b7307..e8e3b22c15b 100644 --- a/server/src/com/cloud/api/commands/ListTrafficMonitorsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListTrafficMonitorsCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.command.admin.usage; import java.util.ArrayList; import java.util.List; @@ -32,7 +32,6 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import com.cloud.host.Host; -import com.cloud.network.NetworkUsageManager; @APICommand(name = "listTrafficMonitors", description="List traffic monitor Hosts.", responseObject = TrafficMonitorResponse.class) @@ -40,7 +39,6 @@ public class ListTrafficMonitorsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); private static final String s_name = "listtrafficmonitorsresponse"; - @Inject NetworkUsageManager networkUsageMgr; ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -68,12 +66,12 @@ public class ListTrafficMonitorsCmd extends BaseListCmd { @Override public void execute(){ - List trafficMonitors = networkUsageMgr.listTrafficMonitors(this); + List trafficMonitors = _networkUsageService.listTrafficMonitors(this); ListResponse listResponse = new ListResponse(); List responses = new ArrayList(); for (Host trafficMonitor : trafficMonitors) { - TrafficMonitorResponse response = networkUsageMgr.getApiResponse(trafficMonitor); + TrafficMonitorResponse response = _responseGenerator.createTrafficMonitorResponse(trafficMonitor); response.setObjectName("trafficmonitor"); response.setResponseName(getCommandName()); responses.add(response); diff --git a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java similarity index 90% rename from server/src/com/cloud/api/commands/ListUsageTypesCmd.java rename to api/src/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java index dfa5dc1bb20..bc029117350 100644 --- a/server/src/com/cloud/api/commands/ListUsageTypesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/ListUsageTypesCmd.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.api.commands; +package org.apache.cloudstack.api.command.admin.usage; import java.util.List; @@ -23,7 +23,6 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.response.ListResponse; -import com.cloud.server.ManagementServerExt; import org.apache.cloudstack.api.response.UsageTypeResponse; import com.cloud.user.Account; @@ -43,8 +42,7 @@ public class ListUsageTypesCmd extends BaseCmd { @Override public void execute() { - ManagementServerExt _mgrExt = (ManagementServerExt)_mgr; - List result = _mgrExt.listUsageTypes(); + List result = _usageService.listUsageTypes(); ListResponse response = new ListResponse(); response.setResponses(result); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java index d1f72c45dd7..6ea8d9b20cb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java @@ -65,12 +65,6 @@ public class CreateUserCmd extends BaseCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required=true, description="Unique username.") private String username; - @Parameter(name=ApiConstants.USER_ID, type=CommandType.STRING, description="User UUID, required for adding account from another Region") - private String userUUID; - - @Parameter(name=ApiConstants.REGION_ID, type=CommandType.INTEGER, description="Id of the Region creating the User") - private Integer regionId; - ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -107,14 +101,6 @@ public class CreateUserCmd extends BaseCmd { return username; } - public String getUserUUID() { - return userUUID; - } - - public Integer getRegionId() { - return regionId; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -146,7 +132,7 @@ public class CreateUserCmd extends BaseCmd { @Override public void execute(){ UserContext.current().setEventDetails("UserName: "+getUserName()+", FirstName :"+getFirstName()+", LastName: "+getLastName()); - User user = _accountService.createUser(getUserName(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimezone(), getAccountName(), getDomainId(), getUserUUID(), getRegionId()); + User user = _accountService.createUser(getUserName(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimezone(), getAccountName(), getDomainId()); if (user != null) { UserResponse response = _responseGenerator.createUserResponse(user); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java index e8f671de1b9..bb37d085c8e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java @@ -45,11 +45,8 @@ public class DeleteUserCmd extends BaseCmd { @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType=UserResponse.class, required=true, description="Deletes a user") private Long id; - @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region") - private Boolean isPropagate; - @Inject RegionService _regionService; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -58,10 +55,6 @@ public class DeleteUserCmd extends BaseCmd { return id; } - public Boolean getIsPropagate() { - return isPropagate; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java index 95013ec30bc..6eaa46bed30 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java @@ -49,11 +49,8 @@ public class DisableUserCmd extends BaseAsyncCmd { required=true, description="Disables user by user ID.") private Long id; - @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region") - private Boolean isPropagate; - @Inject RegionService _regionService; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -62,10 +59,6 @@ public class DisableUserCmd extends BaseAsyncCmd { return id; } - public Boolean getIsPropagate() { - return isPropagate; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -100,7 +93,7 @@ public class DisableUserCmd extends BaseAsyncCmd { public void execute(){ UserContext.current().setEventDetails("UserId: "+getId()); UserAccount user = _regionService.disableUser(this); - + if (user != null){ UserResponse response = _responseGenerator.createUserResponse(user); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java index c1ba9003b05..382f67c98de 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java @@ -46,11 +46,8 @@ public class EnableUserCmd extends BaseCmd { required=true, description="Enables user by user ID.") private Long id; - @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region") - private Boolean isPropagate; - @Inject RegionService _regionService; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -59,10 +56,6 @@ public class EnableUserCmd extends BaseCmd { return id; } - public Boolean getIsPropagate() { - return isPropagate; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -86,7 +79,7 @@ public class EnableUserCmd extends BaseCmd { public void execute(){ UserContext.current().setEventDetails("UserId: "+getId()); UserAccount user = _regionService.enableUser(this); - + if (user != null){ UserResponse response = _responseGenerator.createUserResponse(user); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java index ee59d07cb79..1f31662e8ca 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java @@ -71,11 +71,8 @@ public class UpdateUserCmd extends BaseCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, description="Unique username") private String username; - @Parameter(name=ApiConstants.IS_PROPAGATE, type=CommandType.BOOLEAN, description="True if command is sent from another Region") - private Boolean isPropagate; - @Inject RegionService _regionService; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -116,10 +113,6 @@ public class UpdateUserCmd extends BaseCmd { return username; } - public Boolean getIsPropagate() { - return isPropagate; - } - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -143,7 +136,7 @@ public class UpdateUserCmd extends BaseCmd { public void execute(){ UserContext.current().setEventDetails("UserId: "+getId()); UserAccount user = _regionService.updateUser(this); - + if (user != null){ UserResponse response = _responseGenerator.createUserResponse(user); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java index c5037dfe0b5..541da1ece50 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java @@ -75,7 +75,7 @@ public class CreateVlanIpRangeCmd extends BaseCmd { description="optional parameter. Have to be specified for Direct Untagged vlan only.") private Long podId; - @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, required=true, description="the beginning IP address in the VLAN IP range") + @Parameter(name=ApiConstants.START_IP, type=CommandType.STRING, description="the beginning IP address in the VLAN IP range") private String startIp; @Parameter(name=ApiConstants.VLAN, type=CommandType.STRING, description="the ID or VID of the VLAN. If not specified," + @@ -94,6 +94,19 @@ public class CreateVlanIpRangeCmd extends BaseCmd { description="the physical network id") private Long physicalNetworkId; + @Parameter(name=ApiConstants.START_IPV6, type=CommandType.STRING, description="the beginning IPv6 address in the IPv6 network range") + private String startIpv6; + + @Parameter(name=ApiConstants.END_IPV6, type=CommandType.STRING, description="the ending IPv6 address in the IPv6 network range") + private String endIpv6; + + @Parameter(name=ApiConstants.IP6_GATEWAY, type=CommandType.STRING, description="the gateway of the IPv6 network. Required " + + "for Shared networks and Isolated networks when it belongs to VPC") + private String ip6Gateway; + + @Parameter(name=ApiConstants.IP6_CIDR, type=CommandType.STRING, description="the CIDR of IPv6 network, must be at least /64") + private String ip6Cidr; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -141,6 +154,35 @@ public class CreateVlanIpRangeCmd extends BaseCmd { public Long getProjectId() { return projectId; } + + public String getStartIpv6() { + if (startIpv6 == null) { + return null; + } + return startIpv6.toLowerCase(); + } + + public String getEndIpv6() { + if (endIpv6 == null) { + return null; + } + return endIpv6.toLowerCase(); + } + + public String getIp6Gateway() { + if (ip6Gateway == null) { + return null; + } + return ip6Gateway.toLowerCase(); + } + + public String getIp6Cidr() { + if (ip6Cidr == null) { + return null; + } + return ip6Cidr.toLowerCase(); + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -153,7 +195,6 @@ public class CreateVlanIpRangeCmd extends BaseCmd { return physicalNetworkId; } - @Override public String getCommandName() { return s_name; diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java index f08cb16b23d..3c7956b7d7e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java @@ -16,7 +16,7 @@ // under the License. package org.apache.cloudstack.api.command.admin.vpc; -import java.util.List; +import java.util.*; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; @@ -52,6 +52,10 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ description="services supported by the vpc offering") private List supportedServices; + @Parameter(name = ApiConstants.SERVICE_PROVIDER_LIST, type = CommandType.MAP, description = "provider to service mapping. " + + "If not specified, the provider for the service will be mapped to the default provider on the physical network") + private Map serviceProviderList; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -68,10 +72,33 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ return supportedServices; } + public Map> getServiceProviders() { + Map> serviceProviderMap = null; + if (serviceProviderList != null && !serviceProviderList.isEmpty()) { + serviceProviderMap = new HashMap>(); + Collection servicesCollection = serviceProviderList.values(); + Iterator iter = servicesCollection.iterator(); + while (iter.hasNext()) { + HashMap services = (HashMap) iter.next(); + String service = services.get("service"); + String provider = services.get("provider"); + List providerList = null; + if (serviceProviderMap.containsKey(service)) { + providerList = serviceProviderMap.get(service); + } else { + providerList = new ArrayList(); + } + providerList.add(provider); + serviceProviderMap.put(service, providerList); + } + } + + return serviceProviderMap; + } @Override public void create() throws ResourceAllocationException { - VpcOffering vpcOff = _vpcService.createVpcOffering(getVpcOfferingName(), getDisplayText(), getSupportedServices()); + VpcOffering vpcOff = _vpcService.createVpcOffering(getVpcOfferingName(), getDisplayText(), getSupportedServices(), getServiceProviders()); if (vpcOff != null) { this.setEntityId(vpcOff.getId()); this.setEntityUuid(vpcOff.getUuid()); diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java index 1aa620ccd20..5cc905227ab 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java @@ -46,6 +46,12 @@ public class CreateZoneCmd extends BaseCmd { @Parameter(name=ApiConstants.DNS2, type=CommandType.STRING, description="the second DNS for the Zone") private String dns2; + @Parameter(name=ApiConstants.IP6_DNS1, type=CommandType.STRING, description="the first DNS for IPv6 network in the Zone") + private String ip6Dns1; + + @Parameter(name=ApiConstants.IP6_DNS2, type=CommandType.STRING, description="the second DNS for IPv6 network in the Zone") + private String ip6Dns2; + @Parameter(name=ApiConstants.GUEST_CIDR_ADDRESS, type=CommandType.STRING, description="the guest CIDR address for the Zone") private String guestCidrAddress; @@ -89,6 +95,14 @@ public class CreateZoneCmd extends BaseCmd { return dns2; } + public String getIp6Dns1() { + return ip6Dns1; + } + + public String getIp6Dns2() { + return ip6Dns2; + } + public String getGuestCidrAddress() { return guestCidrAddress; } diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java index 81bdead221e..16c334eebc8 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java @@ -48,6 +48,12 @@ public class UpdateZoneCmd extends BaseCmd { @Parameter(name=ApiConstants.DNS2, type=CommandType.STRING, description="the second DNS for the Zone") private String dns2; + @Parameter(name=ApiConstants.IP6_DNS1, type=CommandType.STRING, description="the first DNS for IPv6 network in the Zone") + private String ip6Dns1; + + @Parameter(name=ApiConstants.IP6_DNS2, type=CommandType.STRING, description="the second DNS for IPv6 network in the Zone") + private String ip6Dns2; + @Parameter(name=ApiConstants.GUEST_CIDR_ADDRESS, type=CommandType.STRING, description="the guest CIDR address for the Zone") private String guestCidrAddress; @@ -105,6 +111,14 @@ public class UpdateZoneCmd extends BaseCmd { return id; } + public String getIp6Dns1() { + return ip6Dns1; + } + + public String getIp6Dns2() { + return ip6Dns2; + } + public String getInternalDns1() { return internalDns1; } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java index ecfd8df0ceb..87d4466e79a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java @@ -26,7 +26,7 @@ import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; -import org.apache.cloudstack.api.response.DiskOfferingResponse; +import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.ZoneResponse; @@ -56,7 +56,7 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd { required = true, description = "availability zone for the auto deployed virtual machine") private Long zoneId; - @Parameter(name = ApiConstants.SERVICE_OFFERING_ID, type = CommandType.UUID, entityType = DiskOfferingResponse.class, + @Parameter(name = ApiConstants.SERVICE_OFFERING_ID, type = CommandType.UUID, entityType = ServiceOfferingResponse.class, required = true, description = "the service offering of the auto deployed virtual machine") private Long serviceOfferingId; diff --git a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java index 85011175536..a30e26cfd8b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java @@ -52,6 +52,12 @@ public class ListCapabilitiesCmd extends BaseCmd { response.setProjectInviteRequired((Boolean)capabilities.get("projectInviteRequired")); response.setAllowUsersCreateProjects((Boolean)capabilities.get("allowusercreateprojects")); response.setDiskOffMaxSize((Long)capabilities.get("customDiskOffMaxSize")); + if (capabilities.containsKey("apiLimitInterval")) { + response.setApiLimitInterval((Integer) capabilities.get("apiLimitInterval")); + } + if (capabilities.containsKey("apiLimitMax")) { + response.setApiLimitMax((Integer) capabilities.get("apiLimitMax")); + } response.setObjectName("capability"); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java new file mode 100644 index 00000000000..481607c9f0b --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/event/ArchiveEventsCmd.java @@ -0,0 +1,105 @@ +//Licensed to the Apache Software Foundation (ASF) under one +//or more contributor license agreements. See the NOTICE file +//distributed with this work for additional information +//regarding copyright ownership. The ASF licenses this file +//to you under the Apache License, Version 2.0 (the +//"License"); you may not use this file except in compliance +//with the License. You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, +//software distributed under the License is distributed on an +//"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +//KIND, either express or implied. See the License for the +//specific language governing permissions and limitations +//under the License. +package org.apache.cloudstack.api.command.user.event; + +import java.util.Date; +import java.util.List; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.AlertResponse; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.log4j.Logger; + +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.user.Account; +import com.cloud.user.UserContext; + +@APICommand(name = "archiveEvents", description = "Archive one or more events.", responseObject = SuccessResponse.class) +public class ArchiveEventsCmd extends BaseCmd { + + public static final Logger s_logger = Logger.getLogger(ArchiveEventsCmd.class.getName()); + + private static final String s_name = "archiveeventsresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name = ApiConstants.IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = EventResponse.class, + description = "the IDs of the events") + private List ids; + + @Parameter(name=ApiConstants.OLDER_THAN, type=CommandType.DATE, description="archive events older than (including) this date (use format \"yyyy-MM-dd\" or the new format \"yyyy-MM-dd HH:mm:ss\")") + private Date olderThan; + + @Parameter(name = ApiConstants.TYPE, type = CommandType.STRING, description = "archive by event type") + private String type; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public List getIds() { + return ids; + } + + public Date getOlderThan() { + return olderThan; + } + + public String getType() { + return type; + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + Account account = UserContext.current().getCaller(); + if (account != null) { + return account.getId(); + } + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute() { + if(ids == null && type == null && olderThan == null) { + throw new InvalidParameterValueException("either ids, type or olderthan must be specified"); + } + boolean result = _mgr.archiveEvents(this); + if (result) { + SuccessResponse response = new SuccessResponse(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Unable to archive Events, one or more parameters has invalid values"); + } + } +} diff --git a/api/src/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java b/api/src/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java new file mode 100644 index 00000000000..55ca92a5dfe --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/event/DeleteEventsCmd.java @@ -0,0 +1,105 @@ +//Licensed to the Apache Software Foundation (ASF) under one +//or more contributor license agreements. See the NOTICE file +//distributed with this work for additional information +//regarding copyright ownership. The ASF licenses this file +//to you under the Apache License, Version 2.0 (the +//"License"); you may not use this file except in compliance +//with the License. You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, +//software distributed under the License is distributed on an +//"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +//KIND, either express or implied. See the License for the +//specific language governing permissions and limitations +//under the License. +package org.apache.cloudstack.api.command.user.event; + +import java.util.Date; +import java.util.List; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.AlertResponse; +import org.apache.cloudstack.api.response.EventResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.log4j.Logger; + +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.user.Account; +import com.cloud.user.UserContext; + +@APICommand(name = "deleteEvents", description = "Delete one or more events.", responseObject = SuccessResponse.class) +public class DeleteEventsCmd extends BaseCmd { + + public static final Logger s_logger = Logger.getLogger(DeleteEventsCmd.class.getName()); + + private static final String s_name = "deleteeventsresponse"; + + // /////////////////////////////////////////////////// + // ////////////// API parameters ///////////////////// + // /////////////////////////////////////////////////// + + @Parameter(name = ApiConstants.IDS, type = CommandType.LIST, collectionType = CommandType.UUID, entityType = EventResponse.class, + description = "the IDs of the events") + private List ids; + + @Parameter(name=ApiConstants.OLDER_THAN, type=CommandType.DATE, description="delete events older than (including) this date (use format \"yyyy-MM-dd\" or the new format \"yyyy-MM-dd HH:mm:ss\")") + private Date olderThan; + + @Parameter(name = ApiConstants.TYPE, type = CommandType.STRING, description = "delete by event type") + private String type; + + // /////////////////////////////////////////////////// + // ///////////////// Accessors /////////////////////// + // /////////////////////////////////////////////////// + + public List getIds() { + return ids; + } + + public Date getOlderThan() { + return olderThan; + } + + public String getType() { + return type; + } + + // /////////////////////////////////////////////////// + // ///////////// API Implementation/////////////////// + // /////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + Account account = UserContext.current().getCaller(); + if (account != null) { + return account.getId(); + } + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute() { + if(ids == null && type == null && olderThan == null) { + throw new InvalidParameterValueException("either ids, type or enddate must be specified"); + } + boolean result = _mgr.deleteEvents(this); + if (result) { + SuccessResponse response = new SuccessResponse(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Unable to delete Events, one or more parameters has invalid values"); + } + } +} diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index d0c49ff8736..b7cb4712047 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -324,7 +324,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal @Override public TrafficType getTrafficType() { - return null; + return FirewallRule.TrafficType.Ingress; } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index 39ab812909d..40128526ce0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -94,6 +94,9 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P description="The network of the vm the Port Forwarding rule will be created for. " + "Required when public Ip address is not associated with any Guest network yet (VPC case)") private Long networkId; + @Parameter(name = ApiConstants.VM_GUEST_IP, type = CommandType.STRING, required = false, + description = "VM guest nic Secondary ip address for the port forwarding rule") + private String vmSecondaryIp; // /////////////////////////////////////////////////// // ///////////////// Accessors /////////////////////// @@ -104,6 +107,13 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P return ipAddressId; } + public Ip getVmSecondaryIp() { + if (vmSecondaryIp == null) { + return null; + } + return new Ip(vmSecondaryIp); + } + @Override public String getProtocol() { return protocol.trim(); @@ -300,8 +310,15 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P throw new InvalidParameterValueException("Parameter cidrList is deprecated; if you need to open firewall rule for the specific cidr, please refer to createFirewallRule command"); } + Ip privateIp = getVmSecondaryIp(); + if (privateIp != null) { + if ( !privateIp.isIp4()) { + throw new InvalidParameterValueException("Invalid vm ip address"); + } + } + try { - PortForwardingRule result = _rulesService.createPortForwardingRule(this, virtualMachineId, getOpenFirewall()); + PortForwardingRule result = _rulesService.createPortForwardingRule(this, virtualMachineId, privateIp, getOpenFirewall()); setEntityId(result.getId()); setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException ex) { diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java index a4a37c8fd58..284d5530846 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java @@ -88,6 +88,10 @@ public class RegisterIsoCmd extends BaseCmd { @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, description="Register iso for the project") private Long projectId; + + @Parameter(name=ApiConstants.IMAGE_STORE_UUID, type=CommandType.STRING, + description="Image store uuid") + private String imageStoreUuid; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -140,6 +144,10 @@ public class RegisterIsoCmd extends BaseCmd { public String getChecksum() { return checksum; } + + public String getImageStoreUuid() { + return this.imageStoreUuid; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java index ce6ea1663b9..a0ec68ef5dd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java @@ -59,6 +59,9 @@ public class EnableStaticNatCmd extends BaseCmd{ description="The network of the vm the static nat will be enabled for." + " Required when public Ip address is not associated with any Guest network yet (VPC case)") private Long networkId; + @Parameter(name = ApiConstants.VM_GUEST_IP, type = CommandType.STRING, required = false, + description = "VM guest nic Secondary ip address for the port forwarding rule") + private String vmSecondaryIp; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -72,6 +75,13 @@ public class EnableStaticNatCmd extends BaseCmd{ return virtualMachineId; } + public String getVmSecondaryIp() { + if (vmSecondaryIp == null) { + return null; + } + return vmSecondaryIp; + } + public long getNetworkId() { IpAddress ip = _entityMgr.findById(IpAddress.class, getIpAddressId()); Long ntwkId = null; @@ -110,7 +120,7 @@ public class EnableStaticNatCmd extends BaseCmd{ @Override public void execute() throws ResourceUnavailableException{ try { - boolean result = _rulesService.enableStaticNat(ipAddressId, virtualMachineId, getNetworkId(), false); + boolean result = _rulesService.enableStaticNat(ipAddressId, virtualMachineId, getNetworkId(), false, getVmSecondaryIp()); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java index 5ec7cefb052..fc7bd9fdd3f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java @@ -268,10 +268,6 @@ public class CreateNetworkCmd extends BaseCmd { @Override // an exception thrown by createNetwork() will be caught by the dispatcher. public void execute() throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException{ - if (getStartIpv6() != null && getStartIp() != null) { - throw new InvalidParameterValueException("Cannot support dualstack at this moment!"); - } - Network result = _networkService.createGuestNetwork(this); if (result != null) { NetworkResponse response = _responseGenerator.createNetworkResponse(result); diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java index 67774075774..41aaaaada12 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java @@ -64,6 +64,9 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { description="network offering ID") private Long networkOfferingId; + @Parameter(name=ApiConstants.GUEST_VM_CIDR, type=CommandType.STRING, description="CIDR for Guest VMs,Cloudstack allocates IPs to Guest VMs only from this CIDR") + private String guestVmCidr; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -94,6 +97,10 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { } return false; } + + private String getGuestVmCidr() { + return guestVmCidr; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -125,10 +132,10 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { Network result = null; if (network.getVpcId() != null) { result = _vpcService.updateVpcGuestNetwork(getId(), getNetworkName(), getDisplayText(), callerAccount, - callerUser, getNetworkDomain(), getNetworkOfferingId(), getChangeCidr()); + callerUser, getNetworkDomain(), getNetworkOfferingId(), getChangeCidr(), getGuestVmCidr()); } else { result = _networkService.updateGuestNetwork(getId(), getNetworkName(), getDisplayText(), callerAccount, - callerUser, getNetworkDomain(), getNetworkOfferingId(), getChangeCidr()); + callerUser, getNetworkDomain(), getNetworkOfferingId(), getChangeCidr(), getGuestVmCidr()); } if (result != null) { diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java index 91728ee9cf6..f6d3a98a05d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java @@ -53,12 +53,17 @@ public class UpdateResourceCountCmd extends BaseCmd { required=true, description="If account parameter specified then updates resource counts for a specified account in this domain else update resource counts for all accounts & child domains in specified domain.") private Long domainId; - @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.INTEGER, description= "Type of resource to update. If specifies valid values are 0, 1, 2, 3, and 4. If not specified will update all resource counts" + + @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.INTEGER, description= "Type of resource to update. If specifies valid values are 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9. If not specified will update all resource counts" + "0 - Instance. Number of instances a user can create. " + "1 - IP. Number of public IP addresses a user can own. " + "2 - Volume. Number of disk volumes a user can create." + "3 - Snapshot. Number of snapshots a user can create." + - "4 - Template. Number of templates that a user can register/create.") + "4 - Template. Number of templates that a user can register/create." + + "5 - Project. Number of projects that a user can create." + + "6 - Network. Number of guest network a user can create." + + "7 - VPC. Number of VPC a user can create." + + "8 - CPU. Total number of CPU cores a user can use." + + "9 - Memory. Total Memory (in MB) a user can use." ) private Integer resourceType; @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java index 33f2574d3e1..0039f6293f7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java @@ -54,11 +54,15 @@ public class UpdateResourceLimitCmd extends BaseCmd { @Parameter(name=ApiConstants.MAX, type=CommandType.LONG, description=" Maximum resource limit.") private Long max; - @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.INTEGER, required=true, description="Type of resource to update. Values are 0, 1, 2, 3, and 4. 0 - Instance. Number of instances a user can create. " + + @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.INTEGER, required=true, description="Type of resource to update. Values are 0, 1, 2, 3, 4, 6, 7, 8 and 9. 0 - Instance. Number of instances a user can create. " + "1 - IP. Number of public IP addresses a user can own. " + "2 - Volume. Number of disk volumes a user can create." + "3 - Snapshot. Number of snapshots a user can create." + - "4 - Template. Number of templates that a user can register/create.") + "4 - Template. Number of templates that a user can register/create." + + "6 - Network. Number of guest network a user can create." + + "7 - VPC. Number of VPC a user can create." + + "8 - CPU. Total number of CPU cores a user can use." + + "9 - Memory. Total Memory (in MB) a user can use." ) private Integer resourceType; ///////////////////////////////////////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index 84fa197d12c..ba1f924fe02 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -240,7 +240,7 @@ import com.cloud.user.UserContext; @Override public void create() throws ResourceAllocationException { VirtualMachineTemplate template = null; - template = _userVmService.createPrivateTemplateRecord(this, _accountService.getAccount(getEntityOwnerId())); + template = this._templateService.createPrivateTemplateRecord(this, _accountService.getAccount(getEntityOwnerId())); if (template != null) { this.setEntityId(template.getId()); this.setEntityUuid(template.getUuid()); @@ -255,7 +255,7 @@ import com.cloud.user.UserContext; public void execute() { UserContext.current().setEventDetails("Template Id: "+getEntityId()+((getSnapshotId() == null) ? " from volume Id: " + getVolumeId() : " from snapshot Id: " + getSnapshotId())); VirtualMachineTemplate template = null; - template = _userVmService.createPrivateTemplate(this); + template = this._templateService.createPrivateTemplate(this); if (template != null){ List templateResponses; diff --git a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java index 3e98ca624ab..c9da0c28cd6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java @@ -110,7 +110,11 @@ public class RegisterTemplateCmd extends BaseCmd { @Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class, description="Register template for the project") private Long projectId; - + + @Parameter(name=ApiConstants.IMAGE_STORE_UUID, type=CommandType.STRING, + description="Image store uuid") + private String imageStoreUuid; + @Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, description="Template details in key/value pairs.") protected Map details; @@ -189,6 +193,10 @@ public class RegisterTemplateCmd extends BaseCmd { public String getTemplateTag() { return templateTag; } + + public String getImageStoreUuid() { + return this.imageStoreUuid; + } public Map getDetails() { if (details == null || details.isEmpty()) { diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java new file mode 100644 index 00000000000..0f992743f6d --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/vm/AddIpToVmNicCmd.java @@ -0,0 +1,176 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.user.vm; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.NicResponse; +import org.apache.cloudstack.api.response.NicSecondaryIpResponse; + +import com.cloud.async.AsyncJob; +import com.cloud.event.EventTypes; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.Network; +import com.cloud.user.Account; +import com.cloud.user.UserContext; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; + +@APICommand(name = "addIpToNic", description = "Assigns secondary IP to NIC", responseObject = NicSecondaryIpResponse.class) +public class AddIpToVmNicCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger.getLogger(AddIpToVmNicCmd.class.getName()); + private static final String s_name = "addiptovmnicresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + @Parameter(name=ApiConstants.NIC_ID, type=CommandType.UUID, entityType = NicResponse.class, required = true, + description="the ID of the nic to which you want to assign private IP") + private Long nicId; + + @Parameter(name = ApiConstants.IP_ADDRESS, type = CommandType.STRING, required = false, + description = "Secondary IP Address") + private String ipAddr; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public String getEntityTable() { + return "nic_secondary_ips"; + } + + public String getAccountName() { + return UserContext.current().getCaller().getAccountName(); + } + + public long getDomainId() { + return UserContext.current().getCaller().getDomainId(); + } + + private long getZoneId() { + Network ntwk = _entityMgr.findById(Network.class, getNetworkId()); + if (ntwk == null) { + throw new InvalidParameterValueException("Can't find zone id for specified"); + } + return ntwk.getDataCenterId(); + } + + public Long getNetworkId() { + Nic nic = _entityMgr.findById(Nic.class, nicId); + Long networkId = nic.getNetworkId(); + return networkId; + } + + public Long getNicId() { + return nicId; + } + + public String getIpaddress () { + if (ipAddr != null) { + return ipAddr; + } else { + return null; + } + } + @Override + public long getEntityOwnerId() { + Account caller = UserContext.current().getCaller(); + return caller.getAccountId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_NET_IP_ASSIGN; + } + + @Override + public String getEventDescription() { + return "associating ip to nic id: " + getNetworkId() + " in zone " + getZoneId(); + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + + @Override + public String getCommandName() { + return s_name; + } + + public static String getResultObjectName() { + return "addressinfo"; + } + + @Override + public void execute() throws ResourceUnavailableException, ResourceAllocationException, + ConcurrentOperationException, InsufficientCapacityException { + + UserContext.current().setEventDetails("Nic Id: " + getNicId() ); + String ip; + String SecondaryIp = null; + if ((ip = getIpaddress()) != null) { + if (!NetUtils.isValidIp(ip)) { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Invalid ip address " + ip); + } + } + + try { + SecondaryIp = _networkService.allocateSecondaryGuestIP(_accountService.getAccount(getEntityOwnerId()), getZoneId(), getNicId(), getNetworkId(), getIpaddress()); + } catch (InsufficientAddressCapacityException e) { + throw new InvalidParameterValueException("Allocating guest ip for nic failed"); + } + + if (SecondaryIp != null) { + s_logger.info("Associated ip address to NIC : " + SecondaryIp); + NicSecondaryIpResponse response = new NicSecondaryIpResponse(); + response = _responseGenerator.createSecondaryIPToNicResponse(ip, getNicId(), getNetworkId()); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to assign secondary ip to nic"); + } + } + + @Override + public String getSyncObjType() { + return BaseAsyncCmd.networkSyncObject; + } + + @Override + public Long getSyncObjId() { + return getNetworkId(); + } + + @Override + public AsyncJob.Type getInstanceType() { + return AsyncJob.Type.IpAddress; + } + +} diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java old mode 100644 new mode 100755 index 70a263d06d2..21a45f8cc7f --- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -24,6 +24,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; @@ -53,7 +54,6 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.IpAddress; import com.cloud.network.Network; import com.cloud.network.Network.IpAddresses; import com.cloud.offering.DiskOffering; @@ -103,7 +103,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { private Long domainId; //Network information - @ACL + @ACL(accessType = AccessType.UseNetwork) @Parameter(name=ApiConstants.NETWORK_IDS, type=CommandType.LIST, collectionType=CommandType.UUID, entityType=NetworkResponse.class, description="list of network ids used by virtual machine. Can't be specified with ipToNetworkList parameter") private List networkIds; @@ -306,9 +306,6 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { if (requestedIpv6 != null) { requestedIpv6 = requestedIpv6.toLowerCase(); } - if (requestedIpv6 != null) { - throw new InvalidParameterValueException("Cannot support specified IPv6 address!"); - } IpAddresses addrs = new IpAddresses(requestedIp, requestedIpv6); ipToNetworkMap.put(networkId, addrs); } @@ -388,7 +385,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); - s_logger.trace(ex); + s_logger.info(ex.getMessage(), ex); throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } } else { @@ -407,10 +404,6 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { @Override public void create() throws ResourceAllocationException{ try { - if (getIp6Address() != null) { - throw new InvalidParameterValueException("Cannot support specified IPv6 address!"); - } - //Verify that all objects exist before passing them to the service Account owner = _accountService.getActiveAccountById(getEntityOwnerId()); @@ -477,7 +470,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { } } catch (InsufficientCapacityException ex) { s_logger.info(ex); - s_logger.trace(ex); + s_logger.trace(ex.getMessage(), ex); throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java new file mode 100644 index 00000000000..9af044ebb70 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ListNicsCmd.java @@ -0,0 +1,133 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.user.vm; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.NicResponse; +import org.apache.cloudstack.api.response.UserVmResponse; + +import com.cloud.async.AsyncJob; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.user.Account; +import com.cloud.user.UserContext; +import com.cloud.vm.Nic; +import com.cloud.vm.NicSecondaryIp; + +@APICommand(name = "listNics", description = "list the vm nics IP to NIC", responseObject = NicResponse.class) +public class ListNicsCmd extends BaseListCmd { + public static final Logger s_logger = Logger.getLogger(ListNicsCmd.class.getName()); + private static final String s_name = "listnics"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.NIC_ID, type=CommandType.UUID, entityType = NicResponse.class, required = false, + description="the ID of the nic to to list IPs") + private Long nicId; + + @Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = UserVmResponse.class, required = true, + description="the ID of the vm") + private Long vmId; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public String getEntityTable() { + return "nics"; + } + + public String getAccountName() { + return UserContext.current().getCaller().getAccountName(); + } + + public long getDomainId() { + return UserContext.current().getCaller().getDomainId(); + } + + public Long getNicId() { + return nicId; + } + + public Long getVmId() { + return vmId; + } + + @Override + public long getEntityOwnerId() { + Account caller = UserContext.current().getCaller(); + return caller.getAccountId(); + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + + @Override + public String getCommandName() { + return s_name; + } + + public static String getResultObjectName() { + return "addressinfo"; + } + + @Override + public void execute() throws ResourceUnavailableException, ResourceAllocationException, + ConcurrentOperationException, InsufficientCapacityException { + + try { + List results = _networkService.listNics(this); + ListResponse response = new ListResponse(); + List resList = new ArrayList(results.size()); + for (Nic r : results) { + NicResponse resp = _responseGenerator.createNicResponse(r); + resp.setObjectName("nic"); + resList.add(resp); + } + response.setResponses(resList); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + + } catch (Exception e) { + s_logger.warn("Failed to list secondary ip address per nic "); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); + } + } + + @Override + public AsyncJob.Type getInstanceType() { + return AsyncJob.Type.IpAddress; + } + +} diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java new file mode 100644 index 00000000000..cb5e0855f64 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RemoveIpFromVmNicCmd.java @@ -0,0 +1,123 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.user.vm; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.NicSecondaryIpResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import com.cloud.async.AsyncJob; +import com.cloud.event.EventTypes; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.user.Account; +import com.cloud.user.UserContext; + +@APICommand(name = "removeIpFromNic", description="Assigns secondary IP to NIC.", responseObject=SuccessResponse.class) +public class RemoveIpFromVmNicCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger.getLogger(RemoveIpFromVmNicCmd.class.getName()); + private static final String s_name = "unassignsecondaryipaddrtonicresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, required = true, entityType = NicSecondaryIpResponse.class, + description="the ID of the secondary ip address to nic") + private long id; + + // unexposed parameter needed for events logging + @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, expose=false) + private Long ownerId; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public String getEntityTable() { + return "nic_secondary_ips"; + } + + public long getIpAddressId() { + return id; + } + + public String getAccountName() { + return UserContext.current().getCaller().getAccountName(); + } + + public long getDomainId() { + return UserContext.current().getCaller().getDomainId(); + } + + @Override + public long getEntityOwnerId() { + Account caller = UserContext.current().getCaller(); + return caller.getAccountId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_NET_IP_ASSIGN; + } + + @Override + public String getEventDescription() { + return ("Disassociating ip address with id=" + id); + } + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + public static String getResultObjectName() { + return "addressinfo"; + } + + @Override + public void execute() throws InvalidParameterValueException { + UserContext.current().setEventDetails("Ip Id: " + getIpAddressId()); + boolean result = _networkService.releaseSecondaryIpFromNic(getIpAddressId()); + if (result) { + SuccessResponse response = new SuccessResponse(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to remove secondary ip address for the nic"); + } + } + + @Override + public String getSyncObjType() { + return BaseAsyncCmd.networkSyncObject; + } + + @Override + public AsyncJob.Type getInstanceType() { + return AsyncJob.Type.IpAddress; + } + +} diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java index e98c2f2eddc..9c33f97c317 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; @@ -34,7 +35,7 @@ import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.uservm.UserVm; -@APICommand(name = "restoreVirtualMachine", description="Restore a VM to original template or specific snapshot", responseObject=UserVmResponse.class, since="3.0.0") +@APICommand(name = "restoreVirtualMachine", description="Restore a VM to original template or new template", responseObject=UserVmResponse.class, since="3.0.0") public class RestoreVMCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(RestoreVMCmd.class); private static final String s_name = "restorevmresponse"; @@ -43,6 +44,9 @@ public class RestoreVMCmd extends BaseAsyncCmd { required=true, description="Virtual Machine ID") private Long vmId; + @Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.UUID, entityType = TemplateResponse.class, description="an optional template Id to restore vm from the new template") + private Long templateId; + @Override public String getEventType() { return EventTypes.EVENT_VM_RESTORE; @@ -85,4 +89,8 @@ public class RestoreVMCmd extends BaseAsyncCmd { public long getVmId() { return vmId; } + + public Long getTemplateId() { + return templateId; + } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java new file mode 100644 index 00000000000..f0dbf16b250 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java @@ -0,0 +1,125 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.cloudstack.api.command.user.vmsnapshot; + +import java.util.logging.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VMSnapshotResponse; + +import com.cloud.event.EventTypes; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.user.UserContext; +import com.cloud.uservm.UserVm; +import com.cloud.vm.snapshot.VMSnapshot; + +@APICommand(name = "createVMSnapshot", description = "Creates snapshot for a vm.", responseObject = VMSnapshotResponse.class) +public class CreateVMSnapshotCmd extends BaseAsyncCreateCmd { + + public static final Logger s_logger = Logger + .getLogger(CreateVMSnapshotCmd.class.getName()); + private static final String s_name = "createvmsnapshotresponse"; + + @Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID, type = CommandType.UUID, required = true, entityType=UserVmResponse.class, description = "The ID of the vm") + private Long vmId; + + @Parameter(name = ApiConstants.VM_SNAPSHOT_DESCRIPTION, type = CommandType.STRING, required = false, description = "The discription of the snapshot") + private String description; + + @Parameter(name = ApiConstants.VM_SNAPSHOT_DISPLAYNAME, type = CommandType.STRING, required = false, description = "The display name of the snapshot") + private String displayName; + + @Parameter(name = ApiConstants.VM_SNAPSHOT_MEMORY, type = CommandType.BOOLEAN, required = false, description = "snapshot memory if true") + private Boolean snapshotMemory; + + public Boolean snapshotMemory() { + if (snapshotMemory == null) { + return false; + } else { + return snapshotMemory; + } + } + + public String getDisplayName() { + return displayName; + } + + public String getDescription() { + return description; + } + + public Long getVmId() { + return vmId; + } + + @Override + public void create() throws ResourceAllocationException { + VMSnapshot vmsnapshot = _vmSnapshotService.allocVMSnapshot(getVmId(),getDisplayName(),getDescription(),snapshotMemory()); + if (vmsnapshot != null) { + this.setEntityId(vmsnapshot.getId()); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, + "Failed to create vm snapshot"); + } + } + + @Override + public String getEventDescription() { + return "creating snapshot for VM: " + getVmId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_VM_SNAPSHOT_CREATE; + } + + @Override + public void execute() { + UserContext.current().setEventDetails("VM Id: " + getVmId()); + VMSnapshot result = _vmSnapshotService.creatVMSnapshot(getVmId(),getEntityId()); + if (result != null) { + VMSnapshotResponse response = _responseGenerator + .createVMSnapshotResponse(result); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException( + ApiErrorCode.INTERNAL_ERROR, + "Failed to create vm snapshot due to an internal error creating snapshot for vm " + + getVmId()); + } + } + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + UserVm userVM = _userVmService.getUserVm(vmId); + return userVM.getAccountId(); + } + +} diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java new file mode 100644 index 00000000000..a2b2c08b381 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/DeleteVMSnapshotCmd.java @@ -0,0 +1,85 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.cloudstack.api.command.user.vmsnapshot; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.VMSnapshotResponse; +import org.apache.log4j.Logger; + +import com.cloud.event.EventTypes; +import com.cloud.user.Account; +import com.cloud.user.UserContext; +import com.cloud.vm.snapshot.VMSnapshot; + +@APICommand(name="deleteVMSnapshot", description = "Deletes a vmsnapshot.", responseObject = SuccessResponse.class) +public class DeleteVMSnapshotCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger + .getLogger(DeleteVMSnapshotCmd.class.getName()); + private static final String s_name = "deletevmsnapshotresponse"; + + @Parameter(name=ApiConstants.VM_SNAPSHOT_ID, type=CommandType.UUID, entityType=VMSnapshotResponse.class, + required=true, description="The ID of the VM snapshot") + private Long id; + + public Long getId() { + return id; + } + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + VMSnapshot vmSnapshot = _entityMgr.findById(VMSnapshot.class, getId()); + if (vmSnapshot != null) { + return vmSnapshot.getAccountId(); + } + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute() { + UserContext.current().setEventDetails("vmsnapshot id: " + getId()); + boolean result = _vmSnapshotService.deleteVMSnapshot(getId()); + if (result) { + SuccessResponse response = new SuccessResponse(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete vm snapshot"); + } + } + + @Override + public String getEventDescription() { + return "Delete VM snapshot: " + getId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_VM_SNAPSHOT_DELETE; + } + +} diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java new file mode 100644 index 00000000000..936d348950d --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java @@ -0,0 +1,89 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.cloudstack.api.command.user.vmsnapshot; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VMSnapshotResponse; + +import com.cloud.vm.snapshot.VMSnapshot; + +@APICommand(name="listVMSnapshot", description = "List virtual machine snapshot by conditions", responseObject = VMSnapshotResponse.class) +public class ListVMSnapshotCmd extends BaseListTaggedResourcesCmd { + + private static final String s_name = "listvmsnapshotresponse"; + + @Parameter(name=ApiConstants.VM_SNAPSHOT_ID, type=CommandType.UUID, entityType=VMSnapshotResponse.class, + description="The ID of the VM snapshot") + private Long id; + + @Parameter(name=ApiConstants.STATE, type=CommandType.STRING, description="state of the virtual machine snapshot") + private String state; + + @Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID, type = CommandType.UUID, entityType=UserVmResponse.class, description = "the ID of the vm") + private Long vmId; + + @Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "lists snapshot by snapshot name or display name") + private String vmSnapshotName; + + public String getState() { + return state; + } + + public String getVmSnapshotName() { + return vmSnapshotName; + } + + public Long getVmId() { + return vmId; + } + + public Long getId() { + return id; + } + + @Override + public void execute() { + List result = _vmSnapshotService + .listVMSnapshots(this); + ListResponse response = new ListResponse(); + List snapshotResponses = new ArrayList(); + for (VMSnapshot r : result) { + VMSnapshotResponse vmSnapshotResponse = _responseGenerator + .createVMSnapshotResponse(r); + vmSnapshotResponse.setObjectName("vmSnapshot"); + snapshotResponses.add(vmSnapshotResponse); + } + response.setResponses(snapshotResponses); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } + + @Override + public String getCommandName() { + return s_name; + } + +} diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToSnapshotCmd.java new file mode 100644 index 00000000000..d7b4599d6c4 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/RevertToSnapshotCmd.java @@ -0,0 +1,92 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.user.vmsnapshot; + +import java.util.logging.Logger; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VMSnapshotResponse; + +import com.cloud.event.EventTypes; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.user.Account; +import com.cloud.user.UserContext; +import com.cloud.uservm.UserVm; +import com.cloud.vm.snapshot.VMSnapshot; + +@APICommand(name = "revertToSnapshot",description = "Revert VM from a vmsnapshot.", responseObject = UserVmResponse.class) +public class RevertToSnapshotCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger + .getLogger(RevertToSnapshotCmd.class.getName()); + private static final String s_name = "reverttosnapshotresponse"; + + @Parameter(name = ApiConstants.VM_SNAPSHOT_ID, type = CommandType.UUID, required = true,entityType=VMSnapshotResponse.class,description = "The ID of the vm snapshot") + private Long vmSnapShotId; + + public Long getVmSnapShotId() { + return vmSnapShotId; + } + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + VMSnapshot vmSnapshot = _entityMgr.findById(VMSnapshot.class, getVmSnapShotId()); + if (vmSnapshot != null) { + return vmSnapshot.getAccountId(); + } + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException, ConcurrentOperationException { + UserContext.current().setEventDetails( + "vmsnapshot id: " + getVmSnapShotId()); + UserVm result = _vmSnapshotService.revertToSnapshot(getVmSnapShotId()); + if (result != null) { + UserVmResponse response = _responseGenerator.createUserVmResponse( + "virtualmachine", result).get(0); + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR,"Failed to revert VM snapshot"); + } + } + + @Override + public String getEventDescription() { + return "Revert from VM snapshot: " + getVmSnapShotId(); + } + + @Override + public String getEventType() { + return EventTypes.EVENT_VM_SNAPSHOT_REVERT; + } + +} diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java index 4d82534c2b2..e577e35795e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java @@ -119,7 +119,7 @@ public class AttachVolumeCmd extends BaseAsyncCmd { @Override public void execute(){ UserContext.current().setEventDetails("Volume Id: "+getId()+" VmId: "+getVirtualMachineId()); - Volume result = _userVmService.attachVolumeToVM(this); + Volume result = _volumeService.attachVolumeToVM(this); if (result != null) { VolumeResponse response = _responseGenerator.createVolumeResponse(result); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index 2f77862b3b9..5db06bcd47f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -153,7 +153,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { @Override public void create() throws ResourceAllocationException{ - Volume volume = _storageService.allocVolume(this); + Volume volume = this._volumeService.allocVolume(this); if (volume != null) { this.setEntityId(volume.getId()); this.setEntityUuid(volume.getUuid()); @@ -165,7 +165,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { @Override public void execute(){ UserContext.current().setEventDetails("Volume Id: "+getEntityId()+((getSnapshotId() == null) ? "" : " from snapshot: " + getSnapshotId())); - Volume volume = _storageService.createVolume(this); + Volume volume = _volumeService.createVolume(this); if (volume != null) { VolumeResponse response = _responseGenerator.createVolumeResponse(volume); //FIXME - have to be moved to ApiResponseHelper diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java index 39c3de3fac9..394b0092123 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java @@ -80,7 +80,7 @@ public class DeleteVolumeCmd extends BaseCmd { @Override public void execute() throws ConcurrentOperationException { UserContext.current().setEventDetails("Volume Id: "+getId()); - boolean result = _storageService.deleteVolume(id, UserContext.current().getCaller()); + boolean result = this._volumeService.deleteVolume(id, UserContext.current().getCaller()); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java index 6153e17448b..9a5929eccca 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java @@ -130,7 +130,7 @@ public class DetachVolumeCmd extends BaseAsyncCmd { @Override public void execute(){ UserContext.current().setEventDetails("Volume Id: "+getId()+" VmId: "+getVirtualMachineId()); - Volume result = _userVmService.detachVolumeFromVM(this); + Volume result = _volumeService.detachVolumeFromVM(this); if (result != null){ VolumeResponse response = _responseGenerator.createVolumeResponse(result); response.setResponseName("volume"); diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java index d43ad5500e1..287241a8d90 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java @@ -92,7 +92,7 @@ public class MigrateVolumeCmd extends BaseAsyncCmd { public void execute(){ Volume result; try { - result = _storageService.migrateVolume(getVolumeId(), getStoragePoolId()); + result = _volumeService.migrateVolume(this); if (result != null) { VolumeResponse response = _responseGenerator.createVolumeResponse(result); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java index 52863444507..955727a7d82 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java @@ -133,7 +133,7 @@ public class ResizeVolumeCmd extends BaseAsyncCmd { @Override public void execute(){ UserContext.current().setEventDetails("Volume Id: " + getEntityId() + " to size " + getSize() + "G"); - Volume volume = _storageService.resizeVolume(this); + Volume volume = _volumeService.resizeVolume(this); if (volume != null) { VolumeResponse response = _responseGenerator.createVolumeResponse(volume); //FIXME - have to be moved to ApiResponseHelper diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java index 107d938b106..3b00ba0d4bb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java @@ -67,6 +67,10 @@ public class UploadVolumeCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.CHECKSUM, type=CommandType.STRING, description="the MD5 checksum value of this volume") private String checksum; + + @Parameter(name=ApiConstants.IMAGE_STORE_UUID, type=CommandType.STRING, + description="Image store uuid") + private String imageStoreUuid; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -99,6 +103,10 @@ public class UploadVolumeCmd extends BaseAsyncCmd { public String getChecksum() { return checksum; } + + public String getImageStoreUuid() { + return this.imageStoreUuid; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -110,7 +118,7 @@ public class UploadVolumeCmd extends BaseAsyncCmd { ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { - Volume volume = _storageService.uploadVolume(this); + Volume volume = _volumeService.uploadVolume(this); if (volume != null){ VolumeResponse response = _responseGenerator.createVolumeResponse(volume); response.setResponseName(getCommandName()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java index 71d134bb149..38b40b54c5f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java @@ -34,7 +34,7 @@ import com.cloud.user.UserContext; public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { public static final Logger s_logger = Logger.getLogger(CreateVpnCustomerGatewayCmd.class.getName()); - private static final String s_name = "createcustomergatewayresponse"; + private static final String s_name = "createvpncustomergatewayresponse"; ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// diff --git a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java index 97fe2ffeb90..bbfb598b1db 100644 --- a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java @@ -53,6 +53,9 @@ public class ListZonesByCmd extends BaseListCmd { description="the ID of the domain associated with the zone") private Long domainId; + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the zone") + private String name; + @Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the zones") private Boolean showCapacities; @@ -72,6 +75,10 @@ public class ListZonesByCmd extends BaseListCmd { return domainId; } + public String getName(){ + return name; + } + public Boolean getShowCapacities() { return showCapacities; } diff --git a/api/src/org/apache/cloudstack/api/response/AccountResponse.java b/api/src/org/apache/cloudstack/api/response/AccountResponse.java index 99c17f1984e..9a98a356492 100644 --- a/api/src/org/apache/cloudstack/api/response/AccountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/AccountResponse.java @@ -123,15 +123,33 @@ public class AccountResponse extends BaseResponse { @SerializedName("networkavailable") @Param(description="the total number of networks available to be created for this account", since="3.0.1") private String networkAvailable; - @SerializedName("vpclimit") @Param(description="the total number of vpcs the account can own", since="3.0.5") + @SerializedName("vpclimit") @Param(description="the total number of vpcs the account can own", since="4.0.0") private String vpcLimit; - @SerializedName("vpctotal") @Param(description="the total number of vpcs owned by account", since="3.0.5") + @SerializedName("vpctotal") @Param(description="the total number of vpcs owned by account", since="4.0.0") private Long vpcTotal; - @SerializedName("vpcavailable") @Param(description="the total number of vpcs available to be created for this account", since="3.0.5") + @SerializedName("vpcavailable") @Param(description="the total number of vpcs available to be created for this account", since="4.0.0") private String vpcAvailable; + @SerializedName("cpulimit") @Param(description="the total number of cpu cores the account can own", since="4.1.0") + private String cpuLimit; + + @SerializedName("cputotal") @Param(description="the total number of cpu cores owned by account", since="4.1.0") + private Long cpuTotal; + + @SerializedName("cpuavailable") @Param(description="the total number of cpu cores available to be created for this account", since="4.1.0") + private String cpuAvailable; + + @SerializedName("memorylimit") @Param(description="the total memory (in MB) the account can own", since="4.1.0") + private String memoryLimit; + + @SerializedName("memorytotal") @Param(description="the total memory (in MB) owned by account", since="4.1.0") + private Long memoryTotal; + + @SerializedName("memoryavailable") @Param(description="the total memory (in MB) available to be created for this account", since="4.1.0") + private String memoryAvailable; + @SerializedName(ApiConstants.STATE) @Param(description="the state of the account") private String state; @@ -294,6 +312,30 @@ public class AccountResponse extends BaseResponse { this.networkAvailable = networkAvailable; } + public void setCpuLimit(String cpuLimit) { + this.cpuLimit = cpuLimit; + } + + public void setCpuTotal(Long cpuTotal) { + this.cpuTotal = cpuTotal; + } + + public void setCpuAvailable(String cpuAvailable) { + this.cpuAvailable = cpuAvailable; + } + + public void setMemoryLimit(String memoryLimit) { + this.memoryLimit = memoryLimit; + } + + public void setMemoryTotal(Long memoryTotal) { + this.memoryTotal = memoryTotal; + } + + public void setMemoryAvailable(String memoryAvailable) { + this.memoryAvailable = memoryAvailable; + } + public void setDefaultZone(String defaultZoneId) { this.defaultZoneId = defaultZoneId; } diff --git a/api/src/org/apache/cloudstack/api/response/AddIpToVmNicResponse.java b/api/src/org/apache/cloudstack/api/response/AddIpToVmNicResponse.java new file mode 100644 index 00000000000..9af20b23871 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/response/AddIpToVmNicResponse.java @@ -0,0 +1,85 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.response; +import java.util.Date; +import java.util.List; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; + +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; + +@SuppressWarnings("unused") +public class AddIpToVmNicResponse extends BaseResponse { + @SerializedName(ApiConstants.ID) @Param(description="the ID of the secondary private IP addr") + private Long id; + + @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="Secondary IP address") + private String ipAddr; + + @SerializedName(ApiConstants.NIC_ID) @Param(description="the ID of the nic") + private Long nicId; + + @SerializedName(ApiConstants.NETWORK_ID) @Param(description="the ID of the network") + private Long nwId; + + @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) @Param(description="the ID of the vm") + private Long vmId; + + public Long getId() { + return id; + } + + public String getIpAddr() { + return ipAddr; + } + + public void setIpAddr(String ipAddr) { + this.ipAddr = ipAddr; + } + + public Long getNicId() { + return nicId; + } + + public void setNicId(Long nicId) { + this.nicId = nicId; + } + + public Long getNwId() { + return nwId; + } + + public void setNwId(Long nwId) { + this.nwId = nwId; + } + + public Long getVmId() { + return vmId; + } + + public void setVmId(Long vmId) { + this.vmId = vmId; + } + + public Long setId(Long id) { + return id; + } + + +} diff --git a/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java b/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java index 4afa604577f..c2996f0aa0a 100644 --- a/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java @@ -46,6 +46,12 @@ public class CapabilitiesResponse extends BaseResponse { "create disk from disk offering with custom size") private Long diskOffMaxSize; + @SerializedName("apilimitinterval") @Param(description="time interval (in seconds) to reset api count") + private Integer apiLimitInterval; + + @SerializedName("apilimitmax") @Param(description="Max allowed number of api requests within the specified interval") + private Integer apiLimitMax; + public void setSecurityGroupsEnabled(boolean securityGroupsEnabled) { this.securityGroupsEnabled = securityGroupsEnabled; @@ -75,4 +81,13 @@ public class CapabilitiesResponse extends BaseResponse { this.diskOffMaxSize = diskOffMaxSize; } + public void setApiLimitInterval(Integer apiLimitInterval) { + this.apiLimitInterval = apiLimitInterval; + } + + public void setApiLimitMax(Integer apiLimitMax) { + this.apiLimitMax = apiLimitMax; + } + + } diff --git a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java index 551e530cc38..a90acde6145 100644 --- a/api/src/org/apache/cloudstack/api/response/ClusterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ClusterResponse.java @@ -62,6 +62,12 @@ public class ClusterResponse extends BaseResponse { @SerializedName("capacity") @Param(description="the capacity of the Cluster", responseObject = CapacityResponse.class) private List capacitites; + @SerializedName("cpuovercommitratio") @Param(description = "The cpu overcommit ratio of the cluster") + private String cpuovercommitratio; + + @SerializedName("memoryovercommitratio") @Param (description = "The ram overcommit ratio of the cluster") + private String memoryovercommitratio; + public String getId() { return id; } @@ -149,4 +155,18 @@ public class ClusterResponse extends BaseResponse { public void setCapacitites(ArrayList arrayList) { this.capacitites = arrayList; } + public void setCpuovercommitratio(String cpuovercommitratio){ + this.cpuovercommitratio= cpuovercommitratio; + } + public void setRamovercommitratio (String memoryOvercommitRatio){ + this.memoryovercommitratio= memoryOvercommitRatio; + } + + public String getCpuovercommitratio (){ + return cpuovercommitratio; + } + + public String getRamovercommitratio (){ + return memoryovercommitratio; + } } diff --git a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java index c9aa19755e4..274e7a5becb 100644 --- a/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java +++ b/api/src/org/apache/cloudstack/api/response/DomainRouterResponse.java @@ -47,6 +47,12 @@ public class DomainRouterResponse extends BaseResponse implements ControlledView @SerializedName(ApiConstants.DNS2) @Param(description="the second DNS for the router") private String dns2; + @SerializedName(ApiConstants.IP6_DNS1) @Param(description="the first IPv6 DNS for the router") + private String ip6Dns1; + + @SerializedName(ApiConstants.IP6_DNS2) @Param(description="the second IPv6 DNS for the router") + private String ip6Dns2; + @SerializedName("networkdomain") @Param(description="the network domain for the router") private String networkDomain; @@ -338,4 +344,20 @@ public class DomainRouterResponse extends BaseResponse implements ControlledView public void addNic(NicResponse nic) { this.nics.add(nic); } + + public String getIp6Dns1() { + return ip6Dns1; + } + + public void setIp6Dns1(String ip6Dns1) { + this.ip6Dns1 = ip6Dns1; + } + + public String getIp6Dns2() { + return ip6Dns2; + } + + public void setIp6Dns2(String ip6Dns2) { + this.ip6Dns2 = ip6Dns2; + } } diff --git a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java index 251b2dd09e8..cede84f931e 100644 --- a/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java +++ b/api/src/org/apache/cloudstack/api/response/IPAddressResponse.java @@ -82,6 +82,10 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) @Param(description="virutal machine id the ip address is assigned to (not null only for static nat Ip)") private String virtualMachineId; + @SerializedName("vmipaddress") @Param(description="virutal machine (dnat) ip address (not null only for static nat Ip)") + private String virtualMachineIp; + + @SerializedName("virtualmachinename") @Param(description="virutal machine name the ip address is assigned to (not null only for static nat Ip)") private String virtualMachineName; @@ -185,6 +189,10 @@ public class IPAddressResponse extends BaseResponse implements ControlledEntityR this.virtualMachineId = virtualMachineId; } + public void setVirtualMachineIp(String virtualMachineIp) { + this.virtualMachineIp = virtualMachineIp; + } + public void setVirtualMachineName(String virtualMachineName) { this.virtualMachineName = virtualMachineName; } diff --git a/api/src/org/apache/cloudstack/api/response/LDAPConfigResponse.java b/api/src/org/apache/cloudstack/api/response/LDAPConfigResponse.java index aa10229f2bd..bbeec630d81 100644 --- a/api/src/org/apache/cloudstack/api/response/LDAPConfigResponse.java +++ b/api/src/org/apache/cloudstack/api/response/LDAPConfigResponse.java @@ -30,7 +30,7 @@ public class LDAPConfigResponse extends BaseResponse { @SerializedName(ApiConstants.PORT) @Param(description="Specify the LDAP port if required, default is 389") private String port; - @SerializedName(ApiConstants.PORT) @Param(description="Check Use SSL if the external LDAP server is configured for LDAP over SSL") + @SerializedName(ApiConstants.USE_SSL) @Param(description="Check Use SSL if the external LDAP server is configured for LDAP over SSL") private String useSSL; @SerializedName(ApiConstants.SEARCH_BASE) @Param(description="The search base defines the starting point for the search in the directory tree Example: dc=cloud,dc=com") diff --git a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java index 7b29efbf4d9..cd32dede3c8 100644 --- a/api/src/org/apache/cloudstack/api/response/NetworkResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NetworkResponse.java @@ -52,9 +52,15 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes @SerializedName(ApiConstants.NETMASK) @Param(description="the network's netmask") private String netmask; - @SerializedName(ApiConstants.CIDR) @Param(description="the cidr the network") + @SerializedName(ApiConstants.CIDR) @Param(description="Cloudstack managed address space, all CloudStack managed VMs get IP address from CIDR") private String cidr; + @SerializedName(ApiConstants.NETWORK_CIDR) @Param(description="the network CIDR of the guest network configured with IP reservation. It is the summation of CIDR and RESERVED_IP_RANGE") + private String networkCidr; + + @SerializedName(ApiConstants.RESERVED_IP_RANGE) @Param(description="the network's IP range not to be used by CloudStack guest VMs and can be used for non CloudStack purposes") + private String reservedIpRange; + @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id of the network") private String zoneId; @@ -289,6 +295,14 @@ public class NetworkResponse extends BaseResponse implements ControlledEntityRes this.cidr = cidr; } + public void setNetworkCidr(String networkCidr) { + this.networkCidr = networkCidr; + } + + public void setReservedIpRange(String reservedIpRange) { + this.reservedIpRange = reservedIpRange; + } + public void setRestartRequired(Boolean restartRequired) { this.restartRequired = restartRequired; } diff --git a/api/src/org/apache/cloudstack/api/response/NicResponse.java b/api/src/org/apache/cloudstack/api/response/NicResponse.java index a7d1a0d068e..a1ceaf63798 100644 --- a/api/src/org/apache/cloudstack/api/response/NicResponse.java +++ b/api/src/org/apache/cloudstack/api/response/NicResponse.java @@ -16,6 +16,8 @@ // under the License. package org.apache.cloudstack.api.response; +import java.util.List; + import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; @@ -75,7 +77,10 @@ public class NicResponse extends BaseResponse { @SerializedName(ApiConstants.IP6_ADDRESS) @Param(description="the IPv6 address of network") private String ip6Address; - + + @SerializedName("secondaryip") @Param(description="the Secondary ipv4 addr of nic") + private List secondaryIps; + public String getId() { return id; } @@ -167,4 +172,9 @@ public class NicResponse extends BaseResponse { return false; return true; } + + public void setSecondaryIps(List ipList) { + this.secondaryIps = ipList; + } + } diff --git a/api/src/org/apache/cloudstack/api/response/NicSecondaryIpResponse.java b/api/src/org/apache/cloudstack/api/response/NicSecondaryIpResponse.java new file mode 100644 index 00000000000..3464a63540e --- /dev/null +++ b/api/src/org/apache/cloudstack/api/response/NicSecondaryIpResponse.java @@ -0,0 +1,85 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.response; +import java.util.Date; +import java.util.List; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; + +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; + +@SuppressWarnings("unused") +public class NicSecondaryIpResponse extends BaseResponse { + @SerializedName(ApiConstants.ID) @Param(description="the ID of the secondary private IP addr") + private Long id; + + @SerializedName(ApiConstants.IP_ADDRESS) @Param(description="Secondary IP address") + private String ipAddr; + + @SerializedName(ApiConstants.NIC_ID) @Param(description="the ID of the nic") + private Long nicId; + + @SerializedName(ApiConstants.NETWORK_ID) @Param(description="the ID of the network") + private Long nwId; + + @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) @Param(description="the ID of the vm") + private Long vmId; + + public Long getId() { + return id; + } + + public String getIpAddr() { + return ipAddr; + } + + public void setIpAddr(String ipAddr) { + this.ipAddr = ipAddr; + } + + public Long getNicId() { + return nicId; + } + + public void setNicId(Long nicId) { + this.nicId = nicId; + } + + public Long getNwId() { + return nwId; + } + + public void setNwId(Long nwId) { + this.nwId = nwId; + } + + public Long getVmId() { + return vmId; + } + + public void setVmId(Long vmId) { + this.vmId = vmId; + } + + public Long setId(Long id) { + return id; + } + + +} diff --git a/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java index 9d4f6c5aad2..a7fbbf2630b 100644 --- a/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ResourceCountResponse.java @@ -40,7 +40,7 @@ public class ResourceCountResponse extends BaseResponse implements ControlledEnt @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name for which resource count's are updated") private String domainName; - @SerializedName(ApiConstants.RESOURCE_TYPE) @Param(description="resource type. Values include 0, 1, 2, 3, 4. See the resourceType parameter for more information on these values.") + @SerializedName(ApiConstants.RESOURCE_TYPE) @Param(description="resource type. Values include 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. See the resourceType parameter for more information on these values.") private String resourceType; @SerializedName("resourcecount") @Param(description="resource count") diff --git a/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java b/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java index beead247b23..b444e7a68a7 100644 --- a/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ResourceLimitResponse.java @@ -36,7 +36,7 @@ public class ResourceLimitResponse extends BaseResponse implements ControlledEnt @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name of the resource limit") private String domainName; - @SerializedName(ApiConstants.RESOURCE_TYPE) @Param(description="resource type. Values include 0, 1, 2, 3, 4. See the resourceType parameter for more information on these values.") + @SerializedName(ApiConstants.RESOURCE_TYPE) @Param(description="resource type. Values include 0, 1, 2, 3, 4, 6, 7, 8, 9. See the resourceType parameter for more information on these values.") private String resourceType; @SerializedName("max") @Param(description="the maximum number of the resource. A -1 means the resource currently has no limit.") diff --git a/api/src/org/apache/cloudstack/api/response/VMSnapshotResponse.java b/api/src/org/apache/cloudstack/api/response/VMSnapshotResponse.java new file mode 100644 index 00000000000..3b30ab61a8f --- /dev/null +++ b/api/src/org/apache/cloudstack/api/response/VMSnapshotResponse.java @@ -0,0 +1,220 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.cloudstack.api.response; + +import java.util.Date; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.EntityReference; + +import com.cloud.serializer.Param; +import com.cloud.vm.snapshot.VMSnapshot; +import com.google.gson.annotations.SerializedName; + +@EntityReference(value=VMSnapshot.class) +public class VMSnapshotResponse extends BaseResponse implements ControlledEntityResponse{ + + @SerializedName(ApiConstants.ID) + @Param(description = "the ID of the vm snapshot") + private String id; + + @SerializedName(ApiConstants.NAME) + @Param(description = "the name of the vm snapshot") + private String name; + + @SerializedName(ApiConstants.STATE) + @Param(description = "the state of the vm snapshot") + private VMSnapshot.State state; + + @SerializedName(ApiConstants.DESCRIPTION) + @Param(description = "the description of the vm snapshot") + private String description; + + @SerializedName(ApiConstants.DISPLAY_NAME) + @Param(description = "the display name of the vm snapshot") + private String displayName; + + @SerializedName(ApiConstants.ZONE_ID) + @Param(description = "the Zone ID of the vm snapshot") + private String zoneId; + + @SerializedName(ApiConstants.VIRTUAL_MACHINE_ID) + @Param(description = "the vm ID of the vm snapshot") + private String virtualMachineid; + + @SerializedName("parent") + @Param(description = "the parent ID of the vm snapshot") + private String parent; + + @SerializedName("parentName") + @Param(description = "the parent displayName of the vm snapshot") + private String parentName; + + @SerializedName("current") + @Param(description = "indiates if this is current snapshot") + private Boolean current; + + @SerializedName("type") + @Param(description = "VM Snapshot type") + private String type; + + @SerializedName(ApiConstants.CREATED) + @Param(description = "the create date of the vm snapshot") + private Date created; + + @SerializedName(ApiConstants.ACCOUNT) + @Param(description = "the account associated with the disk volume") + private String accountName; + + @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the vpn") + private String projectId; + + @SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the vpn") + private String projectName; + + @SerializedName(ApiConstants.DOMAIN_ID) + @Param(description = "the ID of the domain associated with the disk volume") + private String domainId; + + @SerializedName(ApiConstants.DOMAIN) + @Param(description = "the domain associated with the disk volume") + private String domainName; + + @Override + public String getObjectId() { + return getId(); + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getZoneId() { + return zoneId; + } + + public void setZoneId(String zoneId) { + this.zoneId = zoneId; + } + + public String getVirtualMachineid() { + return virtualMachineid; + } + + public void setVirtualMachineid(String virtualMachineid) { + this.virtualMachineid = virtualMachineid; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setState(VMSnapshot.State state) { + this.state = state; + } + + public VMSnapshot.State getState() { + return state; + } + + public Boolean getCurrent() { + return current; + } + + public void setCurrent(Boolean current) { + this.current = current; + } + + public void setParentName(String parentName) { + this.parentName = parentName; + } + + public String getParentName() { + return parentName; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + @Override + public void setAccountName(String accountName) { + this.accountName = accountName; + + } + + @Override + public void setProjectId(String projectId) { + this.projectId = projectId; + + } + + @Override + public void setProjectName(String projectName) { + this.projectName = projectName; + + } + + @Override + public void setDomainId(String domainId) { + this.domainId = domainId; + } + + @Override + public void setDomainName(String domainName) { + this.domainName = domainName; + + } +} diff --git a/api/src/org/apache/cloudstack/api/response/ZoneResponse.java b/api/src/org/apache/cloudstack/api/response/ZoneResponse.java index ab99e2d1e5f..2ebb15a1ecf 100644 --- a/api/src/org/apache/cloudstack/api/response/ZoneResponse.java +++ b/api/src/org/apache/cloudstack/api/response/ZoneResponse.java @@ -44,6 +44,12 @@ public class ZoneResponse extends BaseResponse { @SerializedName(ApiConstants.DNS2) @Param(description="the second DNS for the Zone") private String dns2; + @SerializedName(ApiConstants.IP6_DNS1) @Param(description="the first IPv6 DNS for the Zone") + private String ip6Dns1; + + @SerializedName(ApiConstants.IP6_DNS2) @Param(description="the second IPv6 DNS for the Zone") + private String ip6Dns2; + @SerializedName(ApiConstants.INTERNAL_DNS1) @Param(description="the first internal DNS for the Zone") private String internalDns1; @@ -176,4 +182,20 @@ public class ZoneResponse extends BaseResponse { public void setLocalStorageEnabled(boolean localStorageEnabled) { this.localStorageEnabled = localStorageEnabled; } + + public String getIp6Dns1() { + return ip6Dns1; + } + + public void setIp6Dns1(String ip6Dns1) { + this.ip6Dns1 = ip6Dns1; + } + + public String getIp6Dns2() { + return ip6Dns2; + } + + public void setIp6Dns2(String ip6Dns2) { + this.ip6Dns2 = ip6Dns2; + } } diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index bfe7b855c81..c3f86aabb7f 100644 --- a/api/src/org/apache/cloudstack/query/QueryService.java +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -58,7 +58,6 @@ import com.cloud.exception.PermissionDeniedException; /** * Service used for list api query. - * @author minc * */ public interface QueryService { diff --git a/api/src/org/apache/cloudstack/usage/Usage.java b/api/src/org/apache/cloudstack/usage/Usage.java new file mode 100644 index 00000000000..c74d3b7273e --- /dev/null +++ b/api/src/org/apache/cloudstack/usage/Usage.java @@ -0,0 +1,69 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.usage; + +import org.apache.cloudstack.api.InternalIdentity; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +public interface Usage { + + public long getId(); + + public Long getZoneId(); + + public Long getAccountId(); + + public Long getDomainId(); + + public String getDescription(); + + public String getUsageDisplay(); + + public int getUsageType(); + + public Double getRawUsage(); + + public Long getVmInstanceId(); + + public String getVmName(); + + public Long getOfferingId(); + + public Long getTemplateId(); + + public Long getUsageId(); + + public String getType(); + + public Long getNetworkId(); + + public Long getSize(); + + public Date getStartDate(); + + public Date getEndDate(); +} diff --git a/server/src/com/cloud/server/ManagementServerExt.java b/api/src/org/apache/cloudstack/usage/UsageService.java old mode 100644 new mode 100755 similarity index 89% rename from server/src/com/cloud/server/ManagementServerExt.java rename to api/src/org/apache/cloudstack/usage/UsageService.java index 4e506a3bc4a..383822592bc --- a/server/src/com/cloud/server/ManagementServerExt.java +++ b/api/src/org/apache/cloudstack/usage/UsageService.java @@ -14,16 +14,16 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.server; +package org.apache.cloudstack.usage; import java.util.List; import java.util.TimeZone; -import com.cloud.api.commands.GenerateUsageRecordsCmd; -import com.cloud.api.commands.GetUsageRecordsCmd; +import org.apache.cloudstack.api.command.admin.usage.GenerateUsageRecordsCmd; +import org.apache.cloudstack.api.command.admin.usage.GetUsageRecordsCmd; import org.apache.cloudstack.api.response.UsageTypeResponse; -import com.cloud.usage.UsageVO; -public interface ManagementServerExt extends ManagementServer { + +public interface UsageService { /** * Generate Billing Records from the last time it was generated to the * time specified. @@ -50,7 +50,7 @@ public interface ManagementServerExt extends ManagementServer { * the appropriate page number) * @return a list of usage records */ - List getUsageRecords(GetUsageRecordsCmd cmd); + List getUsageRecords(GetUsageRecordsCmd cmd); /** * Retrieves the timezone used for usage aggregation. One day is represented as midnight to 11:59:59pm @@ -60,4 +60,5 @@ public interface ManagementServerExt extends ManagementServer { TimeZone getUsageTimezone(); List listUsageTypes(); + } diff --git a/server/src/com/cloud/usage/UsageTypes.java b/api/src/org/apache/cloudstack/usage/UsageTypes.java similarity index 98% rename from server/src/com/cloud/usage/UsageTypes.java rename to api/src/org/apache/cloudstack/usage/UsageTypes.java index e5a48d5c143..2baa1d20057 100644 --- a/server/src/com/cloud/usage/UsageTypes.java +++ b/api/src/org/apache/cloudstack/usage/UsageTypes.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.usage; +package org.apache.cloudstack.usage; import java.util.ArrayList; import java.util.List; diff --git a/api/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java index 7836b6d6e8e..71004977d89 100644 --- a/api/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java @@ -133,15 +133,15 @@ public class BackupSnapshotCommandTest { } @Override - public String getStorageProvider() { + public Long getStorageProviderId() { // TODO Auto-generated method stub return null; } @Override - public String getStorageType() { + public boolean isInMaintenance() { // TODO Auto-generated method stub - return null; + return false; }; }; diff --git a/api/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java b/api/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java index 3545d0f1c29..767d7c37c5e 100644 --- a/api/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java +++ b/api/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java @@ -115,16 +115,16 @@ public class SnapshotCommandTest { } @Override - public String getStorageProvider() { + public Long getStorageProviderId() { // TODO Auto-generated method stub return null; } - @Override - public String getStorageType() { - // TODO Auto-generated method stub - return null; - }; + @Override + public boolean isInMaintenance() { + // TODO Auto-generated method stub + return false; + }; }; SnapshotCommand ssc = new SnapshotCommand(pool, diff --git a/api/test/org/apache/cloudstack/api/command/test/AddIpToVmNicTest.java b/api/test/org/apache/cloudstack/api/command/test/AddIpToVmNicTest.java new file mode 100644 index 00000000000..106589d10cc --- /dev/null +++ b/api/test/org/apache/cloudstack/api/command/test/AddIpToVmNicTest.java @@ -0,0 +1,132 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.test; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import org.apache.cloudstack.api.ResponseGenerator; +import org.apache.cloudstack.api.command.user.vm.AddIpToVmNicCmd; +import org.apache.cloudstack.api.command.user.vm.RemoveIpFromVmNicCmd; +import org.apache.cloudstack.api.response.NicSecondaryIpResponse; +import org.apache.cloudstack.api.response.SuccessResponse; + + + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.mockito.Mockito; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.NetworkService; +import com.cloud.user.Account; + +public class AddIpToVmNicTest extends TestCase { + + private AddIpToVmNicCmd addIpToVmNicCmd; + private RemoveIpFromVmNicCmd removeIpFromVmNicCmd; + private ResponseGenerator responseGenerator; + private SuccessResponse successResponseGenerator; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Before + public void setUp() { + addIpToVmNicCmd = new AddIpToVmNicCmd() { + }; + removeIpFromVmNicCmd = new RemoveIpFromVmNicCmd(); + } + + @Test + public void testCreateSuccess() throws ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException, InsufficientCapacityException { + + NetworkService networkService = Mockito.mock(NetworkService.class); + AddIpToVmNicCmd ipTonicCmd = Mockito.mock(AddIpToVmNicCmd.class); + + Mockito.when( + networkService.allocateSecondaryGuestIP(Mockito.any(Account.class), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyString())).thenReturn("10.1.1.2"); + + ipTonicCmd._networkService = networkService; + responseGenerator = Mockito.mock(ResponseGenerator.class); + + NicSecondaryIpResponse ipres = Mockito.mock(NicSecondaryIpResponse.class); + Mockito.when(responseGenerator.createSecondaryIPToNicResponse(Mockito.anyString(), Mockito.anyLong(), Mockito.anyLong())).thenReturn(ipres); + + ipTonicCmd._responseGenerator = responseGenerator; + ipTonicCmd.execute(); + } + + @Test + public void testCreateFailure() throws ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException, InsufficientCapacityException { + + NetworkService networkService = Mockito.mock(NetworkService.class); + AddIpToVmNicCmd ipTonicCmd = Mockito.mock(AddIpToVmNicCmd.class); + + Mockito.when( + networkService.allocateSecondaryGuestIP(Mockito.any(Account.class), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyLong(), Mockito.anyString())).thenReturn(null); + + ipTonicCmd._networkService = networkService; + + try { + ipTonicCmd.execute(); + } catch (InsufficientAddressCapacityException e) { + throw new InvalidParameterValueException("Allocating guest ip for nic failed"); + } + } + + @Test + public void testRemoveIpFromVmNicSuccess() throws ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException, InsufficientCapacityException { + + NetworkService networkService = Mockito.mock(NetworkService.class); + RemoveIpFromVmNicCmd removeIpFromNic = Mockito.mock(RemoveIpFromVmNicCmd.class); + + Mockito.when( + networkService.releaseSecondaryIpFromNic(Mockito.anyInt())).thenReturn(true); + + removeIpFromNic._networkService = networkService; + successResponseGenerator = Mockito.mock(SuccessResponse.class); + + removeIpFromNic.execute(); + } + + @Test + public void testRemoveIpFromVmNicFailure() throws InsufficientAddressCapacityException { + NetworkService networkService = Mockito.mock(NetworkService.class); + RemoveIpFromVmNicCmd removeIpFromNic = Mockito.mock(RemoveIpFromVmNicCmd.class); + + Mockito.when( + networkService.releaseSecondaryIpFromNic(Mockito.anyInt())).thenReturn(false); + + removeIpFromNic._networkService = networkService; + successResponseGenerator = Mockito.mock(SuccessResponse.class); + + try { + removeIpFromNic.execute(); + } catch (InvalidParameterValueException exception) { + Assert.assertEquals("Failed to remove secondary ip address for the nic", + exception.getLocalizedMessage()); + } + } +} diff --git a/api/test/org/apache/cloudstack/api/command/test/UsageCmdTest.java b/api/test/org/apache/cloudstack/api/command/test/UsageCmdTest.java new file mode 100644 index 00000000000..1f218f47e2a --- /dev/null +++ b/api/test/org/apache/cloudstack/api/command/test/UsageCmdTest.java @@ -0,0 +1,69 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.test; + +import junit.framework.TestCase; +import org.apache.cloudstack.api.command.admin.usage.GetUsageRecordsCmd; +import org.apache.cloudstack.usage.Usage; +import org.apache.cloudstack.usage.UsageService; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; + +public class UsageCmdTest extends TestCase { + + private GetUsageRecordsCmd getUsageRecordsCmd; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Before + public void setUp() { + + getUsageRecordsCmd = new GetUsageRecordsCmd() { + + }; + } + + @Test + public void testExecuteSuccess() { + UsageService usageService = Mockito.mock(UsageService.class); + getUsageRecordsCmd._usageService = usageService; + getUsageRecordsCmd.execute(); + } + + @Test + public void testExecuteEmptyResult() { + + UsageService usageService = Mockito.mock(UsageService.class); + + List usageRecords = new ArrayList(); + + Mockito.when(usageService.getUsageRecords(getUsageRecordsCmd)).thenReturn( + usageRecords); + + getUsageRecordsCmd._usageService = usageService; + getUsageRecordsCmd.execute(); + + } + +} diff --git a/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java b/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java index 7f5540fa4d3..852e52b1b86 100644 --- a/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java +++ b/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java @@ -134,15 +134,15 @@ public class ResizeVolumeCommandTest { } @Override - public String getStorageProvider() { + public Long getStorageProviderId() { // TODO Auto-generated method stub return null; } @Override - public String getStorageType() { + public boolean isInMaintenance() { // TODO Auto-generated method stub - return null; + return false; }; }; diff --git a/awsapi/pom.xml b/awsapi/pom.xml index 5a0ad7b0cb4..f19a71381d3 100644 --- a/awsapi/pom.xml +++ b/awsapi/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT @@ -354,7 +354,7 @@ + value="${cs.replace.properties}" /> diff --git a/awsapi/src/com/cloud/bridge/persist/dao/CloudStackUserDaoImpl.java b/awsapi/src/com/cloud/bridge/persist/dao/CloudStackUserDaoImpl.java index 061351930da..f108a20e5b4 100644 --- a/awsapi/src/com/cloud/bridge/persist/dao/CloudStackUserDaoImpl.java +++ b/awsapi/src/com/cloud/bridge/persist/dao/CloudStackUserDaoImpl.java @@ -20,6 +20,7 @@ import javax.ejb.Local; import org.apache.log4j.Logger; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; +import org.springframework.stereotype.Component; import com.cloud.bridge.model.CloudStackUserVO; import com.cloud.bridge.util.EncryptionSecretKeyCheckerUtil; @@ -28,6 +29,7 @@ import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; +@Component @Local(value={CloudStackUserDao.class}) public class CloudStackUserDaoImpl extends GenericDaoBase implements CloudStackUserDao { public static final Logger logger = Logger.getLogger(CloudStackUserDaoImpl.class); diff --git a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java index 57a32a48289..29a002cebaf 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java +++ b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java @@ -86,7 +86,9 @@ import com.amazon.ec2.DescribeVolumesResponse; import com.amazon.ec2.DetachVolumeResponse; import com.amazon.ec2.DisassociateAddressResponse; import com.amazon.ec2.GetPasswordDataResponse; +import com.amazon.ec2.GroupItemType; import com.amazon.ec2.ImportKeyPairResponse; +import com.amazon.ec2.LaunchPermissionItemType; import com.amazon.ec2.ModifyImageAttributeResponse; import com.amazon.ec2.RebootInstancesResponse; import com.amazon.ec2.RegisterImageResponse; @@ -104,14 +106,17 @@ import com.cloud.bridge.persist.dao.CloudStackUserDaoImpl; import com.cloud.bridge.persist.dao.OfferingDaoImpl; import com.cloud.bridge.persist.dao.UserCredentialsDaoImpl; import com.cloud.bridge.service.controller.s3.ServiceProvider; +import com.cloud.bridge.service.core.ec2.EC2AddressFilterSet; import com.cloud.bridge.service.core.ec2.EC2AssociateAddress; import com.cloud.bridge.service.core.ec2.EC2AuthorizeRevokeSecurityGroup; +import com.cloud.bridge.service.core.ec2.EC2AvailabilityZonesFilterSet; import com.cloud.bridge.service.core.ec2.EC2CreateImage; import com.cloud.bridge.service.core.ec2.EC2CreateKeyPair; import com.cloud.bridge.service.core.ec2.EC2CreateVolume; import com.cloud.bridge.service.core.ec2.EC2DeleteKeyPair; import com.cloud.bridge.service.core.ec2.EC2DescribeAddresses; import com.cloud.bridge.service.core.ec2.EC2DescribeAvailabilityZones; +import com.cloud.bridge.service.core.ec2.EC2DescribeImageAttribute; import com.cloud.bridge.service.core.ec2.EC2DescribeImages; import com.cloud.bridge.service.core.ec2.EC2DescribeInstances; import com.cloud.bridge.service.core.ec2.EC2DescribeKeyPairs; @@ -123,10 +128,13 @@ import com.cloud.bridge.service.core.ec2.EC2Engine; import com.cloud.bridge.service.core.ec2.EC2Filter; import com.cloud.bridge.service.core.ec2.EC2GroupFilterSet; import com.cloud.bridge.service.core.ec2.EC2Image; +import com.cloud.bridge.service.core.ec2.EC2ImageAttributes.ImageAttribute; +import com.cloud.bridge.service.core.ec2.EC2ImageLaunchPermission; import com.cloud.bridge.service.core.ec2.EC2ImportKeyPair; import com.cloud.bridge.service.core.ec2.EC2InstanceFilterSet; import com.cloud.bridge.service.core.ec2.EC2IpPermission; import com.cloud.bridge.service.core.ec2.EC2KeyPairFilterSet; +import com.cloud.bridge.service.core.ec2.EC2ModifyImageAttribute; import com.cloud.bridge.service.core.ec2.EC2RebootInstances; import com.cloud.bridge.service.core.ec2.EC2RegisterImage; import com.cloud.bridge.service.core.ec2.EC2ReleaseAddress; @@ -699,12 +707,20 @@ public class EC2RestServlet extends HttpServlet { else break; String[] fromPort = request.getParameterValues( "IpPermissions." + nCount + ".FromPort" ); - if ( null != fromPort && 0 < fromPort.length) - perm.setFromPort( Integer.parseInt( fromPort[0])); + if ( null != fromPort && 0 < fromPort.length ) { + if ( protocol[0].equalsIgnoreCase("icmp") ) + perm.setIcmpType( fromPort[0] ) ; + else + perm.setFromPort( Integer.parseInt( fromPort[0]) ); + } String[] toPort = request.getParameterValues( "IpPermissions." + nCount + ".ToPort" ); - if ( null != toPort && 0 < toPort.length) - perm.setToPort( Integer.parseInt( toPort[0])); + if ( null != toPort && 0 < toPort.length ) { + if ( protocol[0].equalsIgnoreCase("icmp") ) + perm.setIcmpCode( toPort[0] ); + else + perm.setToPort( Integer.parseInt( toPort[0]) ); + } // -> list: IpPermissions.n.IpRanges.m.CidrIp mCount = 1; @@ -772,12 +788,20 @@ public class EC2RestServlet extends HttpServlet { else break; String[] fromPort = request.getParameterValues( "IpPermissions." + nCount + ".FromPort" ); - if ( null != fromPort && 0 < fromPort.length) - perm.setFromPort( Integer.parseInt( fromPort[0])); + if ( null != fromPort && 0 < fromPort.length ) { + if ( protocol[0].equalsIgnoreCase("icmp") ) + perm.setIcmpType( fromPort[0] ) ; + else + perm.setFromPort( Integer.parseInt( fromPort[0]) ); + } String[] toPort = request.getParameterValues( "IpPermissions." + nCount + ".ToPort" ); - if ( null != toPort && 0 < toPort.length) - perm.setToPort( Integer.parseInt( toPort[0])); + if ( null != toPort && 0 < toPort.length ) { + if ( protocol[0].equalsIgnoreCase("icmp") ) + perm.setIcmpCode( toPort[0] ); + else + perm.setToPort( Integer.parseInt( toPort[0]) ); + } // -> list: IpPermissions.n.IpRanges.m.CidrIp int mCount = 1; @@ -1021,38 +1045,105 @@ public class EC2RestServlet extends HttpServlet { serializeResponse(response, EC2response); } - private void modifyImageAttribute( HttpServletRequest request, HttpServletResponse response ) + private void modifyImageAttribute( HttpServletRequest request, HttpServletResponse response ) throws ADBException, XMLStreamException, IOException { - EC2Image image = new EC2Image(); + EC2ModifyImageAttribute ec2request = new EC2ModifyImageAttribute(); - // -> its interesting to note that the SOAP API docs has description but the REST API docs do not - String[] imageId = request.getParameterValues( "ImageId" ); - if ( null != imageId && 0 < imageId.length ) - image.setId( imageId[0] ); - else { response.sendError(530, "Missing ImageId parameter" ); return; } + String[] imageId = request.getParameterValues( "ImageId" ); + if ( imageId != null && imageId.length > 0 ) + ec2request.setImageId( imageId[0]); + else { + response.sendError(530, "Missing ImageId parameter" ); + return; + } - String[] description = request.getParameterValues( "Description" ); - if ( null != description && 0 < description.length ) - image.setDescription( description[0] ); - else { response.sendError(530, "Missing Description parameter" ); return; } + String[] description = request.getParameterValues( "Description.Value" ); + if ( description != null && description.length > 0 ) { + ec2request.setAttribute(ImageAttribute.description); + ec2request.setDescription(description[0]); + } else { + //add all launch permissions to ec2request + ec2request = addLaunchPermImageAttribute(request, ec2request); + if (ec2request.getLaunchPermissionSet().length > 0) + ec2request.setAttribute(ImageAttribute.launchPermission); + else { + response.sendError(530, "Missing Attribute parameter - Description/LaunchPermission should be provided" ); + return; + } + } // -> execute the request - ModifyImageAttributeResponse EC2response = EC2SoapServiceImpl.toModifyImageAttributeResponse( ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( image )); + ModifyImageAttributeResponse EC2response = EC2SoapServiceImpl.toModifyImageAttributeResponse( + ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( ec2request )); serializeResponse(response, EC2response); } + private EC2ModifyImageAttribute addLaunchPermImageAttribute(HttpServletRequest request, EC2ModifyImageAttribute ec2request) { + String[] users = {".UserId", ".Group"}; + String[] operations = {"LaunchPermission.Add.", "LaunchPermission.Remove."}; + int nCount = 1; + + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + List launchPermissionList = new ArrayList(); + do { + String[] launchPermissionAddGroup = request.getParameterValues( operations[j] + nCount + users[i] ); + if (launchPermissionAddGroup != null && launchPermissionAddGroup.length > 0) + launchPermissionList.add(launchPermissionAddGroup[0]); + else + break; + nCount++; + } while (true); + if (nCount != 1) { + EC2ImageLaunchPermission ec2LaunchPermission = new EC2ImageLaunchPermission(); + if (operations[j].contains("Add")) + ec2LaunchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.add); + else + ec2LaunchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.remove); + for (String launchPerm : launchPermissionList) { + ec2LaunchPermission.addLaunchPermission(launchPerm); + } + ec2request.addLaunchPermission(ec2LaunchPermission); + nCount = 1; + } + } + } + + return ec2request; + } + private void resetImageAttribute( HttpServletRequest request, HttpServletResponse response ) throws ADBException, XMLStreamException, IOException { - EC2Image image = new EC2Image(); + EC2ModifyImageAttribute ec2request = new EC2ModifyImageAttribute(); String[] imageId = request.getParameterValues( "ImageId" ); - if ( null != imageId && 0 < imageId.length ) - image.setId( imageId[0] ); - else { response.sendError(530, "Missing ImageId parameter" ); return; } + if ( imageId != null && imageId.length > 0) + ec2request.setImageId(imageId[0]); + else { + response.sendError(530, "Missing ImageId parameter" ); + return; + } + + String[] attribute = request.getParameterValues( "Attribute" ); + if ( attribute != null && attribute.length > 0 ) { + if (attribute[0].equalsIgnoreCase("launchPermission")) + ec2request.setAttribute(ImageAttribute.launchPermission); + else { + response.sendError(501, "Unsupported Attribute - only launchPermission supported" ); + return; + } + } else { + response.sendError(530, "Missing Attribute parameter" ); + return; + } + + EC2ImageLaunchPermission launchPermission = new EC2ImageLaunchPermission(); + launchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.reset); + ec2request.addLaunchPermission(launchPermission); // -> execute the request - image.setDescription( "" ); - ResetImageAttributeResponse EC2response = EC2SoapServiceImpl.toResetImageAttributeResponse( ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( image )); + ResetImageAttributeResponse EC2response = EC2SoapServiceImpl.toResetImageAttributeResponse( + ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( ec2request )); serializeResponse(response, EC2response); } @@ -1067,14 +1158,26 @@ public class EC2RestServlet extends HttpServlet { else { response.sendError(530, "Missing ImageId parameter" ); return; } String[] minCount = request.getParameterValues( "MinCount" ); - if ( null != minCount && 0 < minCount.length ) - EC2request.setMinCount( Integer.parseInt( minCount[0] )); - else { response.sendError(530, "Missing MinCount parameter" ); return; } + if ( minCount == null || minCount.length < 1) { + response.sendError(530, "Missing MinCount parameter" ); + return; + } else if ( Integer.parseInt(minCount[0]) < 1) { + throw new EC2ServiceException(ClientError.InvalidParameterValue, + "Value of parameter MinCount should be greater than 0"); + } else { + EC2request.setMinCount( Integer.parseInt( minCount[0]) ); + } String[] maxCount = request.getParameterValues( "MaxCount" ); - if ( null != maxCount && 0 < maxCount.length ) - EC2request.setMaxCount( Integer.parseInt( maxCount[0] )); - else { response.sendError(530, "Missing MaxCount parameter" ); return; } + if ( maxCount == null || maxCount.length < 1) { + response.sendError(530, "Missing MaxCount parameter" ); + return; + } else if ( Integer.parseInt(maxCount[0]) < 1) { + throw new EC2ServiceException(ClientError.InvalidParameterValue, + "Value of parameter MaxCount should be greater than 0"); + } else { + EC2request.setMaxCount( Integer.parseInt( maxCount[0]) ); + } String[] instanceType = request.getParameterValues( "InstanceType" ); if ( null != instanceType && 0 < instanceType.length ) @@ -1094,6 +1197,21 @@ public class EC2RestServlet extends HttpServlet { EC2request.setKeyName(keyName[0]); } + String[] userData = request.getParameterValues("UserData"); + if ( userData != null) { + EC2request.setUserData( userData[0]); + } + + Enumeration names = request.getParameterNames(); + while( names.hasMoreElements()) { + String key = (String)names.nextElement(); + if ( key.startsWith("SecurityGroup")) { + String[] value = request.getParameterValues(key); + if (null != value && 0 < value.length) + EC2request.addGroupName( value[0]); + } + } + // -> execute the request EC2Engine engine = ServiceProvider.getInstance().getEC2Engine(); RunInstancesResponse EC2response = EC2SoapServiceImpl.toRunInstancesResponse( engine.runInstances( EC2request ), engine); @@ -1167,6 +1285,11 @@ public class EC2RestServlet extends HttpServlet { } if (0 == count) { response.sendError(530, "Missing InstanceId parameter" ); return; } + String[] force = request.getParameterValues("Force"); + if ( force != null) { + EC2request.setForce( Boolean.parseBoolean(force[0])); + } + // -> execute the request StopInstancesResponse EC2response = EC2SoapServiceImpl.toStopInstancesResponse( ServiceProvider.getInstance().getEC2Engine().stopInstances( EC2request )); serializeResponse(response, EC2response); @@ -1214,6 +1337,17 @@ public class EC2RestServlet extends HttpServlet { if (null != value && 0 < value.length) EC2request.addZone( value[0] ); } } + + // add filters + EC2Filter[] filterSet = extractFilters( request ); + if ( filterSet != null ) { + EC2AvailabilityZonesFilterSet afs = new EC2AvailabilityZonesFilterSet(); + for( int i=0; i < filterSet.length; i++ ) { + afs.addFilter(filterSet[i]); + } + EC2request.setFilterSet( afs ); + } + // -> execute the request DescribeAvailabilityZonesResponse EC2response = EC2SoapServiceImpl.toDescribeAvailabilityZonesResponse( ServiceProvider.getInstance().getEC2Engine().handleRequest( EC2request )); serializeResponse(response, EC2response); @@ -1240,25 +1374,35 @@ public class EC2RestServlet extends HttpServlet { private void describeImageAttribute( HttpServletRequest request, HttpServletResponse response ) throws ADBException, XMLStreamException, IOException { - EC2DescribeImages EC2request = new EC2DescribeImages(); + EC2DescribeImageAttribute ec2request = new EC2DescribeImageAttribute(); - // -> only works for queries about descriptions - String[] descriptions = request.getParameterValues( "Description" ); - if ( null != descriptions && 0 < descriptions.length ) { - String[] value = request.getParameterValues( "ImageId" ); - EC2request.addImageSet( value[0] ); - } + String[] imageId = request.getParameterValues( "ImageId" ); + if (imageId != null && imageId.length > 0) + ec2request.setImageId(imageId[0]); else { - response.sendError(501, "Unsupported - only description supported" ); + response.sendError(530, "Missing ImageId parameter"); return; } - // -> execute the request - DescribeImageAttributeResponse EC2response = EC2SoapServiceImpl.toDescribeImageAttributeResponse( ServiceProvider.getInstance().getEC2Engine().describeImages( EC2request )); + String[] attribute = request.getParameterValues( "Attribute" ); + if (attribute != null && attribute.length > 0) { + if (attribute[0].equalsIgnoreCase("description")) + ec2request.setAttribute(ImageAttribute.description); + else if (attribute[0].equalsIgnoreCase("launchPermission")) + ec2request.setAttribute(ImageAttribute.launchPermission); + else { + response.sendError(501, "Unsupported Attribute - description and launchPermission supported" ); + return; + } + } else { + response.sendError(530, "Missing Attribute parameter"); + return; + } + + DescribeImageAttributeResponse EC2response = EC2SoapServiceImpl.toDescribeImageAttributeResponse( ServiceProvider.getInstance().getEC2Engine().describeImageAttribute( ec2request )); serializeResponse(response, EC2response); } - private void describeInstances( HttpServletRequest request, HttpServletResponse response ) throws ADBException, XMLStreamException, IOException { @@ -1303,6 +1447,15 @@ public class EC2RestServlet extends HttpServlet { if (null != value && 0 < value.length) ec2Request.addPublicIp( value[0] ); } } + + // add filters + EC2Filter[] filterSet = extractFilters( request ); + if ( filterSet != null ) { + EC2AddressFilterSet afs = new EC2AddressFilterSet(); + for ( int i=0; i < filterSet.length; i++ ) + afs.addFilter( filterSet[i] ); + ec2Request.setFilterSet( afs ); + } // -> execute the request EC2Engine engine = ServiceProvider.getInstance().getEC2Engine(); serializeResponse(response, EC2SoapServiceImpl.toDescribeAddressesResponse( engine.describeAddresses( ec2Request))); @@ -1574,13 +1727,16 @@ public class EC2RestServlet extends HttpServlet { throws ADBException, XMLStreamException, IOException { EC2DescribeKeyPairs ec2Request = new EC2DescribeKeyPairs(); - - String[] keyNames = request.getParameterValues( "KeyName" ); - if (keyNames != null) { - for (String keyName : keyNames) { - ec2Request.addKeyName(keyName); + Enumeration names = request.getParameterNames(); + while( names.hasMoreElements()) { + String key = (String)names.nextElement(); + if ( key.startsWith("KeyName")) { + String[] value = request.getParameterValues( key); + if (null != value && 0 < value.length) + ec2Request.addKeyName( value[0]); } } + EC2Filter[] filterSet = extractFilters( request ); if (null != filterSet){ EC2KeyPairFilterSet vfs = new EC2KeyPairFilterSet(); @@ -1776,10 +1932,14 @@ public class EC2RestServlet extends HttpServlet { String paramName = (String) params.nextElement(); // exclude the signature string obviously. ;) if (paramName.equalsIgnoreCase("Signature")) continue; + // URLEncoder performs application/x-www-form-urlencoded-type encoding and not Percent encoding + // according to RFC 3986 as required by Amazon, we need to Percent-encode (URL Encode) + String encodedValue = URLEncoder.encode(request.getParameter(paramName), "UTF-8") + .replace("+", "%20").replace("*", "%2A"); if (queryString == null) - queryString = paramName + "=" + URLEncoder.encode(request.getParameter(paramName), "UTF-8"); + queryString = paramName + "=" + encodedValue; else - queryString = queryString + "&" + paramName + "=" + URLEncoder.encode(request.getParameter(paramName), "UTF-8"); + queryString = queryString + "&" + paramName + "=" + encodedValue; } } } diff --git a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java index b2451c6a0cb..cebac0b159e 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java +++ b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java @@ -41,12 +41,14 @@ import com.cloud.bridge.service.core.ec2.EC2DescribeAvailabilityZones; import com.cloud.bridge.service.core.ec2.EC2DescribeAvailabilityZonesResponse; import com.cloud.bridge.service.core.ec2.EC2DescribeImageAttribute; +import com.cloud.bridge.service.core.ec2.EC2AvailabilityZone; import com.cloud.bridge.service.core.ec2.EC2DescribeImages; import com.cloud.bridge.service.core.ec2.EC2DescribeImagesResponse; import com.cloud.bridge.service.core.ec2.EC2DescribeInstances; import com.cloud.bridge.service.core.ec2.EC2DescribeInstancesResponse; import com.cloud.bridge.service.core.ec2.EC2DescribeKeyPairs; import com.cloud.bridge.service.core.ec2.EC2DescribeKeyPairsResponse; +import com.cloud.bridge.service.core.ec2.EC2ImageLaunchPermission; import com.cloud.bridge.service.core.ec2.EC2ResourceTag; import com.cloud.bridge.service.core.ec2.EC2DescribeSecurityGroups; import com.cloud.bridge.service.core.ec2.EC2DescribeSecurityGroupsResponse; @@ -595,31 +597,32 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { request.setImageId(miat.getImageId()); request.setAttribute(ImageAttribute.launchPermission); if(launchPermOp.getAdd() != null){ - request.setLaunchPermOperation(EC2ModifyImageAttribute.Operation.add); - setAccountOrGroupList(launchPermOp.getAdd().getItem(), request); + setAccountOrGroupList(launchPermOp.getAdd().getItem(), request, "add"); }else if(launchPermOp.getRemove() != null){ - request.setLaunchPermOperation(EC2ModifyImageAttribute.Operation.remove); - setAccountOrGroupList(launchPermOp.getRemove().getItem(), request); + setAccountOrGroupList(launchPermOp.getRemove().getItem(), request, "remove"); } return toModifyImageAttributeResponse( engine.modifyImageAttribute( request )); } throw new EC2ServiceException( ClientError.Unsupported, "Unsupported - can only modify image description or launchPermission"); } - private void setAccountOrGroupList(LaunchPermissionItemType[] items, EC2ModifyImageAttribute request){ - - List launchPermissionAccountsOrGroupList = new ArrayList(); - + private void setAccountOrGroupList(LaunchPermissionItemType[] items, EC2ModifyImageAttribute request, String operation){ + EC2ImageLaunchPermission launchPermission = new EC2ImageLaunchPermission(); + + if (operation.equalsIgnoreCase("add")) + launchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.add); + else + launchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.remove); + for (LaunchPermissionItemType lpItem : items) { if(lpItem.getGroup() != null){ - launchPermissionAccountsOrGroupList.add(lpItem.getGroup()); + launchPermission.addLaunchPermission(lpItem.getGroup()); }else if(lpItem.getUserId() != null){ - launchPermissionAccountsOrGroupList.add(lpItem.getUserId()); + launchPermission.addLaunchPermission(lpItem.getUserId()); } } - - request.setLaunchPermissionAccountsOrGroupList(launchPermissionAccountsOrGroupList); + request.addLaunchPermission(launchPermission); } /** * Did not find a matching service offering so for now we just return disabled @@ -702,7 +705,9 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { if(elementType != null){ request.setImageId( riat.getImageId()); request.setAttribute(ImageAttribute.launchPermission); - request.setLaunchPermOperation(EC2ModifyImageAttribute.Operation.reset); + EC2ImageLaunchPermission launchPermission = new EC2ImageLaunchPermission(); + launchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.reset); + request.addLaunchPermission(launchPermission); return toResetImageAttributeResponse( engine.modifyImageAttribute( request )); } throw new EC2ServiceException( ClientError.Unsupported, "Unsupported - can only reset image launchPermission" ); @@ -726,8 +731,17 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { EC2RunInstances request = new EC2RunInstances(); request.setTemplateId(rit.getImageId()); - request.setMinCount(rit.getMinCount()); - request.setMaxCount(rit.getMaxCount()); + + if (rit.getMinCount() < 1) { + throw new EC2ServiceException(ClientError.InvalidParameterValue, + "Value of parameter MinCount should be greater than 0"); + } else request.setMinCount( rit.getMinCount() ); + + if (rit.getMaxCount() < 1) { + throw new EC2ServiceException(ClientError.InvalidParameterValue, + "Value of parameter MaxCount should be greater than 0"); + } else request.setMaxCount(rit.getMaxCount()); + if (null != type) request.setInstanceType(type); if (null != prt) request.setZoneName(prt.getAvailabilityZone()); if (null != userData) request.setUserData(userData.getData()); @@ -759,6 +773,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { public StopInstancesResponse stopInstances(StopInstances stopInstances) { EC2StopInstances request = new EC2StopInstances(); StopInstancesType sit = stopInstances.getStopInstances(); + Boolean force = sit.getForce(); // -> toEC2StopInstances InstanceIdSetType iist = sit.getInstancesSet(); @@ -766,6 +781,8 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { if (null != items) { // -> should not be empty for( int i=0; i < items.length; i++ ) request.addInstanceId( items[i].getInstanceId()); } + + if (force) request.setForce(sit.getForce()); return toStopInstancesResponse( engine.stopInstances( request )); } @@ -1285,7 +1302,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { param5.setInstanceId(vol.getInstanceId().toString()); String devicePath = engine.cloudDeviceIdToDevicePath( vol.getHypervisor(), vol.getDeviceId()); param5.setDevice( devicePath ); - param5.setStatus( toVolumeAttachmentState( vol.getInstanceId(), vol.getVMState())); + param5.setStatus(vol.getAttachmentState()); if (vol.getAttached() == null) { param5.setAttachTime( cal ); } else { @@ -1350,15 +1367,15 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { GroupSetType param4 = new GroupSetType(); - String[] groups = inst.getGroupSet(); + EC2SecurityGroup[] groups = inst.getGroupSet(); if (null == groups || 0 == groups.length) { GroupItemType param5 = new GroupItemType(); param5.setGroupId(""); param4.addItem( param5 ); } else { - for (String group : groups) { + for (EC2SecurityGroup group : groups) { GroupItemType param5 = new GroupItemType(); - param5.setGroupId(group); + param5.setGroupId(group.getId()); param4.addItem( param5 ); } } @@ -1541,25 +1558,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { else if (cloudState.equalsIgnoreCase( "Expunging" )) return new String( "terminated"); else return new String( "running" ); } - - /** - * We assume a state for the volume based on what its associated VM is doing. - * - * @param vmId - * @param vmState - * @return - */ - public static String toVolumeAttachmentState(String instanceId, String vmState ) { - if (null == instanceId || null == vmState) return "detached"; - - if (vmState.equalsIgnoreCase( "Destroyed" )) return "detached"; - else if (vmState.equalsIgnoreCase( "Stopped" )) return "attached"; - else if (vmState.equalsIgnoreCase( "Running" )) return "attached"; - else if (vmState.equalsIgnoreCase( "Starting" )) return "attaching"; - else if (vmState.equalsIgnoreCase( "Stopping" )) return "attached"; - else if (vmState.equalsIgnoreCase( "Error" )) return "detached"; - else return "detached"; - } + public static StopInstancesResponse toStopInstancesResponse(EC2StopInstancesResponse engineResponse) { StopInstancesResponse response = new StopInstancesResponse(); @@ -1677,16 +1676,16 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { param1.setOwnerId(ownerId); - String[] groups = inst.getGroupSet(); + EC2SecurityGroup[] groups = inst.getGroupSet(); GroupSetType param2 = new GroupSetType(); if (null == groups || 0 == groups.length) { GroupItemType param3 = new GroupItemType(); param3.setGroupId(""); param2.addItem( param3 ); } else { - for (String group : groups) { + for (EC2SecurityGroup group : groups) { GroupItemType param3 = new GroupItemType(); - param3.setGroupId(group); + param3.setGroupId(group.getId()); param2.addItem( param3 ); } } @@ -1771,14 +1770,18 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { DescribeAvailabilityZonesResponse response = new DescribeAvailabilityZonesResponse(); DescribeAvailabilityZonesResponseType param1 = new DescribeAvailabilityZonesResponseType(); AvailabilityZoneSetType param2 = new AvailabilityZoneSetType(); - - String[] zones = engineResponse.getZoneSet(); - for (String zone : zones) { + + EC2AvailabilityZone[] zones = engineResponse.getAvailabilityZoneSet(); + for (EC2AvailabilityZone zone : zones) { AvailabilityZoneItemType param3 = new AvailabilityZoneItemType(); - AvailabilityZoneMessageSetType param4 = new AvailabilityZoneMessageSetType(); - param3.setZoneName( zone ); + param3.setZoneName( zone.getName() ); param3.setZoneState( "available" ); param3.setRegionName( "" ); + + AvailabilityZoneMessageSetType param4 = new AvailabilityZoneMessageSetType(); + AvailabilityZoneMessageType param5 = new AvailabilityZoneMessageType(); + param5.setMessage(zone.getMessage()); + param4.addItem(param5); param3.setMessageSet( param4 ); param2.addItem( param3 ); } @@ -1799,10 +1802,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { param1.setVolumeId( engineResponse.getId().toString()); param1.setInstanceId( engineResponse.getInstanceId().toString()); param1.setDevice( engineResponse.getDevice()); - if ( null != engineResponse.getState()) - param1.setStatus( engineResponse.getState()); - else param1.setStatus( "" ); // ToDo - throw an Soap Fault - + param1.setStatus(engineResponse.getAttachmentState()); param1.setAttachTime( cal ); param1.setRequestId( UUID.randomUUID().toString()); @@ -1819,10 +1819,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { param1.setVolumeId( engineResponse.getId().toString()); param1.setInstanceId( (null == engineResponse.getInstanceId() ? "" : engineResponse.getInstanceId().toString())); param1.setDevice( (null == engineResponse.getDevice() ? "" : engineResponse.getDevice())); - if ( null != engineResponse.getState()) - param1.setStatus( engineResponse.getState()); - else param1.setStatus( "" ); // ToDo - throw an Soap Fault - + param1.setStatus(engineResponse.getAttachmentState()); param1.setAttachTime( cal ); param1.setRequestId( UUID.randomUUID().toString()); @@ -1908,7 +1905,10 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { param3.setStartTime( cal ); param3.setOwnerId(ownerId); - param3.setVolumeSize( snap.getVolumeSize().toString()); + if ( snap.getVolumeSize() == null ) + param3.setVolumeSize("0"); + else + param3.setVolumeSize( snap.getVolumeSize().toString() ); param3.setDescription( snap.getName()); param3.setOwnerAlias( snap.getAccountName() ); diff --git a/server/src/org/apache/cloudstack/region/dao/RegionSyncDaoImpl.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZone.java similarity index 54% rename from server/src/org/apache/cloudstack/region/dao/RegionSyncDaoImpl.java rename to awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZone.java index 9cd9b0dd71b..457c6efd069 100644 --- a/server/src/org/apache/cloudstack/region/dao/RegionSyncDaoImpl.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZone.java @@ -14,22 +14,42 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package org.apache.cloudstack.region.dao; +package com.cloud.bridge.service.core.ec2; -import javax.ejb.Local; +public class EC2AvailabilityZone { -import org.apache.cloudstack.region.RegionSyncVO; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; + private String id; + private String name; + private String message; -import com.cloud.utils.db.GenericDaoBase; + public EC2AvailabilityZone() { + id = null; + name = null; + message = null; + } -@Component -@Local(value={RegionSyncDao.class}) -public class RegionSyncDaoImpl extends GenericDaoBase implements RegionSyncDao { - private static final Logger s_logger = Logger.getLogger(RegionSyncDaoImpl.class); - - public RegionSyncDaoImpl(){ - + public void setId( String id ) { + this.id = id; } + + public String getId() { + return this.id; + } + + public void setName( String name ) { + this.name = name; + } + + public String getName() { + return this.name; + } + + public void setMessage( String message ) { + this.message = message; + } + + public String getMessage() { + return this.message; + } + } diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZonesFilterSet.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZonesFilterSet.java index 994b721203a..aa3897a4bf6 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZonesFilterSet.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZonesFilterSet.java @@ -36,6 +36,7 @@ public class EC2AvailabilityZonesFilterSet { public EC2AvailabilityZonesFilterSet() { // -> use these values to check that the proper filter is passed to this type of filter set filterTypes.put( "zone-name", "String" ); + filterTypes.put( "message", "String"); } public void addFilter( EC2Filter param ) { @@ -55,13 +56,14 @@ public class EC2AvailabilityZonesFilterSet { return filterSet.toArray(new EC2Filter[0]); } - public List evaluate( EC2DescribeAvailabilityZonesResponse availabilityZones) throws ParseException { - List resultList = new ArrayList(); + public EC2DescribeAvailabilityZonesResponse evaluate( EC2DescribeAvailabilityZonesResponse availabilityZones) + throws ParseException { + EC2DescribeAvailabilityZonesResponse resultList = new EC2DescribeAvailabilityZonesResponse(); boolean matched; EC2Filter[] filterSet = getFilterSet(); - for ( String availableZone : availabilityZones.getZoneSet() ) { + for ( EC2AvailabilityZone availableZone : availabilityZones.getAvailabilityZoneSet() ) { matched = true; if (filterSet != null) { for (EC2Filter filter : filterSet) { @@ -71,19 +73,22 @@ public class EC2AvailabilityZonesFilterSet { } } } - if (matched == true) - resultList.add(availableZone); + if (matched) + resultList.addAvailabilityZone(availableZone); } return resultList; } - private boolean filterMatched( String availableZone, EC2Filter filter ) throws ParseException { + private boolean filterMatched( EC2AvailabilityZone availableZone, EC2Filter filter ) throws ParseException { String filterName = filter.getName(); String[] valueSet = filter.getValueSet(); if ( filterName.equalsIgnoreCase("zone-name")) { - return containsString(availableZone, valueSet); - } + return containsString(availableZone.getName(), valueSet); + } + else if (filterName.equalsIgnoreCase("message")) { + return containsString(availableZone.getMessage(), valueSet); + } return false; } diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2DescribeAvailabilityZonesResponse.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2DescribeAvailabilityZonesResponse.java index ae0c233f83f..f9bc6b66d83 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2DescribeAvailabilityZonesResponse.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2DescribeAvailabilityZonesResponse.java @@ -20,31 +20,17 @@ import java.util.ArrayList; import java.util.List; public class EC2DescribeAvailabilityZonesResponse { + private List availabilityZoneSet = new ArrayList(); - private List zoneIds = new ArrayList(); - private List zoneNames = new ArrayList(); + public EC2DescribeAvailabilityZonesResponse() { + } + + public void addAvailabilityZone( EC2AvailabilityZone param ) { + availabilityZoneSet.add( param ); + } + + public EC2AvailabilityZone[] getAvailabilityZoneSet() { + return availabilityZoneSet.toArray(new EC2AvailabilityZone[0]); + } - public EC2DescribeAvailabilityZonesResponse() { - } - - public void addZone(String id, String name) { - zoneIds.add(id); - zoneNames.add(name); - } - - /** - * The Amazon API only cares about the names of zones not their ID value. - * - * @return an array containing a set of zone names - */ - public String[] getZoneSet() { - return zoneNames.toArray(new String[0]); - } - - public String getZoneIdAt(int index) { - if (zoneIds.isEmpty() || index >= zoneIds.size()) { - return null; - } - return zoneIds.get(index); - } } diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java index 8a5a733c4fb..e92f845f2b1 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java @@ -25,9 +25,12 @@ import java.security.SignatureException; import java.sql.SQLException; import java.text.ParseException; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Set; import java.util.UUID; import javax.inject.Inject; @@ -443,25 +446,35 @@ public class EC2Engine extends ManagerBase { */ public EC2DescribeSnapshotsResponse handleRequest( EC2DescribeSnapshots request ) { - EC2DescribeVolumesResponse volumes = new EC2DescribeVolumesResponse(); EC2SnapshotFilterSet sfs = request.getFilterSet(); EC2TagKeyValue[] tagKeyValueSet = request.getResourceTagSet(); try { - // -> query to get the volume size for each snapshot EC2DescribeSnapshotsResponse response = listSnapshots( request.getSnapshotSet(), getResourceTags(tagKeyValueSet)); if (response == null) { return new EC2DescribeSnapshotsResponse(); } EC2Snapshot[] snapshots = response.getSnapshotSet(); - for (EC2Snapshot snap : snapshots) { - volumes = listVolumes(snap.getVolumeId(), null, volumes, null); - EC2Volume[] volSet = volumes.getVolumeSet(); - if (0 < volSet.length) snap.setVolumeSize(volSet[0].getSize()); - volumes.reset(); + // -> query to get the volume size for each snapshot + HashMap volumeIdSize = new HashMap(); + for( EC2Snapshot snap : snapshots ) { + Boolean duplicateVolume = false; + Long size = null; + if ( volumeIdSize.containsKey(snap.getVolumeId()) ) { + size = volumeIdSize.get(snap.getVolumeId()); + duplicateVolume = true; + break; + } + if ( !duplicateVolume ) { + EC2DescribeVolumesResponse volumes = new EC2DescribeVolumesResponse(); + volumes = listVolumes(snap.getVolumeId(), null, volumes, null); + EC2Volume[] volumeSet = volumes.getVolumeSet(); + if (volumeSet.length > 0) size = volumeSet[0].getSize(); + volumeIdSize.put(snap.getVolumeId(), size); + } + snap.setVolumeSize(size); } - if ( null == sfs ) return response; else return sfs.evaluate( response ); @@ -535,32 +548,6 @@ public class EC2Engine extends ManagerBase { } - /** REST API calls this method. - * Modify an existing template - * - * @param request - * @return - */ - public boolean modifyImageAttribute( EC2Image request ) - { - // TODO: This is incomplete - EC2DescribeImagesResponse images = new EC2DescribeImagesResponse(); - - try { - images = listTemplates( request.getId(), images ); - EC2Image[] imageSet = images.getImageSet(); - - CloudStackTemplate resp = getApi().updateTemplate(request.getId(), null, request.getDescription(), null, imageSet[0].getName(), null, null); - if (resp != null) { - return true; - } - return false; - } catch( Exception e ) { - logger.error( "EC2 ModifyImage - ", e); - throw new EC2ServiceException(ServerError.InternalError, e.getMessage()); - } - } - /** * Modify an existing template @@ -572,32 +559,35 @@ public class EC2Engine extends ManagerBase { { try { if(request.getAttribute().equals(ImageAttribute.launchPermission)){ - - String accounts = ""; - Boolean isPublic = null; - EC2ModifyImageAttribute.Operation operation = request.getLaunchPermOperation(); - - List accountOrGroupList = request.getLaunchPermissionAccountsList(); - if(accountOrGroupList != null && !accountOrGroupList.isEmpty()){ - boolean first = true; - for(String accountOrGroup : accountOrGroupList){ - if("all".equalsIgnoreCase(accountOrGroup)){ - if(operation.equals(EC2ModifyImageAttribute.Operation.add)){ - isPublic = true; + EC2ImageLaunchPermission[] launchPermissions = request.getLaunchPermissionSet(); + for (EC2ImageLaunchPermission launchPermission : launchPermissions) { + String accounts = ""; + Boolean isPublic = null; + EC2ImageLaunchPermission.Operation operation = launchPermission.getLaunchPermOp(); + List accountOrGroupList = launchPermission.getLaunchPermissionList(); + if(accountOrGroupList != null && !accountOrGroupList.isEmpty()){ + boolean first = true; + for(String accountOrGroup : accountOrGroupList){ + if("all".equalsIgnoreCase(accountOrGroup)){ + if(operation.equals(EC2ImageLaunchPermission.Operation.add)){ + isPublic = true; + }else{ + isPublic = false; + } }else{ - isPublic = false; + if(!first){ + accounts = accounts + ","; + } + accounts = accounts + accountOrGroup; + first = false; } - }else{ - if(!first){ - accounts = accounts + ","; - } - accounts = accounts + accountOrGroup; - first = false; } } + CloudStackInfoResponse resp = getApi().updateTemplatePermissions(request.getImageId(), accounts, null, null, isPublic, operation.toString()); + if (!resp.getSuccess()) + return false; } - CloudStackInfoResponse resp = getApi().updateTemplatePermissions(request.getImageId(), accounts, null, null, isPublic, operation.toString()); - return resp.getSuccess(); + return true; }else if(request.getAttribute().equals(ImageAttribute.description)){ CloudStackTemplate resp = getApi().updateTemplate(request.getImageId(), null, request.getDescription(), null, null, null, null); if (resp != null) { @@ -648,59 +638,6 @@ public class EC2Engine extends ManagerBase { return imageAtts; } - - - /** - * If given a specific list of snapshots of interest, then only values from those snapshots are returned. - * - * @param interestedShots - can be null, should be a subset of all snapshots - */ - private EC2DescribeSnapshotsResponse listSnapshots( String[] interestedShots, List resourceTagSet ) throws Exception { - EC2DescribeSnapshotsResponse snapshots = new EC2DescribeSnapshotsResponse(); - - List cloudSnaps; - if (interestedShots == null || interestedShots.length == 0) { - cloudSnaps = getApi().listSnapshots(null, null, null, null, null, null, null, null, null, resourceTagSet); - } else { - cloudSnaps = new ArrayList(); - - for(String id : interestedShots) { - List tmpList = getApi().listSnapshots(null, null, id, null, null, null, null, - null, null, resourceTagSet); - cloudSnaps.addAll(tmpList); - } - } - - if (cloudSnaps == null) { - return null; - } - - for(CloudStackSnapshot cloudSnapshot : cloudSnaps) { - EC2Snapshot shot = new EC2Snapshot(); - shot.setId(cloudSnapshot.getId()); - shot.setName(cloudSnapshot.getName()); - shot.setVolumeId(cloudSnapshot.getVolumeId()); - shot.setType(cloudSnapshot.getSnapshotType()); - shot.setState(cloudSnapshot.getState()); - shot.setCreated(cloudSnapshot.getCreated()); - shot.setAccountName(cloudSnapshot.getAccountName()); - shot.setDomainId(cloudSnapshot.getDomainId()); - - List resourceTags = cloudSnapshot.getTags(); - for(CloudStackKeyValue resourceTag : resourceTags) { - EC2TagKeyValue param = new EC2TagKeyValue(); - param.setKey(resourceTag.getKey()); - if (resourceTag.getValue() != null) - param.setValue(resourceTag.getValue()); - shot.addResourceTag(param); - } - - snapshots.addSnapshot(shot); - } - return snapshots; - } - - // handlers /** * return password data from the instance @@ -843,7 +780,10 @@ public class EC2Engine extends ManagerBase { */ public boolean releaseAddress(EC2ReleaseAddress request) { try { - CloudStackIpAddress cloudIp = getApi().listPublicIpAddresses(null, null, null, null, null, request.getPublicIp(), null, null, null).get(0); + List cloudIps = getApi().listPublicIpAddresses(null, null, null, null, null, request.getPublicIp(), null, null, null); + if (cloudIps == null) + throw new EC2ServiceException(ServerError.InternalError, "Specified ipAddress doesn't exist"); + CloudStackIpAddress cloudIp = cloudIps.get(0); CloudStackInfoResponse resp = getApi().disassociateIpAddress(cloudIp.getId()); if (resp != null) { return resp.getSuccess(); @@ -863,8 +803,17 @@ public class EC2Engine extends ManagerBase { */ public boolean associateAddress( EC2AssociateAddress request ) { try { - CloudStackIpAddress cloudIp = getApi().listPublicIpAddresses(null, null, null, null, null, request.getPublicIp(), null, null, null).get(0); - CloudStackUserVm cloudVm = getApi().listVirtualMachines(null, null, true, null, null, null, null, request.getInstanceId(), null, null, null, null, null, null, null, null, null).get(0); + List cloudIps = getApi().listPublicIpAddresses(null, null, null, null, null, request.getPublicIp(), null, null, null); + if (cloudIps == null) + throw new EC2ServiceException(ServerError.InternalError, "Specified ipAddress doesn't exist"); + CloudStackIpAddress cloudIp = cloudIps.get(0); + + List vmList = getApi().listVirtualMachines(null, null, true, null, null, null, null, + request.getInstanceId(), null, null, null, null, null, null, null, null, null); + if (vmList == null || vmList.size() == 0) { + throw new EC2ServiceException(ServerError.InternalError, "Specified instance-id doesn't exist"); + } + CloudStackUserVm cloudVm = vmList.get(0); CloudStackInfoResponse resp = getApi().enableStaticNat(cloudIp.getId(), cloudVm.getId()); if (resp != null) { @@ -885,7 +834,11 @@ public class EC2Engine extends ManagerBase { */ public boolean disassociateAddress( EC2DisassociateAddress request ) { try { - CloudStackIpAddress cloudIp = getApi().listPublicIpAddresses(null, null, null, null, null, request.getPublicIp(), null, null, null).get(0); + List cloudIps = getApi().listPublicIpAddresses(null, null, null, null, null, request.getPublicIp(), null, null, null); + if (cloudIps == null) + throw new EC2ServiceException(ServerError.InternalError, "Specified ipAddress doesn't exist"); + CloudStackIpAddress cloudIp = cloudIps.get(0); + CloudStackInfoResponse resp = getApi().disableStaticNat(cloudIp.getId()); if (resp != null) { return resp.getSuccess(); @@ -1120,12 +1073,8 @@ public class EC2Engine extends ManagerBase { EC2AvailabilityZonesFilterSet azfs = request.getFilterSet(); if ( null == azfs ) return availableZones; - else { - List matchedAvailableZones = azfs.evaluate(availableZones); - if (matchedAvailableZones.isEmpty()) - return new EC2DescribeAvailabilityZonesResponse(); - return listZones(matchedAvailableZones.toArray(new String[0]), null); - } + else + return azfs.evaluate(availableZones); } catch( EC2ServiceException error ) { logger.error( "EC2 DescribeAvailabilityZones - ", error); throw error; @@ -1189,6 +1138,7 @@ public class EC2Engine extends ManagerBase { resp.setState(vol.getState()); resp.setType(vol.getVolumeType()); resp.setVMState(vol.getVirtualMachineState()); + resp.setAttachmentState(mapToAmazonVolumeAttachmentState(vol.getVirtualMachineState())); resp.setZoneName(vol.getZoneName()); return resp; } @@ -1275,6 +1225,7 @@ public class EC2Engine extends ManagerBase { resp.setState(vol.getState()); resp.setType(vol.getVolumeType()); resp.setVMState(vol.getVirtualMachineState()); + resp.setAttachmentState("detached"); resp.setZoneName(vol.getZoneName()); return resp; } @@ -1472,45 +1423,53 @@ public class EC2Engine extends ManagerBase { // now actually deploy the vms for( int i=0; i < createInstances; i++ ) { - CloudStackUserVm resp = getApi().deployVirtualMachine(svcOffering.getId(), - request.getTemplateId(), zoneId, null, null, null, null, - null, null, null, request.getKeyName(), null, (network != null ? network.getId() : null), - null, constructList(request.getGroupSet()), request.getSize().longValue(), request.getUserData()); - EC2Instance vm = new EC2Instance(); - vm.setId(resp.getId().toString()); - vm.setName(resp.getName()); - vm.setZoneName(resp.getZoneName()); - vm.setTemplateId(resp.getTemplateId().toString()); - if (resp.getSecurityGroupList() != null && resp.getSecurityGroupList().size() > 0) { - // TODO, we have a list of security groups, just return the first one? - List securityGroupList = resp.getSecurityGroupList(); - for (CloudStackSecurityGroup securityGroup : securityGroupList) { - vm.addGroupName(securityGroup.getName()); + try{ + CloudStackUserVm resp = getApi().deployVirtualMachine(svcOffering.getId(), + request.getTemplateId(), zoneId, null, null, null, null, + null, null, null, request.getKeyName(), null, (network != null ? network.getId() : null), + null, constructList(request.getGroupSet()), request.getSize().longValue(), request.getUserData()); + EC2Instance vm = new EC2Instance(); + vm.setId(resp.getId().toString()); + vm.setName(resp.getName()); + vm.setZoneName(resp.getZoneName()); + vm.setTemplateId(resp.getTemplateId().toString()); + if (resp.getSecurityGroupList() != null && resp.getSecurityGroupList().size() > 0) { + List securityGroupList = resp.getSecurityGroupList(); + for (CloudStackSecurityGroup securityGroup : securityGroupList) { + EC2SecurityGroup param = new EC2SecurityGroup(); + param.setId(securityGroup.getId()); + param.setName(securityGroup.getName()); + vm.addGroupName(param); + } } - } - vm.setState(resp.getState()); - vm.setCreated(resp.getCreated()); - List nicList = resp.getNics(); - for (CloudStackNic nic : nicList) { - if (nic.getIsDefault()) { - vm.setPrivateIpAddress(nic.getIpaddress()); - break; + vm.setState(resp.getState()); + vm.setCreated(resp.getCreated()); + List nicList = resp.getNics(); + for (CloudStackNic nic : nicList) { + if (nic.getIsDefault()) { + vm.setPrivateIpAddress(nic.getIpaddress()); + break; + } } + vm.setIpAddress(resp.getIpAddress()); + vm.setAccountName(resp.getAccountName()); + vm.setDomainId(resp.getDomainId()); + vm.setHypervisor(resp.getHypervisor()); + vm.setServiceOffering( svcOffering.getName()); + vm.setKeyPairName(resp.getKeyPairName()); + instances.addInstance(vm); + countCreated++; + }catch(Exception e){ + logger.error("Failed to deploy VM number: "+ (i+1) +" due to error: "+e.getMessage()); + break; } - vm.setIpAddress(resp.getIpAddress()); - vm.setAccountName(resp.getAccountName()); - vm.setDomainId(resp.getDomainId()); - vm.setHypervisor(resp.getHypervisor()); - vm.setServiceOffering( svcOffering.getName()); - vm.setKeyPairName(resp.getKeyPairName()); - instances.addInstance(vm); - countCreated++; } if (0 == countCreated) { // TODO, we actually need to destroy left-over VMs when the exception is thrown - throw new EC2ServiceException(ServerError.InsufficientInstanceCapacity, "Insufficient Instance Capacity" ); + throw new EC2ServiceException(ServerError.InternalError, "Failed to deploy instances" ); } + logger.debug("Could deploy "+ countCreated + " VM's successfully"); return instances; } catch( Exception e ) { @@ -1572,6 +1531,7 @@ public class EC2Engine extends ManagerBase { // -> first determine the current state of each VM (becomes it previous state) try { String[] instanceSet = request.getInstancesSet(); + Boolean forced = request.getForce(); EC2DescribeInstancesResponse previousState = listVirtualMachines( instanceSet, null, null ); virtualMachines = previousState.getInstanceSet(); @@ -1593,7 +1553,7 @@ public class EC2Engine extends ManagerBase { instances.addInstance(vm); continue; } - resp = getApi().stopVirtualMachine(vm.getId(), false); + resp = getApi().stopVirtualMachine(vm.getId(), forced); if(logger.isDebugEnabled()) logger.debug("Stopping VM " + vm.getId() + " job " + resp.getJobId()); } @@ -1701,11 +1661,16 @@ public class EC2Engine extends ManagerBase { ec2Vol.setSize(vol.getSize()); ec2Vol.setType(vol.getVolumeType()); - if(vol.getVirtualMachineId() != null) + if(vol.getVirtualMachineId() != null) { ec2Vol.setInstanceId(vol.getVirtualMachineId()); + if (vol.getVirtualMachineState() != null) { + ec2Vol.setVMState(vol.getVirtualMachineState()); + ec2Vol.setAttachmentState(mapToAmazonVolumeAttachmentState(vol.getVirtualMachineState())); + } + } else { + ec2Vol.setAttachmentState("detached"); + } - if(vol.getVirtualMachineState() != null) - ec2Vol.setVMState(vol.getVirtualMachineState()); ec2Vol.setZoneName(vol.getZoneName()); List resourceTags = vol.getTags(); @@ -1749,9 +1714,11 @@ public class EC2Engine extends ManagerBase { zones = listZones(interestedZones, domainId); - if (zones == null || zones.getZoneIdAt( 0 ) == null) + if (zones == null || zones.getAvailabilityZoneSet().length == 0) throw new EC2ServiceException(ClientError.InvalidParameterValue, "Unknown zoneName value - " + zoneName); - return zones.getZoneIdAt(0); + + EC2AvailabilityZone[] zoneSet = zones.getAvailabilityZoneSet(); + return zoneSet[0].getId(); } @@ -1826,24 +1793,31 @@ public class EC2Engine extends ManagerBase { * * @return EC2DescribeAvailabilityZonesResponse */ - private EC2DescribeAvailabilityZonesResponse listZones(String[] interestedZones, String domainId) throws Exception - { + private EC2DescribeAvailabilityZonesResponse listZones(String[] interestedZones, String domainId) + throws Exception { EC2DescribeAvailabilityZonesResponse zones = new EC2DescribeAvailabilityZonesResponse(); List cloudZones = getApi().listZones(true, domainId, null, null); - - if(cloudZones != null) { + if(cloudZones != null && cloudZones.size() > 0) { for(CloudStackZone cloudZone : cloudZones) { - if ( null != interestedZones && 0 < interestedZones.length ) { - for( int j=0; j < interestedZones.length; j++ ) { - if (interestedZones[j].equalsIgnoreCase( cloudZone.getName())) { - zones.addZone(cloudZone.getId().toString(), cloudZone.getName()); + boolean matched = false; + if (interestedZones.length > 0) { + for (String zoneName : interestedZones){ + if (zoneName.equalsIgnoreCase( cloudZone.getName())) { + matched = true; break; } } - } else { - zones.addZone(cloudZone.getId().toString(), cloudZone.getName()); + } else { + matched = true; } + if (!matched) continue; + EC2AvailabilityZone ec2Zone = new EC2AvailabilityZone(); + ec2Zone.setId(cloudZone.getId().toString()); + ec2Zone.setMessage(cloudZone.getAllocationState()); + ec2Zone.setName(cloudZone.getName()); + + zones.addAvailabilityZone(ec2Zone); } } return zones; @@ -1906,10 +1880,12 @@ public class EC2Engine extends ManagerBase { } if (cloudVm.getSecurityGroupList() != null && cloudVm.getSecurityGroupList().size() > 0) { - // TODO, we have a list of security groups, just return the first one? List securityGroupList = cloudVm.getSecurityGroupList(); for (CloudStackSecurityGroup securityGroup : securityGroupList) { - ec2Vm.addGroupName(securityGroup.getName()); + EC2SecurityGroup param = new EC2SecurityGroup(); + param.setId(securityGroup.getId()); + param.setName(securityGroup.getName()); + ec2Vm.addGroupName(param); } } @@ -2008,7 +1984,7 @@ public class EC2Engine extends ManagerBase { * @throws ParserConfigurationException * @throws ParseException */ - public EC2DescribeSecurityGroupsResponse listSecurityGroups( String[] interestedGroups ) throws Exception { + private EC2DescribeSecurityGroupsResponse listSecurityGroups( String[] interestedGroups ) throws Exception { try { EC2DescribeSecurityGroupsResponse groupSet = new EC2DescribeSecurityGroupsResponse(); @@ -2111,6 +2087,53 @@ public class EC2Engine extends ManagerBase { } } + private EC2DescribeSnapshotsResponse listSnapshots( String[] snapshotIds, List resourceTagSet) throws Exception { + try { + EC2DescribeSnapshotsResponse snapshotSet = new EC2DescribeSnapshotsResponse(); + + List snapshots = getApi().listSnapshots(null, null, null, null, null, null, null, null, null, resourceTagSet); + if ( snapshots != null && snapshots.size() > 0) { + for ( CloudStackSnapshot snapshot : snapshots) { + boolean matched = false; + if ( snapshotIds.length > 0) { + for ( String snapshotId : snapshotIds) { + if (snapshot.getId().equalsIgnoreCase(snapshotId)) { + matched = true; + break; + } + } + } else matched = true; + + if (!matched) continue ; + + EC2Snapshot ec2Snapshot = new EC2Snapshot(); + ec2Snapshot.setId(snapshot.getId()); + ec2Snapshot.setName(snapshot.getName()); + ec2Snapshot.setVolumeId(snapshot.getVolumeId()); + ec2Snapshot.setType(snapshot.getSnapshotType()); + ec2Snapshot.setState(snapshot.getState()); + ec2Snapshot.setCreated(snapshot.getCreated()); + ec2Snapshot.setAccountName(snapshot.getAccountName()); + ec2Snapshot.setDomainId(snapshot.getDomainId()); + + List resourceTags = snapshot.getTags(); + for( CloudStackKeyValue resourceTag : resourceTags) { + EC2TagKeyValue param = new EC2TagKeyValue(); + param.setKey(resourceTag.getKey()); + if ( resourceTag.getValue() != null) + param.setValue(resourceTag.getValue()); + ec2Snapshot.addResourceTag(param); + } + snapshotSet.addSnapshot(ec2Snapshot); + } + } + return snapshotSet; + } catch(Exception e) { + logger.error( "List Snapshots - ", e); + throw new EC2ServiceException(ServerError.InternalError, e.getMessage()); + } + } + /** * Convert ingress rule to EC2IpPermission records * @@ -2408,6 +2431,25 @@ public class EC2Engine extends ManagerBase { return "error"; } + /** + * Map CloudStack VM state to Amazon volume attachment state + * + * @param CloudStack VM state + * @return Amazon Volume attachment state + */ + private String mapToAmazonVolumeAttachmentState (String vmState) { + if ( vmState.equalsIgnoreCase("Running") || vmState.equalsIgnoreCase("Stopping") || + vmState.equalsIgnoreCase("Stopped") ) { + return "attached"; + } + else if (vmState.equalsIgnoreCase("Starting")) { + return "attaching"; + } + else { // VM state is 'destroyed' or 'error' or other + return "detached"; + } + } + /** * Map Amazon resourceType to CloudStack resourceType * diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2GroupFilterSet.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2GroupFilterSet.java index 149d25f6151..dbc367c109d 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2GroupFilterSet.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2GroupFilterSet.java @@ -41,6 +41,8 @@ public class EC2GroupFilterSet { filterTypes.put( "ip-permission.from-port", "string" ); filterTypes.put( "ip-permission.to-port", "string" ); filterTypes.put( "ip-permission.protocol", "string" ); + filterTypes.put( "ip-permission.group-name","string" ); + filterTypes.put( "ip-permission.user-id", "string" ); filterTypes.put( "owner-id", "string" ); } @@ -126,7 +128,7 @@ public class EC2GroupFilterSet { EC2IpPermission[] permissionSet = sg.getIpPermissionSet(); for (EC2IpPermission perm : permissionSet) { - boolean matched = true; + boolean matched = false; for (EC2Filter filter : ipPermissionFilterSet) { String filterName = filter.getName(); String[] valueSet = filter.getValueSet(); @@ -144,6 +146,24 @@ public class EC2GroupFilterSet { matched = containsString( perm.getToPort().toString(), valueSet ); } else if (filterName.equalsIgnoreCase( "ip-permission.protocol" )) matched = containsString( perm.getProtocol(), valueSet ); + else if (filterName.equalsIgnoreCase( "ip-permission.group-name" )) { + EC2SecurityGroup[] userSet = perm.getUserSet(); + for (EC2SecurityGroup user : userSet) { + if (containsString(user.getName(), valueSet)) { + matched = true; + break; + } + } + } + else if (filterName.equalsIgnoreCase( "ip-permission.user-id" )){ + EC2SecurityGroup[] userSet = perm.getUserSet(); + for (EC2SecurityGroup user : userSet) { + if (containsString(user.getAccountName(), valueSet)) { + matched = true; + break; + } + } + } if (!matched) break; } if (matched) return true; diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ImageLaunchPermission.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ImageLaunchPermission.java new file mode 100644 index 00000000000..552ffbe77d9 --- /dev/null +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ImageLaunchPermission.java @@ -0,0 +1,53 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.bridge.service.core.ec2; + +import java.util.ArrayList; +import java.util.List; + +public class EC2ImageLaunchPermission { + + private Operation launchPermOperation; + public enum Operation{ + add, + remove, + reset; + } + + private List launchPermissionList = new ArrayList(); + + public EC2ImageLaunchPermission() { + launchPermOperation = null; + } + + public void addLaunchPermission(String launchPermission) { + launchPermissionList.add(launchPermission); + } + + public List getLaunchPermissionList() { + return launchPermissionList; + } + + public void setLaunchPermOp( Operation launchPermOperation ) { + this.launchPermOperation = launchPermOperation; + } + + public Operation getLaunchPermOp() { + return this.launchPermOperation; + } + +} diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java index 9b43cb74299..9dfd1ca8ad2 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java @@ -41,7 +41,7 @@ public class EC2Instance { private String rootDeviceType; private String rootDeviceId; private String keyPairName; - private List groupSet; + private List groupSet; private List tagsSet; public EC2Instance() { @@ -62,7 +62,7 @@ public class EC2Instance { rootDeviceType = null; rootDeviceId = null; keyPairName = null; - groupSet = new ArrayList(); + groupSet = new ArrayList(); tagsSet = new ArrayList(); } @@ -202,12 +202,12 @@ public class EC2Instance { keyPairName = param; } - public void addGroupName( String param ) { + public void addGroupName( EC2SecurityGroup param ) { groupSet.add( param ); } - - public String[] getGroupSet() { - return groupSet.toArray(new String[0]); + + public EC2SecurityGroup[] getGroupSet() { + return groupSet.toArray(new EC2SecurityGroup[0]); } public void addResourceTag( EC2TagKeyValue param ) { diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2InstanceFilterSet.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2InstanceFilterSet.java index 449d89e2180..b5b7c7840df 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2InstanceFilterSet.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2InstanceFilterSet.java @@ -50,6 +50,7 @@ public class EC2InstanceFilterSet { filterTypes.put( "group-id", "string" ); filterTypes.put( "tag-key", "string" ); filterTypes.put( "tag-value", "string" ); + filterTypes.put( "dns-name", "string" ); } @@ -159,9 +160,10 @@ public class EC2InstanceFilterSet { } else if (filterName.equalsIgnoreCase( "group-id")) { - String[] groupSet = vm.getGroupSet(); - for (String group : groupSet) - if (containsString(group, valueSet)) return true; + EC2SecurityGroup[] groupSet = vm.getGroupSet(); + for (EC2SecurityGroup group: groupSet) { + if( containsString(group.getId(), valueSet)) return true; + } return false; } else if (filterName.equalsIgnoreCase("tag-key")) @@ -183,6 +185,8 @@ public class EC2InstanceFilterSet { } } return false; + }else if (filterName.equalsIgnoreCase( "dns-name" )){ + return containsString( vm.getName(), valueSet ); } else return false; } diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ModifyImageAttribute.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ModifyImageAttribute.java index 16f5ef750c7..e88d2d191aa 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ModifyImageAttribute.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ModifyImageAttribute.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.bridge.service.core.ec2; - +import java.util.ArrayList; import java.util.List; import com.cloud.bridge.service.core.ec2.EC2ImageAttributes.ImageAttribute; @@ -28,15 +28,7 @@ public class EC2ModifyImageAttribute { private String description; private Boolean isPublic = null; - private Operation launchPermOperation = null; - public enum Operation{ - add, - remove, - reset; - } - - private List launchPermissionAccountsOrGroupList; - + private List launchPermissionList = new ArrayList(); public EC2ModifyImageAttribute() { } @@ -65,31 +57,20 @@ public class EC2ModifyImageAttribute { return this.description; } - public void setLaunchPermissionAccountsOrGroupList(List launchPermissionAccountsOrGroupList) { - this.launchPermissionAccountsOrGroupList = launchPermissionAccountsOrGroupList; - } - - public List getLaunchPermissionAccountsList() { - return launchPermissionAccountsOrGroupList; - } - - public void setLaunchPermOperation( Operation launchPermOperation ) { - this.launchPermOperation = launchPermOperation; - } - - public Operation getLaunchPermOperation() { - return this.launchPermOperation; - } - - public void setIsPublic(Boolean isPublic) { this.isPublic = isPublic; } - public Boolean getIsPublic() { return isPublic; } - + + public void addLaunchPermission( EC2ImageLaunchPermission param ) { + launchPermissionList.add( param ); + } + + public EC2ImageLaunchPermission[] getLaunchPermissionSet() { + return launchPermissionList.toArray(new EC2ImageLaunchPermission[0]); + } } diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2StopInstances.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2StopInstances.java index 13e23d1a51f..be140008019 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2StopInstances.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2StopInstances.java @@ -23,6 +23,7 @@ public class EC2StopInstances { private List instancesSet = new ArrayList(); // a list of strings identifying instances private boolean destroyInstances; // we are destroying the instances rather than stopping them + private Boolean force = false; public EC2StopInstances() { destroyInstances = false; @@ -43,5 +44,13 @@ public class EC2StopInstances { public boolean getDestroyInstances() { return this.destroyInstances; } + + public void setForce( Boolean force ) { + this.force = force; + } + + public Boolean getForce() { + return this.force; + } } diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Volume.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Volume.java index 23d6d701646..79bc6e88911 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Volume.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Volume.java @@ -35,6 +35,7 @@ public class EC2Volume { private String hypervisor; private String created; private String attached; + private String attachmentState; private List tagsSet; public EC2Volume() { @@ -50,6 +51,7 @@ public class EC2Volume { hypervisor = null; created = null; attached = null; + attachmentState = null; tagsSet = new ArrayList(); } @@ -236,6 +238,20 @@ public class EC2Volume { this.attached = attached; } + /** + * @param state of the attached VM to set + */ + public void setAttachmentState(String attachedState) { + this.attachmentState = attachedState; + } + + /** + * @return state of the vm + */ + public String getAttachmentState() { + return attachmentState; + } + public void addResourceTag( EC2TagKeyValue param ) { tagsSet.add( param ); } diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2VolumeFilterSet.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2VolumeFilterSet.java index 0594231413e..b8021f3d4ba 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2VolumeFilterSet.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2VolumeFilterSet.java @@ -43,7 +43,7 @@ public class EC2VolumeFilterSet { filterTypes.put( "attachment.delete-on-termination", "null" ); filterTypes.put( "attachment.device", "string" ); filterTypes.put( "attachment.instance-id", "string" ); - filterTypes.put( "attachment.status", "null" ); + filterTypes.put( "attachment.status", "set:attached|attaching|detached|detaching" ); filterTypes.put( "availability-zone", "string" ); filterTypes.put( "create-time", "xsd:dateTime" ); filterTypes.put( "size", "integer" ); @@ -136,6 +136,9 @@ public class EC2VolumeFilterSet { return containsDevice(vol.getDeviceId(), valueSet ); else if (filterName.equalsIgnoreCase( "attachment.instance-id" )) return containsString(String.valueOf(vol.getInstanceId()), valueSet ); + else if ( filterName.equalsIgnoreCase( "attachment.status" ) ) { + return containsString(vol.getAttachmentState(), valueSet ); + } else if (filterName.equalsIgnoreCase("tag-key")) { EC2TagKeyValue[] tagSet = vol.getResourceTags(); diff --git a/awsapi/src/com/cloud/stack/CloudStackClient.java b/awsapi/src/com/cloud/stack/CloudStackClient.java index 5002aa593e7..5017bd423dd 100644 --- a/awsapi/src/com/cloud/stack/CloudStackClient.java +++ b/awsapi/src/com/cloud/stack/CloudStackClient.java @@ -151,7 +151,8 @@ public class CloudStackClient { return (new Gson()).fromJson(json.eval(responseName + "." + responseObjName), collectionType); } catch(Exception e) { // this happens because responseObjName won't exist if there are no objects in the list. - logger.debug("Unable to find responseObjName:[" + responseObjName + "]. Returning null! Exception: " + e.getMessage()); + logger.debug("CloudSatck API response doesn't contain responseObjName:" + responseObjName + + " because response is empty"); return null; } return (new Gson()).fromJson(json.eval(responseName), collectionType); diff --git a/build.xml b/build.xml deleted file mode 100755 index b013518ac72..00000000000 --- a/build.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - This is the overall dispatch file. It includes other build - files but doesnot provide targets of its own. Do not modify - this file. If you need to create your own targets, modify the - developer.xml. - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build-aws-api.xml b/build/build-aws-api.xml deleted file mode 100644 index 40ad22c2679..00000000000 --- a/build/build-aws-api.xml +++ /dev/null @@ -1,478 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build-cloud-plugins.xml b/build/build-cloud-plugins.xml deleted file mode 100755 index 207ef7113c8..00000000000 --- a/build/build-cloud-plugins.xml +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - - - - - - - Cloud Stack ant build file for building all the plugins - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build-cloud.xml b/build/build-cloud.xml deleted file mode 100755 index c31d00da220..00000000000 --- a/build/build-cloud.xml +++ /dev/null @@ -1,595 +0,0 @@ - - - - - - - Cloud Stack ant build file - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build-common.xml b/build/build-common.xml deleted file mode 100755 index 7240f5323c3..00000000000 --- a/build/build-common.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build-devcloud.xml b/build/build-devcloud.xml deleted file mode 100644 index a001dc2dd9c..00000000000 --- a/build/build-devcloud.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build-docs.xml b/build/build-docs.xml deleted file mode 100755 index c38b986ed5f..00000000000 --- a/build/build-docs.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - Cloud Stack ant build file - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build-marvin.xml b/build/build-marvin.xml deleted file mode 100644 index 6daac03f2ce..00000000000 --- a/build/build-marvin.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - This build file contains simple targets that - - build - - package - - distribute - the Marvin test client written in python - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/build-tests.xml b/build/build-tests.xml deleted file mode 100755 index 5f41ba278ff..00000000000 --- a/build/build-tests.xml +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - - Cloud Stack ant build file - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - diff --git a/build/build-usage.xml b/build/build-usage.xml deleted file mode 100644 index 9940f46edb3..00000000000 --- a/build/build-usage.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - Cloud Stack Usage server build - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/cloud.properties b/build/cloud.properties deleted file mode 100755 index e3cddf7770d..00000000000 --- a/build/cloud.properties +++ /dev/null @@ -1,29 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# major.minor.patch versioning scheme for CloudStack -company.major.version=4 -company.minor.version=0 -company.patch.version=0 - -svn.revision=2 - -# copyright year -company.copyright.year=2012 -company.url=http://cloudstack.org -company.license.name=Apache License, Version 2.0 -company.name=CloudStack diff --git a/build/developer.xml b/build/developer.xml deleted file mode 100755 index fdda171aff6..00000000000 --- a/build/developer.xml +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - - This is a developer.xml with tools to start and stop tomcat and - generally developer targets that has nothing to do with compiling. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - password - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/overview.html b/build/overview.html deleted file mode 100755 index 22f349fe10b..00000000000 --- a/build/overview.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -

- -VMOps source javadoc. - -

-Javadoc for JUnit tests -is also available. -

- - - diff --git a/build/package.xml b/build/package.xml deleted file mode 100755 index 3efdd7dda05..00000000000 --- a/build/package.xml +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - - This is a package.xml with tools to package the cloud stack distribution - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/release-notes b/build/release-notes deleted file mode 100644 index 34b20803a00..00000000000 --- a/build/release-notes +++ /dev/null @@ -1,328 +0,0 @@ -******************************************************************************** - VMOps Cloud Stack Version 0.4 - Release Notes -******************************************************************************** - -================================= -WHAT'S NEW : -================================= - -* NIC bonding support for the Computing, Routing, and Storage nodes to take -advantage of the multiple NICS installed on the server. -* Maintenance Mode support for physical servers. Administrators now have the -option to enable or disable maintenance mode on any physical servers. Enabling -maintenance mode on a Routing or Computing node will result in the seamless live -migration of guest virtual machines into other physical servers within the same -zone before making the server available for maintenance. -* Introduction of a new user web interface for allowing user accounts to manage -their own virtual machines. This new interface has a brand new look and feel, -allows for easier branding and customization, and is easier to incorporate into -existing web interfaces. -* Added support for the creation of Reseller Domains. The Reseller Domain -feature allows host providers to create resellers complete with their own -user base and administrators while using the same global computing resources -provided by the host provider. -* Added a new email alerting system that will now inform administrators of -events such as when physical servers are down or computing resources are -passing a pre-configured threshold. -* Massive improvements to the existing Developer and Integration API. Error -codes have now been added and existing API method names and parameters have been -made more consistent. A JSON format can also now be optionally -returned in addition to the existing XML format. Please read the new API -Reference documentation for more details on the changes. -* Billing records have now been changed to Usage records to provide data for -both billing integration and usage metering. Price has been completely removed -from VMOps. Instead we added ability to set your own display text for both -service offering and templates. You can now use this to set any text for the UI -to display. -* New virtual machines deployed will now generate a random password. A reset -password is also now available both in the web user interface as well as the -API. We support both Linux and Windows OS based templates. -* Storage server is now a bare-bone installation and uses the new COMSTAR iSCSI -stack for improved performance. We recognized that while running the storage -server as a virtual machine does allows for more hardware support, it severely -impacts performance. The list of compatible hardware can be found in the Open -Solaris website. -* Added clustering support for the VMOps Management Server. -* Added the ability to configure an additional storage ip address (separate -subnet) for both Routing and Computing servers. If a server is configured with -an additional storage ip, all storage traffic will route through this subnet and -all network/internet traffic will route through the existing private network. -* Added concept of a user account. VMOps supports multiple username for a -single user account. -* Created new installers for the VMOps MultiTenant Hypervisor and the VMOps -Storage. - -================================= -KNOWN ISSUES : -================================= - -* DomR is still counting internal network activities as part of the usage that -is being returned by the API. -* The reset password for virtual machine feature does not return an error if it -fails to successfully reset the password. -* VMOps installation scripts to not validate bad network configuration values. -* VNX Proxy Server does not handle rapid refreshes of web console proxy well. -* VNC Proxy Server at times do not return a thumbnail image. -* Rebooting a DomR instance will cause network traffic to not be collected. -* Associating new IP addresses should clean out existing LB or PF rules before -assigning it to a DomR instance. -* The Usage parse engine needs to be split out from the VMOps Management Server -so that only a single instance of this can be running and does not affect -normal operations. -* Templates needs a way of specifying the minimum CPU and Memory requirements. -* createUser API method currently allows you to assign users to admin accounts. -* Installations of servers with more than 3 NIC sometimes duplicates the MAC -address on the ifcfg configuration files. -* Additional admin only API methods are missing (ie. Domain management, router -management). -* Usage parse engine could go OOM in the event it has not been run recently -and there are a large (2 million+ records). -* Problem with domU when both e1000 and e1000e used as a NIC drivers for a -Computing Server. The installer needs to blacklist one of the drivers. -* vnet failures and xen crashes currently do not generate an alert to the administrator. -* The current limit for domU instances created on a Computing Server is 64 and -the currently limit for domR instances created is 59 on a Routing Server. -* No current way of allowing different subnets for different pods within the -same zone. -* limit the number of usage and event records returned by the API. A large -enough of the query could cause the Management Server to go oom. - -================================= -BUG FIXES : -================================= - -* Improved transactions across both database calls and calls across agents. -* Fixed an issue where duplicate IP or LB rules could be sent to the DomR -instance during a DomR restart. -* Removed requirement of the reverse DNS lookup for the Storage Server. -* Massive improvements to the HA process. -* Fixed an issue where the it would take too long for the management server -to detect a TCP disconnect. -* Fixed an issue where the the agent would *think* it has connected to the -management server but in reality, it is just stuck waiting for a response that -will never come. -* Generic DB lock wait timeout fixes. -* Improvements to the general state management of the servers. -* Fixed issue where where physical servers with the same IP attempts to connect -to the Management Server. The second server is now prevented from registering. -* Fixed an issue where deleting a user from an account would result in all the -virtual machines to be cleaned up. This can only happen if the last user for -an account has been deleted. -* Fixed an issue where the source NAT ip address of a DomR instance is being -released back into the public pool even though the DomR instance was not -successfully destroyed. -* Fixed an issue where a guest virtual machine cannot be destroyed while in HA -state. -* Removed requirement to specify the storage type when installing a new tempate. -* Fixed an issue where the console proxy from different zones are all starting -in the same zone. -* Fixed an issue where the listing of virtual machines would hang if the console -proxy is not even started. -* Massive improvements to our installer scripts. -* Massive improvements to the general stability of the Cloud Stack. -* Fixed an issue where the Hypervisor installer is unable to install onto -machines with a IPMI card. -* As usual, there are too many bug fixes to list... - -******************************************************************************** - VMOps Cloud Stack Version 0.3.xxxx - Release Notes -******************************************************************************** - -================================= -WHAT'S NEW : -================================= - -* Introduction of VMOps Developer API. This allows users of the VMOps Cloud - Stack to manage their virtual machines through a set of REST-like API. -* Improved collection of user usage data that can be used for both billing - aggregation and metric collection. -* High availability support for user virtual machines. -* Support for automatic hypervisor agent software update. -* VNC console proxy servers can now run as managed VMOps system VMs. The new - implementation provides features such as on-demand VM startup, standby - capacity pre-allocation and console proxy load monitoring. -* Much Improved VMOps Cloud Stack installation process. VMOps Cloud Stack can - now be installed with a minimum of two physical servers. -* VMOps Cloud Stack installation DVD now comes in two flavors. VMOps Cloud Stack - Management Server Installation DVD and VMOps Cloud Stack Multitenant - Hypervisor Installation DVD. - -================================= -KNOWN ISSUES : -================================= - -* PV drivers for Windows 2003 and Windows 2003 x86_64 (Incomplete Feature) -* GUI panel for allowing administrators to set various system configurations - - i.e. zones, pods, ip addresses (Incomplete Feature) -* Support for multiple NIC cards on computing, routing, and storage servers - (Disabled Feature) -* Support for resellers (Incomplete Feature) -* Allow admins/users to specify the root password for their new instance. It - cannot default to root/password (Bug 134) -* Admin/User Dashboard (Bug 154 and 155) -* Dynamically refresh server and vm instance status in GUI without a manual - refresh (Bug 389) -* Need transaction semantics across DB and agent. Without this, it is possible - to timeout db calls that first lock a record and relies on an agent response - before releasing that record. (Bug 408) -* All Server Roles (Mgmt, Computing, Routing, and Storage) require a functioning - eth0 NIC in order to install correctly. (Bug 470) -* Unable to handle HA when an entire Pod is unreachable (Bug 620) -* Improved network traffic reporting (Bug 642) -* Multiple login support a single user account (Bug 589) -* DomR instances continue to run even though all VMs associated with the DomR - are no longer even running. (Bug 617) -* HA fails when VM and Router for the same user go down at the same time - (Bug 603) - -================================= -BUG FIXES : -================================= - -* Improved Billing data generation (Bug 482) -* Able to create new admins through the admin console UI. (Bug 492) -* Able to create new Service Offerings through the admin console UI (Bug 500) -* Significantly improved the imaging speed when installing VMOps Cloud Stack - (Bug 476) -* Harden DomR Template to prevent unauthorized access -* No longer require eth0 during installation process of the hosts (Bug 490) -* Fixed issue where having multiple NIC cards caused issues (Bug 489) -* Installation UI will now allow you to select to the disk for storage - (Bug 556) -* Installation UI will now allow you to select NIC to use as private, public, - or simply disabled -* Mgmt server will now reflect the status of user vms if the storage server that - hosts the vm's volumes is no longer accessible. (Bug 521) -* Routing and Console Proxy VM will now be HA-enabled by default (Bug 614) -* Console Proxy VM are now automatically managed by the Mgmt Server (Bug 110) -* Template Management from the console admin UI should be improved -* Too many to list... - -******************************************************************************** - VMOps Cloud Stack Version 0.2.6297 - Release Notes -******************************************************************************** - -================================= -WHAT'S NEW : -================================= - -* VMOps Server - - Introduction of VMOps Integration API. This API allows service providers - to provision users and to retrieve billing info and events. It is a simple - query language written on top of HTTP that simply returns results in XML - format. - - Improved VMOps Server installation process. - -* VMOps Multitenant Hypervisor - - Improved VMOps Multitenant Hypervisor installation process. - -================================= -KNOWN ISSUES : -================================= - -* PV drivers for Windows 2003 and Windows 2003 x86_64 (Incomplete Feature) -* Developer, Billing, and Provisioning API (Incomplete Feature) -* Mirroring of disk images on storage servers across pods (Incomplete Feature) -* HA Enabled VMs (Disabled Feature) -* Firewall integration API (Incomplete Feature) -* GUI panel for allowing administrators to set various system configurations - - i.e. zones, pods, ip addresses (Incomplete Feature) -* Support for multiple NIC cards on computing, routing, and storage servers - (Disabled Feature) -* Ability to deploy agent upgrade on VMOps server and have the upgrade - automatically propagated to storage, routing, and computing servers. - (Bug 386) -* Detailed IO stats for storage servers (Bug 94) -* Admin/User Dashboard (Bug 154 and 155) -* OpenSolaris kernel panic (Bug 413) -* Dynamically refresh server and vm instance status in GUI without a manual - refresh (Bug 389) -* Need transaction semantics across DB and agent. Without this, it is possible - to timeout db calls that first lock a record and relies on an agent response - before releasing that record. (Bug 408) -* All Server Roles (Mgmt, Computing, Routing, and Storage) require a functioning - eth0 NIC in order to install correctly. (Bug 470) -* Admin Console UI Templates Tab needs improvement. (Bug 469) -* Unable to create new admins through the admin console UI. (Bug 492) -* Unable to create new Service Offerings through the admin console UI (Bug 500) - -================================= -BUG FIXES : -================================= - -* Added a new XML (server-setup.xml) to configure initial VMOps Server data. - (Bug 430) -* Made installation of the router template easier (Bug 434) -* Deleting a user through the admin UI will now show a progress bar (Bug 428) -* You can no longer any drop down boxes in the search left panel of the console - UI (Bug 439) -* Configured dom0 and domR to no longer do any reverse DNS lookup (Bug 459) -* Fixed installer to handle multiple NIC (Bug 457) -* Missing SDL module in all templates (Bug 449) - -******************************************************************************** - VMOps Cloud Stack Version 0.1.6053 - Release Notes -******************************************************************************** - -================================= -WHAT'S NEW : -================================= - -* VMOps Server - - Complete web UI for both administrators and users to manage VMOps Cloud - Stack. - - Allows administrators to manage the creation of service offerings and set - its pricing along with pricing for network bandwidth, additional public - ips, and vm templates. - - Allows administrators to retrieve billing records and user usages. - - VM Sync - coordinates, manages, and maintains the life cycle of VMOps agents - running on attached computing, routing, and storage hosts. - - VM Template Management - allows administrators to manage and upload hosted - vm templates into VMOps Cloud Stack. - -* VMOps Multitenant Hypervisor - - Designed to allow for the complete isolation of CPU, memory, storage, and - network resources for each user. - • Hypervisor Attached Storage (HAS) – The storage solution that is - integrated within the hypervisor and does not rely on centralized SAN or NAS - to implement storage virtualization. It provides a high performance and - ultra-reliable block storage for virtual machine images - - Hypervisor Aware Network (HAN) – The network solution for VMOps Cloud Stack - that implements the necessary IP address translation and tunneling for the - guest OS running inside the virtual machine. It does not rely on VLAN to - implement any network virtualization and isolation. - -================================= -KNOWN ISSUES : -================================= - -* PV drivers for Windows 2003 and Windows 2003 x86_64 (Incomplete Feature) -* Developer, Billing, and Provisioning API (Incomplete Feature) -* Mirroring of disk images on storage servers across pods (Incomplete Feature) -* HA Enabled VMs (Disabled Feature) -* Firewall integration API (Incomplete Feature) -* GUI panel for allowing administrators to set various system configurations - - i.e. zones, pods, ip addresses (Incomplete Feature) -* Support for multiple NIC cards on computing, routing, and storage servers - (Disabled Feature) -* Ability to deploy agent upgrade on VMOps server and have the upgrade - automatically propagated to storage, routing, and computing servers. - (Bug 386) -* Detailed IO stats for storage servers (Bug 94) -* Admin/User Dashboard (Bug 154 and 155) -* OpenSolaris kernel panic (Bug 413) -* Dynamically refresh server and vm instance status in GUI without a manual - refresh (Bug 389) -* Need transaction semantics across DB and agent. Without this, it is possible - to timeout db calls that first lock a record and relies on an agent response - before releasing that record. (Bug 408) - -================================= -BUG FIXES : -================================= - -* N/A \ No newline at end of file diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index eda07782196..d167a5c0a4f 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -17,6 +17,18 @@ #new labels (begin) ********************************************************************************************** +label.menu.regions=Regions +label.region=Region +label.add.region=Add Region +label.remove.region=Remove Region +message.remove.region=Are you sure you want to remove this region from this management server? +message.add.region=Please specify the required information to add a new region. +label.endpoint=Endpoint +label.plugins=Plugins +label.plugin.details=Plugin details +label.author.name=Author name +label.author.email=Author e-mail +label.external.link=External link label.egress.rules=Egress rules message.acquire.new.ip.vpc=Please confirm that you would like to acquire a new IP for this VPC. label.zoneWizard.trafficType.management=Management: Traffic between CloudStack\'s internal resources, including any components that communicate with the Management Server, such as hosts and CloudStack system VMs @@ -1139,6 +1151,7 @@ label.lang.chinese=Chinese (Simplified) label.lang.english=English label.lang.japanese=Japanese label.lang.spanish=Spanish +label.lang.korean=Korean label.lang.russian=Russian label.lang.french=French label.lang.brportugese=Brazilian Portugese @@ -1409,6 +1422,20 @@ label.zone.step.4.title=Step 4: Add an IP range label.zone.wide=Zone-Wide label.zone=Zone +#VM snapshot label +label.vmsnapshot=VM Snapshots +label.vmsnapshot.type=Type +label.vmsnapshot.parentname=Parent +label.vmsnapshot.current=isCurrent +label.vmsnapshot.memory=Snapshot memory +message.action.vmsnapshot.delete=Please confirm that you want to delete this VM snapshot. +label.action.vmsnapshot.delete=Delete VM snapshot +label.action.vmsnapshot.revert=Revert to VM snapshot +message.action.vmsnapshot.revert=Revert VM snapshot +label.action.vmsnapshot.create=Take VM Snapshot + + + #Messages message.acquire.public.ip=Please select a zone from which you want to acquire your new IP from. message.action.cancel.maintenance.mode=Please confirm that you want to cancel this maintenance. @@ -1545,3 +1572,9 @@ label.nicira.controller.address=Controller Address label.nicira.transportzoneuuid=Transport Zone Uuid label.nicira.l3gatewayserviceuuid=L3 Gateway Service Uuid +#resizeVolumes +label.resize.new.size=New Size(GB) +label.action.resize.volume=Resize Volume +label.action.resize.volume.processing=Resizing Volume.... +label.resize.new.offering.id=New Offering +label.resize.shrink.ok=Shrink OK diff --git a/client/WEB-INF/classes/resources/messages_fr_FR.properties b/client/WEB-INF/classes/resources/messages_fr_FR.properties index 4ba3c725892..267baec0270 100644 --- a/client/WEB-INF/classes/resources/messages_fr_FR.properties +++ b/client/WEB-INF/classes/resources/messages_fr_FR.properties @@ -15,1498 +15,1453 @@ # specific language governing permissions and limitations # under the License. - -#new labels (begin) ********************************************************************************************** -# label.isolation.uri=Isolation URI -# label.broadcast.uri=Broadcast URI -#new labels (end) ************************************************************************************************ - - -#modified labels (begin) ***************************************************************************************** -# message.zoneWizard.enable.local.storage=WARNING\: If you enable local storage for this zone, you must do the following, depending on where you would like your system VMs to launch\:

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

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


Would you like to continue? -#modified labels (end) ******************************************************************************************* - -# label.configure.network.ACLs=Configure Network ACLs -# label.network.ACLs=Network ACLs -# label.add.network.ACL=Add network ACL -# label.private.Gateway=Private Gateway -# label.VPC.router.details=VPC router details -# label.VMs.in.tier=VMs in tier -# label.local.storage.enabled=Local storage enabled -# label.tier.details=Tier details -# label.edit.tags=Edit tags -label.action.enable.physical.network=Activer le réseau physique -label.action.disable.physical.network=Désactiver le réseau physique -message.action.enable.physical.network=Confirmer l\'activation de ce réseau physique. -message.action.disable.physical.network=Confirmer la désactivation de ce réseau physique. - -# label.select.tier=Select Tier -# label.add.ACL=Add ACL -# label.remove.ACL=Remove ACL -# label.tier=Tier -# label.network.ACL=Network ACL -# label.network.ACL.total=Network ACL Total -# label.add.new.gateway=Add new gateway -# message.add.new.gateway.to.vpc=Please specify the information to add a new gateway to this VPC. -# label.delete.gateway=delete gateway -# message.delete.gateway=Please confirm you want to delete the gateway -# label.CIDR.of.destination.network=CIDR of destination network -# label.add.route=Add route -# label.add.static.route=Add static route -# label.remove.static.route=Remove static route -# label.site.to.site.VPN=site-to-site VPN -# label.add.VPN.gateway=Add VPN Gateway -# message.add.VPN.gateway=Please confirm that you want to add a VPN Gateway -# label.VPN.gateway=VPN Gateway -# label.delete.VPN.gateway=delete VPN Gateway -# message.delete.VPN.gateway=Please confirm that you want to delete this VPN Gateway -# label.VPN.connection=VPN Connection -# label.IPsec.preshared.key=IPsec Preshared-Key -# label.IKE.policy=IKE policy -# label.ESP.policy=ESP policy -# label.create.VPN.connection=Create VPN Connection -# label.VPN.customer.gateway=VPN Customer Gateway -# label.CIDR.list=CIDR list -# label.IKE.lifetime=IKE Lifetime (second) -# label.ESP.lifetime=ESP Lifetime(second) -# label.dead.peer.detection=Dead Peer Detection -# label.reset.VPN.connection=Reset VPN connection -# message.reset.VPN.connection=Please confirm that you want to reset VPN connection -# label.delete.VPN.connection=delete VPN connection -# message.delete.VPN.connection=Please confirm that you want to delete VPN connection -# label.add.new.tier=Add new tier -# label.add.VM.to.tier=Add VM to tier -# label.remove.tier=Remove tier - -# label.local.storage.enabled=Local storage enabled -# label.associated.network=Associated Network -# label.add.port.forwarding.rule=Add port forwarding rule -# label.dns=DNS - -# label.vpc=VPC -# label.vpc.id=VPC ID -# label.tier=Tier -# label.add.vpc=Add VPC -# label.super.cidr.for.guest.networks=Super CIDR for Guest Networks -# label.DNS.domain.for.guest.networks=DNS domain for Guest Networks -# label.configure.vpc=Configure VPC -# label.edit.vpc=Edit VPC -# label.restart.vpc=restart VPC -# message.restart.vpc=Please confirm that you want to restart the VPC -# label.remove.vpc=remove VPC -# message.remove.vpc=Please confirm that you want to remove the VPC -# label.vpn.customer.gateway=VPN Customer Gateway -# label.add.vpn.customer.gateway=Add VPN Customer Gateway -# label.IKE.encryption=IKE Encryption -# label.IKE.hash=IKE Hash -# label.IKE.DH=IKE DH -# label.ESP.encryption=ESP Encryption -# label.ESP.hash=ESP Hash -# label.perfect.forward.secrecy=Perfect Forward Secrecy -# label.IKE.lifetime=IKE Lifetime (second) -# label.ESP.lifetime=ESP Lifetime(second) -# label.dead.peer.detection=Dead Peer Detection -# label.delete.VPN.customer.gateway=delete VPN Customer Gateway -# message.delete.VPN.customer.gateway=Please confirm that you want to delete this VPN Customer Gateway - -label.network.domain.text=Texte du domaine réseau -label.memory.mb=Mémoire -label.cpu.mhz=CPU (en MHz) - -message.action.remove.host=Supprimer le dernier/seul hôte dans le cluster et le réinstaller va supprimer l\'environnement/la base de données sur l\'hôte et rendre les VMs invitées inutilisables. - -message.action.reboot.router=Confirmez que vous souhaitez redémarrer ce routeur. -message.action.stop.router=Confirmez que vous souhaitez arrêter ce routeur. -message.restart.network=Confirmer le redémarrage du réseau - - -label.ipaddress=Adresse IP -label.vcdcname=Nom du DC vCenter -label.vcipaddress=Adresse IP vCenter -label.vsmctrlvlanid=VLAN ID Controle -label.vsmpktvlanid=VLAN ID Paquet -label.vsmstoragevlanid=VLAN ID Stockage -label.nexusVswitch=Nexus Vswitch -label.action.delete.nexusVswitch=Supprimer le NexusVswitch -label.action.enable.nexusVswitch=Activer le NexusVswitch -label.action.disable.nexusVswitch=Désactiver le NexusVswitch -label.action.list.nexusVswitch=Lister les NexusVswitch -message.action.delete.nexusVswitch=Confirmer la suppression de ce NexusVswitch. -message.action.enable.nexusVswitch=Confirmer l\'activation de ce NexusVswitch. -message.action.disable.nexusVswitch=Confirmer la désactivation de ce NexusVswitch. -message.specify.url=Renseigner l\'URL -label.select.instance.to.attach.volume.to=Sélectionner l\'instance à laquelle rattacher ce volume -label.upload=Charger -label.upload.volume=Charger un volume -label.virtual.routers=Routeurs virtuels -label.primary.storage.count=Groupes de stockage primaire -label.secondary.storage.count=Groupes de stokage secondaire -label.number.of.system.vms=Nombre de VM système -label.number.of.virtual.routers=Nombre de routeurs virtuels -label.action.register.iso=Enregistrer ISO -label.isolation.method=Méthode de séparation -label.action.register.template=Enregister image -label.checksum=Checksum MD5 -label.vpn=VPN -label.vlan=VLAN - - -label.management.ips=Adresses IP de management -label.devices=Machines -label.rules=Règles -label.traffic.label=Label trafic -label.vm.state=Etat VM -# message.setup.physical.network.during.zone.creation.basic=When adding a basic zone, you can set up one physical network, which corresponds to a NIC on the hypervisor. The network carries several types of traffic.

You may also drag and drop other traffic types onto the physical network. -label.domain.router=Routeur du domaine -label.console.proxy=Console proxy -label.secondary.storage.vm=VM stockage secondaire -label.add.netScaler.device=Ajouter un Netscaler -label.add.F5.device=Ajouter un F5 -label.add.SRX.device=Ajouter un SRX -label.account.and.security.group=Compte, groupe de sécurité -label.fetch.latest=Raffraichir -label.system.offering=Offre système -message.validate.instance.name=le nom de l\'instance de l\'instance ne peut dépasser 63 caractères. Seuls les lettres de a à z, les chiffres de 0 à 9 et les tirets sont acceptés. Le nom doit commencer par une lettre et se terminer par une lettre ou un chiffre. - - -label.isolated.networks=Réseaux isolés -label.latest.events=Derniers évenements -state.Enabled=Actifs -label.system.wide.capacity=Capacité globale -label.network.service.providers=Provider de réseau -message.launch.zone=La zone est prête à démarrer; Continuer. -error.unable.to.reach.management.server=Impossible de joindre le serveur de management -label.internal.name=Nom interne -message.configure.all.traffic.types=Vous avez de multiples réseaux physiques; veuillez configurer les labels pour chaque type de trafic en cliquant sur le bouton Modifier. -message.edit.traffic.type=Spécifier le label de trafic associé avec ce type de trafic -label.edit.traffic.type=Modifer le type de trafic -label.label=Label -label.max.networks=Réseaux Max. -error.invalid.username.password=Utilisateur ou mot de passe invalide -message.enabling.security.group.provider=Activation du groupe de sécurité pour le provider -message.adding.Netscaler.provider=Ajouter un Netscaler provider -message.creating.guest.network=Création du réseau pour les instances -label.action.delete.physical.network=Supprimer le réseau physique -message.action.delete.physical.network=Confirmer la suppression du réseau physique -# message.installWizard.copy.whatIsAHost=A host is a single computer. Hosts provide the computing resources that run the guest virtual machines. Each host has hypervisor software installed on it to manage the guest VMs (except for bare metal hosts, which are a special case discussed in the Advanced Installation Guide). For example, a Linux KVM-enabled server, a Citrix XenServer server, and an ESXi server are hosts. In a Basic Installation, we use a single host running XenServer or KVM.

The host is the smallest organizational unit within a CloudStack&\#8482; deployment. Hosts are contained within clusters, clusters are contained within pods, and pods are contained within zones. - - -label.add.compute.offering=Ajouter une offre de calcul -label.compute.offering=Offre de calcul -label.compute.offerings=Offres de calcul -label.select.offering=Choisir une offre -label.menu.infrastructure=Infrastructure -label.sticky.tablesize=Taille du tableau -label.sticky.expire=Expiration -label.sticky.cookie-name=Nom du cookie -label.sticky.mode=Mode -label.sticky.length=Longueur -label.sticky.holdtime=Temps de pause -label.sticky.request-learn=Apprendre la requête -label.sticky.prefix=Préfixe -label.sticky.nocache=Pas de cache -label.sticky.indirect=Indirect -label.sticky.postonly=Après seulement -label.sticky.domain=Domaine -state.Allocating=Allocation en cours -state.Migrating=Migration en cours -error.please.specify.physical.network.tags=L\'offre réseau ne sera pas disponible tant que des label n\'auront pas été renseigner pour ce réseau physique. - - -state.Stopping=Arrêt en cours -message.add.load.balancer.under.ip=La règle de load balancer a été ajoutée sous l\'adresse IP \: -message.select.instance=Sélectionner une instance. -label.select=Selectionner -label.select.vm.for.static.nat=Sélectionner une VM pour le NAT statique -label.select.instance=Sélectionner une instance. -label.nat.port.range=Plage de port NAT -label.static.nat.vm.details=NAT statique, détails par VM -label.edit.lb.rule=Modifier la règle LB -message.migrate.instance.to.host=Merci de confirmer la migration de l\'instance vers un autre serveur -label.migrate.instance.to.host=Migration de l\'instance sur un autre serveur -message.migrate.instance.to.ps=Merci de confirmer la migration de l\'instance vers un autre stockage primaire -label.migrate.instance.to.ps=Migration de l\'instance sur un autre stockage primaire -label.corrections.saved=Modifications enregistrées -# message.installWizard.copy.whatIsSecondaryStorage=Secondary storage is associated with a zone, and it stores the following\:
  • Templates - OS images that can be used to boot VMs and can include additional configuration information, such as installed applications
  • ISO images - OS images that can be bootable or non-bootable
  • Disk volume snapshots - saved copies of VM data which can be used for data recovery or to create new templates
-# message.installWizard.copy.whatIsPrimaryStorage=A CloudStack&\#8482; cloud infrastructure makes use of two types of storage\: primary storage and secondary storage. Both of these can be iSCSI or NFS servers, or localdisk.

Primary storage is associated with a cluster, and it stores the disk volumes of each guest VM for all the VMs running on hosts in that cluster. The primary storage server is typically located close to the hosts. -# message.installWizard.copy.whatIsACluster=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. Virtual machine instances (VMs) can be live-migrated from one host to another within the same cluster, without interrupting service to the user. A cluster is the third-largest organizational unit within a CloudStack&\#8482; deployment. Clusters are contained within pods, and pods are contained within zones.

CloudStack&\#8482; allows multiple clusters in a cloud deployment, but for a Basic Installation, we only need one cluster. -# message.installWizard.copy.whatIsAPod=A pod often represents a single rack. Hosts in the same pod are in the same subnet.

A pod is the second-largest organizational unit within a CloudStack&\#8482; deployment. Pods are contained within zones. Each zone can contain one or more pods; in the Basic Installation, you will have just one pod in your zone. -# message.installWizard.copy.whatIsAZone=A zone is the largest organizational unit within a CloudStack&\#8482; deployment. A zone typically corresponds to a single datacenter, although it is permissible to have multiple zones in a datacenter. The benefit of organizing infrastructure into zones is to provide physical isolation and redundancy. For example, each zone can have its own power supply and network uplink, and the zones can be widely separated geographically (though this is not required). -# message.installWizard.copy.whatIsCloudStack=CloudStack&\#8482 is a software platform that pools computing resources to build public, private, and hybrid Infrastructure as a Service (IaaS) clouds. CloudStack&\#8482 manages the network, storage, and compute nodes that make up a cloud infrastructure. Use CloudStack&\#8482 to deploy, manage, and configure cloud computing environments.

Extending beyond individual virtual machine images running on commodity hardware, CloudStack&\#8482 provides a turnkey cloud infrastructure software stack for delivering virtual datacenters as a service - delivering all of the essential components to build, deploy, and manage multi-tier and multi-tenant cloud applications. Both open-source and Premium versions are available, with the open-source version offering nearly identical features. -message.installWizard.tooltip.addSecondaryStorage.path=Le chemin exporté, situé sur le serveur spécifié précédement -message.installWizard.tooltip.addSecondaryStorage.nfsServer=Adresse IP du server NFS supportant le stockage secondaire -# message.installWizard.tooltip.addPrimaryStorage.path=(for NFS) In NFS this is the exported path from the server. Path (for SharedMountPoint). With KVM this is the path on each host that is where this primary storage is mounted. For example, "/mnt/primary". -message.installWizard.tooltip.addPrimaryStorage.server=(pour NFS, iSCSI ou PreSetup) Adresse IP ou nom DNS du stockage -message.installWizard.tooltip.addPrimaryStorage.name=Nom pour ce stockage -message.installWizard.tooltip.addHost.password=Le mot de passe pour l\'utilisateur indiqué précédement (issu de l\'installation XenServer). -message.installWizard.tooltip.addHost.username=Habituellement root. -message.installWizard.tooltip.addHost.hostname=Le nom DNS ou adresse IP du serveur. -message.installWizard.tooltip.addCluster.name=Un nom pour le cluster. Ce choix est libre et n\'est pas utilisé par CloudStack. -# message.installWizard.tooltip.addPod.reservedSystemEndIp=This is the IP range in the private network that the CloudStack uses to manage Secondary Storage VMs and Console Proxy VMs. These IP addresses are taken from the same subnet as computing servers. -# message.installWizard.tooltip.addPod.reservedSystemStartIp=This is the IP range in the private network that the CloudStack uses to manage Secondary Storage VMs and Console Proxy VMs. These IP addresses are taken from the same subnet as computing servers. -message.installWizard.tooltip.addPod.reservedSystemNetmask=Le masque réseau que les instances utiliseront sur le réseau -message.installWizard.tooltip.addPod.reservedSystemGateway=Passerelle pour les serveurs dans ce pod -message.installWizard.tooltip.addPod.name=Nom pour le pod -# message.installWizard.tooltip.configureGuestTraffic.guestEndIp=The range of IP addresses that will be available for allocation to guests in this zone. If one NIC is used, these IPs should be in the same CIDR as the pod CIDR. -# message.installWizard.tooltip.configureGuestTraffic.guestStartIp=The range of IP addresses that will be available for allocation to guests in this zone. If one NIC is used, these IPs should be in the same CIDR as the pod CIDR. -message.installWizard.tooltip.configureGuestTraffic.guestNetmask=Le masque réseau que les instances devrait utiliser sur le réseau -message.installWizard.tooltip.configureGuestTraffic.guestGateway=La passerelle que les instances clientes doivent utiliser -message.installWizard.tooltip.configureGuestTraffic.description=Desctiption pour ce réseau -message.installWizard.tooltip.configureGuestTraffic.name=Nom pour ce réseau -# message.installWizard.tooltip.addZone.internaldns2=These are DNS servers for use by system VMs in the zone. These DNS servers will be accessed via the private network interface of the System VMs. The private IP address you provide for the pods must have a route to the DNS server named here. -# message.installWizard.tooltip.addZone.internaldns1=These are DNS servers for use by system VMs in the zone. These DNS servers will be accessed via the private network interface of the System VMs. The private IP address you provide for the pods must have a route to the DNS server named here. -# message.installWizard.tooltip.addZone.dns2=These are DNS servers for use by guest VMs in the zone. These DNS servers will be accessed via the public network you will add later. The public IP addresses for the zone must have a route to the DNS server named here. -message.installWizard.tooltip.addZone.name=Nom pour la zone -# message.installWizard.tooltip.addZone.dns1=These are DNS servers for use by guest VMs in the zone. These DNS servers will be accessed via the public network you will add later. The public IP addresses for the zone must have a route to the DNS server named here. -message.setup.successful=Installation Cloud réussie \! -label.may.continue=Vous pouvez continuer. -error.installWizard.message=Une erreur s\'est produite; vous pouvez retourner en arrière et corriger les erreurs -message.installWizard.now.building=Construction de votre Cloud en cours -message.installWizard.click.retry=Appuyer sur le bouton pour essayer à nouveau le démarrage. -label.launch=Démarrer -label.installWizard.click.launch=Appuyer sur le bouton démarrer. -label.congratulations=Félicitations \! -label.installWizard.addSecondaryStorageIntro.subtitle=Qu\'est ce que le stockage secondaire ? -label.installWizard.addSecondaryStorageIntro.title=Ajoutons du stockage secondaire -label.installWizard.addPrimaryStorageIntro.subtitle=Qu\'est ce que le stockage primaire ? -label.installWizard.addPrimaryStorageIntro.title=Ajoutons du stockage primaire -label.installWizard.addHostIntro.subtitle=Qu\'est ce qu\'un serveur ? -label.installWizard.addHostIntro.title=Ajoutons un serveur -label.installWizard.addClusterIntro.subtitle=Qu\'est ce qu\'un cluster ? -label.installWizard.addClusterIntro.title=Ajoutons un cluster -label.installWizard.addPodIntro.subtitle=Qu\'est ce qu\'un pod ? -label.installWizard.addPodIntro.title=Ajoutons un pod -label.installWizard.addZone.title=Ajouter une zone -label.installWizard.addZoneIntro.subtitle=Qu\'est ce qu\'une zone ? -label.installWizard.addZoneIntro.title=Ajoutons une zone -error.password.not.match=Les mot de passe ne correspondent pas -label.confirm.password=Confirmer le mot de passe -message.change.password=Merci de modifier votre mot de passe. -label.save.and.continue=Enregistrer et continuer -label.skip.guide=J\'ai déjà utilisé CloudStack avant, passer ce tutorial -label.continue.basic.install=Continuer avec l\'installation basique -label.introduction.to.cloudstack=Introduction à CloudStack -label.what.is.cloudstack=Qu\'est ce que CloudStack ? -label.hints=Astuces -label.installWizard.subtitle=Ce tutorial vous aidera à configurer votre installation CloudStack -label.continue=Continuer -label.installWizard.title=Bonjour et bienvenue dans CloudStack -label.agree=Accepter -label.manage.resources=Gérer les ressources -label.port.forwarding.policies=Règles de transfert de port -label.load.balancing.policies=Règles de répartition de charge -label.networking.and.security=Réseau et sécurité -label.bandwidth=Bande passante -label.virtual.machines=Machines virtuelles -label.compute.and.storage=Processeur et Stockage -label.task.completed=Tâche terminée -label.update.project.resources=Mettre à jour les ressources du projet -label.remove.project.account=Supprimer le compte projet -label.item.listing=Liste des éléments -message.select.item=Merci de sélectionner un élément. -label.removing=Suppression -label.invite=Inviter -label.add.by=Ajouté par -label.max.vms=Max VMs utilisateur -label.max.public.ips=Max IP publiques -label.max.volumes=Max volumes -label.max.snapshots=Max snapshots -label.max.templates=Max images -# label.max.vpcs=Max. VPCs -label.project.dashboard=Tableau de bord projet -label.remind.later=Rappeler moi plus tard -label.invited.accounts=Comptes invités -label.invite.to=Inviter sur -label.add.accounts.to=Ajouter des comptes sur -label.add.accounts=Ajouter des comptes -label.project.name=Nom du projet -label.create.project=Créer un projet -label.networks=Réseaux -label.launch.vm=Démarrer VM -label.new.vm=Nouvelle VM -label.previous=Retour -label.add.to.group=Ajouter au groupe -message.vm.review.launch=Merci de vérifier les informations suivantes et de confirmer que votre instance virtuelle est correcte avant de la démarrer. -message.select.security.groups=Merci de sélectionner un(des) groupe(s) de sécurité pour la nouvelle VM -label.new=Nouveau -message.please.select.networks=Selectionner les réseaux pour votre instance. -message.please.proceed=Continuer vers la prochaine étape. -message.zone.no.network.selection=La zone sélectionnée ne propose pas le réseau choisi -label.no.thanks=Non merci -label.my.templates=Mes images -message.select.template=Sélectionner une image pour votre nouvelle instance virtuelle. -message.select.iso=Sélectionner une ISO pour votre nouvelle instance virtuelle. -message.template.desc=Image OS pouvant être utilisée pour démarrer une VM -message.iso.desc=Image ISO contenant des données ou des binaires de démarrage -label.select.iso.or.template=Sélectionner une ISO ou une image -message.select.a.zone=Une zone corespond en général à un seul datacenter. Des zones multiples peuvent permettre de rendre votre cloud plus fiable en apportant une isolation physique et de la redondance. -label.select.a.zone=Sélectionner une zone -label.review=Revoir -label.select.a.template=Sélectionner une image -label.setup=Configuration -state.Allocated=Alloué -changed.item.properties=Propriétés de l\'élément modifiées -label.apply=Appliquer -label.default=Par défaut -label.viewing=Consultation en cours -label.move.to.top=Placer au dessus -label.move.up.row=Monter d\'un cran -label.move.down.row=Descendre d\'un cran -# label.move.to.bottom=Move to bottom -label.drag.new.position=Déplacer sur une autre position -label.order=Ordre -label.no.data=Aucune donnée -label.change.value=Modifier la valeur -label.clear.list=Purger la liste -label.full.path=Chemin complet -message.add.domain=Spécifier le sous domaine que vous souhaitez créer sous ce domaine -message.delete.user=Confirmer la suppression de l\'utilisateur. -message.enable.user=Confirmer l\'activation de cet utilisateur. -message.disable.user=Confirmer la désactivation de l\'utilisateur. -message.generate.keys=Confirmer la génération de nouvelles clefs pour cet utilisateur. -message.update.resource.count=Confirmer la mise à jour des ressources pour ce compte. -message.edit.account=Modifier ("-1" signifie pas de limite de ressources) -label.total.of.vm=Total VM -label.total.of.ip=Total adresses IP -state.enabled=Actif -message.action.download.iso=Confirmer le téléchargement de l\'ISO -message.action.download.template=Confirmer le téléchargement de l\'image -label.destination.zone=Zone destination -label.keyboard.type=Type de clavier -label.nic.adapter.type=Type de carte réseau -label.root.disk.controller=Controlleur disque principal -label.community=Communauté -label.remove.egress.rule=Supprimer la règle sortante -label.add.egress.rule=Ajouter la règle sortante -label.egress.rule=Règle sortante -label.remove.ingress.rule=Supprimer la règle entrante -label.delete.vpn.user=Supprimer l\'utilisateur VPN -label.add.vpn.user=Ajouter un utilisateur VPN -label.remove.pf=Supprimer la règle de transfert de port -label.remove.vm.from.lb=Supprimer la VM de la règle de répartition de charge -label.add.vms.to.lb=Ajouter une/des VM(s) à la règle de répartition de charge -label.add.vm=Ajouter VM -label.remove.static.nat.rule=Supprimer le NAT statique -label.remove.rule=Supprimer la règle -label.add.static.nat.rule=Ajouter une règle de NAT statique -label.add.rule=Ajouter règle -label.configuration=Configuration -message.disable.vpn=Etes vous sûr de vouloir désactiver le VPN ? -label.disable.vpn=Désactiver le VPN -message.enable.vpn=Confirmer l\'activation de l\'accès VPN pour cette adresse IP. -label.enable.vpn=Activer VPN -message.acquire.new.ip=Confirmer l\'ajout d\'une nouvelle adresse IP pour ce réseau. -label.elastic=Elastique -label.my.network=Mon réseau -label.add.vms=Ajouter VMs -label.configure=Configurer -label.stickiness=Fidélité -label.source=Origine -label.least.connections=Le moins de connexions -label.round.robin=Aléatoire -label.restart.required=Rédémarrage nécessaire -label.clean.up=Nettoyage -label.restart.network=Redémarrage du réseau -label.edit.network.details=Modifier les paramètres réseau -label.add.guest.network=Ajout d\'un réseau pour les VM -label.guest.networks=Réseau pour les VM -message.ip.address.changed=Vos adresses IP ont peut être changées; Voulez vous raffraichir la liste ? Dans ce cas, le panneau de détail se fermera. -state.BackingUp=Sauvegarde en cours -state.BackedUp=Sauvegardé -label.done=Terminé -label.vm.name=Nom de la VM -message.migrate.volume=Confirmer la migration du volume vers un autre stockage primaire. -label.migrate.volume=Migration du volume vers un autre stockage primaire -message.create.template=Voulez vous créer l\'image ? -label.create.template=Création d\'image -message.download.volume.confirm=Confirmer le téléchargement du volume -message.detach.disk=Voulez vous détacher ce disque ? -state.ready=Prêt -state.Ready=Prêt -label.vm.display.name=Nom d\'affichage de la VM -label.select-view=Sélectionner la vue -label.local.storage=Stockage local -label.direct.ips=IP directes -label.view.all=Voir tout -label.zone.details=Détails de la zone -message.alert.state.detected=Etat d\'alerte détecté -state.Starting=Démarrage en cours -state.Expunging=Purge en cours -state.Creating=Création en cours -message.decline.invitation=Voulez vous refuser cette invitation au projet ? -label.decline.invitation=Refuser l\'invitation -message.confirm.join.project=Confirmer l\'invitation au projet -message.join.project=Vous avez rejoint un projet. Sélectionnez la vue Projet pour le voir. -label.accept.project.invitation=Accepter l\'invitation au projet -label.token=Jeton unique -label.project.id=ID projet -message.enter.token=Entrer le jeton unique reçu dans le message d\'invitation. -label.enter.token=Entrez le jeton unique -state.Accepted=Accepté -state.Pending=En attente -state.Completed=Terminé -state.Declined=Refusé -label.project=Projet -label.invitations=Invitations -label.delete.project=Supprimer projet -message.delete.project=Confirmer la suppression du projet -message.activate.project=Confirmer l\'activation de ce projet -label.activate.project=Activer projet -label.suspend.project=Suspendre projet -message.suspend.project=Confirmer la suspension de ce projet -state.Suspended=Suspendu -label.edit.project.details=Modifier les détails du projet -label.new.project=Nouveau projet -state.Active=Actif -state.Disabled=Désactivé -label.projects=Projets -label.make.project.owner=Devenir propriétaire du projet -label.remove.project.account=Supprimer le compte projet -message.project.invite.sent=Invitation envoyée; les utilisateurs seront ajoutés après acceptation de l\'invitation -label.add.account.to.project=Ajouter un compte au projet -label.revoke.project.invite=Revoquer l\'invitation -label.project.invite=Inviter sur le projet -label.select.project=Sélectionner un projet -message.no.projects=Vous n\'avez pas de projet.
Vous pouvez en créer un depuis la section projets. -message.no.projects.adminOnly=Vous n\'avez pas de projet.
Contacter votre administrateur pour ajouter un projet. -message.pending.projects.1=Vous avez des invitations projet en attente \: -message.pending.projects.2=Pour les visualiser, aller dans la section projets, puis sélectionner invitation dans la liste déroulante. -message.instanceWizard.noTemplates=Vous n\'avez pas de image disponible; Ajouter une image compatible puis relancer l\'assistant de création d\'instance. -label.view=Voir -instances.actions.reboot.label=Redémarrer l\'instance -label.filterBy=Filtrer par -label.ok=OK -notification.reboot.instance=Redémarrer l\'instance -notification.start.instance=Démarrer l\'instance -notification.stop.instance=Stopper l\'instance -label.display.name=Nom d\'affichage -label.zone.name=Nom de la zone -ui.listView.filters.all=Tous -ui.listView.filters.mine=Mon -state.Running=Démarrée -state.Stopped=Arrétée -state.Destroyed=Supprimée -state.Error=Erreur -message.reset.password.warning.notPasswordEnabled=L\'image de cette instance a été créée sans la gestion de mot de passe -message.reset.password.warning.notStopped=Votre instance doit être arretée avant de changer son mot de passe -label.notifications=Messages -label.default.view=Vue par défaut -label.project.view=Vue projet - -message.add.system.service.offering=Ajouter les informations suivantes pour créer une nouvelle offre système. -message.action.delete.system.service.offering=Confirmer la suppression de l\'offre système. -label.action.delete.system.service.offering=Supprimer l\'offre système -label.hypervisor.capabilities=Fonctions hyperviseur -label.hypervisor.version=Version hyperviseur -label.max.guest.limit=Nombre maximum d\'instances -label.add.network.offering=Ajouter une offre réseau -label.supported.services=Services supportés -label.service.capabilities=Fonctions disponibles -label.guest.type=Type d\'instance -label.specify.IP.ranges=Plages IP -label.conserve.mode=Conserver le mode -label.created.by.system=Créé par le system -label.menu.system.service.offerings=Offres système -label.add.system.service.offering=Ajouter une offre de service système -label.redundant.router.capability=Router redondant -label.supported.source.NAT.type=Type de NAT supporté -label.elastic.LB=Répartition de charge extensible -label.LB.isolation=Répartition de charge isolée -label.elastic.IP=IP extensible -label.network.label.display.for.blank.value=Utiliser la passerelle par défaut -label.xen.traffic.label=Label pour le trafic Xenserver -label.kvm.traffic.label=Label pour le trafic KVM -label.vmware.traffic.label=Label pour le trafic VMware -label.start.IP=Démarrer l\'IP -label.end.IP=Résilier l\'IP -label.remove.ip.range=Supprimer la plage IP -label.ip.ranges=Plages IP -label.start.vlan=VLAN de départ -label.end.vlan=VLAN de fin -label.broadcast.domain.range=Plage de brodcast domaine -label.compute=Processeur -message.add.guest.network=Confirmer l\'ajout du réseau -label.subdomain.access=Accès au sous domaine -label.guest.start.ip=Adresse IP de début pour les instances -label.guest.end.ip=Adresse IP de fin pour les instances -label.virtual.router=Routeur Virtuel -label.physical.network.ID=ID du réseau physique -label.destination.physical.network.id=ID du réseau physique de destination -label.dhcp=DHCP -label.destroy.router=Supprimer le routeur -message.confirm.destroy.router=Confirmer la suppression du routeur -label.change.service.offering=Modifier l\'offre de service -label.view.console=Voir la console -label.redundant.state=Etat redondant -label.enable.provider=Activer le provider -message.confirm.enable.provider=Confirmer l\'activation de ce provider -label.disable.provider=Désactiver ce provider -message.confirm.disable.provider=Confirmer la désactivation de ce provider -label.shutdown.provider=Eteindre le provider -message.confirm.shutdown.provider=Confirmer l\'extinction de ce provider -label.netScaler=Netscaler -label.add.new.NetScaler=Ajouter Netscaler -label.capacity=Capacité -label.dedicated=Dédié -label.f5=F5 -label.add.new.F5=Ajouter un F5 -label.srx=SRX -label.providers=Fournisseurs -label.add.new.SRX=Ajouter un SRX -label.timeout=Expiration -label.public.network=Réseau public -label.private.network=Réseau privé -label.enable.swift=Activer Swift -confirm.enable.swift=Remplir les informations suivantes pour activer Swift -message.after.enable.swift=Swift configuré. Remarque \: une fois quitter cette page, il ne sera plus possible de reconfiguré Swift une nouvelle fois. -label.key=Clef -label.delete.NetScaler=Supprimer Netscaler -message.confirm.delete.NetScaler=Confirmer la suppression du Netscaler -label.delete.F5=Supprimer F5 -message.confirm.delete.F5=Confirmer la suppression du F5 -label.delete.SRX=Supprimer SRX -message.confirm.delete.SRX=Confirmer la suppression du SRX -label.pods=Pods -label.pod.name=Nom du pod -label.reserved.system.gateway=Gateway système réservée -label.reserved.system.netmask=Masque réseau système réservé -label.start.reserved.system.IP=Adresse IP de démarrage réservée pour le système -label.end.reserved.system.IP=Adresse IP de fin réservée pour le système -label.clusters=Clusters -label.cluster.name=Nom du cluster -label.host.MAC=MAC serveur -label.agent.username=Compte de l\'agent -label.agent.password=Mot de passe de l\'agent -message.confirm.action.force.reconnect=Confirmer que reconnection forcée de ce serveur. -label.resource.state=Etat des ressources -label.LUN.number=N° LUN -message.confirm.remove.IP.range=Confirmer la suppression de cette plage d\'adresses IP -message.tooltip.zone.name=Nom pour la zone. -message.tooltip.dns.1=Nom d\'un serveur DNS utilisé par les VM de la zone. Les adresses IP publiques de cette zones doivent avoir une route vers ce serveur. -message.tooltip.dns.2=Nom d\'un serveur DNS secondaire utilisé par les VM de la zone. Les adresses IP publiques de cette zones doivent avoir une route vers ce serveur. -message.tooltip.internal.dns.1=Nom d\'un serveur DNS que CloudStack peut utiliser pour les VM système dans cette zone. Les adresses IP privées des pods doivent avoir une route vers ce serveur. -message.tooltip.internal.dns.2=Nom d\'un serveur DNS que CloudStack peut utiliser pour les VM système dans cette zone. Les adresses IP privées des pods doivent avoir une route vers ce serveur. -message.tooltip.network.domain=Suffixe DNS pour les noms de domaine personnalisés accèdé par les intances. -message.tooltip.pod.name=Nom pour le pod. -message.tooltip.reserved.system.gateway=La passerelle pour les serveur du pod. -message.tooltip.reserved.system.netmask=Le préfixe réseau utilisé par le sous-réseau du pod. Au format CIDR. -message.creating.zone=Création de la zone -message.creating.physical.networks=Création des réseaux physiques -message.configuring.physical.networks=Configuration des réseaux physiques -message.adding.Netscaler.device=Ajout du Netscaler -message.creating.pod=Création d\'un pod -message.configuring.public.traffic=Configuration du réseau public -message.configuring.storage.traffic=Configuration du réseau de stockage -message.configuring.guest.traffic=Configuration du réseau VM -message.creating.cluster=Création du cluster -message.adding.host=Ajout du serveur -message.creating.primary.storage=Création du stockage primaire -message.creating.secondary.storage=Création du stockage secondaire -message.Zone.creation.complete=Création de la zone terminée -message.enabling.zone=Activation de la zone -error.something.went.wrong.please.correct.the.following=Erreur; corriger le point suivant -error.could.not.enable.zone=Impossible d\'activer la zone -message.zone.creation.complete.would.you.like.to.enable.this.zone=Création de la zone terminée. Voulez vous l\'activer ? -message.please.add.at.lease.one.traffic.range=Ajouter au moins une plage réseau -message.you.must.have.at.least.one.physical.network=Vous devez avoir au moins un réseau physique -message.please.select.a.different.public.and.management.network.before.removing=Sélectionner un réseau publique et management différent avant de supprimer - -label.zone.type=Type de zone -label.setup.zone=Configurer la zone -label.setup.network=Configurer le réseau -label.add.resources=Ajouter des resssources -label.launch=Démarrer -label.set.up.zone.type=configurer le type de zone -message.please.select.a.configuration.for.your.zone=Sélectionner une configuration pour la 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=Avancé -# 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=Réseau physique -label.public.traffic=Trafic public -label.guest.traffic=Trafic invité -label.storage.traffic=Trafic stockage -# 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=Ajouter un réseau physique -label.traffic.types=Type de trafic -label.management=Management -label.guest=Invité -label.please.specify.netscaler.info=Renseigner les informations sur le Netscaler -# message.public.traffic.in.advanced.zone=Public traffic is generated when VMs in the cloud access the internet. Publicly-accessible IPs must be allocated for this purpose. End users can use the CloudStack UI to acquire these IPs to implement NAT between their guest network and their public network.

Provide at least one range of IP addresses for internet traffic. -# message.public.traffic.in.basic.zone=Public traffic is generated when VMs in the cloud access the Internet or provide services to clients over the Internet. Publicly accessible IPs must be allocated for this purpose. When a instance is created, an IP from this set of Public IPs will be allocated to the instance in addition to the guest IP address. Static 1-1 NAT will be set up automatically between the public IP and the guest IP. End users can also use the CloudStack UI to acquire additional IPs to implement static NAT between their instances and the public IP. -# message.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 least one host (computer) for guest VMs to run on, and we will add the first host now. For a host to function in CloudStack, you must install hypervisor software on the host, assign an IP address to the host, and ensure the host is connected to the CloudStack management server.

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 least one NFS or secondary storage server, and we will add the first one now. Secondary storage stores VM templates, ISO images, and VM disk volume snapshots. This server must be available to all hosts in the zone.

Provide the IP address and exported path. -label.launch.zone=Démarrer la zone -message.please.wait.while.zone.is.being.created=Patienter pendant la création de la zone, cela peut prendre du temps... - -label.load.balancing=Load Balancing -label.static.nat.enabled=NAT statique activé -label.zones=Zones -label.view.more=Voir plus -label.number.of.zones=Nombre de zones -label.number.of.pods=Nombre de Pods -label.number.of.clusters=Nombre de clusters -label.number.of.hosts=Nombre de serveurs -label.total.hosts=Total serveurs -label.total.CPU=Capacité Totale en CPU -label.total.memory=Total mémoire -label.total.storage=Total stockage -label.purpose=Rôle - - - - -label.action.migrate.router=Migration routeur -label.action.migrate.router.processing=Migration routeur en cours... -message.migrate.router.confirm=Confirmer la migration du routeur vers \: -label.migrate.router.to=Migrer le routeur vers - -label.action.migrate.systemvm=Migration VM système -label.action.migrate.systemvm.processing=Migration VM système en cours ... -message.migrate.systemvm.confirm=Confirmer la migration de la VM système vers \: -label.migrate.systemvm.to=Miger la VM système vers - - -mode=Mode -side.by.side=Côte à cote -inline=Aligné - -extractable=Décompressable - -label.ocfs2=OCFS2 - -label.action.edit.host=Modifier l\'hôte - -network.rate=Débit Réseau - -ICMP.type=Type ICMP +#Stored by I18NEdit, may be edited! ICMP.code=Code ICMP - -image.directory=Répertoire d\'images - -label.action.create.template.from.vm=Créer un modèle depuis la VM -label.action.create.template.from.volume=Créer un modèle depuis le volume - -message.vm.create.template.confirm=Créer un modèle va redémarrer la VM automatiquement - -label.action.manage.cluster=Gérer le Cluster -message.action.manage.cluster=Confirmez que vous voulez gérer le cluster -label.action.manage.cluster.processing=Gestion du cluster... - -label.action.unmanage.cluster=Ne plus gérer le Cluster -message.action.unmanage.cluster=Confirmez que vous ne voulez plus gérer le cluster -label.action.unmanage.cluster.processing=Arrêt de la gestion du Cluster - -label.allocation.state=Etat de l\'allocation -managed.state=Etat de la gestion - -label.default.use=Utilisation par défaut -label.host.tags=Labels Server - -label.cidr=CIDR -label.cidr.list=CIDR Source - -label.storage.tags=Etiquettes de stockage - -label.redundant.router=Routeur redondant -label.is.redundant.router=Redondant - +ICMP.type=Type ICMP +changed.item.properties=Propri\u00E9t\u00E9s de l\\'\u00E9l\u00E9ment modifi\u00E9es +confirm.enable.s3=Remplir les informations suivantes pour activer le support de stockage secondaire S3 +confirm.enable.swift=Remplir les informations suivantes pour activer Swift +error.could.not.enable.zone=Impossible d\\'activer la zone +error.installWizard.message=Une erreur s\\'est produite ; vous pouvez retourner en arri\u00E8re et corriger les erreurs +error.invalid.username.password=Utilisateur ou mot de passe invalide +error.login=Votre nom d\\'utilisateur / mot de passe ne correspond pas \u00E0 nos donn\u00E9es. +error.menu.select=\u00C9chec de l\\'action car il n\\'y a aucun \u00E9l\u00E9ment s\u00E9lectionn\u00E9. +error.mgmt.server.inaccessible=Le serveur de gestion est indisponible. Essayez plus tard. +error.password.not.match=Les mots de passe ne correspondent pas +error.please.specify.physical.network.tags=L\\'offre r\u00E9seau ne sera pas disponible tant que des libell\u00E9s n\\'auront pas \u00E9t\u00E9 renseign\u00E9s pour ce r\u00E9seau physique. +error.session.expired=Votre session a expir\u00E9e. +error.something.went.wrong.please.correct.the.following=Erreur; corriger le point suivant +error.unable.to.reach.management.server=Impossible de joindre le serveur d\\'administration +error.unresolved.internet.name=Votre nom Internet ne peut pas \u00EAtre r\u00E9solu. +extractable=D\u00E9compressable force.delete=Forcer la suppression -force.delete.domain.warning=Attention\: Choisir cette opion entrainera la suppression de tous les domaines issus et l\'ensemble des comptes associées, ainsi que de leur ressources - +force.delete.domain.warning=Attention \: Choisir cette option entra\u00EEnera la suppression de tous les domaines issus et l\\'ensemble des comptes associ\u00E9s, ainsi que de leur ressources force.remove=Forcer la suppression -force.remove.host.warning=Attention\: Choisir cette option entrainera CloudStack à  arrêter l\'ensemble des machines virtuelles avant d\'enlever l\'hôte du cluster - -force.stop=Forcer l\'arrêt -force.stop.instance.warning=Attention \: un arrêt forcé sur cette instance est l\'option ultime. Cela peut engendrer des pertes de données et/ou un comportement inconsitent de votre instance. - -label.PreSetup=PreSetup -label.SR.name = Nom du point de montage -label.SharedMountPoint=Point de montage partagé -label.clvm=CLVM -label.volgroup=Volume Group -label.VMFS.datastore=datastore VMFS - -label.network.device=Equipement Réseau -label.add.network.device=Ajouter un équipement réseau -label.network.device.type=Type d\'équipement réseau +force.remove.host.warning=Attention \: Choisir cette option entra\u00EEnera CloudStack \u00E0\u00A0arr\u00EAter l\\'ensemble des machines virtuelles avant d\\'enlever l\\'h\u00F4te du cluster +force.stop=Forcer l\\'arr\u00EAt +force.stop.instance.warning=Attention \: un arr\u00EAt forc\u00E9 sur cette instance est la dernier option. Cela peut engendrer des pertes de donn\u00E9es et/ou un comportement inconsistant de votre instance. +image.directory=R\u00E9pertoire d\\'images +inline=Align\u00E9 +instances.actions.reboot.label=Red\u00E9marrer l\\'instance +label.CIDR.list=Liste CIDR +label.CIDR.of.destination.network=CIDR du r\u00E9seau de destination +label.CPU.cap=Limitation CPU label.DHCP.server.type=Serveur DHCP +label.DNS.domain.for.guest.networks=Domaine DNS pour les r\u00E9seaux invit\u00E9s +label.ESP.encryption=Chiffrement ESP +label.ESP.hash=Empreinte ESP +label.ESP.lifetime=Dur\u00E9e de vie ESP (secondes) +label.ESP.policy=Mode ESP +label.IKE.DH=DH IKE +label.IKE.encryption=Chiffrement IKE +label.IKE.hash=Empreinte IKE +label.IKE.lifetime=Dur\u00E9e de vie IKE (secondes) +label.IKE.policy=Mode IKE +label.IPsec.preshared.key=Cl\u00E9 partag\u00E9e IPsec +label.LB.isolation=R\u00E9partition de charge isol\u00E9e +label.LUN.number=N\u00B0 LUN +label.PING.CIFS.password=Mot de passe CIFS PING +label.PING.CIFS.username=Identifiant CIFS PING +label.PING.dir=R\u00E9pertoire PING +label.PING.storage.IP=IP stockage PING +label.PreSetup=PreSetup label.Pxe.server.type=Serveur PXE -label.PING.storage.IP=adresse PING (stockage) -label.PING.dir=répertoire PING -label.TFTP.dir=répertoire TFTP -label.PING.CIFS.username=utilisateur CIFS PING -label.PING.CIFS.password=mot de passe CIFS PING -label.CPU.cap=Utilisation maximum du CPU - - -label.action.enable.zone=Activer la zone -label.action.enable.zone.processing=Activation de la zone... -message.action.enable.zone=Confirmez que vous voulez activer cette zone -label.action.disable.zone=Désactivation de la zone -label.action.disable.zone.processing=Désactivation de la zone... -message.action.disable.zone=Confirmez que vous voulez désactiver cette zone - -label.action.enable.pod=Activer le Pod -label.action.enable.pod.processing=Activation du Pod... -message.action.enable.pod=Confirmez que vous souhaitez activer ce Pod -label.action.disable.pod=Désactiver le Pod -label.action.disable.pod.processing=Désactivation du Pod... -message.action.disable.pod=Confirmez que vous voulez désactiver ce Pod - -label.action.enable.cluster=Activer le cluster -label.action.enable.cluster.processing=Activation du cluster... -message.action.enable.cluster=Confirmez que vous souhaitez activer ce cluster -label.action.disable.cluster=Désactiver le cluster -label.action.disable.cluster.processing=Désactivation du cluster... -message.action.disable.cluster=Confirmez que vous souhaitez désactiver ce cluster - +label.SR.name=Nom du point de montage +label.SharedMountPoint=Point de montage partag\u00E9 +label.TFTP.dir=R\u00E9pertoire TFTP +label.VMFS.datastore=Magasin de donn\u00E9es VMFS +label.VMs.in.tier=Machines virtuelles dans le tiers +label.VPC.router.details=D\u00E9tails routeur VPC +label.VPN.connection=Connexion VPN +label.VPN.customer.gateway=Passerelle VPN client +label.VPN.gateway=Passerelle VPN +label.accept.project.invitation=Accepter l\\'invitation au projet +label.account=Compte +label.account.and.security.group=Compte, groupe de s\u00E9curit\u00E9 label.account.id=ID du Compte label.account.name=Nom du compte -label.account.specific=Spécifique au compte -label.account=Compte +label.account.specific=Sp\u00E9cifique au compte label.accounts=Comptes -label.acquire.new.ip=Acquérir une nouvelle adresse IP -label.show.ingress.rule=Montrer la règle Ingress -label.hide.ingress.rule=Cacher la règle Ingress -label.action.attach.disk.processing=Attachement du Disque... -label.action.attach.disk=Attacher un disque -label.action.attach.iso.processing=Attachement de l\'image ISO -label.action.attach.iso=Attacher une image ISO -label.action.cancel.maintenance.mode.processing=Annulation du mode maintenance... +label.acquire.new.ip=Acqu\u00E9rir une nouvelle adresse IP +label.action.attach.disk=Rattacher un disque +label.action.attach.disk.processing=Rattachement du Disque... +label.action.attach.iso=Rattacher une image ISO +label.action.attach.iso.processing=Rattachement de l\\'image ISO label.action.cancel.maintenance.mode=Annuler le mode maintenance +label.action.cancel.maintenance.mode.processing=Annulation du mode maintenance... label.action.change.password=Changer le mot de passe -label.action.change.service.processing=Changement de d\'offre de service... -label.action.change.service=Changer d\'offre de service -label.action.copy.ISO.processing=Copie de l\'image ISO... +label.action.change.service=Changer d\\'offre de service +label.action.change.service.processing=Changement de d\\'offre de service... label.action.copy.ISO=Copier une image ISO -label.action.copy.template.processing=Copie du Modèle... -label.action.copy.template=Copier un modèle -label.action.create.template.processing=Création du Modèle... -label.action.create.template=Créer un modèle -label.action.create.vm.processing=Création de la VM.. -label.action.create.vm=Créer une VM -label.action.create.volume.processing=Création du Volume... -label.action.create.volume=Créer un Volume -label.action.delete.IP.range.processing=Suppression de la plage IP... +label.action.copy.ISO.processing=Copie de l\\'image ISO... +label.action.copy.template=Copier un mod\u00E8le +label.action.copy.template.processing=Copie du Mod\u00E8le... +label.action.create.template=Cr\u00E9er un mod\u00E8le +label.action.create.template.from.vm=Cr\u00E9er un mod\u00E8le depuis la VM +label.action.create.template.from.volume=Cr\u00E9er un mod\u00E8le depuis le volume +label.action.create.template.processing=Cr\u00E9ation du Mod\u00E8le... +label.action.create.vm=Cr\u00E9er une VM +label.action.create.vm.processing=Cr\u00E9ation de la VM... +label.action.create.volume=Cr\u00E9er un Volume +label.action.create.volume.processing=Cr\u00E9ation du Volume... label.action.delete.IP.range=Supprimer la plage IP -label.action.delete.ISO.processing=Suppression de l\'image ISO... -label.action.delete.ISO=Supprimer l\'image ISO -label.action.delete.account.processing=Suppression du compte... +label.action.delete.IP.range.processing=Suppression de la plage IP... +label.action.delete.ISO=Supprimer l\\'image ISO +label.action.delete.ISO.processing=Suppression de l\\'image ISO... label.action.delete.account=Supprimer un compte -label.action.delete.cluster.processing=Suppression du Cluster... +label.action.delete.account.processing=Suppression du compte... label.action.delete.cluster=Supprimer le Cluster -label.action.delete.disk.offering.processing=Suppression de l\'offre Disque... -label.action.delete.disk.offering=Supprimer l\'offre Disque - -label.action.update.resource.count=Mettre à jour le compte d\'utilisation des ressources -label.action.update.resource.count.processing=Mise à jour du compteur... - +label.action.delete.cluster.processing=Suppression du Cluster... +label.action.delete.disk.offering=Supprimer l\\'offre Disque +label.action.delete.disk.offering.processing=Suppression de l\\'offre Disque... label.action.delete.domain=Supprimer le domaine label.action.delete.domain.processing=Suppression du domaine... - -label.action.delete.firewall.processing=Suppression du Parefeu... -label.action.delete.firewall=Supprimer la règle de firewall -label.action.delete.ingress.rule.processing=Suppression de la règle Ingress.. -label.action.delete.ingress.rule=Supprimer la règle Ingress -label.action.delete.load.balancer.processing=Suppression de l\'équilibreur de charge... -label.action.delete.load.balancer=Supprimer la règle de load balancer -label.action.edit.network.processing=Modification du Réseau... -label.action.edit.network=Modifier le réseau -label.action.delete.network.processing=Suppression du réseau... -label.action.delete.network=Supprimer le réseau -label.action.delete.pod.processing=Suppression du pod... +label.action.delete.firewall=Supprimer la r\u00E8gle de pare-feu +label.action.delete.firewall.processing=Suppression du Pare-feu... +label.action.delete.ingress.rule=Supprimer la r\u00E8gle d\\'entr\u00E9e +label.action.delete.ingress.rule.processing=Suppression de la r\u00E8gle d\\'entr\u00E9e.. +label.action.delete.load.balancer=Supprimer la r\u00E8gle de r\u00E9partition de charge +label.action.delete.load.balancer.processing=Suppression du r\u00E9partiteur de charge... +label.action.delete.network=Supprimer le r\u00E9seau +label.action.delete.network.processing=Suppression du r\u00E9seau... +label.action.delete.nexusVswitch=Supprimer le Nexus 1000v +label.action.delete.physical.network=Supprimer le r\u00E9seau physique label.action.delete.pod=Supprimer le Pod -label.action.delete.primary.storage.processing=Suppression du stockage primaire... +label.action.delete.pod.processing=Suppression du pod... label.action.delete.primary.storage=Supprimer le stockage primaire -label.action.delete.secondary.storage.processing=Suppression du stockage secondaire... +label.action.delete.primary.storage.processing=Suppression du stockage primaire... label.action.delete.secondary.storage=Supprimer le stockage secondaire -label.action.delete.security.group.processing=Suppression du groupe de sécurité -label.action.delete.security.group=Supprimer le groupe de sécurité -label.action.delete.service.offering.processing=Suppression de l\'offre de service... -label.action.delete.service.offering=Supprimer l\'offre de service -label.action.delete.snapshot.processing=Suppresison de l\'instantané... -label.action.delete.snapshot=Supprimer l\'instantané -label.action.delete.template.processing=Suppression du modèle... -label.action.delete.template=Supprimer le modèle -label.action.delete.user.processing=Suppression de l\'utilisateur... -label.action.delete.user=Supprimer l\'utilisateur -label.action.delete.volume.processing=Suppression du volume... +label.action.delete.secondary.storage.processing=Suppression du stockage secondaire... +label.action.delete.security.group=Supprimer le groupe de s\u00E9curit\u00E9 +label.action.delete.security.group.processing=Suppression du groupe de s\u00E9curit\u00E9 +label.action.delete.service.offering=Supprimer l\\'offre de service +label.action.delete.service.offering.processing=Suppression de l\\'offre de service... +label.action.delete.snapshot=Supprimer l\\'instantan\u00E9 +label.action.delete.snapshot.processing=Suppression de l\\'instantan\u00E9... +label.action.delete.system.service.offering=Supprimer l\\'offre syst\u00E8me +label.action.delete.template=Supprimer le mod\u00E8le +label.action.delete.template.processing=Suppression du mod\u00E8le... +label.action.delete.user=Supprimer l\\'utilisateur +label.action.delete.user.processing=Suppression de l\\'utilisateur... label.action.delete.volume=Supprimer le volume -label.action.delete.zone.processing=Suppression de la zone... +label.action.delete.volume.processing=Suppression du volume... label.action.delete.zone=Supprimer la zone -label.action.destroy.instance.processing=Suppression de l\'instance... -label.action.destroy.instance=Supprimer l\'instance -label.action.destroy.systemvm.processing=Suppression de la VM Système... -label.action.destroy.systemvm=Supprimer la VM Système -label.action.detach.disk.processing=Détachement du disque... -label.action.detach.disk=Détacher le disque -label.action.detach.iso.processing=Détachement de l\'image ISO... -label.action.detach.iso=Détacher l\'image ISO -label.action.disable.account.processing=Désactivation du compte... -label.action.disable.account=Désactiver le compte -label.action.disable.static.NAT.processing=Désactivation du NAT Statique... -label.action.disable.static.NAT=Désactiver le NAT Statique -label.action.disable.user.processing=Désactivation du l\'utilisateur... -label.action.disable.user=Désactiver l\'utilisateur -label.action.download.ISO=Télécharger une image ISO -label.action.download.template=Télécharger un modèle -label.action.download.volume.processing=Téléchargement du volume... -label.action.download.volume=Télécharger un volume -label.action.edit.ISO=Modifier l\'image ISO +label.action.delete.zone.processing=Suppression de la zone... +label.action.destroy.instance=Supprimer l\\'instance +label.action.destroy.instance.processing=Suppression de l\\'instance... +label.action.destroy.systemvm=Supprimer la VM Syst\u00E8me +label.action.destroy.systemvm.processing=Suppression de la VM Syst\u00E8me... +label.action.detach.disk=D\u00E9tacher le disque +label.action.detach.disk.processing=D\u00E9tachement du disque... +label.action.detach.iso=D\u00E9tacher l\\'image ISO +label.action.detach.iso.processing=D\u00E9tachement de l\\'image ISO... +label.action.disable.account=D\u00E9sactiver le compte +label.action.disable.account.processing=D\u00E9sactivation du compte... +label.action.disable.cluster=D\u00E9sactiver le cluster +label.action.disable.cluster.processing=D\u00E9sactivation du cluster... +label.action.disable.nexusVswitch=D\u00E9sactiver le Nexus 1000v +label.action.disable.physical.network=D\u00E9sactiver le r\u00E9seau physique +label.action.disable.pod=D\u00E9sactiver le Pod +label.action.disable.pod.processing=D\u00E9sactivation du Pod... +label.action.disable.static.NAT=D\u00E9sactiver le NAT Statique +label.action.disable.static.NAT.processing=D\u00E9sactivation du NAT Statique... +label.action.disable.user=D\u00E9sactiver l\\'utilisateur +label.action.disable.user.processing=D\u00E9sactivation de l\\'utilisateur... +label.action.disable.zone=D\u00E9sactivation de la zone +label.action.disable.zone.processing=D\u00E9sactivation de la zone... +label.action.download.ISO=T\u00E9l\u00E9charger une image ISO +label.action.download.template=T\u00E9l\u00E9charger un mod\u00E8le +label.action.download.volume=T\u00E9l\u00E9charger un volume +label.action.download.volume.processing=T\u00E9l\u00E9chargement du volume... +label.action.edit.ISO=Modifier l\\'image ISO label.action.edit.account=Modifier le Compte -label.action.edit.disk.offering=Modifier l\'offre de disque +label.action.edit.disk.offering=Modifier l\\'offre de disque label.action.edit.domain=Modifier le domaine label.action.edit.global.setting=Modifier la configuration globale -label.action.edit.instance=Modifier l\'instancer -label.action.edit.network.offering=Modifier l\'offre de service réseau +label.action.edit.host=Modifier l\\'h\u00F4te +label.action.edit.instance=Modifier l\\'instance +label.action.edit.network=Modifier le r\u00E9seau +label.action.edit.network.offering=Modifier l\\'offre de service r\u00E9seau +label.action.edit.network.processing=Modification du R\u00E9seau... label.action.edit.pod=Modifier le pod label.action.edit.primary.storage=Modifier le stockage primaire label.action.edit.resource.limits=Modifier les limites de ressources -label.action.edit.service.offering=Modifier l\'offre de service -label.action.edit.template=Modifier le modèle -label.action.edit.user=Modifier l\'utilisateur +label.action.edit.service.offering=Modifier l\\'offre de service +label.action.edit.template=Modifier le mod\u00E8le +label.action.edit.user=Modifier l\\'utilisateur label.action.edit.zone=Modifier la zone -label.action.enable.account.processing=Activation du compte... label.action.enable.account=Activer le compte -label.action.enable.maintenance.mode.processing=Activation du mode maintenance... +label.action.enable.account.processing=Activation du compte... +label.action.enable.cluster=Activer le cluster +label.action.enable.cluster.processing=Activation du cluster... label.action.enable.maintenance.mode=Activer le mode maintenance -label.action.enable.static.NAT.processing=Activation du NAT Statique... +label.action.enable.maintenance.mode.processing=Activation du mode maintenance... +label.action.enable.nexusVswitch=Activer le Nexus 1000v +label.action.enable.physical.network=Activer le r\u00E9seau physique +label.action.enable.pod=Activer le Pod +label.action.enable.pod.processing=Activation du Pod... label.action.enable.static.NAT=Activer le NAT Statique -label.action.enable.user.processing=Activation de l\'utilisateur... -label.action.enable.user=Activer l\'utilisateur -label.action.force.reconnect.processing=Reconnexion en cours... +label.action.enable.static.NAT.processing=Activation du NAT Statique... +label.action.enable.user=Activer l\\'utilisateur +label.action.enable.user.processing=Activation de l\\'utilisateur... +label.action.enable.zone=Activer la zone +label.action.enable.zone.processing=Activation de la zone... label.action.force.reconnect=Forcer la reconnexion -label.action.generate.keys.processing=Génération des clés... -label.action.generate.keys=Générer les clés -label.action.lock.account.processing=Blocage du compte... -label.action.lock.account=Bloquer le compte -label.action.migrate.instance=Migrer l\'instance -label.action.migrate.instance.processing=Migration de l\'instance... -label.action.reboot.instance.processing=Redémarrage de l\'instance... -label.action.reboot.instance=Redémarrer l\'instance -label.action.reboot.router.processing=Redémarrage du routeur... -label.action.reboot.router=Redémarrer le routeur -label.action.reboot.systemvm.processing=Redémarrage de la VM Système... -label.action.reboot.systemvm=Redémarre la VM Système -label.action.recurring.snapshot=Snapshots récurrents -label.action.release.ip.processing=Libération de l\'adresse IP... -label.action.release.ip=Libérer l\'adresse IP -label.action.remove.host.processing=Suppression de l\'hôte... -label.action.remove.host=Supprimer l\'hôte -label.action.reset.password.processing=Réinitialisation le mot de passe... -label.action.reset.password=Réinitialiser le mot de passe +label.action.force.reconnect.processing=Reconnexion en cours... +label.action.generate.keys=G\u00E9n\u00E9rer les cl\u00E9s +label.action.generate.keys.processing=G\u00E9n\u00E9ration des cl\u00E9s... +label.action.list.nexusVswitch=Liste des Nexus 1000v +label.action.lock.account=Verrouiller le compte +label.action.lock.account.processing=Verrouillage du compte... +label.action.manage.cluster=G\u00E9rer le Cluster +label.action.manage.cluster.processing=Gestion du cluster... +label.action.migrate.instance=Migrer l\\'instance +label.action.migrate.instance.processing=Migration de l\\'instance... +label.action.migrate.router=Migration routeur +label.action.migrate.router.processing=Migration routeur en cours... +label.action.migrate.systemvm=Migration VM syst\u00E8me +label.action.migrate.systemvm.processing=Migration VM syst\u00E8me en cours ... +label.action.reboot.instance=Red\u00E9marrer l\\'instance +label.action.reboot.instance.processing=Red\u00E9marrage de l\\'instance... +label.action.reboot.router=Red\u00E9marrer le routeur +label.action.reboot.router.processing=Red\u00E9marrage du routeur... +label.action.reboot.systemvm=Red\u00E9marrer la VM Syst\u00E8me +label.action.reboot.systemvm.processing=Red\u00E9marrage de la VM Syst\u00E8me... +label.action.recurring.snapshot=Instantan\u00E9s r\u00E9currents +label.action.register.iso=Enregistrer ISO +label.action.register.template=Enregistrer mod\u00E8le +label.action.release.ip=Lib\u00E9rer l\\'adresse IP +label.action.release.ip.processing=Lib\u00E9ration de l\\'adresse IP... +label.action.remove.host=Supprimer l\\'h\u00F4te +label.action.remove.host.processing=Suppression de l\\'h\u00F4te... +label.action.reset.password=R\u00E9-initialiser le mot de passe +label.action.reset.password.processing=R\u00E9-initialisation du mot de passe... label.action.resource.limits=Limites de ressources -label.action.restore.instance.processing=Restauration de l\'instance... -label.action.restore.instance=Restaurer l\'instance -label.action.start.instance.processing=Démarrage de l\'instance -label.action.start.instance=Démarrer l\'instance -label.action.start.router.processing=Démarrage du routeur... -label.action.start.router=Démarrer le routeur -label.action.start.systemvm.processing=Démarrage de la VM système -label.action.start.systemvm=Démarrer la VM système -label.action.stop.instance.processing=Arrêt de l\'Instance... -label.action.stop.instance=Arrêter l\'Instance -label.action.stop.router.processing=Arrêt du routeur... -label.action.stop.router=Arrêter le routeur -label.action.stop.systemvm.processing=Arrêt de la VM système... -label.action.stop.systemvm=Arrêter la VM système -label.action.take.snapshot.processing=Prise de l\'instantané -label.action.take.snapshot=Prendre un instantané -label.action.update.OS.preference.processing=Mise à jour des préférences d\'OS... -label.action.update.OS.preference=Mettre à jour les préférences d\'OS +label.action.restore.instance=Restaurer l\\'instance +label.action.restore.instance.processing=Restauration de l\\'instance... +label.action.start.instance=D\u00E9marrer l\\'instance +label.action.start.instance.processing=D\u00E9marrage de l\\'instance... +label.action.start.router=D\u00E9marrer le routeur +label.action.start.router.processing=D\u00E9marrage du routeur... +label.action.start.systemvm=D\u00E9marrer la VM syst\u00E8me +label.action.start.systemvm.processing=D\u00E9marrage de la VM syst\u00E8me... +label.action.stop.instance=Arr\u00EAter l\\'Instance +label.action.stop.instance.processing=Arr\u00EAt de l\\'Instance... +label.action.stop.router=Arr\u00EAter le routeur +label.action.stop.router.processing=Arr\u00EAt du routeur... +label.action.stop.systemvm=Arr\u00EAter la VM syst\u00E8me +label.action.stop.systemvm.processing=Arr\u00EAt de la VM syst\u00E8me... +label.action.take.snapshot=Prendre un instantan\u00E9 +label.action.take.snapshot.processing=Prise de l\\'instantan\u00E9... +label.action.unmanage.cluster=Ne plus g\u00E9rer le Cluster +label.action.unmanage.cluster.processing=Arr\u00EAt de la gestion du Cluster +label.action.update.OS.preference=Mettre \u00E0 jour les pr\u00E9f\u00E9rences d\\'OS +label.action.update.OS.preference.processing=Mise \u00E0 jour des pr\u00E9f\u00E9rences d\\'OS... +label.action.update.resource.count=Mettre \u00E0 jour le compteur des ressources +label.action.update.resource.count.processing=Mise \u00E0 jour du compteur... label.actions=Actions +label.activate.project=Activer projet label.active.sessions=Sessions actives +label.add=Ajouter +label.add.ACL=Ajouter une r\u00E8gle ACL +label.add.F5.device=Ajouter un F5 +label.add.NiciraNvp.device=Ajouter un contr\u00F4leur Nvp +label.add.SRX.device=Ajouter un SRX +label.add.VM.to.tier=Ajouter une machine virtuelle au tiers +label.add.VPN.gateway=Ajouter une passerelle VPN label.add.account=Ajouter un compte +label.add.account.to.project=Ajouter un compte au projet +label.add.accounts=Ajouter des comptes +label.add.accounts.to=Ajouter des comptes sur +label.add.by=Ajout\u00E9 par label.add.by.cidr=Ajouter par CIDR label.add.by.group=Ajouter par groupe label.add.cluster=Ajouter un cluster -label.add.direct.iprange=Ajouter une plage d\'adresse IP directe +label.add.compute.offering=Ajouter une offre de calcul +label.add.direct.iprange=Ajouter une plage d\\'adresse IP directe label.add.disk.offering=Ajouter une offre disque label.add.domain=Ajouter un domaine -label.add.firewall=Ajouter une règle firewall -label.add.host=Ajouter un hôte -label.add.ingress.rule=Ajouter une règle Ingress +label.add.egress.rule=Ajouter la r\u00E8gle sortante +label.add.firewall=Ajouter une r\u00E8gle de pare-feu +label.add.guest.network=Ajouter un r\u00E9seau d\\'invit\u00E9 +label.add.host=Ajouter un h\u00F4te +label.add.ingress.rule=Ajouter une r\u00E8gle d\\'entr\u00E9e label.add.ip.range=Ajouter une plage IP -label.add.load.balancer=Ajouter un partageur de charge +label.add.load.balancer=Ajouter un r\u00E9partiteur de charge label.add.more=Ajouter plus -label.add.network=Ajouter un réseau +label.add.netScaler.device=Ajouter un Netscaler +label.add.network=Ajouter un r\u00E9seau +label.add.network.ACL=Ajouter une r\u00E8gle d\\'acc\u00E8s r\u00E9seau ACL +label.add.network.device=Ajouter un \u00E9quipement r\u00E9seau +label.add.network.offering=Ajouter une offre r\u00E9seau +label.add.new.F5=Ajouter un F5 +label.add.new.NetScaler=Ajouter un Netscaler +label.add.new.SRX=Ajouter un SRX +label.add.new.gateway=Ajouter une nouvelle passerelle +label.add.new.tier=Ajouter un nouveau tiers +label.add.physical.network=Ajouter un r\u00E9seau physique label.add.pod=Ajouter un pod +label.add.port.forwarding.rule=Ajouter une r\u00E8gle de transfert de port label.add.primary.storage=Ajouter un stockage primaire +label.add.resources=Ajouter des ressources +label.add.route=Ajouter une route +label.add.rule=Ajouter une r\u00E8gle label.add.secondary.storage=Ajouter un stockage secondaire -label.add.security.group=Ajouter un groupe de sécurité -label.add.service.offering=Ajouter un offre de service -label.add.template=Ajouter un modèle +label.add.security.group=Ajouter un groupe de s\u00E9curit\u00E9 +label.add.service.offering=Ajouter une offre de service +label.add.static.nat.rule=Ajouter une r\u00E8gle de NAT statique +label.add.static.route=Ajouter une route statique +label.add.system.service.offering=Ajouter une offre de service syst\u00E8me +label.add.template=Ajouter un mod\u00E8le +label.add.to.group=Ajouter au groupe label.add.user=Ajouter un utilisateur -label.add.vlan=Ajouter un vlan +label.add.vlan=Ajouter un VLAN +label.add.vm=Ajouter VM +label.add.vms=Ajouter VMs +label.add.vms.to.lb=Ajouter une/des VM(s) \u00E0 la r\u00E8gle de r\u00E9partition de charge label.add.volume=Ajouter un volume +label.add.vpc=Ajouter un VPC +label.add.vpn.customer.gateway=Ajouter une passerelle VPN cliente +label.add.vpn.user=Ajouter un utilisateur VPN label.add.zone=Ajouter une zone -label.add=Ajouter +label.adding=Ajout label.adding.cluster=Ajout du Cluster -label.adding.failed=Echec de l\'ajout +label.adding.failed=\u00C9chec de l\\'ajout label.adding.pod=Ajout du Pod label.adding.processing=Ajout... -label.adding.succeeded=Ajout réussi -label.adding.user=Ajout de l\'utilisateur +label.adding.succeeded=Ajout r\u00E9ussi +label.adding.user=Ajout de l\\'utilisateur label.adding.zone=Ajout de la zone -label.adding=Ajout -label.additional.networks=Réseaux additionnels -label.admin.accounts=Comptes Administrateur +label.additional.networks=R\u00E9seaux additionnels label.admin=Administrateur -label.advanced.mode=Mode avancé -label.advanced.search=Recherche avancée -label.advanced=Avancé +label.admin.accounts=Comptes Administrateur +label.advanced=Avanc\u00E9 +label.advanced.mode=Mode avanc\u00E9 +label.advanced.search=Recherche avanc\u00E9e +label.agent.password=Mot de passe Agent +label.agent.username=Identifiant Agent +label.agree=Accepter label.alert=Alerte label.algorithm=Algorithme -label.allocated=Alloué -label.api.key=Clé d\'API -label.assign.to.load.balancer=Assigner l\'instance au partageur de charge +label.allocated=Allou\u00E9 +label.allocation.state=\u00C9tat de l\\'allocation +label.api.key=Cl\u00E9 d\\'API +label.apply=Appliquer label.assign=Assigner -label.associated.network.id=ID du réseau associé -label.attached.iso=Image ISO attachée -label.availability.zone=Zone de disponibilité -label.availability=Disponibilité -label.available.public.ips=Adresses IP publiques disponibles +label.assign.to.load.balancer=Assigner l\\'instance au r\u00E9partiteur de charge +label.associated.network=R\u00E9seau associ\u00E9 +label.associated.network.id=ID du r\u00E9seau associ\u00E9 +label.attached.iso=Image ISO attach\u00E9e +label.availability=Disponibilit\u00E9 +label.availability.zone=Zone de disponibilit\u00E9 label.available=Disponible +label.available.public.ips=Adresses IP publiques disponibles label.back=Retour +label.bandwidth=Bande passante +label.basic=Basique label.basic.mode=Mode basique -label.bootable=Bootable -label.broadcast.domain.type=Type de domaine de broadcast +label.bootable=Amor\u00E7able +label.broadcast.domain.range=Plage du domaine multi-diffusion +label.broadcast.domain.type=Type de domaine de multi-diffusion +label.broadcast.uri=URI multi-diffusion label.by.account=Par compte -label.by.availability=Par disponibilité +label.by.availability=Par disponibilit\u00E9 label.by.domain=Par domaine label.by.end.date=Par date de fin label.by.level=Par niveau label.by.pod=Par Pod -label.by.role=Par role -label.by.start.date=Par date de début -label.by.state=Par état -label.by.traffic.type=Par type de traffic -label.by.type.id=Par type d\'ID +label.by.role=Par r\u00F4le +label.by.start.date=Par date de d\u00E9but +label.by.state=Par \u00E9tat +label.by.traffic.type=Par type de trafic label.by.type=Par type +label.by.type.id=Par type d\\'ID label.by.zone=Par zone -label.bytes.received=Octets reçus -label.bytes.sent=Octets envoyés +label.bytes.received=Octets re\u00E7us +label.bytes.sent=Octets envoy\u00E9s label.cancel=Annuler +label.capacity=Capacit\u00E9 label.certificate=Certificat -label.privatekey=Clé privée PKCS\#8 -label.domain.suffix=Suffixe de domaine DNS (i.e., xyz.com) -label.character=Caractère -label.cidr.account=CIDR ou Compte/Groupe de sécurité +label.change.service.offering=Modifier l\\'offre de service +label.change.value=Modifier la valeur +label.character=Caract\u00E8re +label.checksum=Somme de contr\u00F4le MD5 +label.cidr=CIDR +label.cidr.account=CIDR ou Compte/Groupe de s\u00E9curit\u00E9 +label.cidr.list=CIDR Source +label.clean.up=Nettoyage +label.clear.list=Purger la liste label.close=Fermer -label.cloud.console=Console de gestion du cloud -label.cloud.managed=Géré par Cloud.com -label.cluster.type=Type de Cluster +label.cloud.console=Console d\\'Administration du Cloud +label.cloud.managed=G\u00E9r\u00E9 par Cloud.com label.cluster=Cluster +label.cluster.name=Nom du cluster +label.cluster.type=Type de Cluster +label.clusters=Clusters +label.clvm=CLVM label.code=Code +label.community=Communaut\u00E9 +label.compute=Processeur +label.compute.and.storage=Processeur et Stockage +label.compute.offering=Offre de calcul +label.compute.offerings=Offres de calcul +label.configuration=Configuration +label.configure=Configurer +label.configure.network.ACLs=Configurer les r\u00E8gles d\\'acc\u00E8s r\u00E9seau ACL +label.configure.vpc=Configurer le VPC +label.confirm.password=Confirmer le mot de passe label.confirmation=Confirmation -label.cpu.allocated.for.VMs=CPU alloué aux VMs -label.cpu.allocated=CPU alloué -label.cpu.utilized=CPU utilisé +label.congratulations=F\u00E9licitations \! +label.conserve.mode=Conserver le mode +label.console.proxy=Console proxy +label.continue=Continuer +label.continue.basic.install=Continuer avec l\\'installation basique +label.corrections.saved=Modifications enregistr\u00E9es label.cpu=CPU -label.created=Créé +label.cpu.allocated=CPU allou\u00E9e +label.cpu.allocated.for.VMs=CPU allou\u00E9e aux VMs +label.cpu.mhz=CPU (en MHz) +label.cpu.utilized=CPU utilis\u00E9e +label.create.VPN.connection=Cr\u00E9er une connexion VPN +label.create.project=Cr\u00E9er un projet +label.create.template=Cr\u00E9er un mod\u00E8le +label.created=Cr\u00E9\u00E9 +label.created.by.system=Cr\u00E9\u00E9 par le syst\u00E8me label.cross.zones=Multi Zones -label.custom.disk.size=Taille de disque personnalisée +label.custom.disk.size=Taille de disque personnalis\u00E9e label.daily=Quotidien -label.data.disk.offering=Offre de disque de données +label.data.disk.offering=Offre de disque de donn\u00E9es label.date=Date label.day.of.month=Jour du mois label.day.of.week=Jour de la semaine +label.dead.peer.detection=D\u00E9tection de pair mort +label.decline.invitation=Refuser l\\'invitation +label.dedicated=D\u00E9di\u00E9 +label.default=Par d\u00E9faut +label.default.use=Utilisation par d\u00E9faut +label.default.view=Vue par d\u00E9faut label.delete=Supprimer -label.deleting.failed=Suppression échouée +label.delete.F5=Supprimer F5 +label.delete.NetScaler=Supprimer Netscaler +label.delete.NiciraNvp=Supprimer un contr\u00F4leur Nvp +label.delete.SRX=Supprimer SRX +label.delete.VPN.connection=Supprimer la connexion VPN +label.delete.VPN.customer.gateway=Supprimer la passerelle VPN client +label.delete.VPN.gateway=Supprimer la passerelle VPN +label.delete.gateway=Supprimer la passerelle +label.delete.project=Supprimer projet +label.delete.vpn.user=Supprimer l\\'utilisateur VPN +label.deleting.failed=Suppression \u00E9chou\u00E9e label.deleting.processing=Suppression... label.description=Description -label.detaching.disk=Détacher le disque -label.details=Details -label.device.id=ID du périphérique -label.disabled=Désactivé -label.disabling.vpn.access=Désactiver l\'accès VPN -label.disk.allocated=Disque Alloué +label.destination.physical.network.id=Identifiant du r\u00E9seau physique de destination +label.destination.zone=Zone de destination +label.destroy=D\u00E9truire +label.destroy.router=Supprimer le routeur +label.detaching.disk=D\u00E9tacher le disque +label.details=D\u00E9tails +label.device.id=ID du p\u00E9riph\u00E9rique +label.devices=Machines +label.dhcp=DHCP +label.direct.ips=Adresses IP du r\u00E9seau partag\u00E9 +label.disable.provider=D\u00E9sactiver ce fournisseur +label.disable.vpn=D\u00E9sactiver le VPN +label.disabled=D\u00E9sactiv\u00E9 +label.disabling.vpn.access=D\u00E9sactiver l\\'acc\u00E8s VPN +label.disk.allocated=Disque Allou\u00E9 label.disk.offering=Offre de Disque -label.disk.size.gb=Taille du disque (en Go) label.disk.size=Taille du disque +label.disk.size.gb=Taille du disque (en Go) label.disk.total=Espace disque total label.disk.volume=Volume disque -label.display.text=Texte affiché -label.dns.1=DNS1 -label.dns.2=DNS2 +label.display.name=Nom d\\'affichage +label.display.text=Texte affich\u00E9 +label.dns=DNS +label.dns.1=DNS 1 +label.dns.2=DNS 2 +label.domain=Domaine label.domain.admin=Administrateur du domaine label.domain.id=ID du domaine label.domain.name=Nom de domaine -label.domain=Domaine -label.double.quotes.are.not.allowed=Les guillemets ne sont pas autorisés -label.download.progress=Progression du téléchargement +label.domain.router=Routeur du domaine +label.domain.suffix=Suffixe de domaine DNS (i.e., xyz.com) +label.done=Termin\u00E9 +label.double.quotes.are.not.allowed=Les guillemets ne sont pas autoris\u00E9es +label.download.progress=Progression du t\u00E9l\u00E9chargement +label.drag.new.position=D\u00E9placer sur une autre position label.edit=Modifier +label.edit.lb.rule=Modifier la r\u00E8gle LB +label.edit.network.details=Modifier les param\u00E8tres r\u00E9seau +label.edit.project.details=Modifier les d\u00E9tails du projet +label.edit.tags=Modifier les balises +label.edit.traffic.type=Modifier le type de trafic +label.edit.vpc=Modifier le VPC +label.egress.rule=R\u00E8gle sortante +label.egress.rules=R\u00E8gles de sortie +label.elastic=\u00C9lastique +label.elastic.IP=IP extensible +label.elastic.LB=R\u00E9partition de charge extensible label.email=Email -label.enabling.vpn.access=Activation de l\'accès VPN +label.enable.provider=Activer le fournisseur +label.enable.s3=Activer le stockage secondaire de type S3 +label.enable.swift=Activer Swift +label.enable.vpn=Activer VPN label.enabling.vpn=Activation du VPN +label.enabling.vpn.access=Activation de l\\'acc\u00E8s VPN +label.end.IP=R\u00E9silier l\\'IP label.end.port=Port de fin -label.endpoint.or.operation=Terminaison ou Opération -label.error.code=Code d\'erreur +label.end.reserved.system.IP=Adresse IP de fin r\u00E9serv\u00E9e Syst\u00E8me +label.end.vlan=VLAN de fin +label.endpoint.or.operation=Terminaison ou Op\u00E9ration +label.enter.token=Entrez le jeton unique label.error=Erreur -label.esx.host=Hôte ESX/ESXi +label.error.code=Code d\\'erreur +label.esx.host=H\u00F4te ESX/ESXi label.example=Exemple -label.failed=Echoué -label.featured=Sponsorisé -label.firewall=Parefeu -label.first.name=Prénom +label.f5=F5 +label.failed=\u00C9chou\u00E9 +label.featured=Sponsoris\u00E9 +label.fetch.latest=Rafra\u00EEchir +label.filterBy=Filtrer par +label.firewall=Pare-feu +label.first.name=Pr\u00E9nom label.format=Format label.friday=Vendredi label.full=Complet +label.full.path=Chemin complet label.gateway=Passerelle -label.general.alerts=Alertes générales -label.generating.url=Génération de l\'URL -label.go.step.2=Aller à l\'étape 2 -label.go.step.3=Aller à l\'étape 3 -label.go.step.4=Aller à l\'étape 4 -label.go.step.5=Aller à l\'étape 5 -label.group.optional=Groupe (optionnel) +label.general.alerts=Alertes g\u00E9n\u00E9rales +label.generating.url=G\u00E9n\u00E9ration de l\\'URL +label.go.step.2=Aller \u00E0 l\\'\u00E9tape 2 +label.go.step.3=Aller \u00E0 l\\'\u00E9tape 3 +label.go.step.4=Aller \u00E0 l\\'\u00E9tape 4 +label.go.step.5=Aller \u00E0 l\\'\u00E9tape 5 label.group=Groupe -label.guest.cidr=CIDR invités -label.guest.gateway=Passerelle pour les invités -label.guest.ip.range=Plage d\'adresses IP des invités -label.guest.ip=Adresse IP des invités -label.guest.netmask=Masque de réseau des invités -label.ha.enabled=Haute disponibilité active +label.group.optional=Groupe (optionnel) +label.guest=Invit\u00E9 +label.guest.cidr=CIDR invit\u00E9 +label.guest.end.ip=Adresse IP de fin pour les invit\u00E9s +label.guest.gateway=Passerelle pour les invit\u00E9s +label.guest.ip=Adresse IP des invit\u00E9s +label.guest.ip.range=Plage d\\'adresses IP des invit\u00E9s +label.guest.netmask=Masque de r\u00E9seau des invit\u00E9s +label.guest.networks=R\u00E9seaux d\\'invit\u00E9 +label.guest.start.ip=Adresse IP de d\u00E9but pour les invit\u00E9s +label.guest.traffic=Trafic invit\u00E9 +label.guest.type=Type d\\'invit\u00E9 +label.ha.enabled=Haute disponibilit\u00E9 activ\u00E9e label.help=Aide -label.host.alerts=Alertes des hôtes -label.host.name=Nom d\'hôte -label.host=Serveur -label.hosts=Serveurs -label.hourly=A l\'heure -label.hypervisor.type=Type d\'hyperviseur +label.hide.ingress.rule=Cacher la r\u00E8gle d\\'entr\u00E9e +label.hints=Astuces +label.host=H\u00F4te +label.host.MAC=Adresse MAC h\u00F4te +label.host.alerts=Alertes des h\u00F4tes +label.host.name=Nom d\\'h\u00F4te +label.host.tags=\u00C9tiquettes d\\'h\u00F4te +label.hosts=H\u00F4tes +label.hourly=Chaque heure label.hypervisor=Hyperviseur +label.hypervisor.capabilities=Fonctions hyperviseur +label.hypervisor.type=Type d\\'hyperviseur +label.hypervisor.version=Version hyperviseur label.id=ID label.info=Information -label.ingress.rule=Règle Ingress -label.initiated.by=Initié par -label.instance.limits=Limites des instances -label.instance.name=Nom de lìnstance +label.ingress.rule=R\u00E8gle d\\'entr\u00E9e +label.initiated.by=Initi\u00E9 par +label.installWizard.addClusterIntro.subtitle=Qu\\'est ce qu\\'un cluster ? +label.installWizard.addClusterIntro.title=Ajoutons un cluster +label.installWizard.addHostIntro.subtitle=Qu\\'est ce qu\\'un h\u00F4te ? +label.installWizard.addHostIntro.title=Ajoutons un h\u00F4te +label.installWizard.addPodIntro.subtitle=Qu\\'est ce qu\\'un pod ? +label.installWizard.addPodIntro.title=Ajoutons un pod +label.installWizard.addPrimaryStorageIntro.subtitle=Qu\\'est ce que le stockage primaire ? +label.installWizard.addPrimaryStorageIntro.title=Ajoutons du stockage primaire +label.installWizard.addSecondaryStorageIntro.subtitle=Qu\\'est ce que le stockage secondaire ? +label.installWizard.addSecondaryStorageIntro.title=Ajoutons du stockage secondaire +label.installWizard.addZone.title=Ajouter une zone +label.installWizard.addZoneIntro.subtitle=Qu\\'est ce qu\\'une zone ? +label.installWizard.addZoneIntro.title=Ajoutons une zone +label.installWizard.click.launch=Appuyer sur le bouton d\u00E9marrer. +label.installWizard.subtitle=Ce tutoriel vous aidera \u00E0 configurer votre installation CloudStack&\#8482; +label.installWizard.title=Bonjour et bienvenue dans CloudStack&\#8482; label.instance=Instance +label.instance.limits=Limites des instances +label.instance.name=Nom de l\\'instance label.instances=Instances label.internal.dns.1=DNS interne 1 label.internal.dns.2=DNS interne 2 -label.interval.type=Type d\'ìntervalle +label.internal.name=Nom interne +label.interval.type=Type d\\'intervalle +label.introduction.to.cloudstack=Introduction \u00E0 CloudStack&\#8482; label.invalid.integer=Nombre entier invalide label.invalid.number=Nombre invalide +label.invitations=Invitations +label.invite=Inviter +label.invite.to=Inviter sur +label.invited.accounts=Comptes invit\u00E9s +label.ip=IP label.ip.address=Adresse IP label.ip.allocations=Allocations de IPs label.ip.limits=Limite de IPs publiques label.ip.or.fqdn=IP ou FQDN label.ip.range=Plage IP -label.ip=IP +label.ip.ranges=Plages IP +label.ipaddress=Adresse IP label.ips=IPs -label.is.default=Est par défaut -label.is.shared=Est partagé -label.is.system=Type système +label.is.default=Est par d\u00E9faut +label.is.redundant.router=Redondant +label.is.shared=Est partag\u00E9 +label.is.system=Est Syst\u00E8me label.iscsi=iSCSI -label.iso.boot=Démarrage par ISO label.iso=ISO -label.isolation.mode=Mode d\'isolation +label.iso.boot=D\u00E9marrage par ISO +label.isolated.networks=R\u00E9seaux isol\u00E9s +label.isolation.method=M\u00E9thode de s\u00E9paration +label.isolation.mode=Mode d\\'isolation +label.isolation.uri=URI d\\'isolation +label.item.listing=Liste des \u00E9l\u00E9ments label.keep=Conserver -label.lang.chinese=Chinois (simplifié) +label.key=Clef +label.keyboard.type=Type de clavier +label.kvm.traffic.label=Libell\u00E9 pour le trafic KVM +label.label=Libell\u00E9 +label.lang.brportugese=Portuguais Br\u00E9sil +label.lang.chinese=Chinois (simplifi\u00E9) label.lang.english=Anglais +label.lang.french=Fran\u00E7ais label.lang.japanese=Japonais +label.lang.russian=Russe label.lang.spanish=Espagnol -label.last.disconnected=Dernière Déconnexion -label.last.name=Nom de famille +label.last.disconnected=Derni\u00E8re D\u00E9connexion +label.last.name=Nom +label.latest.events=Derniers \u00E9v\u00E9nements +label.launch=D\u00E9marrer +label.launch.vm=D\u00E9marrer VM +label.launch.zone=D\u00E9marrer la zone +label.least.connections=Le moins de connexions label.level=Niveau label.linklocal.ip=Adresse IP de lien local -label.load.balancer=Partageur de charge +label.load.balancer=R\u00E9partiteur de charge +label.load.balancing=R\u00E9partition de charge +label.load.balancing.policies=R\u00E8gles de r\u00E9partition de charge label.loading=Chargement en cours label.local=Local -# label.local.storage.enabled=Local storage enabled +label.local.storage=Stockage local +label.local.storage.enabled=Stockage local activ\u00E9 label.login=Connexion -label.logout=Déconnexion +label.logout=D\u00E9connexion label.lun=LUN -label.manage=Géré +label.make.project.owner=Devenir propri\u00E9taire du projet +label.manage=G\u00E9r\u00E9 +label.manage.resources=G\u00E9rer les ressources +label.management=Administration +label.management.ips=Adresses IP de gestion +label.max.guest.limit=Nombre maximum d\\'invit\u00E9s +label.max.networks=R\u00E9seaux Max. +label.max.public.ips=Max. IP publiques +label.max.snapshots=Max instantan\u00E9es +label.max.templates=Max. mod\u00E8les +label.max.vms=Max. VMs utilisateur +label.max.volumes=Max. volumes +label.max.vpcs=Max. VPCs label.maximum=Maximum -label.memory.allocated=Mémoire allouée -label.memory.total=Mémoire totale -label.memory.used=Mémoire utilisée -label.memory=Mémoire (en MB) +label.may.continue=Vous pouvez continuer. +label.memory=M\u00E9moire (en Mo) +label.memory.allocated=M\u00E9moire allou\u00E9e +label.memory.mb=M\u00E9moire (en MB) +label.memory.total=M\u00E9moire totale +label.memory.used=M\u00E9moire utilis\u00E9e label.menu.accounts=Comptes label.menu.alerts=Alertes -label.menu.all.accounts=Tout les comptes +label.menu.all.accounts=Tous les comptes label.menu.all.instances=Toutes les instances -label.menu.community.isos=ISO de la communauté -label.menu.community.templates=Modèles de la communauté +label.menu.community.isos=ISO de la communaut\u00E9 +label.menu.community.templates=Mod\u00E8les de la communaut\u00E9 label.menu.configuration=Configuration label.menu.dashboard=Tableau de bord -label.menu.destroyed.instances=Instances détruites +label.menu.destroyed.instances=Instances d\u00E9truites label.menu.disk.offerings=Offres de disque label.menu.domains=Domaines -label.menu.events=Evénements -label.menu.featured.isos=ISOs Sponsorisées -label.menu.featured.templates=Modèles sponsorisés -label.menu.global.settings=Paramètres globaux +label.menu.events=\u00C9v\u00E9nements +label.menu.featured.isos=ISOs Sponsoris\u00E9es +label.menu.featured.templates=Mod\u00E8les sponsoris\u00E9s +label.menu.global.settings=Param\u00E8tres globaux +label.menu.infrastructure=Infrastructure label.menu.instances=Instances label.menu.ipaddresses=Adresses IP label.menu.isos=ISOs label.menu.my.accounts=Mes comptes label.menu.my.instances=Mes instances label.menu.my.isos=Mes ISOs -label.menu.my.templates=Mes modèles -label.menu.network.offerings=Offres de Service Réseau -label.menu.network=Réseau +label.menu.my.templates=Mes mod\u00E8les +label.menu.network=R\u00E9seau +label.menu.network.offerings=Offres de Service R\u00E9seau label.menu.physical.resources=Ressources physiques label.menu.running.instances=Instances actives -label.menu.security.groups=Groupes de sécurité +label.menu.security.groups=Groupes de s\u00E9curit\u00E9 label.menu.service.offerings=Offres de Service -label.menu.snapshots=Instantanés -label.menu.stopped.instances=Instances Arrêtées +label.menu.snapshots=Instantan\u00E9s +label.menu.stopped.instances=Instances Arr\u00EAt\u00E9es label.menu.storage=Stockage -label.menu.system.vms=\ VMs Systèmes -label.menu.system=Système -label.menu.templates=Modèles +label.menu.system=Syst\u00E8me +label.menu.system.service.offerings=Offres syst\u00E8me +label.menu.system.vms=\ VMs Syst\u00E8mes +label.menu.templates=Mod\u00E8les label.menu.virtual.appliances=Appliances Virtuelles label.menu.virtual.resources=Ressources Virtuelles label.menu.volumes=Volumes -label.migrate.instance.to=Migrer l\'instance vers +label.migrate.instance.to=Migrer l\\'instance vers +label.migrate.instance.to.host=Migration de l\\'instance sur un autre h\u00F4te +label.migrate.instance.to.ps=Migration de l\\'instance sur un autre stockage primaire +label.migrate.router.to=Migrer le routeur vers +label.migrate.systemvm.to=Migrer la VM syst\u00E8me vers +label.migrate.to.host=Migrer vers un h\u00F4te +label.migrate.to.storage=Migrer vers un stockage +label.migrate.volume=Migration du volume vers un autre stockage primaire label.minimum=Minimum label.minute.past.hour=minute(s) label.monday=Lundi label.monthly=Mensuel -label.more.templates=Plus de modèles +label.more.templates=Plus de mod\u00E8les +label.move.down.row=Descendre d\\'un cran +label.move.to.bottom=D\u00E9placer en bas +label.move.to.top=Placer au dessus +label.move.up.row=Monter d\\'un cran label.my.account=Mon compte -label.name.optional=Nom (optionnel) +label.my.network=Mon r\u00E9seau +label.my.templates=Mes mod\u00E8les label.name=Nom -label.netmask=Masque de réseau -label.network.desc=Description réseau +label.name.optional=Nom (optionnel) +label.nat.port.range=Plage de port NAT +label.netScaler=NetScaler +label.netmask=Masque de r\u00E9seau +label.network=R\u00E9seau +label.network.ACL=R\u00E8gles d\\'acc\u00E8s r\u00E9seau ACL +label.network.ACL.total=Total R\u00E8gles d\\'acc\u00E8s r\u00E9seau +label.network.ACLs=R\u00E8gles d\\'acc\u00E8s r\u00E9seau +label.network.desc=Description r\u00E9seau +label.network.device=\u00C9quipement R\u00E9seau +label.network.device.type=Type d\\'\u00E9quipement r\u00E9seau label.network.domain=Nom de domaine -label.network.id=ID réseau -label.network.name=Nom du réseau -label.network.offering.display.text=Texte affiché d\'Offre de Réseau -label.network.offering.id=ID de l\'Offre de Service Réseau -label.network.offering.name=Nom de l\'Offre de Service Réseau -label.network.offering=Offre de Service Réseau -label.network.rate=Débit réseau -label.network.read=Lecture réseau -label.network.type=Type de réseau -label.network.write=Écriture réseau -label.network=Réseau +label.network.domain.text=Domaine r\u00E9seau +label.network.id=ID r\u00E9seau +label.network.label.display.for.blank.value=Utiliser la passerelle par d\u00E9faut +label.network.name=Nom du r\u00E9seau +label.network.offering=Offre de Service R\u00E9seau +label.network.offering.display.text=Texte affich\u00E9 d\\'Offre de R\u00E9seau +label.network.offering.id=ID de l\\'Offre de Service R\u00E9seau +label.network.offering.name=Nom de l\\'Offre de Service R\u00E9seau +label.network.rate=D\u00E9bit R\u00E9seau +label.network.rate.megabytes=D\u00E9bit r\u00E9seau (Mo/s) +label.network.read=Lecture r\u00E9seau +label.network.service.providers=Fournisseurs de service r\u00E9seau +label.network.type=Type de r\u00E9seau +label.network.write=\u00C9criture r\u00E9seau +label.networking.and.security=R\u00E9seau et s\u00E9curit\u00E9 +label.networks=R\u00E9seaux +label.new=Nouveau label.new.password=Nouveau mot de passe +label.new.project=Nouveau projet +label.new.vm=Nouvelle VM label.next=Suivant +label.nexusVswitch=Nexus 1000v +label.nfs=NFS label.nfs.server=Serveur NFS label.nfs.storage=Stockage NFS -label.nfs=NFS +label.nic.adapter.type=Type de carte r\u00E9seau +label.nicira.controller.address=Adresse du contr\u00F4leur +label.nicira.l3gatewayserviceuuid=Uuid du service passerelle L3 +label.nicira.transportzoneuuid=Uuid de la Zone Transport label.nics=Cartes NIC -label.no.actions=Aucune action disponibles -label.no.alerts=Aucune alerte récentes -label.no.errors=Aucune erreur récentes -label.no.isos=Aucun ISOs disponibles -label.no.items=Aucun élément disponibles -label.no.security.groups=Aucun groupe de sécurité disponibles -label.no.thanks=Non merci label.no=Non +label.no.actions=Aucune action disponible +label.no.alerts=Aucune alerte r\u00E9cente +label.no.data=Aucune donn\u00E9e +label.no.errors=Aucune erreur r\u00E9cente +label.no.isos=Aucun ISOs disponible +label.no.items=Aucun \u00E9l\u00E9ment disponible +label.no.security.groups=Aucun groupe de s\u00E9curit\u00E9 disponible +label.no.thanks=Non merci label.none=Aucun label.not.found=Introuvable -label.num.cpu.cores=Nombre de c\u0153urs de processeur +label.notifications=Messages +label.num.cpu.cores=Nombre de coeurs de processeur +label.number.of.clusters=Nombre de clusters +label.number.of.hosts=Nombre d\\'H\u00F4tes +label.number.of.pods=Nombre de Pods +label.number.of.system.vms=Nombre de VM Syst\u00E8me +label.number.of.virtual.routers=Nombre de routeurs virtuels +label.number.of.zones=Nombre de zones label.numretries=Nombre de tentatives -label.offer.ha=Offrir la haute disponibilité +label.ocfs2=OCFS2 +label.offer.ha=Offrir la haute disponibilit\u00E9 +label.ok=OK label.optional=Facultatif -label.os.preference=Préférence du OS +label.order=Ordre +label.os.preference=Pr\u00E9f\u00E9rence du OS label.os.type=Type du OS -label.owned.public.ips=Addresses IP Publique détenues -label.owner.account=Compte propriétaire -label.owner.domain=Propriétaire du domaine -label.parent.domain=Domaine Parent -label.password.enabled=Mot de passe activé +label.owned.public.ips=Adresses IP Publiques d\u00E9tenues +label.owner.account=Propri\u00E9taire du compte +label.owner.domain=Propri\u00E9taire du domaine +label.parent.domain=Parent du Domaine label.password=Mot de passe +label.password.enabled=Mot de passe activ\u00E9 label.path=Chemin -label.please.wait=Patientez s\'il vous plait +label.perfect.forward.secrecy=Confidentialit\u00E9 persistante +label.physical.network=R\u00E9seau physique +label.physical.network.ID=Identifiant du r\u00E9seau physique +label.please.specify.netscaler.info=Renseigner les informations sur le Netscaler +label.please.wait=Patientez s\\'il vous plait label.pod=Pod +label.pod.name=Nom du pod +label.pods=Pods label.port.forwarding=Redirection de port +label.port.forwarding.policies=R\u00E8gles de transfert de port label.port.range=Plage de ports -label.prev=Précédent -label.primary.allocated=Stockage primaire alloué -label.primary.network=Réseau primaire -label.primary.storage=Stockage primaire -label.primary.used=Stockage primaire utilisé -label.private.interface=Interface privée -label.private.ip.range=Plage d\'adresses IP Privées -label.private.ip=Adresse IP Privée -label.private.ips=Adresses IP Privées -label.private.port=Port privé -label.private.zone=Zone Privée +label.prev=Pr\u00E9c\u00E9dent +label.previous=Retour +label.primary.allocated=Stockage primaire allou\u00E9 +label.primary.network=R\u00E9seau primaire +label.primary.storage=Premier stockage +label.primary.storage.count=Groupes de stockage primaire +label.primary.used=Stockage primaire utilis\u00E9 +label.private.Gateway=Passerelle priv\u00E9e +label.private.interface=Interface priv\u00E9e +label.private.ip=Adresse IP Priv\u00E9e +label.private.ip.range=Plage d\\'adresses IP Priv\u00E9es +label.private.ips=Adresses IP Priv\u00E9es +label.private.network=R\u00E9seau priv\u00E9 +label.private.port=Port priv\u00E9 +label.private.zone=Zone Priv\u00E9e +label.privatekey=Cl\u00E9 priv\u00E9e PKCS\#8 +label.project=Projet +label.project.dashboard=Tableau de bord projet +label.project.id=ID projet +label.project.invite=Inviter sur le projet +label.project.name=Nom du projet +label.project.view=Vue projet +label.projects=Projets label.protocol=Protocole +label.providers=Fournisseurs +label.public=Publique label.public.interface=Interface publique label.public.ip=Adresse IP publique label.public.ips=Adresses IP publiques +label.public.network=R\u00E9seau public label.public.port=Port public +label.public.traffic=Trafic public label.public.zone=Zone publique -label.public=Publique -label.recent.errors=Erreurs récentes +label.purpose=R\u00F4le +label.quickview=Aper\u00E7u +label.reboot=Red\u00E9marrer +label.recent.errors=Erreurs r\u00E9centes +label.redundant.router=Routeur redondant +label.redundant.router.capability=Router redondant +label.redundant.state=\u00C9tat de la redondance label.refresh=Actualiser label.related=Connexes -label.remove.from.load.balancer=Supprimer l\'instance du partageur de charge -label.removing.user=Retrait de l\'utilisateur +label.remind.later=Rappeler moi plus tard +label.remove.ACL=Supprimer une r\u00E8gle ACL +label.remove.egress.rule=Supprimer la r\u00E8gle sortante +label.remove.from.load.balancer=Supprimer l\\'instance du r\u00E9partiteur de charge +label.remove.ingress.rule=Supprimer la r\u00E8gle entrante +label.remove.ip.range=Supprimer la plage IP +label.remove.pf=Supprimer la r\u00E8gle de transfert de port +label.remove.project.account=Supprimer le compte projet +label.remove.rule=Supprimer la r\u00E8gle +label.remove.static.nat.rule=Supprimer le NAT statique +label.remove.static.route=Supprimer une route statique +label.remove.tier=Supprimer le tiers +label.remove.vm.from.lb=Supprimer la VM de la r\u00E8gle de r\u00E9partition de charge +label.remove.vpc=Supprimer le VPC +label.removing=Suppression +label.removing.user=Retrait de l\\'utilisateur label.required=Requis -label.reserved.system.ip=Adresse IP Système réservé -label.resource.limits=Limite des ressources +label.reserved.system.gateway=Passerelle r\u00E9serv\u00E9e Syst\u00E8me +label.reserved.system.ip=Adresse IP Syst\u00E8me r\u00E9serv\u00E9e +label.reserved.system.netmask=Masque de sous-r\u00E9seau r\u00E9serv\u00E9 Syst\u00E8me +label.reset.VPN.connection=R\u00E9-initialiser la connexion VPN label.resource=Ressource +label.resource.limits=Limite des ressources +label.resource.state=\u00C9tat des ressources label.resources=Ressources -label.role=Rôle +label.restart.network=Red\u00E9marrage du r\u00E9seau +label.restart.required=Red\u00E9marrage n\u00E9cessaire +label.restart.vpc=Red\u00E9marrer le VPC +label.restore=Restaurer +label.review=Revoir +label.revoke.project.invite=R\u00E9voquer l\\'invitation +label.role=R\u00F4le +label.root.disk.controller=Contr\u00F4leur de disque principal label.root.disk.offering=Offre de disque racine +label.round.robin=Al\u00E9atoire +label.rules=R\u00E8gles label.running.vms=VMs actives +label.s3.access_key=Cl\u00E9 d\\'Acc\u00E8s +label.s3.bucket=Seau +label.s3.connection_timeout=D\u00E9lai d\\'expiration de connexion +label.s3.endpoint=Terminaison +label.s3.max_error_retry=Nombre d\\'essai en erreur max. +label.s3.secret_key=Cl\u00E9 Priv\u00E9e +label.s3.socket_timeout=D\u00E9lai d\\'expiration de la socket +label.s3.use_https=Utiliser HTTPS label.saturday=Samedi label.save=Sauvegarder -label.saving.processing=Sauvegarde en cours.... -label.scope=Portée +label.save.and.continue=Enregistrer et continuer +label.saving.processing=Sauvegarde en cours... +label.scope=Port\u00E9e label.search=Rechercher label.secondary.storage=Stockage secondaire -label.secondary.used=Stockage secondaire utilisé -label.secret.key=clé privée -label.security.group.name=Nom du groupe de sécurité -label.security.group=Groupe de sécurité -label.security.groups.enabled=Groupes de sécurité Activés -label.security.groups=Groupes de sécurité -label.sent=Envoyer +label.secondary.storage.count=Groupes de stockage secondaire +label.secondary.storage.vm=VM stockage secondaire +label.secondary.used=Stockage secondaire utilis\u00E9 +label.secret.key=Cl\u00E9 priv\u00E9e +label.security.group=Groupe de s\u00E9curit\u00E9 +label.security.group.name=Nom du groupe de s\u00E9curit\u00E9 +label.security.groups=Groupes de s\u00E9curit\u00E9 +label.security.groups.enabled=Groupes de s\u00E9curit\u00E9 Activ\u00E9s +label.select=S\u00E9lectionner +label.select-view=S\u00E9lectionner la vue +label.select.a.template=S\u00E9lectionner un mod\u00E8le +label.select.a.zone=S\u00E9lectionner une zone +label.select.instance=S\u00E9lectionner une instance +label.select.instance.to.attach.volume.to=S\u00E9lectionner l\\'instance \u00E0 laquelle rattacher ce volume +label.select.iso.or.template=S\u00E9lectionner un ISO ou un mod\u00E8le +label.select.offering=S\u00E9lectionner une offre +label.select.project=S\u00E9lectionner un projet +label.select.tier=S\u00E9lectionner le tiers +label.select.vm.for.static.nat=S\u00E9lectionner une VM pour le NAT statique +label.sent=Envoy\u00E9 label.server=Serveur +label.service.capabilities=Fonctions disponibles label.service.offering=Offre de Service -label.system.service.offering=Offre de Service Système -label.session.expired=Session expiré +label.session.expired=Session expir\u00E9e +label.set.up.zone.type=Configurer le type de zone +label.setup=Configuration +label.setup.network=Configurer le r\u00E9seau +label.setup.zone=Configurer la zone label.shared=En partage +label.show.ingress.rule=Montrer la r\u00E8gle d\\'entr\u00E9e +label.shutdown.provider=\u00C9teindre ce fournisseur +label.site.to.site.VPN=VPN Site-\u00E0-Site label.size=Taille -label.snapshot.limits=Limite d\'instantanés -label.snapshot.name=Nom de l\'instantané -label.snapshot.s=Instantané(s) -label.snapshot.schedule=Configurer un snapshot récurrent -label.snapshot=Instantané -label.snapshots=Instantanés +label.skip.guide=J\\'ai d\u00E9j\u00E0 utilis\u00E9 CloudStack avant, passer ce tutoriel +label.snapshot=Instantan\u00E9 +label.snapshot.limits=Limites d\\'instantan\u00E9 +label.snapshot.name=Nom de l\\'instantan\u00E9 +label.snapshot.s=Instantan\u00E9(s) +label.snapshot.schedule=Configurer un instantan\u00E9 r\u00E9current +label.snapshots=Instantan\u00E9s +label.source=Origine label.source.nat=NAT Source -label.specify.vlan=Précisez le VLAN -label.start.port=Port de -label.state=État -label.static.nat.to=NAT Static vers -label.static.nat=NAT Static +label.specify.IP.ranges=Sp\u00E9cifier des plages IP +label.specify.vlan=Pr\u00E9ciser le VLAN +label.srx=SRX +label.start.IP=D\u00E9marrer l\\'IP +label.start.port=Port de d\u00E9but +label.start.reserved.system.IP=Adresse IP de d\u00E9but r\u00E9serv\u00E9e Syst\u00E8me +label.start.vlan=VLAN de d\u00E9part +label.state=\u00C9tat +label.static.nat=NAT Statique +label.static.nat.enabled=NAT statique activ\u00E9 +label.static.nat.to=NAT Statique vers +label.static.nat.vm.details=D\u00E9tails des NAT statique VM label.statistics=Statistiques label.status=Statut -label.step.1.title=Etape 1 \: Sélectionnez un modèle -label.step.1=Étape 1 -label.step.2.title=Etape 2\: Offre de Service -label.step.2=Étape 2 -label.step.3.title=Etape 3\: Sélectionnez une offre de service -label.step.3=Étape 3 -label.step.4.title=Etape 4\: Réseau -label.step.4=Étape 4 -label.step.5.title=Etape 5\: Vérification -label.step.5=Étape 5 -label.stopped.vms=VMs arrêtés -label.storage.type=Type de stockage +label.step.1=\u00C9tape 1 +label.step.1.title=\u00C9tape 1 \: S\u00E9lectionnez un mod\u00E8le +label.step.2=\u00C9tape 2 +label.step.2.title=\u00C9tape 2 \: Offre de Service +label.step.3=\u00C9tape 3 +label.step.3.title=\u00C9tape 3 \: S\u00E9lectionnez une offre de service +label.step.4=\u00C9tape 4 +label.step.4.title=\u00C9tape 4 \: R\u00E9seau +label.step.5=\u00C9tape 5 +label.step.5.title=\u00C9tape 5 \: V\u00E9rification +label.stickiness=Fid\u00E9lit\u00E9 +label.sticky.cookie-name=Nom du cookie +label.sticky.domain=Domaine +label.sticky.expire=Expiration +label.sticky.holdtime=Temps de pause +label.sticky.indirect=Indirect +label.sticky.length=Longueur +label.sticky.mode=Mode +label.sticky.nocache=Pas de cache +label.sticky.postonly=Apr\u00E8s seulement +label.sticky.prefix=Pr\u00E9fixe +label.sticky.request-learn=Apprendre la requ\u00EAte +label.sticky.tablesize=Taille du tableau +label.stop=Arr\u00EAter +label.stopped.vms=VMs arr\u00EAt\u00E9es label.storage=Stockage +label.storage.tags=\u00C9tiquettes de stockage +label.storage.traffic=Trafic stockage +label.storage.type=Type de stockage +label.subdomain.access=Acc\u00E8s sous-domaine label.submit=Envoyer -label.submitted.by=[Soumis par\: ] -label.succeeded=Réussi +label.submitted.by=[Soumis par \: ] +label.succeeded=R\u00E9ussi label.sunday=Dimanche -label.system.capacity=Capacité système -label.system.vm.type=Type de VM système -label.system.vm=VM Système -label.system.vms=\ VMs systèmes -label.tagged=Taggé -label.tags=Tags -label.target.iqn=IQN de la Cible -label.template.limits=Limites des modèles -label.template=Modèle -label.theme.default=Thème par défaut -label.theme.grey=Personnalisé - Gris -label.theme.lightblue=Personnalisé - Blue clair +label.super.cidr.for.guest.networks=Super CIDR pour les r\u00E9seaux invit\u00E9s +label.supported.services=Services support\u00E9s +label.supported.source.NAT.type=Type de NAT support\u00E9 +label.suspend.project=Suspendre projet +label.system.capacity=Capacit\u00E9 syst\u00E8me +label.system.offering=Offre de syst\u00E8me +label.system.service.offering=Offre de Service Syst\u00E8me +label.system.vm=VM Syst\u00E8me +label.system.vm.type=Type de VM syst\u00E8me +label.system.vms=\ VMs Syst\u00E8mes +label.system.wide.capacity=Capacit\u00E9 globale +label.tagged=\u00C9tiquet\u00E9 +label.tags=\u00C9tiquette +label.target.iqn=Cible IQN +label.task.completed=T\u00E2che termin\u00E9e +label.template=Mod\u00E8le +label.template.limits=Limites de mod\u00E8le +label.theme.default=Th\u00E8me par d\u00E9faut +label.theme.grey=Personnalis\u00E9 - Gris +label.theme.lightblue=Personnalis\u00E9 - Bleu clair label.thursday=Jeudi -label.time.zone=Fuseau horaire +label.tier=Tiers +label.tier.details=D\u00E9tails du tiers label.time=Temps -label.timeout.in.second = Timeout (secondes) +label.time.zone=Fuseau horaire +label.timeout=D\u00E9lai d\\'expiration +label.timeout.in.second=D\u00E9lai d\\'expiration (secondes) label.timezone=Fuseau horaire -label.total.cpu=Capacité Totale en CPU +label.token=Jeton unique +label.total.CPU=Capacit\u00E9 totale en CPU +label.total.cpu=Capacit\u00E9 Totale en CPU +label.total.hosts=Total H\u00F4tes +label.total.memory=Total m\u00E9moire +label.total.of.ip=Total adresses IP +label.total.of.vm=Total VM +label.total.storage=Total stockage label.total.vms=Nombre total de VMs -label.traffic.type=Type de Traffic +label.traffic.label=Libell\u00E9 de trafic +label.traffic.type=Type de Trafic +label.traffic.types=Types de trafic label.tuesday=Mardi -label.type.id=ID du Type label.type=Type +label.type.id=ID du Type label.unavailable=Indisponible -label.unlimited=Illimité -label.untagged=Non Taggé -label.update.ssl.cert=Mettre à jour le certificate SSL -label.update.ssl=Mettre à jour le certificate SSL -label.updating=Mise à jour +label.unlimited=Illimit\u00E9 +label.untagged=Non Tagg\u00E9 +label.update.project.resources=Mettre \u00E0 jour les ressources du projet +label.update.ssl=Certificat SSL +label.update.ssl.cert=Certificat SSL +label.updating=Mise \u00E0 jour +label.upload=Charger +label.upload.volume=Charger un volume label.url=URL -label.usage.interface=Interface d\'Usage -label.used=Utilisé +label.usage.interface=Interface Utilisation +label.used=Utilis\u00E9 label.user=Utilisateur -label.username=Nom d\'Utilisateur +label.username=Nom d\\'Utilisateur label.users=Utilisateurs label.value=Valeur +label.vcdcname=Nom du DC vCenter label.vcenter.cluster=Cluster vCenter label.vcenter.datacenter=Datacenter vCenter label.vcenter.datastore=Datastore vCenter -label.vcenter.host=Hôte Vcenter +label.vcenter.host=H\u00F4te vCenter label.vcenter.password=Mot de passe vCenter -label.vcenter.username=Nom d\'utilisateur vCenter +label.vcenter.username=Nom d\\'utilisateur vCenter +label.vcipaddress=Adresse IP vCenter label.version=Version +label.view=Voir +label.view.all=Voir tout +label.view.console=Voir la console +label.view.more=Voir plus +label.viewing=Consultation en cours label.virtual.appliance=Appliance Virtuelle label.virtual.appliances=Appliances Virtuelles -label.virtual.network=Réseau virtuel +label.virtual.machines=Machines virtuelles +label.virtual.network=R\u00E9seau virtuel +label.virtual.router=Routeur Virtuel +label.virtual.routers=Routeurs virtuels +label.vlan=VLAN label.vlan.id=ID du VLAN label.vlan.range=Plage du VLAN label.vm.add=Ajouter une instance -label.vm.destroy=Détruire -label.vm.reboot=Redémarrer -label.vm.start=Démarrer -label.vm.stop=Arrêtez +label.vm.destroy=D\u00E9truire +label.vm.display.name=Nom d\\'affichage de la VM +label.vm.name=Nom de la VM +label.vm.reboot=Red\u00E9marrer +label.vm.start=D\u00E9marrer +label.vm.state=\u00C9tat VM +label.vm.stop=Arr\u00EAter label.vmfs=VMFS label.vms=VMs +label.vmware.traffic.label=Libell\u00E9 pour le trafic VMware +label.volgroup=Groupe de Volume +label.volume=Volume label.volume.limits=Limites des volumes label.volume.name=Nom du volume -label.volume=Volume label.volumes=Volumes -label.vsphere.managed=Gérée par vSphere +label.vpc=VPC +label.vpc.id=ID VPC +label.vpn=VPN +label.vpn.customer.gateway=Passerelle VPN client +label.vsmctrlvlanid=\ ID VLAN Contr\u00F4le +label.vsmpktvlanid=ID VLAN Paquet +label.vsmstoragevlanid=VLAN ID Stockage +label.vsphere.managed=G\u00E9r\u00E9e par vSphere label.waiting=En attente -label.warn=Avertir +label.warn=Avertissement label.wednesday=Mercredi label.weekly=Hebdomadaire -label.welcome.cloud.console=Bienvenue dans la console de gestion label.welcome=Bienvenue +label.welcome.cloud.console=Bienvenue dans la Console d\\'Administration +label.what.is.cloudstack=Qu\\'est-ce-que CloudStack&\#8482; ? +label.xen.traffic.label=Libell\u00E9 pour le trafic XenServer label.yes=Oui -label.zone.id=ID de la zone -label.zone.step.1.title=Etape 1\: Sélectionnez un réseau -label.zone.step.2.title=Etape 2\: Ajoutez une zone -label.zone.step.3.title=Etape 3\: Ajoutez un Pod -label.zone.step.4.title=Etape 4\: Ajoutez une plage d\'adresses IP -label.zone.wide=Transverse à la zone label.zone=Zone - -#Messages -message.acquire.public.ip=Sélectionnez la zone dans laquelle vous voulez acquérir votre nouvelle adresse IP. -message.action.cancel.maintenance.mode=Confirmer que vous souhaitez annuler cette maintenance. -message.action.cancel.maintenance=Votre hôte a été annulée de la maintenance. Ce processus peut prendre jusqu\'à plusieurs minutes. -message.action.delete.ISO.for.all.zones=L\'ISO est utilisé par toutes les zones. S\'il vous plaît confirmer que vous voulez le supprimer de toutes les zones. +label.zone.details=D\u00E9tails de la zone +label.zone.id=ID de la zone +label.zone.name=Nom de la zone +label.zone.step.1.title=\u00C9tape 1 \: S\u00E9lectionnez un r\u00E9seau +label.zone.step.2.title=\u00C9tape 2 \: Ajoutez une zone +label.zone.step.3.title=\u00C9tape 3 \: Ajoutez un Pod +label.zone.step.4.title=\u00C9tape 4 \: Ajoutez une plage d\\'adresses IP +label.zone.type=Type de zone +label.zone.wide=Transverse \u00E0 la zone +label.zoneWizard.trafficType.guest=Invit\u00E9 \: Trafic entre les machines virtuelles utilisateurs +label.zoneWizard.trafficType.management=Administration \: Trafic entre les ressources internes de CloudStack, incluant tous les composants qui communiquent avec le serveur d\\'administration, tels que les h\u00F4tes and les machines virtuelles Syst\u00E8mes CloudStack +label.zoneWizard.trafficType.public=Public \: Trafic entre Internet et les machines virtuelles dans le nuage +label.zoneWizard.trafficType.storage=Stockage \: Trafic entre les serveurs de stockages primaires et secondaires, tel que le transfert de machines virtuelles mod\u00E8les et des instantan\u00E9s de disques +label.zones=Zones +managed.state=\u00C9tat de la gestion +message.Zone.creation.complete=Cr\u00E9ation de la zone termin\u00E9e +message.acquire.new.ip=Confirmer l\\'acquisition d\\'une nouvelle adresse IP pour ce r\u00E9seau. +message.acquire.new.ip.vpc=Veuillez confirmer que vous voulez une nouvelle adresse IP pour ce VPC +message.acquire.public.ip=S\u00E9lectionnez la zone dans laquelle vous voulez acqu\u00E9rir votre nouvelle adresse IP. +message.action.cancel.maintenance=Votre h\u00F4te a quitt\u00E9 la maintenance. Ce processus peut prendre jusqu\\'\u00E0 plusieurs minutes. +message.action.cancel.maintenance.mode=Confirmer l\\'annulation de cette maintenance. +message.action.change.service.warning.for.instance=Votre instance doit \u00EAtre arr\u00EAt\u00E9e avant d\\'essayer de changer son offre de service. +message.action.change.service.warning.for.router=Votre routeur doit \u00EAtre arr\u00EAt\u00E9 avant d\\'essayer de changer son offre de service. message.action.delete.ISO=Confirmer que vous souhaitez supprimer cette ISO. +message.action.delete.ISO.for.all.zones=L\\'ISO est utilis\u00E9 par toutes les zones. S\\'il vous pla\u00EEt confirmer que vous voulez le supprimer de toutes les zones. message.action.delete.cluster=Confirmer que vous voulez supprimer ce cluster. message.action.delete.disk.offering=Confirmer que vous souhaitez supprimer cette offre de disque. message.action.delete.domain=Confirmer que vous voulez supprimer ce domaine. -message.action.delete.external.firewall=Confirmer que vous souhaitez supprimer ce pare-feu externe. Attention\: Si vous prévoyez de rajouter le même pare-feu externe de nouveau, vous devez réinitialiser les données d\'utilisation sur l\'appareil. -message.action.delete.external.load.balancer=Confirmez que vous souhaitez supprimer ce partageur de charge externe. Attention \: Si vous pensez ajouter le même partageur de charge plus tard, vous devez remettre à zéro les statistiques d\'usage de cet équipement. -message.action.delete.ingress.rule=Confirmez que vous souhaitez supprimer cette règle Ingress -message.action.delete.network=Confirmer que vous voulez supprimer ce réseau. +message.action.delete.external.firewall=Confirmer que vous souhaitez supprimer ce pare-feu externe. Attention \: Si vous pr\u00E9voyez de rajouter le m\u00EAme pare-feu externe de nouveau, vous devez r\u00E9-initialiser les donn\u00E9es d\\'utilisation sur l\\'appareil. +message.action.delete.external.load.balancer=Confirmez que vous souhaitez supprimer ce r\u00E9partiteur de charge externe. Attention \: Si vous pensez ajouter le m\u00EAme r\u00E9partiteur de charge plus tard, vous devez remettre \u00E0 z\u00E9ro les statistiques d\\'utilisation de cet \u00E9quipement. +message.action.delete.ingress.rule=Confirmez que vous souhaitez supprimer cette r\u00E8gle d\\'entr\u00E9e. +message.action.delete.network=Confirmer que vous voulez supprimer ce r\u00E9seau. +message.action.delete.nexusVswitch=Confirmer la suppession de ce Nexus 1000v +message.action.delete.physical.network=Confirmer la suppression du r\u00E9seau physique message.action.delete.pod=Confirmez que vous souhaitez supprimer ce pod. message.action.delete.primary.storage=Confirmer que vous voulez supprimer ce stockage primaire. message.action.delete.secondary.storage=Confirmez que vous souhaitez supprimer ce stockage secondaire. -message.action.delete.security.group=Confirmez que vous souhaitez supprimer ce groupe de sécurité. +message.action.delete.security.group=Confirmez que vous souhaitez supprimer ce groupe de s\u00E9curit\u00E9. message.action.delete.service.offering=Confirmez que vous souhaitez supprimer cette offre de service. -message.action.delete.snapshot=Confirmez que vous souhaitez supprimer cet instantané -message.action.delete.template.for.all.zones=Ce modèle est utilisé par toutes les zones. Confirmez que vous souhaitez le supprimer de toutes les zones. -message.action.delete.template=Confirmez que vous souhaitez supprimer ce modèle. +message.action.delete.snapshot=Confirmez que vous souhaitez supprimer cet instantan\u00E9 +message.action.delete.system.service.offering=Confirmer la suppression de l\\'offre syst\u00E8me. +message.action.delete.template=Confirmez que vous souhaitez supprimer ce mod\u00E8le. +message.action.delete.template.for.all.zones=Ce mod\u00E8le est utilis\u00E9 par toutes les zones. Confirmez que vous souhaitez le supprimer de toutes les zones. message.action.delete.volume=Confirmez que vous souhaitez supprimer ce volume. message.action.delete.zone=Confirmez que vous souhaitez supprimer cette zone. message.action.destroy.instance=Confirmez que vous souhaitez supprimer cette instance. -message.action.destroy.systemvm=Confirmez que vous souhaitez supprimer cette VM Système. -message.action.disable.static.NAT=Confirmez que vous souhaitez désactiver le NAT statique. -message.action.enable.maintenance=Votre hôte a été mis en mode maintenance avec succès. Ce processus peut durer plusieurs minutes ou plus suivant le nombre de VMs actives sur cet hôte. -message.action.force.reconnect=Votre hôte a été forcé à se reconnecter avec succès. Ce processus peut prendre jusqu\'à plusieurs minutes. -message.action.host.enable.maintenance.mode=Activer le mode maintenance va causer la migration à chaud de l\'ensemble des instances de cet hôte sur les autres hôtes disponibles. +message.action.destroy.systemvm=Confirmez que vous souhaitez supprimer cette VM Syst\u00E8me. +message.action.disable.cluster=Confirmez que vous souhaitez d\u00E9sactiver ce cluster +message.action.disable.nexusVswitch=Confirmer la d\u00E9sactivation de ce Nexus 1000v +message.action.disable.physical.network=Confirmer l\\'activation de ce r\u00E9seau physique. +message.action.disable.pod=Confirmez que vous voulez d\u00E9sactiver ce Pod +message.action.disable.static.NAT=Confirmez que vous souhaitez d\u00E9sactiver le NAT statique. +message.action.disable.zone=Confirmez que vous voulez d\u00E9sactiver cette zone +message.action.download.iso=Confirmer le t\u00E9l\u00E9chargement de cet ISO +message.action.download.template=Confirmer le t\u00E9l\u00E9chargement de ce mod\u00E8le +message.action.enable.cluster=Confirmez que vous souhaitez activer ce cluster +message.action.enable.maintenance=Votre h\u00F4te a \u00E9t\u00E9 mis en mode maintenance avec succ\u00E8s. Ce processus peut durer plusieurs minutes ou plus, suivant le nombre de VMs actives sur cet h\u00F4te. +message.action.enable.nexusVswitch=Confirmer l\\'activation de ce Nexus 1000v +message.action.enable.physical.network=Confirmer l\\'activation de ce r\u00E9seau physique. +message.action.enable.pod=Confirmez que vous souhaitez activer ce Pod +message.action.enable.zone=Confirmez que vous voulez activer cette zone +message.action.force.reconnect=Votre h\u00F4te a \u00E9t\u00E9 forc\u00E9e \u00E0 se reconnecter avec succ\u00E8s. Ce processus peut prendre jusqu\\'\u00E0 plusieurs minutes. +message.action.host.enable.maintenance.mode=Activer le mode maintenance va causer la migration \u00E0 chaud de l\\'ensemble des instances de cet h\u00F4te sur les autres h\u00F4tes disponibles. message.action.instance.reset.password=Confirmer le changement du mot de passe ROOT pour cette machine virtuelle. -message.action.primarystorage.enable.maintenance.mode=Attention \: placer ce stockage primaire en mode maintenance que l\'ensemble des VMs utilisant des volumes sur ce stockage. Souhaitez vous continuer ? -message.action.reboot.instance=Confirmez que vous souhaitez redémarrer cette instance. -message.action.reboot.systemvm=Confirmez que vous souhaitez redémarrer cette VM Système -message.action.release.ip=Confirmez que vous souhaitez libérer cette IP. -message.action.remove.host=Supprimer le dernier/seul hôte dans le cluster et le réinstaller va supprimer l\'environnement/la base de données sur l\'hôte et rendre les VMs invitées inutilisables. +message.action.manage.cluster=Confirmez que vous voulez g\u00E9rer le cluster +message.action.primarystorage.enable.maintenance.mode=Attention \: placer ce stockage primaire en mode maintenance va provoquer l\\'arr\u00EAt de l\\'ensemble des VMs utilisant des volumes sur ce stockage. Souhaitez-vous continuer ? +message.action.reboot.instance=Confirmez que vous souhaitez red\u00E9marrer cette instance. +message.action.reboot.router=Tous les services fournit par ce routeur virtuel vont \u00EAtre interrompus. Confirmer le r\u00E9-amor\u00E7age de ce routeur. +message.action.reboot.systemvm=Confirmez que vous souhaitez red\u00E9marrer cette VM Syst\u00E8me +message.action.release.ip=Confirmez que vous souhaitez lib\u00E9rer cette IP. +message.action.remove.host=Confirmer la suppression de cet h\u00F4te. +message.action.reset.password.off=Votre instance ne supporte pas pour le moment cette fonctionnalit\u00E9. +message.action.reset.password.warning=Votre instance doit \u00EAtre arr\u00EAt\u00E9e avant d\\'essayer de changer son mot de passe. message.action.restore.instance=Confirmez que vous souhaitez restaurer cette instance. -message.action.start.instance=Confirmez que vous souhaitez démarrer cette instance. -message.action.start.router=Confirmez que vous souhaitez démarrer ce routeur. -message.action.start.systemvm=Confirmez que vous souhaitez redémarrer cette VM système. -message.action.stop.instance=Confirmez que vous souhaitez arrêter cette instance. -message.action.stop.systemvm=Confirmez que vous souhaitez arrêter cette VM. -message.action.take.snapshot=Confirmer la prise d\'un snapshot pour ce volume. -message.add.cluster.zone=Ajouter un cluster d\'hyperviseurs géré pour cette zone -message.add.cluster=Ajouter un cluster d\'hyperviseurs géré pour cette zone , pod -message.add.disk.offering=Renseignez les paramètres suivants pour ajouter un offre de service de disques -message.add.firewall=Ajouter un parefeu à cette zone -message.add.host=Renseignez les paramètres suivant pour ajouter un hôte -message.add.ip.range.direct.network=Ajouter une plage IP au réseau direct dans la zone +message.action.start.instance=Confirmez que vous souhaitez d\u00E9marrer cette instance. +message.action.start.router=Confirmez que vous souhaitez d\u00E9marrer ce routeur. +message.action.start.systemvm=Confirmez que vous souhaitez red\u00E9marrer cette VM syst\u00E8me. +message.action.stop.instance=Confirmez que vous souhaitez arr\u00EAter cette instance. +message.action.stop.router=Tous les services fournit par ce routeur virtuel vont \u00EAtre interrompus. Confirmer l\\'arr\u00EAt de ce routeur. +message.action.stop.systemvm=Confirmez que vous souhaitez arr\u00EAter cette VM. +message.action.take.snapshot=Confirmer la prise d\\'un instantan\u00E9 pour ce volume. +message.action.unmanage.cluster=Confirmez que vous ne voulez plus g\u00E9rer le cluster +message.activate.project=\u00CAtes-vous s\u00FBr de vouloir activer ce projet ? +message.add.VPN.gateway=Confirmer l\\'ajout d\\'une passerelle VPN +message.add.cluster=Ajouter un cluster d\\'hyperviseurs g\u00E9r\u00E9 pour cette zone , pod +message.add.cluster.zone=Ajouter un cluster d\\'hyperviseurs g\u00E9r\u00E9 pour cette zone +message.add.disk.offering=Renseignez les param\u00E8tres suivants pour ajouter un offre de service de disques +message.add.domain=Sp\u00E9cifier le sous domaine que vous souhaitez cr\u00E9er sous ce domaine +message.add.firewall=Ajouter un pare-feu \u00E0 cette zone +message.add.guest.network=Confirmer l\\'ajout du r\u00E9seau invit\u00E9 +message.add.host=Renseignez les param\u00E8tres suivants pour ajouter une h\u00F4te +message.add.ip.range=Ajouter une plage IP pour le r\u00E9seau publique dans la zone +message.add.ip.range.direct.network=Ajouter une plage IP au r\u00E9seau direct dans la zone message.add.ip.range.to.pod=

Ajouter une plage IP pour le pod\:

-message.add.ip.range=Ajouter une plage IP pour le réseau publique dans la zone -message.add.load.balancer=Ajouter un partageur de charge à la zone -message.add.network=Ajouter un nouveau réseau à la zone\: -message.add.pod=Ajouter un nouveau pod à la zone -message.add.primary.storage=Ajouter un nouveau stockage primaire à la zone , pod -message.add.primary=Renseignez les paramètres suivants pour ajouter un sotckage primaire +message.add.load.balancer=Ajouter un r\u00E9partiteur de charge \u00E0 la zone +message.add.load.balancer.under.ip=La r\u00E8gle de r\u00E9partition de charge \u00E9t\u00E9 ajout\u00E9e sous l\\'adresse IP \: +message.add.network=Ajouter un nouveau r\u00E9seau \u00E0 la zone\: +message.add.new.gateway.to.vpc=Renseigner les informations suivantes pour ajouter une nouvelle passerelle pour ce VPC +message.add.pod=Ajouter un nouveau pod \u00E0 la zone +message.add.pod.during.zone.creation=Chaque zone doit contenir un ou plusieurs pods, et le premier pod sera ajout\u00E9 maintenant. Une pod contient les h\u00F4tes et les serveurs de stockage primaire, qui seront ajout\u00E9s dans une \u00E9tape ult\u00E9rieure. Configurer une plage d\\'adresses IP r\u00E9serv\u00E9es pour le trafic de gestion interne de CloudStack. La plage d\\'IP r\u00E9serv\u00E9e doit \u00EAtre unique pour chaque zone dans le nuage. +message.add.primary=Renseignez les param\u00E8tres suivants pour ajouter un stockage primaire +message.add.primary.storage=Ajouter un nouveau stockage primaire \u00E0 la zone , pod message.add.secondary.storage=Ajouter un nouveau stockage pour la zone -message.add.service.offering=Renseigner les informations suivantes pour ajouter une nouvelle offre de service computing. -message.add.template=Renseignez les informations suivantes pour créer votre nouveau modèle +message.add.service.offering=Renseigner les informations suivantes pour ajouter une nouvelle offre de service de calcul. +message.add.system.service.offering=Ajouter les informations suivantes pour cr\u00E9er une nouvelle offre syst\u00E8me. +message.add.template=Renseignez les informations suivantes pour cr\u00E9er votre nouveau mod\u00E8le message.add.volume=Renseignez les informations suivantes pour ajouter un nouveau volume -message.additional.networks.desc=Sélectionnez le(s) réseau(x) additionnel(s) au(x)quel(s) sera connectée votre instance. -message.advanced.mode.desc=Choisissez ce modèle de réseau si vous souhaitez bénéficier du support des VLANs. Ce mode de réseau donne le plus de flexibilité aux administrateurs pour fournir des offres de service réseau personnalisées comme fournir des parefeux, vpn, partageurs de charge ou également activer des réseaux virtuels ou directs. -message.advanced.security.group=Choisissez ceci si vous souhaitez utiliser les groupes de sécurité pour fournir l\'isolation des VMs invitées. -message.advanced.virtual=Choisissez ceci si vous souhaitez utiliser des VLANs pour fournir l\'isolation des VMs invitées. -message.allow.vpn.access=Entrez un nom d\'utilisateur et un mot de passe pour l\'utilisateur que vous souhaitez autorisé à utiliser l\'accès VPN. -message.attach.iso.confirm=Confirmez que vous souhaitez attacher l\'image ISO à cette instance. -message.attach.volume=Renseignez les données suivante pour attacher un nouveau volume. Si vous attachez un volume disque à une machine virtuelle sous Windows, vous aurez besoin de redémarrer l\'instance pour voir le nouveau disque. -message.basic.mode.desc=Choisissez ce modèle de réseau si vous *ne voulez pas* activer le support des VLANs. Toutes les instances créées avec ce modèle de réseau se verront assignées une adresse IP et les groupes de sécurité seront utilisés pour fournir l\'isolation entre les VMs.\n -message.change.offering.confirm=Confirmez que vous souhaitez changer l\'offre de service de cette instance. +message.adding.Netscaler.device=Ajouter un Netscaler +message.adding.Netscaler.provider=Ajouter un fournisseur Netscaler +message.adding.host=Ajout un h\u00F4te +message.additional.networks.desc=S\u00E9lectionnez le(s) r\u00E9seau(x) additionnel(s) au(x)quel(s) sera connect\u00E9e votre instance. +message.advanced.mode.desc=Choisissez ce mod\u00E8le de r\u00E9seau si vous souhaitez b\u00E9n\u00E9ficier du support des VLANs. Ce mode de r\u00E9seau donne le plus de flexibilit\u00E9 aux administrateurs pour fournir des offres de service r\u00E9seau personnalis\u00E9es comme fournir des pare-feux, VPN, r\u00E9partiteurs de charge ou \u00E9galement activer des r\u00E9seaux virtuels ou directs. +message.advanced.security.group=Choisissez ceci si vous souhaitez utiliser les groupes de s\u00E9curit\u00E9 pour fournir l\\'isolation des VMs invit\u00E9es. +message.advanced.virtual=Choisissez ceci si vous souhaitez utiliser des VLANs pour fournir l\\'isolation des VMs invit\u00E9es. +message.after.enable.s3=Le stockage secondaire S3 est configur\u00E9. Note \: Quand vous quitterez cette page, vous ne pourrez plus re-configurer le support S3. +message.after.enable.swift=Swift configur\u00E9. Remarque \: une fois que vous quitterez cette page, il ne sera plus possible de re-configurer Swift \u00E0 nouveau. +message.alert.state.detected=\u00C9tat d\\'alerte d\u00E9tect\u00E9 +message.allow.vpn.access=Entrez un nom d\\'utilisateur et un mot de passe pour l\\'utilisateur que vous souhaitez autoriser \u00E0 utiliser l\\'acc\u00E8s VPN. +message.apply.snapshot.policy=Vous avez mis \u00E0 jour votre politique d\\'instantan\u00E9s avec succ\u00E8s. +message.attach.iso.confirm=Confirmez que vous souhaitez attacher l\\'image ISO \u00E0 cette instance. +message.attach.volume=Renseignez les donn\u00E9es suivantes pour attacher un nouveau volume. Si vous attachez un volume disque \u00E0 une machine virtuelle sous Windows, vous aurez besoin de red\u00E9marrer l\\'instance pour voir le nouveau disque. +message.basic.mode.desc=Choisissez ce mod\u00E8le de r\u00E9seau si vous *ne voulez pas* activer le support des VLANs. Toutes les instances cr\u00E9\u00E9es avec ce mod\u00E8le de r\u00E9seau se verront assigner une adresse IP et les groupes de s\u00E9curit\u00E9 seront utilis\u00E9s pour fournir l\\'isolation entre les VMs. +message.change.offering.confirm=Confirmez que vous souhaitez changer l\\'offre de service de cette instance. +message.change.password=Merci de modifier votre mot de passe. +message.configure.all.traffic.types=Vous avez de multiples r\u00E9seaux physiques ; veuillez configurer les libell\u00E9s pour chaque type de trafic en cliquant sur le bouton Modifier. +message.configuring.guest.traffic=Configuration du r\u00E9seau VM +message.configuring.physical.networks=Configuration des r\u00E9seaux physiques +message.configuring.public.traffic=Configuration du r\u00E9seau public +message.configuring.storage.traffic=Configuration du r\u00E9seau de stockage +message.confirm.action.force.reconnect=Confirmer la re-connexion forc\u00E9e de cet h\u00F4te. +message.confirm.delete.F5=Confirmer la suppression du F5 +message.confirm.delete.NetScaler=Confirmer la suppression du Netscaler +message.confirm.delete.SRX=Confirmer la suppression du SRX +message.confirm.destroy.router=Confirmer la suppression de ce routeur +message.confirm.disable.provider=Confirmer la d\u00E9sactivation de ce fournisseur +message.confirm.enable.provider=Confirmer l\\'activation de ce fournisseur +message.confirm.join.project=Confirmer que vous souhaitez rejoindre ce projet. +message.confirm.remove.IP.range=Confirmer la suppression de cette plage d\\'adresses IP +message.confirm.shutdown.provider=Confirmer l\\'arr\u00EAt de ce fournisseur message.copy.iso.confirm=Confirmez que vous souhaitez copier votre image ISO vers -message.copy.template=Copier le modèle XXX de la zone vers -message.create.template.vm=Créer la VM depuis le modèle -message.create.template.volume=Renseignez les informations suivantes avec de créer un modèle à partir de votre volume de disque\:. La création du modèle peut prendre plusieurs minutes suivant la taille du volume. +message.copy.template=Copier le mod\u00E8le XXX de la zone vers +message.create.template=Voulez vous cr\u00E9er un mod\u00E8le ? +message.create.template.vm=Cr\u00E9er la VM depuis le mod\u00E8le +message.create.template.volume=Renseignez les informations suivantes avec de cr\u00E9er un mod\u00E8le \u00E0 partir de votre volume de disque\:. La cr\u00E9ation du mod\u00E8le peut prendre plusieurs minutes suivant la taille du volume. +message.creating.cluster=Cr\u00E9ation du cluster +message.creating.guest.network=Cr\u00E9ation du r\u00E9seau pour les invit\u00E9s +message.creating.physical.networks=Cr\u00E9ation des r\u00E9seaux physiques +message.creating.pod=Cr\u00E9ation d\\'un pod +message.creating.primary.storage=Cr\u00E9ation du stockage primaire +message.creating.secondary.storage=Cr\u00E9ation du stockage secondaire +message.creating.zone=Cr\u00E9ation de la zone +message.decline.invitation=Voulez-vous refuser cette invitation au projet ? +message.delete.VPN.connection=Confirmer la suppression de la connexion VPN +message.delete.VPN.customer.gateway=Confirmer la suppression de cette passerelle VPN client +message.delete.VPN.gateway=Confirmer la suppression de cette passerelle VPN message.delete.account=Confirmez que vous souhaitez supprimer ce compte. -message.detach.iso.confirm=Confirmez que vous souhaitez détacher l\'image ISO de cette instance. -# message.disable.account=Please confirm that you want to disable this account. By disabling the account, all users for this account will no longer have access to their cloud resources. All running virtual machines will be immediately shut down. -message.disable.vpn.access=Confirmez que vous souhaitez désactiver l\'accès VPN. -message.download.ISO=Cliquer le lien 00000 pour télécharger une image ISO -message.download.template=Cliquer le lien 00000 pour télécharger une template -message.download.volume=Cliquez sur 00000 pour télécharger le volume -message.edit.confirm=Confirmer les changement avant de cliquer sur "Enregistrer". -message.edit.limits=Renseignez les limites pour les ressources suivantes. "-1" indique qu\'il n\'y a pas de limites pour la création de ressources. +message.delete.gateway=Confirmer la suppression de cette passerelle +message.delete.project=\u00CAtes-vous s\u00FBr de vouloir supprimer ce projet ? +message.delete.user=Confirmer la suppression de cet utilisateur. +message.desc.advanced.zone=Pour des topologies de r\u00E9seau plus sophistiqu\u00E9es. Ce mod\u00E8le de r\u00E9seau permet plus de flexibilit\u00E9 dans la d\u00E9finition des r\u00E9seaux d\\'invit\u00E9s et propose des offres personnalis\u00E9es telles que le support de pare-feu, VPN ou d\\'\u00E9quilibrage de charge. +message.desc.basic.zone=Fournit un r\u00E9seau unique o\u00F9 chaque instance de machine virtuelle se voit attribuer une adresse IP directement depuis le r\u00E9seau. L\\'isolation des invit\u00E9s peut \u00EAtre assur\u00E9 au niveau de la couche r\u00E9seau-3 tels que les groupes de s\u00E9curit\u00E9 (filtrage d\\'adresse IP source). +message.desc.cluster=Chaque pod doit contenir un ou plusieurs clusters, et le premier cluster sera ajout\u00E9 tout de suite. Un cluster est un regroupement pour h\u00F4tes. Les h\u00F4tes d\\'un cluster ont tous un mat\u00E9riel identique, ex\u00E9cutent le m\u00EAme hyperviseur, sont dans le m\u00EAme sous-r\u00E9seau, et acc\u00E8dent au m\u00EAme stockage partag\u00E9. Chaque cluster comprend une ou plusieurs h\u00F4tes et un ou plusieurs serveurs de stockage primaire. +message.desc.host=Chaque cluster doit contenir au moins un h\u00F4te (machine) pour ex\u00E9cuter des machines virtuelles invit\u00E9es, et le premier h\u00F4te sera ajout\u00E9 tout de suite. Pour un h\u00F4te fonctionnant dans CloudStack, vous devez installer un logiciel hyperviseur sur l\\'h\u00F4te, attribuer une adresse IP \u00E0 l\\'h\u00F4te, et s\\'assurer que l\\'h\u00F4te est connect\u00E9 au serveur d\\'administration CloudStack.

Indiquer le nom de l\\'h\u00F4te ou son adresse IP, l\\'identifiant de connexion (g\u00E9n\u00E9ralement root) et le mot de passe ainsi que toutes les \u00E9tiquettes permettant de classer les h\u00F4tes. +message.desc.primary.storage=Chaque cluster doit contenir un ou plusieurs serveurs de stockage primaire, et le premier sera ajout\u00E9 tout de suite. Le stockage principal contient les volumes de disque pour les machines virtuelles s\\'ex\u00E9cutant sur les h\u00F4tes dans le cluster. Utiliser les protocoles standards pris en charge par l\\'hyperviseur sous-jacent. +message.desc.secondary.storage=Chaque zone doit avoir au moins un serveur NFS ou un serveur de stockage secondaire, et sera ajout\u00E9 en premier tout de suite. Le stockage secondaire entrepose les mod\u00E8les de machines virtuelles, les images ISO et les images disques des volumes des machines virtuelles. Ce serveur doit \u00EAtre accessible pour toutes les machines h\u00F4tes dans la zone.

Saisir l\\'adresse IP et le chemin d\\'export. +message.desc.zone=Une zone est la plus grande unit\u00E9 organisationnelle dans CloudStack, et correspond typiquement \u00E0 un centre de donn\u00E9es. Les zones fournissent un isolement physique et de la redondance. Une zone est constitu\u00E9e d\\'un ou plusieurs pods (dont chacun contient les h\u00F4tes et les serveurs de stockage primaire) et un serveur de stockage secondaire qui est partag\u00E9e par tous les pods dans la zone. +message.detach.disk=Voulez-vous d\u00E9tacher ce disque ? +message.detach.iso.confirm=Confirmez que vous souhaitez d\u00E9tacher l\\'image ISO de cette instance. +message.disable.account=Veuillez confirmer que vous voulez d\u00E9sactiver ce compte. En d\u00E9sactivant le compte, tous les utilisateurs pour ce compte n\\'auront plus acc\u00E8s \u00E0 leurs ressources sur le cloud. Toutes les machines virtuelles vont \u00EAtre arr\u00EAt\u00E9es imm\u00E9diatement. +message.disable.snapshot.policy=Vous avez d\u00E9sactiv\u00E9 votre politique d\\'instantan\u00E9 avec succ\u00E8s. +message.disable.user=Confirmer la d\u00E9sactivation de cet utilisateur. +message.disable.vpn=\u00CAtes-vous s\u00FBr de vouloir d\u00E9sactiver le VPN ? +message.disable.vpn.access=Confirmez que vous souhaitez d\u00E9sactiver l\\'acc\u00E8s VPN. +message.download.ISO=Cliquer 00000 pour t\u00E9l\u00E9charger une image ISO +message.download.template=Cliquer sur 00000 pour t\u00E9l\u00E9charger le mod\u00E8le +message.download.volume=Cliquer sur 00000 pour t\u00E9l\u00E9charger le volume +message.download.volume.confirm=Confirmer le t\u00E9l\u00E9chargement du volume +message.edit.account=Modifier ("-1" signifie pas de limite de ressources) +message.edit.confirm=Confirmer les changements avant de cliquer sur "Enregistrer". +message.edit.limits=Renseignez les limites pour les ressources suivantes. "-1" indique qu\\'il n\\'y a pas de limites pour la cr\u00E9ation de ressources. +message.edit.traffic.type=Sp\u00E9cifier le libell\u00E9 de trafic associ\u00E9 avec ce type de trafic. message.enable.account=Confirmez que vous souhaitez activer ce compte. -message.enable.vpn.access=Le VPN est désactivé pour cette adresse IP. Voulez vous activer l\'accès VPN ? -message.enabled.vpn.ip.sec=Votre clé partagée IPSec est -message.enabled.vpn=Votre accès VPN est activé et peut être accédé par l\'IP -message.launch.vm.on.private.network=Souhaitez vous démarrer cette instance sur votre propre réseau privé ? -message.lock.account=Confirmez que vous souhaitez verrouiller ce compte. En le verrouillant, les utilisateurs de ce compte ne seront plus capable de gérer leurs ressources. Les ressources existantes resteront toutefois accessibles. -message.migrate.instance.confirm=Confirmez l\'hôte vers lequel vous souhaitez migrer cette instance +message.enable.user=Confirmer l\\'activation de cet utilisateur. +message.enable.vpn=Confirmer l\\'activation de l\\'acc\u00E8s VPN pour cette adresse IP. +message.enable.vpn.access=Le VPN est d\u00E9sactiv\u00E9 pour cette adresse IP. Voulez vous activer l\\'acc\u00E8s VPN ? +message.enabled.vpn=Votre acc\u00E8s VPN est activ\u00E9 et peut \u00EAtre acc\u00E9d\u00E9 par l\\'IP +message.enabled.vpn.ip.sec=Votre cl\u00E9 partag\u00E9e IPSec est +message.enabling.security.group.provider=Activation du fournisseur de groupe de s\u00E9curit\u00E9 +message.enabling.zone=Activation de la zone +message.enter.token=Entrer le jeton unique re\u00E7u dans le message d\\'invitation. +message.generate.keys=Confirmer la g\u00E9n\u00E9ration de nouvelles clefs pour cet utilisateur. +message.guest.traffic.in.advanced.zone=Le trafic r\u00E9seau d\\'invit\u00E9 est la communication entre les machines virtuelles utilisateur. Sp\u00E9cifier une plage d\\'identifiant VLAN pour le trafic des invit\u00E9s pour chaque r\u00E9seau physique. +message.guest.traffic.in.basic.zone=Le trafic r\u00E9seau d\\'invit\u00E9 est la communication entre les machines virtuelles utilisateur. Sp\u00E9cifier une plage d\\'adresses IP que CloudStack peut assigner aux machines virtuelles Invit\u00E9. S\\'assurer que cette plage n\\'empi\u00E8te pas sur la plage r\u00E9serv\u00E9e aux adresses IP Syst\u00E8me. +message.installWizard.click.retry=Appuyer sur le bouton pour essayer \u00E0 nouveau le d\u00E9marrage. +message.installWizard.copy.whatIsACluster=Un cluster permet de grouper les h\u00F4tes. Les h\u00F4tes d\\'un cluster ont un mat\u00E9riel identique, ex\u00E9cutent le m\u00EAme hyperviseur, sont sur le m\u00EAme sous-r\u00E9seau, et acc\u00E8dent au m\u00EAme stockage partag\u00E9. Les instances de machines virtuelles (VM) peuvent \u00EAtre migr\u00E9es \u00E0 chaud d\\'un h\u00F4te \u00E0 un autre au sein du m\u00EAme groupe, sans interrompre les services utilisateur. Un cluster est la trois \u00E8me plus large unit\u00E9 organisationnelle dans un d\u00E9ploiement CloudStack&\#8482;. Les clusters sont contenus dans les pods et les pods sont contenus dans les zones.

CloudStack&\#8482; permet d\\'avoir plusieurs clusters dans un d\u00E9ploiement en nuage, mais pour une installation basique, il n\\'y a qu\\'un seul cluster. +message.installWizard.copy.whatIsAHost=Un h\u00F4te est une machine. Les h\u00F4tes fournissent les ressources informatiques qui ex\u00E9cutent les machines virtuelles invit\u00E9es. Chaque h\u00F4te a un logiciel hyperviseur install\u00E9 pour g\u00E9rer les machines virtuelles invit\u00E9es (sauf pour les h\u00F4tes de type \\'bare-metal\\', qui sont un cas particulier d\u00E9taill\u00E9 dans le Guide d\\'installation avanc\u00E9e). Par exemple, un serveur Linux avec KVM, un serveur Citrix XenServer, et un serveur ESXi sont des h\u00F4tes. Dans une installation basique, un seul h\u00F4te ex\u00E9cutant XenServer ou KVM est utilis\u00E9.

L\\'h\u00F4te est la plus petite unit\u00E9 organisation au sein d\\'un d\u00E9ploiement CloudStack&\#8482;. Les h\u00F4tes sont contenus dans les clusters, les clusters sont contenus dans les pods et les pods sont contenus dans les zones. +message.installWizard.copy.whatIsAPod=Un pod repr\u00E9sente souvent un seul rack. Les h\u00F4tes dans le m\u00EAme pod sont dans le m\u00EAme sous-r\u00E9seau.
Un pod est la deuxi\u00E8me plus grande unit\u00E9 organisationnelle au sein d\\'un d\u00E9ploiement CloudStack&\#8482;. Les pods sont contenus dans les zones. Chaque zone peut contenir un ou plusieurs pods ; dans l\\'Installation Basique, vous aurez juste un pod dans votre zone. +message.installWizard.copy.whatIsAZone=Une zone est la plus grande unit\u00E9 organisationnelle au sein d\\'un d\u00E9ploiement CloudStack&\#8482;. Une zone correspond typiquement \u00E0 un centre de donn\u00E9es, mais il est permis d\\'avoir plusieurs zones dans un centre de donn\u00E9es. L\\'avantage d\\'organiser une infrastructure en zones est de fournir une isolation physique et de la redondance. Par exemple, chaque zone peut avoir sa propre alimentation et de liaison avec le r\u00E9seau, et les zones peuvent \u00EAtre tr\u00E8s \u00E9loign\u00E9es g\u00E9ographiquement (m\u00EAme si ce n\\'est pas une obligation). +message.installWizard.copy.whatIsCloudStack=CloudStack&\#8482; est une plate-forme logicielle de pools de ressources informatiques pour construire des infrastructures publiques, priv\u00E9es et hybrides en tant que services (IaaS) dans les nuages. CloudStack&\#8482; g\u00E8re le r\u00E9seau, le stockage et les noeuds de calcul qui composent une infrastructure dans les nuages. Utilisez CloudStack&\#8482; pour d\u00E9ployer, g\u00E9rer et configurer les environnements d\\'informatiques dans les nuages.

S\\'\u00E9tendant au-del\u00E0 des machines virtuelles individuelles fonctionnant sur du mat\u00E9riel standard, CloudStack&\#8482; offre une solution d\\'informatique en nuage cl\u00E9 en main pour fournir des centres de donn\u00E9es virtuels comme service - fournissant tous les composants essentiels pour construire, d\u00E9ployer et g\u00E9rer des applications \\'cloud\\' multi-niveaux et multi-locataire. Les versions libre et Premium sont disponibles, la version Libre offrant des caract\u00E9ristiques presque identiques. +message.installWizard.copy.whatIsPrimaryStorage=Une infrastructure CloudStack&\#8482; utilise deux types de stockage \: stockage primaire et stockage secondaire. Les deux peuvent \u00EAtre des serveurs iSCSI ou NFS, ou sur disque local.

Le stockage primaire est associ\u00E9 \u00E0 un cluster, et stocke les volumes disques de chaque machine virtuelle pour toutes les VMs s\\'ex\u00E9cutant sur les h\u00F4tes dans le cluster. Le serveur de stockage primaire est typiquement proche des h\u00F4tes. +message.installWizard.copy.whatIsSecondaryStorage=Le stockage secondaire est associ\u00E9 \u00E0 une zone, et il stocke les \u00E9l\u00E9ments suivants\:
  • Mod\u00E8les - images de syst\u00E8mes d\\'exploitation qui peuvent \u00EAtre utilis\u00E9es pour d\u00E9marrer les machines virtuelles et peuvent inclure des informations de configuration suppl\u00E9mentaires, telles que les applications pr\u00E9-install\u00E9es
  • Images ISO - images de syst\u00E8me d\\'exploitation ou d\\'installation d\\'OS qui peuvent \u00EAtre amor\u00E7able ou non-amor\u00E7able
  • Images de volume disque - capture des donn\u00E9es de machines virtuelles qui peuvent \u00EAtre utilis\u00E9es pour la r\u00E9cup\u00E9ration des donn\u00E9es ou cr\u00E9er des mod\u00E8les
+message.installWizard.now.building=Construction de votre Cloud en cours +message.installWizard.tooltip.addCluster.name=Un nom pour le cluster. Ce choix est libre et n\\'est pas utilis\u00E9 par CloudStack. +message.installWizard.tooltip.addHost.hostname=Le nom DNS ou adresse IP du serveur. +message.installWizard.tooltip.addHost.password=Le mot de passe pour l\\'utilisateur indiqu\u00E9 pr\u00E9c\u00E9demment (issu de l\\'installation XenServer). +message.installWizard.tooltip.addHost.username=Habituellement root. +message.installWizard.tooltip.addPod.name=Nom pour le pod +message.installWizard.tooltip.addPod.reservedSystemEndIp=Ceci est la plage d\\'adresses IP dans le r\u00E9seau priv\u00E9 que CloudStack utilise la gestion des VMs du stockage secondaire et les VMs Console Proxy. Ces adresses IP sont prises dans le m\u00EAme sous-r\u00E9seau que les serveurs h\u00F4tes. +message.installWizard.tooltip.addPod.reservedSystemGateway=Passerelle pour les serveurs dans ce pod +message.installWizard.tooltip.addPod.reservedSystemNetmask=Le masque r\u00E9seau que les instances utiliseront sur le r\u00E9seau +message.installWizard.tooltip.addPod.reservedSystemStartIp=Ceci est la plage d\\'adresses IP dans le r\u00E9seau priv\u00E9 que CloudStack utilise la gestion des VMs du stockage secondaire et les VMs Console Proxy. Ces adresses IP sont prises dans le m\u00EAme sous-r\u00E9seau que les serveurs h\u00F4tes. +message.installWizard.tooltip.addPrimaryStorage.name=Nom pour ce stockage +message.installWizard.tooltip.addPrimaryStorage.path=(pour NFS) Dans NFS, ceci est le chemin d\\'export depuis le serveur. (pour SharedMountPoint) Le chemin. Avec KVM, c\\'est le chemin sur chaque h\u00F4te o\u00F9 ce stockage primaire est mont\u00E9. Par exemple, "/mnt/primary". +message.installWizard.tooltip.addPrimaryStorage.server=(pour NFS, iSCSI ou PreSetup) Adresse IP ou nom DNS du stockage +message.installWizard.tooltip.addSecondaryStorage.nfsServer=Adresse IP du serveur NFS supportant le stockage secondaire +message.installWizard.tooltip.addSecondaryStorage.path=Le chemin export\u00E9, situ\u00E9 sur le serveur sp\u00E9cifi\u00E9 pr\u00E9c\u00E9demment +message.installWizard.tooltip.addZone.dns1=Ces serveurs DNS sont utilis\u00E9s par les machines virtuelles Invit\u00E9es dans la zone. Ces serveurs DNS seront accessibles par le r\u00E9seau public, ce dernier sera ajout\u00E9 plus tard. Les adresses IP publiques pour la zone doivent avoir une route vers les serveurs DNS indiqu\u00E9s ici. +message.installWizard.tooltip.addZone.dns2=Ces serveurs DNS sont utilis\u00E9s par les machines virtuelles Invit\u00E9es dans la zone. Ces serveurs DNS seront accessibles par le r\u00E9seau public, ce dernier sera ajout\u00E9 plus tard. Les adresses IP publiques pour la zone doivent avoir une route vers les serveurs DNS indiqu\u00E9s ici. +message.installWizard.tooltip.addZone.internaldns1=Ces serveurs DNS sont utilis\u00E9s par les machines virtuelles Invit\u00E9es dans la zone. Ces serveurs DNS seront accessibles par le r\u00E9seau public, ce dernier sera ajout\u00E9 plus tard. Les adresses IP publiques pour la zone doivent avoir une route vers les serveurs DNS indiqu\u00E9s ici. +message.installWizard.tooltip.addZone.internaldns2=Ces serveurs DNS sont utilis\u00E9s par les machines virtuelles Invit\u00E9es dans la zone. Ces serveurs DNS seront accessibles par le r\u00E9seau public, ce dernier sera ajout\u00E9 plus tard. Les adresses IP publiques pour la zone doivent avoir une route vers les serveurs DNS indiqu\u00E9s ici. +message.installWizard.tooltip.addZone.name=Nom pour la zone +message.installWizard.tooltip.configureGuestTraffic.description=Description pour ce r\u00E9seau +message.installWizard.tooltip.configureGuestTraffic.guestEndIp=La plage d\\'adresses IP qui sera disponible en allocation pour les machines invit\u00E9es dans cette zone. Si une carte r\u00E9seau est utilis\u00E9e, ces adresses IP peuvent \u00EAtre dans le m\u00EAme CIDR que le CIDR du pod. +message.installWizard.tooltip.configureGuestTraffic.guestGateway=La passerelle que les instances invit\u00E9es doivent utiliser +message.installWizard.tooltip.configureGuestTraffic.guestNetmask=Le masque r\u00E9seau que les instances devrait utiliser sur le r\u00E9seau +message.installWizard.tooltip.configureGuestTraffic.guestStartIp=La plage d\\'adresses IP qui sera disponible en allocation pour les machines invit\u00E9es dans cette zone. Si une carte r\u00E9seau est utilis\u00E9e, ces adresses IP peuvent \u00EAtre dans le m\u00EAme CIDR que le CIDR du pod. +message.installWizard.tooltip.configureGuestTraffic.name=Nom pour ce r\u00E9seau +message.instanceWizard.noTemplates=Vous n\\'avez pas de image disponible ; Ajouter un mod\u00E8le compatible puis relancer l\\'assistant de cr\u00E9ation d\\'instance. +message.ip.address.changed=Vos adresses IP ont peut \u00EAtre chang\u00E9es ; Voulez vous rafra\u00EEchir la liste ? Dans ce cas, le panneau de d\u00E9tail se fermera. +message.iso.desc=Image disque contenant des donn\u00E9es ou un support amor\u00E7able pour OS +message.join.project=Vous avez rejoint un projet. S\u00E9lectionnez la vue Projet pour le voir. +message.launch.vm.on.private.network=Souhaitez vous d\u00E9marrer cette instance sur votre propre r\u00E9seau priv\u00E9 ? +message.launch.zone=La zone est pr\u00EAte \u00E0 d\u00E9marrer ; passer \u00E0 l\\'\u00E9tape suivante. +message.lock.account=Confirmez que vous souhaitez verrouiller ce compte. En le verrouillant, les utilisateurs de ce compte ne seront plus capables de g\u00E9rer leurs ressources. Les ressources existantes resteront toutefois accessibles. +message.migrate.instance.confirm=Confirmez l\\'h\u00F4te vers lequel vous souhaitez migrer cette instance +message.migrate.instance.to.host=Confirmer la migration de l\\'instance vers un autre h\u00F4te +message.migrate.instance.to.ps=Confirmer la migration de l\\'instance vers un autre stockage primaire +message.migrate.router.confirm=Confirmer la migration du routeur vers \: +message.migrate.systemvm.confirm=Confirmer la migration de la VM syst\u00E8me vers \: +message.migrate.volume=Confirmer la migration du volume vers un autre stockage primaire. message.new.user=Renseigner les informations suivantes pour ajouter un nouveau compte utilisateur -message.no.network.support.configuration.not.true=Il n\'y a pas de zone avec la fonction groupe de sécurité active. Dès lors, pas de fonction réseau supplémentaires disponibles. Continuer à l\'étape 5. -message.no.network.support=Sélectionnez l\'hyperviseur. vSphere, n\'a pas de fonctionnalités supplémentaires pour le réseau. Continuez à l\'étape 5. -message.number.clusters=

\# of Clusters

-message.number.hosts=

\# of Hôtes

-message.number.pods=

\# of Pods

-message.number.storage=

\# of Volumes de Stockage Primaire

-message.number.zones=

\# of Zones

-message.remove.vpn.access=Confirmez que vous souhaitez supprimer l\'accès VPN à l\'utilisateur suivant. -message.restart.mgmt.server=Redémarrez votre(vos) serveur(s) de management pour appliquer les nouveaux paramètres. -message.restart.mgmt.usage.server=Redémarrer le ou les management server et usage server pour que les nouveaux paramètres soient pris en compte. -message.security.group.usage=(Utilisez Ctrl-clic pour séléctionner les groupes de sécurité visés) -message.snapshot.schedule=Vous pouvez mettre en place les politiques de génération d\'instantanés en sélectionnant les options disponibles ci-dessous et en appliquant votre politique. -message.step.1.continue=Sélectionnez un modèle ou une image ISO pour continuer -message.step.1.desc=Sélectionnez un template pour votre nouvelle instance virtuelle. Vous pouvez également choisir un modèle vierge sur lequel une image ISO pourra être installé. -message.step.2.continue=Sélectionnez une offre de service pour continuer -message.step.2.desc= -message.step.3.continue=Sélectionnez un offre de service de disque pour continuer -message.step.3.desc= -message.step.4.continue=Sélectionnez au moins un réseau pour continuer -message.step.4.desc=Sélectionnez le réseau principal auquel votre instance va être connecté. -message.update.os.preference=Choisissez votre OS préféré pour cet hôte. Toutes les instances avec des préférences similaires seront d\'abord allouées à cet hôte avant d\'en choisir un autre. -message.update.ssl=Soumettez un nouveau certificat SSL compatible X.509 qui sera mis à jour sur l\'ensemble de instance de proxy console. -message.virtual.network.desc=Un réseau virtuel dédié pour votre compte. Ce domaine de broadcast est contenu dans un VLAN et l\'ensemble de accès réseau publique sont routés par un routeur virtuel. -message.volume.create.template.confirm=Confirmez que vous souhaitez créer un modèle pour ce disque. La création peut prendre plusieurs minutes, voire plus, selon la taille du volume. -message.zone.step.1.desc=Sélectionnez un modèle de réseau pour votre zone. +message.no.network.support=S\u00E9lectionnez l\\'hyperviseur. vSphere, n\\'a pas de fonctionnalit\u00E9s suppl\u00E9mentaires pour le r\u00E9seau. Continuez \u00E0 l\\'\u00E9tape 5. +message.no.network.support.configuration.not.true=Il n\\'y a pas de zone avec la fonction groupe de s\u00E9curit\u00E9 active. D\u00E8s lors, pas de fonction r\u00E9seau suppl\u00E9mentaires disponibles. Continuer \u00E0 l\\'\u00E9tape 5. +message.no.projects=Vous n\\'avez pas de projet.
Vous pouvez en cr\u00E9er un depuis la section projets. +message.no.projects.adminOnly=Vous n\\'avez pas de projet.
Contacter votre administrateur pour ajouter un projet. +message.number.clusters=

\# de Clusters

+message.number.hosts=

\# d\\' H\u00F4tes

+message.number.pods=

\# de Pods

+message.number.storage=

\# de Volumes de Stockage Primaire

+message.number.zones=

\# de Zones

+message.pending.projects.1=Vous avez des invitations projet en attente \: +message.pending.projects.2=Pour les visualiser, aller dans la section projets, puis s\u00E9lectionner invitation dans la liste d\u00E9roulante. +message.please.add.at.lease.one.traffic.range=Ajouter au moins une plage r\u00E9seau +message.please.proceed=Continuer vers la prochaine \u00E9tape. +message.please.select.a.configuration.for.your.zone=S\u00E9lectionner une configuration pour la zone. +message.please.select.a.different.public.and.management.network.before.removing=S\u00E9lectionner un r\u00E9seau public et d\\'administration diff\u00E9rent avant de supprimer +message.please.select.networks=S\u00E9lectionner les r\u00E9seaux pour votre machine virtuelle. +message.please.wait.while.zone.is.being.created=Patienter pendant la cr\u00E9ation de la zone, cela peut prendre du temps... +message.project.invite.sent=Invitation envoy\u00E9e ; les utilisateurs seront ajout\u00E9s apr\u00E8s acceptation de l\\'invitation +message.public.traffic.in.advanced.zone=Le trafic public est g\u00E9n\u00E9r\u00E9 lorsque les machines virtuelles dans le nuage acc\u00E8dent \u00E0 Internet. Des adresses IP publiquement accessibles doivent \u00EAtre pr\u00E9vues \u00E0 cet effet. Les utilisateurs peuvent utiliser l\\'interface d\\'administration de CloudStack pour acqu\u00E9rir ces adresses IP qui impl\u00E9menteront une translation d\\'adresse NAT entre le r\u00E9seau d\\'invit\u00E9 et le r\u00E9seau public.

Fournir au moins une plage d\\'adresses IP pour le trafic Internet. +message.public.traffic.in.basic.zone=Le trafic public est g\u00E9n\u00E9r\u00E9 lorsque les machines virtuelles dans le nuage acc\u00E8dent \u00E0 Internet ou fournissent des services \u00E0 des utilisateurs sur Internet. Des adresses IP publiquement accessibles doivent \u00EAtre pr\u00E9vus \u00E0 cet effet. Quand une instance est cr\u00E9\u00E9e, une adresse IP publique depuis un ensemble d\\'adresses IP publiques sera allou\u00E9e \u00E0 l\\'instance, en plus de l\\'adresse IP de l\\'invit\u00E9. La translation d\\'adresses statique NAT 1-1 sera mises en place automatiquement entre l\\'adresse IP publique et l\\'adresse IP de l\\'invit\u00E9. Les utilisateurs peuvent \u00E9galement utiliser l\\'interface d\\'administration CloudStack pour acqu\u00E9rir des adresses IP suppl\u00E9mentaires pour ajouter une translation d\\'adresse statique NAT entre leurs instances et le r\u00E9seau d\\'adresses IP publiques. +message.remove.vpc=Confirmer la suppression du VPC +message.remove.vpn.access=Confirmez que vous souhaitez supprimer l\\'acc\u00E8s VPN \u00E0 l\\'utilisateur suivant. +message.reset.VPN.connection=Confirmer le r\u00E9-initialisation de la connexion VPN +message.reset.password.warning.notPasswordEnabled=Le mod\u00E8le de cette instance a \u00E9t\u00E9 cr\u00E9\u00E9 sans la gestion de mot de passe +message.reset.password.warning.notStopped=Votre instance doit \u00EAtre arr\u00EAt\u00E9e avant de changer son mot de passe +message.restart.mgmt.server=Red\u00E9marrez votre(vos) serveur(s) de management pour appliquer les nouveaux param\u00E8tres. +message.restart.mgmt.usage.server=Red\u00E9marrer le ou les serveur(s) de gestion et le ou les serveur(s) de consommation pour que les nouveaux param\u00E8tres soient pris en compte. +message.restart.network=Tous les services fournit par ce routeur virtuel vont \u00EAtre interrompus. Confirmer le red\u00E9marrage de ce routeur. +message.restart.vpc=Confirmer le red\u00E9marrage du VPC +message.security.group.usage=(Utilisez Ctrl-clic pour s\u00E9lectionner les groupes de s\u00E9curit\u00E9 vis\u00E9s) +message.select.a.zone=Une zone correspond typiquement \u00E0 un seul centre de donn\u00E9es. Des zones multiples peuvent permettre de rendre votre cloud plus fiable en apportant une isolation physique et de la redondance. +message.select.instance=S\u00E9lectionner une instance. +message.select.iso=S\u00E9lectionner un ISO pour votre nouvelle instance virtuelle. +message.select.item=Merci de s\u00E9lectionner un \u00E9l\u00E9ment. +message.select.security.groups=Merci de s\u00E9lectionner un(des) groupe(s) de s\u00E9curit\u00E9 pour la nouvelle VM +message.select.template=S\u00E9lectionner un mod\u00E8le pour votre nouvelle instance virtuelle. +message.setup.physical.network.during.zone.creation=Lorsque vous ajoutez une zone avanc\u00E9e, vous avez besoin de d\u00E9finir un ou plusieurs r\u00E9seaux physiques. Chaque r\u00E9seau correspond \u00E0 une carte r\u00E9seau sur l\\'hyperviseur. Chaque r\u00E9seau physique peut supporter un ou plusieurs types de trafic, avec certaines restrictions sur la fa\u00E7on dont ils peuvent \u00EAtre combin\u00E9s.

Glisser et d\u00E9poser un ou plusieurs types de trafic sur chaque r\u00E9seau physique. +message.setup.physical.network.during.zone.creation.basic=Quand vous ajoutez une zone basique, vous pouvez param\u00E9trer un seul r\u00E9seau physique, correspondant \u00E0 une carte r\u00E9seau sur l\\'hyperviseur. Ce r\u00E9seau comportera plusieurs types de trafic.

Vous pouvez \u00E9galement glisser et d\u00E9poser d\\'autres types de trafic sur le r\u00E9seau physique. +message.setup.successful=Installation du Cloud r\u00E9ussie \! +message.snapshot.schedule=Vous pouvez mettre en place les politiques de g\u00E9n\u00E9ration d\\'instantan\u00E9s en s\u00E9lectionnant les options disponibles ci-dessous et en appliquant votre politique. +message.specify.url=Renseigner l\\'URL +message.step.1.continue=S\u00E9lectionnez un mod\u00E8le ou une image ISO pour continuer +message.step.1.desc=S\u00E9lectionnez un mod\u00E8le pour votre nouvelle instance virtuelle. Vous pouvez \u00E9galement choisir un mod\u00E8le vierge sur lequel une image ISO pourra \u00EAtre install\u00E9e. +message.step.2.continue=S\u00E9lectionnez une offre de service pour continuer +message.step.3.continue=S\u00E9lectionnez un offre de service de disque pour continuer +message.step.4.continue=S\u00E9lectionnez au moins un r\u00E9seau pour continuer +message.step.4.desc=S\u00E9lectionnez le r\u00E9seau principal auquel votre instance va \u00EAtre connect\u00E9. +message.storage.traffic=Trafic entre les ressources internes de CloudStack, incluant tous les composants qui communiquent avec le serveur d\\'administration, tels que les h\u00F4tes et les machines virtuelles Syst\u00E8mes CloudStack. Veuillez configurer le trafic de stockage ici. +message.suspend.project=\u00CAtes-vous s\u00FBr de vouloir suspendre ce projet ? +message.template.desc=Image OS pouvant \u00EAtre utilis\u00E9e pour d\u00E9marrer une VM +message.tooltip.dns.1=Nom d\\'un serveur DNS utilis\u00E9 par les VM de la zone. Les adresses IP publiques de cette zone doivent avoir une route vers ce serveur. +message.tooltip.dns.2=Nom d\\'un serveur DNS secondaire utilis\u00E9 par les VM de la zone. Les adresses IP publiques de cette zone doivent avoir une route vers ce serveur. +message.tooltip.internal.dns.1=Nom d\\'un serveur DNS que CloudStack peut utiliser pour les VM syst\u00E8me dans cette zone. Les adresses IP priv\u00E9es des pods doivent avoir une route vers ce serveur. +message.tooltip.internal.dns.2=Nom d\\'un serveur DNS que CloudStack peut utiliser pour les VM syst\u00E8me dans cette zone. Les adresses IP priv\u00E9es des pods doivent avoir une route vers ce serveur. +message.tooltip.network.domain=Suffixe DNS qui cr\u00E9era un nom de domaine personnalis\u00E9 pour les r\u00E9seau accessible par les VM invit\u00E9es. +message.tooltip.pod.name=Nom pour ce pod. +message.tooltip.reserved.system.gateway=La passerelle pour les h\u00F4tes du pod. +message.tooltip.reserved.system.netmask=Le pr\u00E9fixe r\u00E9seau utilis\u00E9 par le sous-r\u00E9seau du pod. Au format CIDR. +message.tooltip.zone.name=Nom pour cette zone. +message.update.os.preference=Choisissez votre OS pr\u00E9f\u00E9r\u00E9 pour cet h\u00F4te. Toutes les instances avec des pr\u00E9f\u00E9rences similaires seront d\\'abord allou\u00E9es \u00E0 cet h\u00F4te avant d\\'en choisir un autre. +message.update.resource.count=Confirmer la mise \u00E0 jour des ressources pour ce compte. +message.update.ssl=Soumettez un nouveau certificat SSL compatible X.509 qui sera mis \u00E0 jour sur l\\'ensemble de instance de proxy console. +message.validate.instance.name=Le nom de l\\'instance ne peut d\u00E9passer 63 caract\u00E8res. Seuls les lettres de a \u00E0 z, les chiffres de 0 \u00E0 9 et les tirets sont accept\u00E9s. Le nom doit commencer par une lettre et se terminer par une lettre ou un chiffre. +message.virtual.network.desc=Un r\u00E9seau virtuel d\u00E9di\u00E9 pour votre compte. Ce domaine de multi-diffusion est contenu dans un VLAN et l\\'ensemble des r\u00E9seaux d\\'acc\u00E8s publique sont rout\u00E9s par un routeur virtuel. +message.vm.create.template.confirm=Cr\u00E9er un mod\u00E8le va red\u00E9marrer la VM automatiquement +message.vm.review.launch=Merci de v\u00E9rifier les informations suivantes et de confirmer que votre instance virtuelle est correcte avant de la d\u00E9marrer. +message.volume.create.template.confirm=Confirmez que vous souhaitez cr\u00E9er un mod\u00E8le pour ce disque. La cr\u00E9ation peut prendre plusieurs minutes, voire plus, selon la taille du volume. +message.you.must.have.at.least.one.physical.network=Vous devez avoir au moins un r\u00E9seau physique +message.zone.creation.complete.would.you.like.to.enable.this.zone=Cr\u00E9ation de la zone termin\u00E9e. Voulez-vous l\\'activer ? +message.zone.no.network.selection=La zone s\u00E9lectionn\u00E9e ne propose pas le r\u00E9seau choisi +message.zone.step.1.desc=S\u00E9lectionnez un mod\u00E8le de r\u00E9seau pour votre zone. message.zone.step.2.desc=Renseigner les informations suivantes pour ajouter une nouvelle zone message.zone.step.3.desc=Renseigner les informations suivantes pour ajouter un nouveau pod -message.apply.snapshot.policy=Vous avez mis à jour votre politique d\'instantanés avec succès. -message.disable.snapshot.policy=Vous avez désactivé votre politique de snapshots avec succès. -message.action.change.service.warning.for.instance=Votre instance doit être arrêtée avant d\'essayer de changer son offre de service. -message.action.change.service.warning.for.router=Votre routeur doit être arrêté avant d\'essayer de changer son offre de service. -message.action.reset.password.warning=Votre instance doit être arrêtée avant d\'essayer de changer son mot de passe. -message.action.reset.password.off=Votre instance ne supporte pas pour le moment cette fonctionnalité. - -#Errors -error.login=Votre nom d\'utilisateur /mot de passe ne correspond pas à nos données. -error.menu.select=Echec de l\'action car il n\'y a aucun élément sélectionné. -error.mgmt.server.inaccessible=Le serveur de management est indisponible. Essayez plus tard. -error.session.expired=Votre session a expiré. -error.unresolved.internet.name=Votre nom internet ne peut pas être résolu. +message.zoneWizard.enable.local.storage=ATTENTION \: si vous activez le stockage local pour cette zone, vous devez effectuer les op\u00E9rations suivantes, selon l\\'endroit o\u00F9 vous souhaitez lancer vos machines virtuelles Syst\u00E8mes \:

1. Si les machines virtuelles Syst\u00E8mes doivent \u00EAtre lanc\u00E9es depuis le stockage primaire, ce dernier doit \u00EAtre ajout\u00E9 \u00E0 la zone apr\u00E8s la cr\u00E9ation. Vous devez \u00E9galement d\u00E9marrer la zone dans un \u00E9tat d\u00E9sactiv\u00E9.

2. Si les machines virtuelles Syst\u00E8mes doivent \u00EAtre lanc\u00E9es depuis le stockage local, le param\u00E8tre system.vm.use.local.storage doit \u00EAtre d\u00E9fini \u00E0 \\'true\\' avant d\\'activer la zone.


Voulez-vous continuer ? +mode=Mode +network.rate=D\u00E9bit R\u00E9seau +notification.reboot.instance=Red\u00E9marrer l\\'instance +notification.start.instance=D\u00E9marrer l\\'instance +notification.stop.instance=Stopper l\\'instance +side.by.side=C\u00F4te \u00E0 c\u00F4te +state.Accepted=Accept\u00E9 +state.Active=Actif +state.Allocated=Allou\u00E9 +state.Allocating=Allocation en cours +state.BackedUp=Sauvegard\u00E9 +state.BackingUp=Sauvegarde en cours +state.Completed=Termin\u00E9 +state.Creating=Cr\u00E9ation en cours +state.Declined=Refus\u00E9 +state.Destroyed=Supprim\u00E9e +state.Disabled=D\u00E9sactiv\u00E9 +state.Enabled=Actifs +state.Error=Erreur +state.Expunging=Purge en cours +state.Migrating=Migration en cours +state.Pending=En attente +state.Ready=Pr\u00EAt +state.Running=D\u00E9marr\u00E9e +state.Starting=D\u00E9marrage en cours +state.Stopped=Arr\u00EAt\u00E9e +state.Stopping=Arr\u00EAt en cours +state.Suspended=Suspendu +state.enabled=Actifs +state.ready=Pr\u00EAt +ui.listView.filters.all=Tous +ui.listView.filters.mine=Mon diff --git a/client/WEB-INF/classes/resources/messages_ja.properties b/client/WEB-INF/classes/resources/messages_ja.properties index 7555b83dd78..977c0109f7b 100644 --- a/client/WEB-INF/classes/resources/messages_ja.properties +++ b/client/WEB-INF/classes/resources/messages_ja.properties @@ -1116,6 +1116,7 @@ label.keep=ç¶­æŒ label.lang.chinese=簡体字中国語 label.lang.english=英語 label.lang.japanese=日本語 +label.lang.korean=韓国語 label.lang.spanish=スペイン語 label.last.disconnected=最終切断日時 label.last.name=å§“ @@ -1509,4 +1510,10 @@ error.login=ユーザーå/パスワードãŒè¨˜éŒ²ã¨ä¸€è‡´ã—ã¾ã›ã‚“。 error.menu.select=é …ç›®ãŒé¸æŠžã•れã¦ã„ãªã„ãŸã‚æ“作を実行ã§ãã¾ã›ã‚“。 error.mgmt.server.inaccessible=管ç†ã‚µãƒ¼ãƒãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。後ã§å†å®Ÿè¡Œã—ã¦ãã ã•ã„。 error.session.expired=ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã¾ã—ãŸã€‚ -error.unresolved.internet.name=インターãƒãƒƒãƒˆåを解決ã§ãã¾ã›ã‚“。 + +#resizeVolumes +label.resize.new.size=New Size(GB) +label.action.resize.volume=Resize Volume +label.action.resize.volume.processing=Resizing Volume.... +label.resize.new.offering.id=New Offering +label.resize.shrink.ok=Shrink OK diff --git a/client/WEB-INF/classes/resources/messages_ko_KR.properties b/client/WEB-INF/classes/resources/messages_ko_KR.properties new file mode 100644 index 00000000000..a7b534aa3cd --- /dev/null +++ b/client/WEB-INF/classes/resources/messages_ko_KR.properties @@ -0,0 +1,1514 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +#new labels (begin) ********************************************************************************************** + + +#new labels (end) ************************************************************************************************ + + +#modified labels (begin) ***************************************************************************************** + + +#modified labels (end) ******************************************************************************************* + +label.configure.network.ACLs=ë„¤íŠ¸ì›Œí¬ ê¶Œí•œ 관리(ACL) 구성 +label.network.ACLs=ë„¤íŠ¸ì›Œí¬ ê¶Œí•œ 관리(ACL) +label.add.network.ACL=ë„¤íŠ¸ì›Œí¬ ê¶Œí•œ 관리(ACL) 추가 +label.private.Gateway=사설 게ì´íŠ¸ì›¨ì´ +label.VPC.router.details=VPC ë¼ìš°í„° ìƒì„¸ +label.VMs.in.tier=계층 ë‚´ë¶€ ê°€ìƒë¨¸ì‹  + +message.zoneWizard.enable.local.storage=경고:현재 Zoneì˜ ë¡œì»¬ 스토리지를 사용 하는 경우는 시스템 VMì˜ ì‹œìž‘ ìž¥ì†Œì— ë”°ë¼ ë‹¤ìŒ ìž‘ì—…ì´ í•„ìš”í•©ë‹ˆë‹¤.

1. 시스템 VMì„ ê¸°ë³¸ 스토리지로 시작해야 하는 경우 기본 스토리지를 만들기한 다ìŒì— Zoneì— ì¶”ê°€í•´ì•¼ 합니다. ë˜í•œ, 유효하지 ì•Šì€ ìƒíƒœì˜ Zoneì„ ì‹œìž‘í•´ì•¼ 합니다.

2. 시스템 VM를 로컬 스토리지로 시작할 필요가 있는 경우 system.vm.use.local.storage를 true 로 설정하고 나서 Zoneì„ ì‚¬ìš©í•´ì•¼ 합니다.


ì§„í–‰ 하시겠습니까? +label.local.storage.enabled=로컬 스토리지는 유효 +label.tier.details=계층 ìƒì„¸ 장버 +label.edit.tags=태그 편집 +label.network.rate.megabytes=ë„¤íŠ¸ì›Œí¬ ì†ë„ (MB/ì´ˆ) +label.action.enable.physical.network=물리 ë„¤íŠ¸ì›Œí¬ ì‚¬ìš©í•¨ +label.action.disable.physical.network=물리 ë„¤íŠ¸ì›Œí¬ ì‚¬ìš© 안 함 +message.action.enable.physical.network=현재 물리 네트워í¬ë¥¼ 사용하시겠습니까? +message.action.disable.physical.network=현재 물리 네트워í¬ë¥¼ 사용 안 함으로 하시겠습니까? + +label.select.tier=계층 ì„ íƒ +label.add.ACL=권한 관리(ACL) 추가 +label.remove.ACL=권한 관리(ACL) ì‚­ì œ +label.tier=계층 +label.network.ACL=ë„¤íŠ¸ì›Œí¬ ê¶Œí•œ 관리(ACL) +label.network.ACL.total=ë„¤íŠ¸ì›Œí¬ ê¶Œí•œ 관리(ACL) 합계 +label.add.new.gateway=새 게ì´íŠ¸ì›¨ì´ ì¶”ê°€í•˜ê¸° +message.add.new.gateway.to.vpc=현재 VPCì— ìƒˆë¡œìš´ 게ì´íŠ¸ì›¨ì´ë¥¼ 추가하기 위한 정보를 지정해 주십시오. +label.delete.gateway=게ì´íŠ¸ì›¨ì´ ì‚­ì œ +message.delete.gateway=현재 게ì´íŠ¸ì›¨ì´ë¥¼ 삭제하시겠습니까? +label.CIDR.of.destination.network=ëŒ€ìƒ ë„¤íŠ¸ì›Œí¬ CIDR +label.add.route=ë¼ìš°íЏ 추가 +label.add.static.route=ì •ì  ë¼ìš°íЏ 추가 +label.remove.static.route=ì •ì  ë¼ìš°íЏ ì‚­ì œ +label.site.to.site.VPN=사ì´íŠ¸ê°„ 사설네트워í¬(VPN) +label.add.VPN.gateway=VPN 게ì´íŠ¸ì›¨ì´ ì¶”ê°€ +message.add.VPN.gateway=VPN 게ì´íŠ¸ì›¨ì´ë¥¼ 추가하시겠습니까? +label.VPN.gateway=VPN 게ì´íŠ¸ì›¨ì´ +label.delete.VPN.gateway=VPN 게ì´íŠ¸ì›¨ì´ì‚­ì œ +message.delete.VPN.gateway=현재 VPN 게ì´íŠ¸ì›¨ì´ë¥¼ 삭제하시겠습니까? +label.VPN.connection=VPN ì ‘ì† +label.IPsec.preshared.key=IPsec 사전 공유 키 +label.IKE.policy=IKE ì •ì±… +label.ESP.policy=ESP ì •ì±… +label.create.VPN.connection=VPN ì ‘ì† ë§Œë“¤ê¸° +label.VPN.customer.gateway=VPN ê³ ê° ê²Œì´íŠ¸ì›¨ì´ +label.CIDR.list=CIDR ëª©ë¡ +label.IKE.lifetime=IKE 유효기간(ì´ˆ) +label.ESP.lifetime=ESP 유효기간(ì´ˆ) +label.dead.peer.detection=ì •ì§€ 피어 ê°ì§€ +label.reset.VPN.connection=VPN ì ‘ì† ìž¬ì„¤ì • +message.reset.VPN.connection=VPN ì ‘ì†ì„ 재설정 하시겠습니까? +label.delete.VPN.connection=VPN ì ‘ì† ì‚­ì œ +message.delete.VPN.connection=VPN ì ‘ì†ì„ 삭제하시겠습니까? +label.add.new.tier=새 계층 추가 +label.add.VM.to.tier=ê³„ì¸µì— VM 추가 +label.remove.tier=계층 ì‚­ì œ + +label.local.storage.enabled=로컬 스토리지 사용함 +label.associated.network=관련 ë„¤íŠ¸ì›Œí¬ +label.add.port.forwarding.rule=í¬í†  전송 ê·œì¹™ì˜ ì¶”ê°€ +label.dns=DNS + +label.vpc=VPC +label.vpc.id=VPC ID +label.tier=계층 +label.add.vpc=VPC 추가 +label.super.cidr.for.guest.networks=ì†ë‹˜ ë„¤íŠ¸ì›Œí¬ ìŠˆí¼ CIDR +label.DNS.domain.for.guest.networks=ì†ë‹˜ ë„¤íŠ¸ì›Œí¬ DNS ë„ë©”ì¸ +label.configure.vpc=VPC 구성 +label.edit.vpc=VPC 편집 +label.restart.vpc=VPC 재시작 +message.restart.vpc=VPC를 재시작하시겠습니까? +label.remove.vpc=VPC ì‚­ì œ +message.remove.vpc=VPC를 삭제하시겠습니까? +label.vpn.customer.gateway=VPN ê³ ê° ê²Œì´íŠ¸ì›¨ì´ +label.add.vpn.customer.gateway=VPN ê³ ê° ê²Œì´íŠ¸ì›¨ì´ ì¶”ê°€ +label.IKE.encryption=IKE 암호화 +label.IKE.hash=IKE 해시 +label.IKE.DH=IKE DH +label.ESP.encryption=ESP 암호화 +label.ESP.hash=ESP 해시 +label.perfect.forward.secrecy=Perfect Forward Secrecy +label.IKE.lifetime=IKE 유효기간(ì´ˆ) +label.ESP.lifetime=ESP 유효기간(ì´ˆ) +label.dead.peer.detection=ì •ì§€ 피어 ê°ì§€ +label.delete.VPN.customer.gateway=VPN ê³ ê° ê²Œì´íŠ¸ì›¨ì´ ì‚­ì œ +message.delete.VPN.customer.gateway=현재 VPN ê³ ê° ê²Œì´íŠ¸ì›¨ì´ë¥¼ 삭제하시겠습니까? + +label.network.domain.text=ë„¤íŠ¸ì›Œí¬ ë„ë©”ì¸ +label.memory.mb=메모리 (MB) +label.cpu.mhz=CPU (MHz) +message.action.remove.host=현재 호스트를 삭제하시겠습니까? + +message.action.reboot.router=현재 ê°€ìƒ ë¼ìš°í„°ë¡œ 제공하는 모든 서비스가 중단ë©ë‹ˆë‹¤. ì´ ë¼ìš°í„°ë¥¼ 재시작하시겠습니까? +message.action.stop.router=현재 ê°€ìƒ ë¼ìš°í„°ë¡œ 제공하는 모든 서비스가 중단ë©ë‹ˆë‹¤. ì´ ë¼ìš°í„°ë¥¼ 정지하시겠습니까? +message.restart.network=현재 네트워í¬ë¡œ 제공하는 모든 서비스가 중단ë©ë‹ˆë‹¤. ì´ ë„¤íŠ¸ì›Œí¬ë¥¼ 재시작하시겠습니까? + + +label.ipaddress=IP 주소 +label.vcdcname=vCenter DC 명 +label.vcipaddress=vCenter IP 주소 +label.vsmctrlvlanid=제어 VLAN ID +label.vsmpktvlanid=패킷 VLAN ID +label.vsmstoragevlanid=스토리지 VLAN ID +label.nexusVswitch=Nexus 1000V +label.action.delete.nexusVswitch=Nexus 1000V ì‚­ì œ +label.action.enable.nexusVswitch=Nexus 1000V 사용함 +label.action.disable.nexusVswitch=Nexus 1000V 사용 안 함 +label.action.list.nexusVswitch=Nexus 1000V ëª©ë¡ í‘œì‹œ +message.action.delete.nexusVswitch=현재 Nexus 1000V를 삭제하시겠습니까? +message.action.enable.nexusVswitch=현재 Nexus 1000V를 사용 하시겠습니까? +message.action.disable.nexusVswitch=현재 Nexus 1000V를 사용 안 함으로 하시겠습니까? +message.specify.url=URL를 지정해 주십시오 +label.select.instance.to.attach.volume.to=ë³¼ë¥¨ì„ ì—°ê²°í•˜ëŠ” ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì„ íƒí•´ 주십시오 +label.upload=업로드 +label.upload.volume=ë³¼ë¥¨ì˜ ì—…ë¡œë“œ +label.virtual.routers=ê°€ìƒ ë¼ìš°í„° +label.primary.storage.count=기본 스토리지 그룹 +label.secondary.storage.count=2ì°¨ 스토리지 그룹 +label.number.of.system.vms=시스템 VM 수 +label.number.of.virtual.routers=ê°€ìƒ ë¼ìš°í„°ìˆ˜ +label.action.register.iso=ISO ë“±ë¡ +label.isolation.method=분리 방법 +label.action.register.template=템플릿 ë“±ë¡ +label.checksum=MD5 ì²´í¬ì„¬ +label.vpn=ê°€ìƒ ì‚¬ì„¤ë§(VPN) +label.vlan=ê°€ìƒ ë„¤íŠ¸ì›Œí¬(VLAN) + + +label.management.ips=관리 IP 주소 +label.devices=기기 +label.rules=규칙 +label.traffic.label=트래픽 ë¼ë²¨ +label.vm.state=VM ìƒíƒœ +message.setup.physical.network.during.zone.creation.basic=기본 Zoneì„ ì¶”ê°€í•  때는 하ì´í¼ ë°”ì´ì €ìƒì˜ 네트ì›ì¹´ë“œ(NIC)ì— ëŒ€ì‘하는 한 가지 물리 네트워í¬ë¥¼ 설정 í•  수 있습니다. 네트워í¬ëŠ” 몇 가지 ì¢…ë¥˜ì˜ íŠ¸ëž˜í”½ì„ ì „ì†¡í•©ë‹ˆë‹¤.

물리 네트워í¬ì— 다른 íŠ¸ëž˜í”½ì˜ ì¢…ë¥˜ë¥¼ë“œëž˜ê·¸ 앤 드롭 í•  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +label.domain.router=ë„ë©”ì¸ ë¼ìš°í„° +label.console.proxy=콘솔 프ë¡ì‹œ +label.secondary.storage.vm=2ì°¨ 스토리지 VM +label.add.netScaler.device=Netscaler 기기 추가 +label.add.F5.device=F5 기기 추가 +label.add.SRX.device=SRX 기기 추가 +label.account.and.security.group=계정 ì •ë³´, 보안 그룹 +label.fetch.latest=최신 ì •ë³´ ì·¨ë“ +label.system.offering=시스템 제공 +message.validate.instance.name=ì¸ìŠ¤í„´ìŠ¤ëª…ì€ 63 ë¬¸ìž ì´ë‚´ì—서 지정해 주십시오. ASCII 문ìžì˜ a-z, A-Z, 숫ìžì˜ 0-9 ë° í•˜ì´í”ˆë§Œì„ 사용할 수 있습니다. 문ìžë¡œ 시작하여 ë¬¸ìž ë˜ëŠ” 숫ìžë¡œ ë내야 합니다. + + +label.isolated.networks=분리 ë„¤íŠ¸ì›Œí¬ +label.latest.events=최신 ì´ë²¤íЏ +state.Enabled=사용함 +label.system.wide.capacity=시스템 ì „ì²´ 처리 능력 +label.network.service.providers=ë„¤íŠ¸ì›Œí¬ ì„œë¹„ìŠ¤ ì œê³µìž +message.launch.zone=Zoneì„ ì‹œìž‘í•  준비가 ë˜ì—ˆìŠµë‹ˆë‹¤. ë‹¤ìŒ ìˆœì„œì— ë”°ë¼ ì§„í–‰í•´ 주십시오. +error.unable.to.reach.management.server=관리 서버와 통신할 수 없습니다. +label.internal.name=내부명 +message.configure.all.traffic.types=ë³µìˆ˜ì˜ ë¬¼ë¦¬ 네트워í¬ê°€ 있습니다. [편집]ì„ í´ë¦­í•´ íŠ¸ëž˜í”½ì˜ ì¢…ë¥˜ 마다 ë¼ë²¨ì„ 구성해 주십시오. +message.edit.traffic.type=현재 íŠ¸ëž˜í”½ì˜ ì¢…ë¥˜ì— ê´€ë ¨ 트래픽 ë¼ë²¨ì„ 지정해 주십시오. +label.edit.traffic.type=트래픽 종류 편집 +label.label=ë¼ë²¨ +label.max.networks=최대 네트워í¬ìˆ˜ +error.invalid.username.password=유효하지 ì•Šì€ ì‚¬ìš©ìžëª… ë˜ëŠ” 암호 +message.enabling.security.group.provider=보안 그룹 제공ìžë¥¼ 사용 하고 있습니다. +message.adding.Netscaler.provider=Netscaler 제공ìžë¥¼ 추가하고 있습니다. +message.creating.guest.network=ì†ë‹˜ 네트워í¬ë¥¼ 만듭니다. +label.action.delete.physical.network=물리 ë„¤íŠ¸ì›Œí¬ ì‚­ì œ +message.action.delete.physical.network=현재 물리 네트워í¬ë¥¼ 삭제하시겠습니까? +message.installWizard.copy.whatIsAHost=호스트는 ë‹¨ì¼ ì»´í“¨í„°ë¡œ ì†ë‹˜ ê°€ìƒ ë¨¸ì‹ ì„ ì‹¤í–‰í•˜ëŠ” 컴퓨팅 ìžì›ì„ 제공합니다. ë² ì–´ 메탈 호스트를 제외하고, ê° í˜¸ìŠ¤íŠ¸ëŠ” 게스트 ê°€ìƒ ë¨¸ì‹ ì„ ê´€ë¦¬í•˜ê¸° 위한 하ì´í¼ ë°”ì´ì € 소프트웨어를 설치합니다. ë² ì–´ 메탈 í˜¸ìŠ¤íŠ¸ì— ëŒ€í•´ì„œëŠ” 설치 ê°€ì´ë“œ 고급편 특수 사례로서 설명합니다. 예를 들어, KVMì€ ìœ íš¨í•œ Linux 서버, Citrix XenServerê°€ ë™ìž‘하는 서버 ë° ESXi 서버가 호스트입니다. 기본 설치ì—서는 XenServer ë˜ëŠ” KVM를 실행하는 ë‹¨ì¼ í˜¸ìŠ¤íŠ¸ë¥¼ 사용합니다.

호스트는 CloudStackâ„¢ í™˜ê²½ë‚´ì˜ ìµœì†Œì˜ ì¡°ì§ ë‹¨ìœ„ìž…ë‹ˆë‹¤. 호스트는 í´ëŸ¬ìŠ¤í„°ì— í¬í•¨ë˜ì–´ í´ëŸ¬ìŠ¤í„°ëŠ” Podì— í¬í•¨ë˜ì–´ Pod는 Zoneì— í¬í•¨ë©ë‹ˆë‹¤. + + +label.add.compute.offering=컴퓨팅 ìžì› 추가 +label.compute.offering=컴퓨팅 ìžì› 제공 +label.compute.offerings=컴퓨팅 ìžì› 제공 +label.select.offering=제공 ì„ íƒ +label.menu.infrastructure=ì¸í”„ë¼ìŠ¤íŠ¸ëŸ­ì³ +label.sticky.tablesize=í…Œì´ë¸” í¬ê¸° +label.sticky.expire=만료시간 +label.sticky.cookie-name=Cookie 명 +label.sticky.mode=모드 +label.sticky.length=ê¸¸ì´ +label.sticky.holdtime=ë³´ê´€ 유지 시간 +label.sticky.request-learn=ëŸ¬ë‹ ìš”êµ¬ +label.sticky.prefix=프레픽스 +label.sticky.nocache=ìºì‹œ ì—†ìŒ +label.sticky.indirect=ê°„ì ‘ +label.sticky.postonly=í¬ìŠ¤íŠ¸ë§Œ +label.sticky.domain=ë„ë©”ì¸ +state.Allocating=할당 중 +state.Migrating=ì´ì „ 중 +error.please.specify.physical.network.tags=현재 물리 ë„¤íŠ¸ì›Œí¬ íƒœê·¸ë¥¼ 지정하지 않으면, ë„¤íŠ¸ì›Œí¬ ì œê³µì€ ì‚¬ìš©í•  수 없습니다. + + +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 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=2ì°¨ 스토리지는 Zoneê³¼ ê´€ë ¨ë¤ ì•„ëž˜ì˜ í•­ëª©ì„ í¬í•¨í•©ë‹ˆë‹¤.
  • 템플릿 - VM 시작 시 사용할 수 있는 OS ì´ë¯¸ì§€ë¡œ 애플리케ì´ì…˜ì˜ 설치 등 추가 êµ¬ì„±ì„ í¬í•¨í•  수 있습니다.
  • ISO ì´ë¯¸ì§€ - 바로 시작 가능 ë˜ëŠ” 시작 ë¶ˆê°€ì˜ OS ì´ë¯¸ì§€ìž…니다.
  • ë””ìŠ¤í¬ ë³¼ë¥¨ 스냅샷 - VM ë°ì´í„° 저장 복사본입니다. ë°ì´í„°ì˜ ë³µì› ë˜ëŠ” 새로운 템플릿 ë§Œë“¤ê¸°ì— ì‚¬ìš©í•  수 있습니다.
+message.installWizard.copy.whatIsPrimaryStorage=CloudStackâ„¢ í´ë¼ìš°ë“œ ì¸í”„ë¼ìŠ¤íŠ¸ëŸ­ì³ì—서는 기본 스토리지와 2ì°¨ 스토리지 ë‘ ì¢…ë¥˜ì˜ ìŠ¤í† ë¦¬ì§€ë¥¼ 사용합니다. 양쪽 스토리지ì—서 iSCSI, NFS 서버, ë˜ëŠ” 로컬 디스í¬ë¥¼ 사용할 수 있습니다.

기본 스토리지는 í´ëŸ¬ìŠ¤í„°ì— ê´€ë ¨ë˜ì–´ê·¸ í´ëŸ¬ìŠ¤í„°ë‚´ì˜ í˜¸ìŠ¤íŠ¸ë¡œ ë™ìž‘하는 모든 VM 중 ê° ê²ŒìŠ¤íŠ¸ VMì˜ ë””ìŠ¤í¬ ë³¼ë¥¨ì„ í¬í•¨í•©ë‹ˆë‹¤. ì›ëž˜, 기본 스토리지 서버는 호스트 ê·¼ì²˜ì— ì„¤ì¹˜í•©ë‹ˆë‹¤. +message.installWizard.copy.whatIsACluster=í´ëŸ¬ìŠ¤í„°ëŠ” 호스트를 그룹화 하는 방법입니다. 한 가지 í´ëŸ¬ìŠ¤í„°ë‚´ 호스트는 ëª¨ë‘ ë™ì¼í•œ 하드웨어ì—서 구성ë˜ì–´ ê°™ì€ í•˜ì´í¼ ë°”ì´ì €ë¥¼ 실행하고 ê°™ì€ ì„œë¸Œ 네트워í¬ìƒì— 있어서 ê°™ì€ ê³µìœ  ìŠ¤í† ë¦¬ì§€ì— ì ‘ê·¼ 합니다. ê°™ì€ í´ëŸ¬ìŠ¤í„°ë‚´ì˜ í˜¸ìŠ¤íŠ¸ 사ì´ì—서는 사용ìžì—게 서비스를 중단하지 않고 ê°€ìƒ ë¨¸ì‹  ì¸ìŠ¤í„´ìŠ¤ë¥¼ 실시간 ì´ì „ í•  수 있습니다. í´ëŸ¬ìŠ¤í„°ëŠ” CloudStackâ„¢ í™˜ê²½ë‚´ì˜ ì„¸ 번째로 í° ì¡°ì§ ë‹¨ìœ„ìž…ë‹ˆë‹¤. í´ëŸ¬ìŠ¤í„°ëŠ” Podì— í¬í•¨ë˜ì–´ Pod는 Zoneì— í¬í•¨ë©ë‹ˆë‹¤.

CloudStackâ„¢ ì—서는 한 가지 í´ë¼ìš°ë“œ í™˜ê²½ì— ë³µìˆ˜ í´ëŸ¬ìŠ¤í„°ë¥¼ 설정할 수 있으나 기본 설치ì—서는 í´ëŸ¬ìŠ¤í„°ëŠ” 한 개입니다. +message.installWizard.copy.whatIsAPod=ì›ëž˜ 한 가지 Pod는 ë‹¨ì¼ ìž ê¸ˆì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. ê°™ì€ Podë‚´ 호스트는 ê°™ì€ ì„œë¸Œ 네트워í¬ì— í¬í•¨ë©ë‹ˆë‹¤.

Pod는 CloudStackâ„¢ í™˜ê²½ë‚´ì˜ ë‘ ë²ˆì§¸ë¡œ í° ì¡°ì§ ë‹¨ìœ„ìž…ë‹ˆë‹¤. Pod는 Zoneì— í¬í•¨ë©ë‹ˆë‹¤. ê° Zoneì€ í•œ ê°œ ì´ìƒì˜ Pod를 í¬í•¨í•  수 있습니다. 기본 설치ì—서는 Zoneë‚´ Pod는 한 개입니다. +message.installWizard.copy.whatIsAZone=Zoneì€ CloudStackâ„¢ 환경내 최대 ì¡°ì§ ë‹¨ìœ„ìž…ë‹ˆë‹¤. 한 가지 ë°ì´í„° ì„¼í„°ë‚´ì— ë³µìˆ˜ Zoneì„ ì„¤ì •í•  수 있으나 ì›ëž˜ Zoneì€ ë‹¨ì¼ì˜ ë°ì´í„° ì„¼í„°ì— í• ë‹¹í•©ë‹ˆë‹¤. ì¸í”„ë¼ìŠ¤íŠ¸ëŸ­ì³ë¥¼ Zoneì— ì¡°ì§í™”하면, Zoneì„ ë¬¼ë¦¬ì ìš°ë¡œ 분리해 설정할 수 있습니다. 예를 들어, ê° Zoneì— ì „ì›ê³¼ ë„¤íŠ¸ì›Œí¬ ì—…ë§í¬ë¥¼ 배치합니다. 필수가 아니지만 ì›ê²©ì§€ì— ë¶„ì‚°í•  수 있습니다. +message.installWizard.copy.whatIsCloudStack=CloudStack™는 컴퓨팅 ìžì›ì„ í¬í•¨í•˜ëŠ” 소프트웨어 플랫웹 ì–‘ì‹ì—서 공개, 사설, ë° í•˜ì´ë¸Œë¦¬ë“œì˜ Infrastructure as a Service (IaaS) í´ë¼ìš°ë“œë¥¼ 구축할 수 있습니다. CloudStack™를 사용하고, í´ë¼ìš°ë“œ ì¸í”„ë¼ìŠ¤íŠ¸ëŸ­ì³ë¥¼ 구성하는 네트워í¬, 스토리지 ë° ì»´í“¨íŒ… 노드를 관리하고 í´ë¼ìš°ë“œ 컴퓨팅 í™˜ê²½ì„ ì„¤ì •, 관리 ë° êµ¬ì„±í•©ë‹ˆë‹¤.

CloudStackâ„¢ì€ í•˜ë“œì›¨ì–´ìƒì—서 ë™ìž‘하는 개별 ê°€ìƒ ë¨¸ì‹  ì´ë¯¸ì§€ë¥¼ 넘어 확장할 수 있기 ë•Œë¬¸ì— ê°„ë‹¨í•œ 설정으로 ë™ìž‘하는 í´ë¼ìš°ë“œ ì¸í”„ë¼ìŠ¤íŠ¸ëŸ­ì³ ì†Œí”„íŠ¸ì›¨ì–´ 스íƒì— ì˜í•´ ê°€ìƒ ë°ì´í„° 센터 즉 여러 층형 멀티 ì„¸ìž…ìž í´ë¼ìš°ë“œ 애플리케ì´ì…˜ì„ 서비스로서 구축하고 설정하고 관리하기 위해서 불가결한 í•­ëª©ì„ ëª¨ë‘ ì œê³µí•©ë‹ˆë‹¤. 오픈 소스 버전과 프리미엄 버전 양쪽 모ë‘ì— ì œê³µí•˜ë©° 오픈 소스 버전ì—ì„œë„ ëŒ€ë¶€ë¶„ ê¸°ëŠ¥ì„ ì‚¬ìš©í•  수 있습니다. +message.installWizard.tooltip.addSecondaryStorage.path=위ì—서 지정한 ì„œë²„ì— ì¡´ìž¬í•˜ëŠ” 내보내기 경로입니다. +message.installWizard.tooltip.addSecondaryStorage.nfsServer=2ì°¨ 스토리지를 호스트 하는 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=ì´ê²ƒì€ 2ì°¨ 스토리지 VM ë° ì½˜ì†” 프ë¡ì‹œ VM를 관리하기 위해서 CloudStackì—서 사용하는 사설 네트워í¬ë‚´ IP 주소 범위입니다. ì´ëŸ¬í•œ IP 주소는 컴퓨팅 서버와 ê°™ì€ ì„œë¸Œë„¤íŠ¸ì›Œí¬ì—서 할당합니다. +message.installWizard.tooltip.addPod.reservedSystemStartIp=ì´ê²ƒì€ 2ì°¨ 스토리지 VM ë° ì½˜ì†” 프ë¡ì‹œ VM를 관리하기 위해서 CloudStackì—서 사용하는 사설 네트워í¬ë‚´ì˜ IP 주소 범위입니다. ì´ëŸ¬í•œ IP 주소는 컴퓨팅 서버와 ê°™ì€ ì„œë¸Œë„¤íŠ¸ì›Œí¬ì—서 할당합니다. +message.installWizard.tooltip.addPod.reservedSystemNetmask=게스트가 사용하는 서브네트워í¬ìƒì—서 지정한 ë„· 마스í¬ìž…니다. +message.installWizard.tooltip.addPod.reservedSystemGateway=현재 Podë‚´ 호스트 게ì´íŠ¸ì›¨ì´ìž…니다. +message.installWizard.tooltip.addPod.name=Pod ì´ë¦„입니다. +message.installWizard.tooltip.configureGuestTraffic.guestEndIp=현재 Zoneì˜ ê²ŒìŠ¤íŠ¸ì—게 할당할 수 있는 IP 주소 범위입니다. 사용하는 NICê°€ 한 ê°€ì§€ì¸ ê²½ìš°ëŠ” ì´ëŸ¬í•œ IP 주소는 Podì˜ CIDR와 ê°™ì€ CIDRì— í¬í•¨ë˜ì–´ 있어야 합니다. +message.installWizard.tooltip.configureGuestTraffic.guestStartIp=현재 Zoneì˜ ê²ŒìŠ¤íŠ¸ì—게 할당할 수 있는 IP 주소 범위입니다. 사용하는 NICê°€ 한 가지 경우는 ì´ëŸ¬í•œ IP 주소는 Podì˜ 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=Zoneë‚´ 시스템 VM으로 사용하는 DNS 서버입니다. 현재 DNS 서버는 시스템 VMì˜ ì‚¬ì„¤ ë„¤íŠ¸ì›Œí¬ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 개입시켜 접근합니다. Podì˜ ì‚¬ì„¤ IP 주소ì—서 여기서 지정하는 DNS ì„œë²„ì— í†µì‹ í•  수 있어야 합니다. +message.installWizard.tooltip.addZone.internaldns1=Zoneë‚´ì˜ ì‹œìŠ¤í…œ VM 로 사용하는 DNS 서버입니다. 현재 DNS 서버는 시스템 VMì˜ ì‚¬ì„¤ ë„¤íŠ¸ì›Œí¬ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 개입시켜 접근합니다. Podì˜ ì‚¬ì„¤ IP 주소ì—서 여기서 지정하는 DNS ì„œë²„ì— í†µì‹ í•  수 있어야 합니다. +message.installWizard.tooltip.addZone.dns2=Zoneë‚´ 게스트 VM 로 사용하는 DNS 서버입니다. 현재 DNS 서버ì—는 다ìŒì— 추가하는 공개 ë„¤íŠ¸ì›Œí¬ ê²½ìœ ë¡œ 접근합니다. Zoneì˜ ê³µê°œ IP 주소ì—서 여기서 지정하는 공개 DNS ì„œë²„ì— í†µì‹ í•  수 있어야 합니다. +message.installWizard.tooltip.addZone.name=Zoneì˜ ì´ë¦„입니다. +message.installWizard.tooltip.addZone.dns1=Zoneë‚´ì˜ ê²ŒìŠ¤íŠ¸ VM으로 사용하는 DNS 서버입니다. ì´ëŸ¬í•œ DNS 서버ì—는 다ìŒì— 추가하는 공개 ë„¤íŠ¸ì›Œí¬ ê²½ìœ ë¡œ ì ‘ê·¼ 합니다. Zoneì˜ ê³µê°œ 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=2ì°¨ ìŠ¤í† ë¦¬ì§€ì— ëŒ€í•´ +label.installWizard.addSecondaryStorageIntro.title=2ì°¨ 스토리지 추가 +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=Podì— ëŒ€í•œ ì •ë³´ +label.installWizard.addPodIntro.title=Pod 추가 +label.installWizard.addZone.title=Zone 추가 +label.installWizard.addZoneIntro.subtitle=Zoneì— ëŒ€í•œ ì •ë³´ +label.installWizard.addZoneIntro.title=Zone 추가 +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.hints=ì •ë³´ +label.installWizard.subtitle=현재 ê°€ì´ë“œ 투어는 CloudStackâ„¢ 환경 ì„¤ì •ì— ë„ì›€ì´ ë©ë‹ˆë‹¤ +label.continue=실행 +label.installWizard.title=CloudStackâ„¢ 마법사 +label.agree=ë™ì˜ +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=항목 ëª©ë¡ +message.select.item=í•­ëª©ì„ ì„ íƒí•´ 주십시오. +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.project.name=프로ì íŠ¸ëª… +label.create.project=프로ì íЏ 만들기 +label.networks=ë„¤íŠ¸ì›Œí¬ +label.launch.vm=VM 시작 +label.new.vm=새 VM +label.previous=뒤로 +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=ì„ íƒí•œ Zoneì—서는 네트워í¬ë¥¼ ì„ íƒí•  수 없습니다. +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=Zoneì€ ì›ëž˜ ë‹¨ì¼ ë°ì´í„° ì„¼í„°ì— í•´ë‹¹í•©ë‹ˆë‹¤. 복수 Zoneì„ ì„¤ì •í•˜ê³  물리ì ìœ¼ë¡œ 분리하는 방법으로 í´ë¼ìš°ë“œì˜ ì‹ ë¢°ì„±ì„ ë†’ì¼ ìˆ˜ 있습니다. +label.select.a.zone=Zone ì„ íƒ +label.review=í™•ì¸ +label.select.a.template=템플릿 ì„ íƒ +label.setup=설정 +state.Allocated=할당 ë난 ìƒíƒœ +changed.item.properties=항목 ì†ì„± 변경 +label.apply=ì ìš© +label.default=기본 +label.viewing=표시 항목: +label.move.to.top=처ìŒìœ¼ë¡œ ì´ë™ +label.move.up.row=위로 ì´ë™ +label.move.down.row=아래로 ì´ë™ +label.move.to.bottom=마지막으로 ì´ë™ +label.drag.new.position=새로운 ìœ„ì¹˜ì— ëŒì–´ì˜¤ê¸° +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=복사할 Zone +label.keyboard.type=키보드 종류 +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 추가 +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.source=시작 위치 +label.least.connections=최소 ì ‘ì† +label.round.robin=ë¼ìš´ë“œ 로빈 +label.restart.required=재시작 í•„ìš” +label.clean.up=삭제하기 +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=Zone ìƒì„¸ +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=프로ì íЏ 초대 ìŠ¹ì¸ +label.token=í† í° +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.new.project=새 프로ì íЏ +state.Active=활성 +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.project.invite=프로ì íŠ¸ì— ì´ˆëŒ€ +label.select.project=프로ì íЏ ì„ íƒ +message.no.projects=프로ì íŠ¸ê°€ 없습니다.
프로ì íЏ 섹션ì—서 새로운 프로ì íŠ¸ë¥¼ 만들어 주십시오. +message.no.projects.adminOnly=프로ì íŠ¸ê°€ 없습니다.
관리ìžì—게 새로운 프로ì íЏ ìƒì„±ì„ ì˜ë¢°í•˜ì‹­ì‹œì˜¤. +message.pending.projects.1=ë³´ë¥˜ì¤‘ì¸ í”„ë¡œì íЏ ì´ˆëŒ€ìž¥ì´ ìžˆìŠµë‹ˆë‹¤. +message.pending.projects.2=표시하려면 프로ì íЏ 섹션으로 ì´ë™í•˜ê³  목ë¡ì—서 ì´ˆëŒ€ìž¥ì„ ì„ íƒí•©ë‹ˆë‹¤. +message.instanceWizard.noTemplates=사용 가능한 í…œí”Œë¦¿ì´ ì—†ìŠµë‹ˆë‹¤. í˜¸í™˜ì„±ì´ ìžˆëŠ” í…œí”Œë¦¿ì„ ì¶”ê°€í•˜ê³ , ì¸ìŠ¤í„´ìŠ¤ 위저드를 재시작해 주십시오. +label.view=표시 - +instances.actions.reboot.label=ì¸ìŠ¤í„´ìŠ¤ 재시작 +label.filterBy=í•„í„° +label.ok=í™•ì¸ +notification.reboot.instance=ì¸ìŠ¤í„´ìŠ¤ 재시작 +notification.start.instance=ì¸ìŠ¤í„´ìŠ¤ 시작 +notification.stop.instance=ì¸ìŠ¤í„´ìŠ¤ ì •ì§€ +label.display.name=표시명 +label.zone.name=Zone ì´ë¦„ +ui.listView.filters.all=ëª¨ë‘ +ui.listView.filters.mine=ë‚´ ì •ë³´ë§Œ +state.Running=실행 중 +state.Stopped=ì •ì§€ëœ ìƒíƒœ +state.Destroyed=íŒŒê¸°ëœ ìƒíƒœ +state.Error=오류 +message.reset.password.warning.notPasswordEnabled=현재 ì¸ìŠ¤í„´ìŠ¤ í…œí”Œë¦¿ì€ ì•”í˜¸ 관리를 사용 하지 않고 ìƒì„±ë˜ì—ˆìŠµë‹ˆë‹¤. +message.reset.password.warning.notStopped=현재 암호를 변경하기 ì „ì— ì¸ìŠ¤í„´ìŠ¤ë¥¼ 정지해야 합니다. +label.notifications=알림 +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=서비스 기능 +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=중복 ë¼ìš°í„° 기능 +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.redundant.state=중복 ìƒíƒœ +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 추가 +label.capacity=처리 능력 +label.dedicated=ì „ìš© +label.f5=F5 +label.add.new.F5=새로운 F5 추가 +label.srx=SRX +label.providers=ì œê³µìž +label.add.new.SRX=새로운 SRX 추가 +label.timeout=시간 초과 +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.pods=Pod +label.pod.name=Pod명 +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=Zone ì´ë¦„입니다. +message.tooltip.dns.1=Zoneë‚´ VM 로 사용하는 DNS 서버 ì´ë¦„입니다. Zone 공개 IP 주소ì—서 ì´ ì„œë²„ì— í†µì‹ í•  수 있어야 합니다. +message.tooltip.dns.2=Zoneë‚´ VM 로 사용하는 ë‘번째 DNS 서버 ì´ë¦„입니다. Zone 공개 IP 주소ì—서 ì´ ì„œë²„ì— í†µì‹ í•  수 있어야 합니다. +message.tooltip.internal.dns.1=Zoneë‚´ CloudStack ë‚´ë¶€ 시스템 VM 로 사용하는 DNS 서버 ì´ë¦„입니다. Pod 사설 IP 주소ì—서 ì´ ì„œë²„ì— í†µì‹ í•  수 있어야 합니다. +message.tooltip.internal.dns.2=Zoneë‚´ CloudStack ë‚´ë¶€ 시스템 VM 로 사용하는 DNS 서버 ì´ë¦„입니다. Pod 사설 IP 주소ì—서 ì´ ì„œë²„ì— í†µì‹ í•  수 있어야 합니다. +message.tooltip.network.domain=DNS 서픽스입니다. ì´ ì„œí”½ìŠ¤ì—서 게스트 VM 로 ì ‘ê·¼ 하는 ë„¤íŠ¸ì›Œí¬ ë§žì¶¤í˜• ë„ë©”ì¸ëª…ì„ ë§Œë“­ë‹ˆë‹¤. +message.tooltip.pod.name=현재 Pod ì´ë¦„입니다. +message.tooltip.reserved.system.gateway=Podë‚´ 호스트 게ì´íŠ¸ì›¨ì´ìž…니다. +message.tooltip.reserved.system.netmask=Pod 서브네트워í¬ë¥¼ 정하는 ë„¤íŠ¸ì›Œí¬ í”„ë ˆí”½ìŠ¤ìž…ë‹ˆë‹¤. CIDR 표기를 사용합니다. +message.creating.zone=Zoneì„ ë§Œë“¤ì—ˆìŠµë‹ˆë‹¤. +message.creating.physical.networks=물리 네트워í¬ë¥¼ 만들었습니다. +message.configuring.physical.networks=물리 네트워í¬ë¥¼ 구성해 있습니다 +message.adding.Netscaler.device=Netscaler 기기를 추가하고 있습니다 +message.creating.pod=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=2ì°¨ 스토리지를 만들었습니다. +message.Zone.creation.complete=Zoneì„ ë§Œë“¤ì—ˆìŠµë‹ˆë‹¤. +message.enabling.zone=Zoneì„ ì‚¬ìš©í•˜ê³  있습니다 +error.something.went.wrong.please.correct.the.following=문제가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. ë‹¤ìŒ ë‚´ìš©ì„ ìˆ˜ì •í•´ 주십시오 +error.could.not.enable.zone=Zoneì„ ì‚¬ìš© í•  수 없습니다. +message.zone.creation.complete.would.you.like.to.enable.this.zone=Zoneì„ ë§Œë“¤ì—ˆìŠµë‹ˆë‹¤. ì´ 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=ì‚­ì œ ì „ì— ë‹¤ë¥¸ 공개 ë° ê´€ë¦¬ 네트워í¬ë¥¼ ì„ íƒí•´ 주십시오. + +label.zone.type=Zone 종류 +label.setup.zone=Zone 설정 +label.setup.network=ë„¤íŠ¸ì›Œí¬ ì„¤ì • +label.add.resources=ìžì› 추가 +label.launch=시작 +label.set.up.zone.type=Zone 종류 설정 +message.please.select.a.configuration.for.your.zone=Zone êµ¬ì„±ì„ ì„ íƒí•´ 주십시오. +message.desc.basic.zone= ê° VM ì¸ìŠ¤í„´ìŠ¤ì— IP 주소가 네트워í¬ì—서 ì§ì ‘ 할당할 수 있는 ë‹¨ì¼ ë„¤íŠ¸ì›Œí¬ë¥¼ 제공합니다. 보안 그룹 (ì „ì†¡ì› IP 주소 í•„í„°)ê³¼ ê°™ì€ ì¸µ 세 가지 레벨 방법으로 게스트를 분리할 수 있습니다. +label.basic=기본 +message.desc.advanced.zone=보다 ì„¸ë ¨ëœ ë„¤íŠ¸ì›Œí¬ ê¸°ìˆ ì„ ì§€ì›í•©ë‹ˆë‹¤. ì´ ë„¤íŠ¸ì›Œí¬ ëª¨ë¸ì„ ì„ íƒí•˜ë©´, 보다 유연하게 게스트 네트워í¬ë¥¼ 정하고 방화벽(fire wall), VPN, ë„¤íŠ¸ì›Œí¬ ë¡œë“œ 공유 장치 기술 ì§€ì›ì™€ ê°™ì€ ì‚¬ìš©ìž ì§€ì • 한 ë„¤íŠ¸ì›Œí¬ ì œê³µì„ ì œê³µí•  수 있습니다. +label.advanced=확장 +message.desc.zone=Zoneì€ CloudStack 환경내 최대 ì¡°ì§ ë‹¨ìœ„ë¡œ ì›ëž˜ ë‹¨ì¼ ë°ì´í„° ì„¼í„°ì— í•´ë‹¹í•©ë‹ˆë‹¤. Zoneì— í•´ì„œ 물리ì ì¸ 분리와 ì¤‘ë³µì„±ì´ ì œê³µë©ë‹ˆë‹¤. Zoneì€ í•œ ê°œ ì´ìƒ Pod( ê° Pod는 호스트와 기본 스토리지 서버ì—서 구성)와 Zoneë‚´ 모든 Pod로 공유ë˜ëŠ” 2ì°¨ 스토리지 서버로 구성ë©ë‹ˆë‹¤. +label.physical.network=물리 ë„¤íŠ¸ì›Œí¬ +label.public.traffic=공개 트래픽 +label.guest.traffic=게스트 트래픽 +label.storage.traffic=스토리지 트래픽 +message.setup.physical.network.during.zone.creation=확장 Zoneì„ ì¶”ê°€í•  때는 한 ê°œ ì´ìƒ 물리 네트워í¬ë¥¼ 설정해야 합니다. ê° ë„¤íŠ¸ì›Œí¬ëŠ” 하ì´í¼ ë°”ì´ì €ìƒ 한 가지 ë„¤íŠ¸ì›Œí¬ ì¹´ë“œ(NIC)ì— ëŒ€ì‘합니다. ê° ë¬¼ë¦¬ 네트워í¬ì—서는 êµ¬ì„±ì— ì œí•œì´ ìžˆìœ¼ë‚˜, 한 가지 종류 ì´ìƒ íŠ¸ëž˜í”½ì„ í†µì‹ í•  수 있습니다.

ê° ë¬¼ë¦¬ 네트워í¬ì— 대해서트래픽 종류를 드래그 앤 드롭해 주십시오. +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를 구현할 수 있습니다.

ì¸í„°ë„· íŠ¸ëž˜í”½ì„ ìœ„í•´ ì ì–´ë„ 한 ê°œ ì´ìƒ IP 주소 범위를 입력해 주십시오. +message.public.traffic.in.basic.zone=í´ë¼ìš°ë“œ ë‚´ë¶€ VMì´ ì¸í„°ë„·ì— ì ‘ê·¼ í•  때 ì¸í„°ë„· 경유로 í´ë¼ì´ì–¸íŠ¸ì— ì„œë¹„ìŠ¤ë¥¼ 제공하면, 공개 íŠ¸ëž˜í”½ì´ ìƒì„±ë©ë‹ˆë‹¤. ì´ ë•Œë¬¸ì— ì¼ë°˜ì ìœ¼ë¡œ ì ‘ê·¼ 가능한 IP 주소를 할당할 필요가 있습니다. ì¸ìŠ¤í„´ìŠ¤ë¥¼ 만들기하면, 게스트 IP 주소 외ì—ì´ ê³µê°œ IP 주소 범위ì—서 주소가 í•˜ë‚˜ì˜ ì¸ìŠ¤í„´ìŠ¤ì— í• ë‹¹í•  수 있습니다. 공개 IP 주소와 게스트 IP 주소 사ì´ì— ì •ì ì¸ 1대 1 NATê°€ ìžë™ìœ¼ë¡œ 설정 ë©ë‹ˆë‹¤. 최종 사용ìžëŠ” CloudStack ì‚¬ìš©ìž ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 사용해 추가 IP 주소를 ì·¨ë“하고 ì¸ìŠ¤í„´ìŠ¤ì™€ 공개 IP 주소 사ì´ì— ì •ì  NAT를 구현할 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. +message.add.pod.during.zone.creation= ê° Zoneì—는 한 ê°œ ì´ìƒ Podê°€ 필요합니다. 지금 여기서 첫번째 Pod를 추가합니다. Pod는 호스트와 기본 스토리지 서버ì—서 구성합니다만 ì´ëŠ” ë‹¤ìŒ ìˆœì„œë¡œ 추가합니다. 맨 ì²˜ìŒ CloudStack ë‚´ë¶€ 관리 íŠ¸ëž˜í”½ì„ ìœ„í•´ì„œ IP 주소 범위를 예약합니다. IP 주소 범위는 í´ë¼ìš°ë“œ ë‚´ë¶€ ê° Zoneì—서 중복 하지 않게 예약할 필요가 있습니다. +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= ê° Podì—는 한 ê°œ ì´ìƒ í´ëŸ¬ìŠ¤í„°ê°€ 필요합니다. 지금 여기서 최초 í´ëŸ¬ìŠ¤í„°ë¥¼ 추가합니다. í´ëŸ¬ìŠ¤í„°ëŠ” 호스트를 그룹화 하는 방법입니다. 한 í´ëŸ¬ìŠ¤í„° ë‚´ë¶€ 호스트는 ëª¨ë‘ ë™ì¼í•œ 하드웨어ì—서 구성ë˜ì–´ ê°™ì€ í•˜ì´í¼ ë°”ì´ì €ë¥¼ 실행하고 ê°™ì€ ì„œë¸Œ 네트워í¬ìƒì— 있어 ê°™ì€ ê³µìœ  ìŠ¤í† ë¦¬ì§€ì— ì ‘ê·¼ 합니다. ê° í´ëŸ¬ìŠ¤í„°ëŠ” 한 ê°œ ì´ìƒ 호스트와 한 ê°œ ì´ìƒ 기본 스토리지 서버ì—서 구성ë©ë‹ˆë‹¤. +message.desc.host= ê° í´ëŸ¬ìŠ¤í„°ì—는 ì ì–´ë„ 한 ê°œ ì´ìƒ 게스트 VM를 실행하기 위한 호스트 (컴퓨터)ê°€ 필요합니다. 지금 여기서 첫번째 호스트를 추가합니다. CloudStack으로 호스트를 ë™ìž‘하려면 호스트ì—게 하ì´í¼ ë°”ì´ì €ë¥¼ 설치하고 IP 주소를 할당해 호스트가 CloudStack 관리 ì„œë²„ì— ì ‘ì†í•˜ë„ë¡ í•©ë‹ˆë‹¤.

호스트 DNS 명 ë˜ëŠ” IP 주소, 사용ìžëª…(ì›ëž˜ root)ê³¼ 암호 ë° í˜¸ìŠ¤íŠ¸ ë¶„ë¥˜ì— ì‚¬ìš©í•˜ëŠ” ë¼ë²¨ì„ 입력해 주십시오. +message.desc.primary.storage= ê° í´ëŸ¬ìŠ¤í„°ì—는 ì ì–´ë„ 한 ê°œ ì´ìƒì˜ 기본 스토리지 서버가 필요합니다. 지금 여기서 첫번째 서버를 추가합니다. 기본 스토리지는 í´ëŸ¬ìŠ¤í„° ë‚´ ë¶€ 호스트ìƒì—서 ë™ìž‘하는 모든 VM ë””ìŠ¤í¬ ë³¼ë¥¨ì„ í¬í•¨í•©ë‹ˆë‹¤. 기본ì ìœ¼ë¡œ 하ì´í¼ ë°”ì´ì €ì—서 기술 ì§€ì›ë˜ëŠ” í‘œì¤€ì— ì¤€ê±°í•œ í”„ë¡œí† ì½œì„ ì‚¬ìš©í•´ 주십시오. +message.desc.secondary.storage= ê° Zoneì—는 ì ì–´ë„ 한 ê°œ ì´ìƒì˜ NFS 즉 2ì°¨ 스토리지 서버가 필요합니다. 지금 여기서 첫번째 서버를 추가합니다. 2ì°¨ 스토리지는 VM 템플릿, ISO ì´ë¯¸ì§€ ë° VM ë””ìŠ¤í¬ ë³¼ë¥¨ ìŠ¤ëƒ…ìƒ·ì„ í¬í•¨í•©ë‹ˆë‹¤. ì´ ì„œë²„ëŠ” Zoneë‚´ 모든 호스트ì—서 사용할 수 있어야 합니다.

IP 주소와 내보내낼 경로를 입력해 주십시오. +label.launch.zone=Zone 시작 +message.please.wait.while.zone.is.being.created=Zoneì´ ë§Œë“¤ê¸°ë  ë•Œê¹Œì§€ ìž ê¹ ê¸°ë‹¤ë ¤ 주십시오... + +label.load.balancing=ë„¤íŠ¸ì›Œí¬ ë¡œë“œ 공유 +label.static.nat.enabled=ì •ì  NAT 유효 +label.zones=Zone +label.view.more=ìƒì„¸ 표시 +label.number.of.zones=Zone수 +label.number.of.pods=Pod수 +label.number.of.clusters=í´ëŸ¬ìŠ¤í„°ìˆ˜ +label.number.of.hosts=호스트수 +label.total.hosts=호스트 합계 +label.total.CPU=CPU 합계 +label.total.memory=메모리 합계 +label.total.storage=스토리지 합계 +label.purpose=ëª©ì  + +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 ì´ì „ 위치: + +mode=모드 +side.by.side=병렬 +inline=ì§ë ¬ + +extractable=추출 가능 + +label.ocfs2=OCFS2 + +label.action.edit.host=호스트 편집 + +network.rate=ë„¤íŠ¸ì›Œí¬ ì†ë„ + +ICMP.type=ICMP 종류 +ICMP.code=ICMP 코드 + +image.directory=ì´ë¯¸ì§€ 디렉토리 + +label.action.create.template.from.vm=VMì—서 템플릿 만들기 +label.action.create.template.from.volume=볼륨ì—서 템플릿 만들기 + +message.vm.create.template.confirm=템플릿 만들기하면 VMì´ ìžë™ìœ¼ë¡œ 재시작ë©ë‹ˆë‹¤. + +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.allocation.state=할당 ìƒíƒœ +managed.state=관리 ëŒ€ìƒ ìƒíƒœ + +label.default.use=기본 사용 +label.host.tags=호스트 태그 + +label.cidr=CIDR +label.cidr.list=ì „ì†¡ì› CIDR + +label.storage.tags=스토리지 태그 + +label.redundant.router=중복 ë¼ìš°í„° +label.is.redundant.router=중복 + +force.delete=ê°•ì œ ì‚­ì œ +force.delete.domain.warning=경고:ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´, 모든 ë‚´ë¶€ ë„ë©”ì¸ ë° ê´€ë ¨í•˜ëŠ” 모든 계정 정보와 ê·¸ ìžì›ì´ ì‚­ì œë©ë‹ˆë‹¤. + +force.remove=ê°•ì œ í•´ì œ +force.remove.host.warning=경고:ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´, 실행중 모든 ê°€ìƒ ë¨¸ì‹ ì´ ê°•ì œì ìœ¼ë¡œ ì •ì§€ë˜ì–´ í´ëŸ¬ìŠ¤í„°ì—서 호스트가 ê°•ì œì ìœ¼ë¡œ í•´ì œë©ë‹ˆë‹¤. + +force.stop=ê°•ì œ ì •ì§€ +force.stop.instance.warning=경고: ì¸ìŠ¤í„´ìŠ¤ ê°•ì œ 정지는 최종 수단으로 í•´ 주십시오. ë°ì´í„°ê°€ ì†ì‹¤ë  ë¿ë§Œ ì•„ë‹ˆë¼ ê°€ìƒ ë¨¸ì‹  ë™ìž‘ì´ ì¼ê´€í•˜ì§€ 않게 ë  ê°€ëŠ¥ì„±ì´ ìžˆìŠµë‹ˆë‹¤. + +label.PreSetup=PreSetup +label.SR.name = SR 명 ë¼ë²¨ +label.SharedMountPoint=SharedMountPoint +label.clvm=CLVM +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.PING.CIFS.password=PING CIFS 암호 +label.CPU.cap=CPU 제한 + + +label.action.enable.zone=Zone 사용함 +label.action.enable.zone.processing=Zoneì„ ì‚¬ìš© 설정 중... +message.action.enable.zone=현재 Zoneì„ ì‚¬ìš© 하시겠습니까? +label.action.disable.zone=Zone 사용 안 함 +label.action.disable.zone.processing=Zoneì„ ì‚¬ìš© 안 함으로 설정 중... +message.action.disable.zone=현재 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.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.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.delete.domain=ë„ë©”ì¸ ì‚­ì œ +label.action.delete.domain.processing=ë„ë©”ì¸ì„ 삭제하는 중... + +label.action.delete.firewall.processing=방화벽(fire wall)를 삭제하는 중... +label.action.delete.firewall=방화벽(fire wall) 규칙 ì‚­ì œ +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=Pod를 삭제하는 중... +label.action.delete.pod=Pod ì‚­ì œ +label.action.delete.primary.storage.processing=기본 스토리지를 삭제하는 중... +label.action.delete.primary.storage=기본 스토리지 ì‚­ì œ +label.action.delete.secondary.storage.processing=2ì°¨ 스토리지를 삭제하는 중... +label.action.delete.secondary.storage=2ì°¨ 스토리지 ì‚­ì œ +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=Zoneì„ ì‚­ì œí•˜ëŠ” 중... +label.action.delete.zone=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=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.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.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=방화벽(fire wall) 규칙 추가 +label.add.host=호스트 추가 +label.add.ingress.rule=수신 규칙 추가 +label.add.ip.range=IP 주소 범위 추가 +label.add.load.balancer=ë„¤íŠ¸ì›Œí¬ ë¡œë“œ 공유 장치 추가 +label.add.more=다른 항목 추가 +label.add.network=ë„¤íŠ¸ì›Œí¬ ì¶”ê°€ +label.add.pod=Pod 추가 +label.add.primary.storage=기본 스토리지 추가 +label.add.secondary.storage=2ì°¨ 스토리지 추가 +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.add=추가 +label.adding.cluster=í´ëŸ¬ìŠ¤í„°ë¥¼ 추가중... +label.adding.failed=추가할 수 ì—†ìŒ +label.adding.pod=Pod를 추가 가능 +label.adding.processing=추가하는 중... +label.adding.succeeded=추가 완료 +label.adding.user=ì‚¬ìš©ìž ì¶”ê°€ +label.adding.zone=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.assign=할당 +label.associated.network.id=관련 ë„¤íŠ¸ì›Œí¬ ID +label.attached.iso=ì—°ê²° ISO +label.availability.zone=ì´ìš© 가능 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.domain=ë„ë©”ì¸ +label.by.end.date=ì¢…ë£Œì¼ +label.by.level=레벨 +label.by.pod=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.zone=Zone +label.bytes.received=수신 ë°”ì´íЏ +label.bytes.sent=전송 ë°”ì´íЏ +label.cancel=취소 +label.certificate=ì¸ì¦ì„œ +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.allocated.for.VMs=VMì— í• ë‹¹ 완료 CPU +label.cpu.allocated=할당 완료 CPU +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.disabled=사용 안함 +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.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=방화벽(fire wall) +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.iso=ISO +label.isolation.mode=분리 모드 +label.keep=유지 +label.lang.chinese=중국어(ê°„ì²´) +label.lang.english=ì˜ì–´ +label.lang.japanese=ì¼ë³¸ì–´ +label.lang.korean=한국어 +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.allocated=할당완료 메모리 +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.numretries=재시행 회수 +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.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.range=사설 IP 주소 범위 +label.private.ip=사설 IP 주소 +label.private.ips=사설 IP 주소 +label.private.port=사설 í¬íЏ +label.private.zone=사설 Zone +label.protocol=프로토콜 +label.public.interface=공개 ì¸í„°íŽ˜ì´ìФ +label.public.ip=공개 IP 주소 +label.public.ips=공개 IP 주소 +label.public.port=공개 í¬íЏ +label.public.zone=공개 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.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=2ì°¨ 스토리지 +label.secondary.used=2ì°¨ 스토리지 사용량 +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.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.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.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.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.vsphere.managed=vSphere 관리 +label.waiting=대기하는 중 +label.warn=경고 +label.wednesday=ìˆ˜ìš”ì¼ +label.weekly=매주 +label.welcome.cloud.console=관리 ì½˜ì†”ì— ì˜¤ì‹ ê²ƒì„ í™˜ì˜í•©ë‹ˆë‹¤! +label.welcome=어서 오십시오 +label.yes=예 +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.zone=Zone + +#Messages +message.acquire.public.ip=새로운 IP 주소를 ì·¨ë“하는 Zoneì„ ì„ íƒí•´ 주십시오. +message.action.cancel.maintenance.mode=현재 유지 보수를 취소하시겠습니까? +message.action.cancel.maintenance=호스트 유지 보수는 ì •ìƒì ìœ¼ë¡œ 취소ë˜ì—ˆìŠµë‹ˆë‹¤. 처리ì—는 몇 ë¶„ ì •ë„ ê±¸ë¦´ 수 있습니다. +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=현재 외부 방화벽(fire wall)를 삭제하시겠습니까? 경고: ê°™ì€ ì™¸ë¶€ 방화벽(fire wall)를 다시 추가할 경우는 기기 사용 ìƒí™© ë°ì´í„°ë¥¼ 재설정해야 합니다. +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=현재 2ì°¨ 스토리지를 삭제하시겠습니까? +message.action.delete.security.group=현재 보안 ê·¸ë£¹ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? +message.action.delete.service.offering=현재 ì„œë¹„ìŠ¤ì œê³µì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? +message.action.delete.snapshot=현재 ìŠ¤ëƒ…ìƒ·ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? +message.action.delete.template.for.all.zones=ê·¸ í…œí”Œë¦¿ì€ ëª¨ë“  Zoneì—서 사용ë˜ì–´ 있습니다. 모든 Zoneì—서 삭제하시겠습니까? +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.host.enable.maintenance.mode=유지 보수 모드를 사용 하면, ì´ í˜¸ìŠ¤íŠ¸ë¡œ 실행 ì¤‘ì¸ ëª¨ë“  ì¸ìŠ¤í„´ìŠ¤ë¥¼ 다른 사용가능 호스트ì—게 실시간 ì´ì „ë©ë‹ˆë‹¤. +message.action.instance.reset.password=현재 ê°€ìƒ ë¨¸ì‹  루트 암호를 변경하시겠습니까? +message.action.primarystorage.enable.maintenance.mode=경고: 기본 스토리지를 유지 보수 모드로 하면 ê·¸ ìŠ¤í† ë¦¬ì§€ìƒ ë³¼ë¥¨ì„ ì‚¬ìš©í•˜ëŠ” 모든 VMê°€ 정지합니다. 실행하시겠습니까? +message.action.reboot.instance=현재 ì¸ìŠ¤í„´ìŠ¤ë¥¼ 재시작하시겠습니까? +message.action.reboot.systemvm=현재 시스템 VMì„ ìž¬ì‹œìž‘í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +message.action.release.ip=현재 IP 주소를 해제하시겠습니까? +message.action.restore.instance=현재 ì¸ìŠ¤í„´ìŠ¤ë¥¼ ë³µì›í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +message.action.start.instance=현재 ì¸ìŠ¤í„´ìŠ¤ë¥¼ 시작하시겠습니까? +message.action.start.router=현재 ë¼ìš°í„°ë¥¼ 시작하시겠습니까? +message.action.start.systemvm=현재 시스템 VMì„ ì‹œìž‘í•˜ì‹œê² ìŠµë‹ˆê¹Œ? +message.action.stop.instance=현재 ì¸ìŠ¤í„´ìŠ¤ë¥¼ 정지하시겠습니까? +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ì— ë°©í™”ë²½(fire wall)ì„ ì¶”ê°€í•©ë‹ˆë‹¤. +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 기술 ì§€ì›ë¥¼ 사용 하는 경우는 ì´ ë„¤íŠ¸ì›Œí¬ ëª¨ë¸ì„ ì„ íƒí•´ 주십시오.ì´ ëª¨ë¸ì—서는 가장 유연하게 카스íƒë„¤íŠ¸ì›Œí¬ ì œê³µì„ ì œê³µí•  수 있어 방화벽(fire wall), 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=템플릿 으ì—서 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=í˜„ìž¬ì´ IP ì£¼ì†Œì— ëŒ€í•œ VPN는 유효하지 않ì€ìž…니다. VPN 접근를 사용 하시겠습니까? +message.enabled.vpn.ip.sec=IPSec 사전 공유 키: +message.enabled.vpn=현재 VPN ì ‘ê·¼ 사용 설정ë˜ì–´ 있습니다. ë‹¤ìŒ IP 주소 경유로 ì ‘ê·¼ í•  수 있습니다. +message.launch.vm.on.private.network=ì‚¬ì  ì „ìš© 네트워í¬ë¡œ ì¸ìŠ¤í„´ìŠ¤ë¥¼ 시작합니까? +message.lock.account=현재 계정 정보를 ìž ê·¸ì–´ë„ ì¢‹ìŠµë‹ˆê¹Œ? ì´ ê³„ì • ì •ë³´ 모든 사용ìžê°€ í´ë¼ìš°ë“œ ìžì›ì„ 관리할 수 없게 ë©ë‹ˆë‹¤. ê·¸ í›„ë„ ê¸°ì¡´ Zone ìžì›ì—는 ì ‘ê·¼ í•  수 있습니다. +message.migrate.instance.confirm=ê°€ìƒ ì¸ìŠ¤í„´ìŠ¤ ì´ì „ 위치는 ë‹¤ìŒ í˜¸ìŠ¤íŠ¸ë¡œ 하시겠습니까? +message.new.user=계정 ì •ë³´ì— ìƒˆë¡œìš´ 사용ìžë¥¼ 추가하기 위해 아래 정보를 지정해 주십시오. +message.no.network.support.configuration.not.true=보안 ê·¸ë£¹ì´ ìœ íš¨í•œ Zoneì´ ì—†ê¸° ë•Œë¬¸ì— ì¶”ê°€ ë„¤íŠ¸ì›Œí¬ ê¸°ëŠ¥ì€ ì—†ìŠµë‹ˆë‹¤. 단계 5로 진행해 주십시오. +message.no.network.support=하ì´í¼ ë°”ì´ì €ë¡œì„œ vSphere를 ì„ íƒí–ˆìœ¼ë‚˜ ì´ í•˜ì´í¼ ë°”ì´ì €ì— 추가 ë„¤íŠ¸ì›Œí¬ ê¸°ëŠ¥ì€ ì—†ìŠµë‹ˆë‹¤. 단계 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.restart.mgmt.usage.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=실행하려면 네트워í¬ë¥¼ ì ì–´ë„ 한 ê°œ ì´ìƒ ì„ íƒí•´ 주십시오. +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.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=관리 ì„œë²„ì— ì ‘ê·¼ í•  수 없습니다. 다ìŒì— 재실행해 주십시오. +error.session.expired=세션 ìœ íš¨ê¸°ê°„ì´ ëŠì–´ì¡ŒìŠµë‹ˆë‹¤. + +#resizeVolumes +label.resize.new.size=새 í¬ê¸°(GB) +label.action.resize.volume=볼륨 í¬ê¸° 변경 +label.action.resize.volume.processing=볼륨 í¬ê¸° 변경 중... +label.resize.new.offering.id=새로 제공 +label.resize.shrink.ok=변경 완료 diff --git a/client/WEB-INF/classes/resources/messages_pt_BR.properties b/client/WEB-INF/classes/resources/messages_pt_BR.properties index 3bc435b9717..5202f562cba 100644 --- a/client/WEB-INF/classes/resources/messages_pt_BR.properties +++ b/client/WEB-INF/classes/resources/messages_pt_BR.properties @@ -1114,6 +1114,7 @@ label.keep=Manter label.lang.chinese=Chinese (Simplified) label.lang.english=English label.lang.japanese=Japanese +label.lang.korean=Coreano label.lang.spanish=Spanish label.last.disconnected=Last Disconnected label.last.name=Ã\u009altimo Nome @@ -1510,3 +1511,9 @@ error.menu.select=N error.mgmt.server.inaccessible=O servidor de gerenciamento está inacessível. Tente novamente mais tarde. error.session.expired=Sua sessão expirou. error.unresolved.internet.name=Impossível resolver DNS +#resizeVolumes +label.resize.new.size=New Size(GB) +label.action.resize.volume=Resize Volume +label.action.resize.volume.processing=Resizing Volume.... +label.resize.new.offering.id=New Offering +label.resize.shrink.ok=Shrink OK diff --git a/client/WEB-INF/classes/resources/messages_ru_RU.properties b/client/WEB-INF/classes/resources/messages_ru_RU.properties index dd7e7460744..c6631192085 100644 --- a/client/WEB-INF/classes/resources/messages_ru_RU.properties +++ b/client/WEB-INF/classes/resources/messages_ru_RU.properties @@ -1114,6 +1114,7 @@ label.keep=Хранить label.lang.chinese=КитайÑкий (упрощённый) label.lang.english=ÐнглийÑкий label.lang.japanese=ЯпонÑкий +label.lang.korean=корейÑкий label.lang.spanish=ИÑпанÑкий label.last.disconnected=ПоÑледнее Ñоединение label.last.name=ПоÑледнее Ð¸Ð¼Ñ @@ -1510,3 +1511,11 @@ error.menu.select=Ðе удаетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ дейÑтвие из- error.mgmt.server.inaccessible=Сервер ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½ÐµÐ´Ð¾Ñтупна. Попробуйте обратитьÑÑ Ðº нему позже. error.session.expired=Ваша ÑеÑÑÐ¸Ñ Ð±Ñ‹Ð»Ð° завершена error.unresolved.internet.name=Ваше интернет-Ð¸Ð¼Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ не удалоÑÑŒ + +#resizeVolumes +label.resize.new.size=New Size(GB) +label.action.resize.volume=Resize Volume +label.action.resize.volume.processing=Resizing Volume.... +label.resize.new.offering.id=New Offering +label.resize.shrink.ok=Shrink OK + diff --git a/client/WEB-INF/classes/resources/messages_zh_CN.properties b/client/WEB-INF/classes/resources/messages_zh_CN.properties index 62160d98488..d49cefacff5 100644 --- a/client/WEB-INF/classes/resources/messages_zh_CN.properties +++ b/client/WEB-INF/classes/resources/messages_zh_CN.properties @@ -1116,6 +1116,7 @@ label.keep=ä¿ç•™ label.lang.chinese=简体中文 label.lang.english=英语 label.lang.japanese=日语 +label.lang.korean=韩国语 label.lang.spanish=西ç­ç‰™è¯­ label.last.disconnected=上次断开连接时间 label.last.name=å§“æ° @@ -1511,3 +1512,9 @@ error.mgmt.server.inaccessible=æ— æ³•è®¿é—®ç®¡ç†æœåŠ¡å™¨ã€‚è¯·ç¨åŽå†è¯•。 error.session.expired=您的会è¯å·²è¿‡æœŸã€‚ error.unresolved.internet.name=æ— æ³•è§£æžæ‚¨çš„ Internet å称。 +#resizeVolumes +label.resize.new.size=New Size(GB) +label.action.resize.volume=Resize Volume +label.action.resize.volume.processing=Resizing Volume.... +label.resize.new.offering.id=New Offering +label.resize.shrink.ok=Shrink OK diff --git a/client/WEB-INF/web.xml b/client/WEB-INF/web.xml index 0d75165659e..da2f13c8cf7 100644 --- a/client/WEB-INF/web.xml +++ b/client/WEB-INF/web.xml @@ -19,6 +19,14 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> + + + log4jConfigLocation + classpath:log4j-cloud.xml + + + org.springframework.web.util.Log4jConfigListener + org.springframework.web.context.ContextLoaderListener diff --git a/client/bindir/cloud-setup-management.in b/client/bindir/cloud-setup-management.in index ca1327ae725..aa9a46ba6ba 100755 --- a/client/bindir/cloud-setup-management.in +++ b/client/bindir/cloud-setup-management.in @@ -24,7 +24,7 @@ from cloudutils.globalEnv import globalEnv from cloudutils.serviceConfigServer import cloudManagementConfig from optparse import OptionParser if __name__ == '__main__': - initLoging("/var/log/cloud/setupManagement.log") + initLoging("@MSLOGDIR@/setupManagement.log") glbEnv = globalEnv() parser = OptionParser() diff --git a/client/pom.xml b/client/pom.xml index 3ae9dc5b2cf..cda6ab8b4e7 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -17,7 +17,7 @@ org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT @@ -85,6 +85,16 @@ cloud-plugin-hypervisor-xen ${project.version} + + org.apache.cloudstack + cloud-plugin-hypervisor-baremetal + ${project.version} + + + org.apache.cloudstack + cloud-plugin-hypervisor-ucs + ${project.version} + org.apache.cloudstack cloud-plugin-hypervisor-ovm @@ -229,9 +239,12 @@ -XX:MaxPermSize=512m -Xmx2g - /client - ${basedir}/WEB-INF/web.xml + ${project.build.directory}/${project.build.finalName}/WEB-INF/web.xml ${project.build.directory}/${project.build.finalName} + + /client + ${project.build.directory}/utilities/scripts/db/;${project.build.directory}/utilities/scripts/db/db/ + @@ -255,6 +268,13 @@ + + + + + + + @@ -267,13 +287,8 @@ - - - - - + + @@ -291,7 +306,7 @@ + value="${cs.replace.properties}" /> @@ -302,7 +317,7 @@ - + @@ -313,7 +328,7 @@ - + @@ -324,7 +339,7 @@ - + @@ -334,10 +349,26 @@ - + + + + + + + + + + + + + + + + + @@ -368,8 +399,8 @@ test + match="classpath:componentContext.xml" + replace="classpath:nonossComponentContext.xml" byline="true" /> @@ -392,14 +423,14 @@ org.jasypt jasypt - 1.9.0` + 1.9.0 false ${project.build.directory}/pythonlibs org.jasypt jasypt - 1.8` + 1.8 false ${project.build.directory}/pythonlibs diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in index 9503a6c137e..6cec8b38223 100644 --- a/client/tomcatconf/applicationContext.xml.in +++ b/client/tomcatconf/applicationContext.xml.in @@ -37,7 +37,7 @@ - + + - - + - diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index fd9e7335d07..16e9822ece0 100644 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -218,9 +218,13 @@ listZones=15 #### events commands listEvents=15 listEventTypes=15 +archiveEvents=15 +deleteEvents=15 #### alerts commands listAlerts=3 +archiveAlerts=1 +deleteAlerts=1 #### system capacity commands listCapacity=3 @@ -326,6 +330,11 @@ addNicToVirtualMachine=15 removeNicFromVirtualMachine=15 updateDefaultNicForVirtualMachine=15 +#### +addIpToNic=15 +removeIpFromNic=15 +listNics=15 + #### SSH key pair commands registerSSHKeyPair=15 createSSHKeyPair=15 @@ -538,7 +547,6 @@ updateRegion=1 removeRegion=1 listRegions=15 - #### GSLB (Global Server Load Balancing) commands createGlobalLoadBalancerRule=15 deleteGlobalLoadBalancerRule=15 @@ -546,3 +554,12 @@ updateGlobalLoadBalancerRule=15 listGlobalLoadBalancerRules=15 assignToGlobalLoadBalancerRule=15 removeFromGlobalLoadBalancerRule=15 + +### VM Snapshot commands +listVMSnapshot=15 +createVMSnapshot=15 +deleteVMSnapshot=15 +revertToSnapshot=15 + +#### Baremetal commands +addBaremetalHost=1 diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in index e3bf982f1e0..23566e204c0 100644 --- a/client/tomcatconf/componentContext.xml.in +++ b/client/tomcatconf/componentContext.xml.in @@ -35,26 +35,32 @@ Compose a CloudStack deployment with selected components here --> + - - + + - - + - - - - + + + + + + + + + + - + + - + @@ -114,16 +136,18 @@ - - - + + + + + @@ -179,7 +203,14 @@ - + + + + @@ -203,10 +234,18 @@ - + + + + + + + + + + + + + + diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index c62abe8ff2a..1d3faf384dc 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -66,10 +66,6 @@ under the License. - - - - @@ -286,6 +282,7 @@ under the License. + diff --git a/client/tomcatconf/log4j-cloud.xml.in b/client/tomcatconf/log4j-cloud.xml.in index 02f70998d53..086669376aa 100755 --- a/client/tomcatconf/log4j-cloud.xml.in +++ b/client/tomcatconf/log4j-cloud.xml.in @@ -105,7 +105,7 @@ under the License. - + diff --git a/client/tomcatconf/nonossComponentContext.xml.in b/client/tomcatconf/nonossComponentContext.xml.in index 7dbb5490c02..20e0c32db57 100644 --- a/client/tomcatconf/nonossComponentContext.xml.in +++ b/client/tomcatconf/nonossComponentContext.xml.in @@ -37,8 +37,8 @@ --> - - + + @@ -49,23 +49,34 @@ - + + + + + - + + + + + - - + + - - + + + + + @@ -92,8 +103,7 @@ - - + @@ -101,16 +111,25 @@ + + + + + + + + - + - + @@ -121,12 +140,14 @@ - - + + + + @@ -192,10 +213,11 @@ - + + @@ -223,11 +245,10 @@ - + - @@ -273,14 +294,6 @@ - - - - - - - - @@ -289,6 +302,18 @@ + + + + + + + + + + + + diff --git a/client/tomcatconf/tomcat6-nonssl.conf.in b/client/tomcatconf/tomcat6-nonssl.conf.in index c9342e0acae..4a9a70f619e 100644 --- a/client/tomcatconf/tomcat6-nonssl.conf.in +++ b/client/tomcatconf/tomcat6-nonssl.conf.in @@ -41,7 +41,7 @@ CATALINA_TMPDIR="@MSENVIRON@/temp" # Use JAVA_OPTS to set java.library.path for libtcnative.so #JAVA_OPTS="-Djava.library.path=/usr/lib64" -JAVA_OPTS="-Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=45219 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@MSLOGDIR@ -XX:PermSize=128M" +JAVA_OPTS="-Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=45219 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@MSLOGDIR@ -XX:PermSize=512M -XX:MaxPermSize=800m" # What user should run tomcat TOMCAT_USER="@MSUSER@" diff --git a/client/tomcatconf/tomcat6-ssl.conf.in b/client/tomcatconf/tomcat6-ssl.conf.in index ddca44fb33e..84b6d6275bb 100644 --- a/client/tomcatconf/tomcat6-ssl.conf.in +++ b/client/tomcatconf/tomcat6-ssl.conf.in @@ -40,7 +40,7 @@ CATALINA_TMPDIR="@MSENVIRON@/temp" # Use JAVA_OPTS to set java.library.path for libtcnative.so #JAVA_OPTS="-Djava.library.path=/usr/lib64" -JAVA_OPTS="-Djava.awt.headless=true -Djavax.net.ssl.trustStore=/etc/cloud/management/cloudmanagementserver.keystore -Djavax.net.ssl.trustStorePassword=vmops.com -Dcom.sun.management.jmxremote.port=45219 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@MSLOGDIR@ -XX:PermSize=128M" +JAVA_OPTS="-Djava.awt.headless=true -Djavax.net.ssl.trustStore=/etc/cloud/management/cloudmanagementserver.keystore -Djavax.net.ssl.trustStorePassword=vmops.com -Dcom.sun.management.jmxremote.port=45219 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@MSLOGDIR@ -XX:MaxPermSize=800m -XX:PermSize=512M" # What user should run tomcat TOMCAT_USER="@MSUSER@" diff --git a/client/vmops.log.2013-01-09.gz b/client/vmops.log.2013-01-09.gz deleted file mode 100644 index 573dafb592e..00000000000 Binary files a/client/vmops.log.2013-01-09.gz and /dev/null differ diff --git a/client/vmops.log.2013-01-18.gz b/client/vmops.log.2013-01-18.gz deleted file mode 100644 index fe5ab3516de..00000000000 Binary files a/client/vmops.log.2013-01-18.gz and /dev/null differ diff --git a/cloud.spec b/cloud.spec deleted file mode 100644 index bde3958d0be..00000000000 --- a/cloud.spec +++ /dev/null @@ -1,647 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -%define __os_install_post %{nil} -%global debug_package %{nil} - -# DISABLE the post-percentinstall java repacking and line number stripping -# we need to find a way to just disable the java repacking and line number stripping, but not the autodeps - -Name: cloud -Summary: CloudStack IaaS Platform -Version: %{_ver} -#http://fedoraproject.org/wiki/PackageNamingGuidelines#Pre-Release_packages -%if "%{?_prerelease}" != "" -Release: 0.%{_build_number}%{dist}.%{_prerelease} -%else -Release: %{_rel}%{dist} -%endif -License: Apache License 2.0 -Vendor: CloudStack -Packager: CloudStack -Group: System Environment/Libraries -# FIXME do groups for every single one of the subpackages -Source0: %{name}-%{_ver}.tar.bz2 -BuildRoot: %{_tmppath}/%{name}-%{_ver}-%{release}-build - -%if 0%{?fedora} >= 17 -BuildRequires: java-1.7.0-openjdk-devel -%else -BuildRequires: java-1.6.0-openjdk-devel -%endif -BuildRequires: tomcat6 -BuildRequires: ws-commons-util -BuildRequires: jpackage-utils -BuildRequires: gcc -BuildRequires: glibc-devel -BuildRequires: /usr/bin/mkisofs -BuildRequires: MySQL-python - -%description -CloudStack is a highly-scalable elastic, open source, -intelligent IaaS cloud implementation. - -%package utils -Summary: CloudStack utility library -Requires: java >= 1.6.0 -Requires: python -Group: System Environment/Libraries -Obsoletes: vmops-utils < %{version}-%{release} -%description utils -Utility libraries and set of Java classes used -by CloudStack. - -%package client-ui -Summary: CloudStack management server UI -Requires: %{name}-client -Group: System Environment/Libraries -Obsoletes: vmops-client-ui < %{version}-%{release} -%description client-ui -The CloudStack management server is the central point of coordination, -management, and intelligence in CloudStack. This package -is a requirement of the %{name}-client package, which installs the -CloudStack management server. - -%package server -Summary: CloudStack server library -Requires: java >= 1.6.0 -Obsoletes: vmops-server < %{version}-%{release} -Requires: %{name}-utils = %{version}, %{name}-core = %{version}, %{name}-deps = %{version}, %{name}-scripts = %{version}, tomcat6-servlet-2.5-api -Group: System Environment/Libraries -%description server -The CloudStack server libraries provide a set of Java classes for CloudStack. - -%package scripts -Summary: CloudStack scripts -# FIXME nuke the archdependency -Requires: python -Requires: bash -Requires: bzip2 -Requires: gzip -Requires: unzip -Requires: /sbin/mount.nfs -Requires: openssh-clients -Requires: nfs-utils -Requires: wget -# there is a fsimage.so in the source code, which adds xen-libs as a dependence, needs to supress it, as rhel doesn't have this pacakge -AutoReqProv: no -Provides: cloud-agent-scripts = %{version}-%{release} -Obsoletes: cloud-agent-scripts < %{version}-%{release} -Group: System Environment/Libraries -%description scripts -This package contains common scripts used by the Agent and Management server - -%package python -Summary: CloudStack Python library -# FIXME nuke the archdependency -Requires: python -Group: System Environment/Libraries -%description python -The CloudStack Python library contains a few Python modules that the -CloudStack uses. - -%package deps -Summary: CloudStack library dependencies -Requires: java >= 1.6.0 -Requires: mysql-connector-java -Obsoletes: vmops-deps < %{version}-%{release} -Group: System Environment/Libraries -%description deps -This package contains a number of third-party dependencies -not shipped by distributions, required to run CloudStack - - -%package core -Summary: CloudStack core library -Requires: java >= 1.6.0 -Requires: %{name}-utils = %{version}, %{name}-deps = %{version} -Group: System Environment/Libraries -Obsoletes: vmops-core < %{version}-%{release} -%description core -The CloudStack core libraries provide a set of Java classes used -in CloudStack. - -%package client -Summary: CloudStack management server -# If GCJ is present, a setPerformanceSomething method fails to load Catalina -Conflicts: java-1.5.0-gcj-devel -Obsoletes: vmops-client < %{version}-%{release} -Obsoletes: cloud-premium < %{version}-%{release} -Requires: java >= 1.6.0 -Requires: %{name}-deps = %{version}, %{name}-utils = %{version}, %{name}-server = %{version} -Requires: %{name}-client-ui = %{version} -Requires: %{name}-setup = %{version} -Requires: %{name}-scripts = %{version} -Requires: %{name}-python = %{version} -Requires: %{name}-aws-api = %{version} -# for consoleproxy -# Requires: %{name}-agent -Requires: tomcat6 -Requires: ws-commons-util -Requires: jpackage-utils -Requires: sudo -Requires: /sbin/service -Requires: /sbin/chkconfig -Requires: /usr/bin/ssh-keygen -Requires: mkisofs -Requires: MySQL-python -Requires: python-paramiko -Requires: ipmitool -Requires: %{name}-utils = %{version} -%if 0%{?fedora} > 14 -Requires: apache-commons-dbcp -Requires: apache-commons-collections -Requires: jakarta-commons-httpclient -Requires: jakarta-taglibs-standard -Requires: mysql-connector-java -%endif - -Group: System Environment/Libraries -%description client -The CloudStack management server is the central point of coordination, -management, and intelligence in CloudStack and installs the management server. - -%package setup -Summary: CloudStack setup tools -Obsoletes: vmops-setup < %{version}-%{release} -Requires: java >= 1.6.0 -Requires: python -Requires: MySQL-python -Requires: %{name}-utils = %{version} -Requires: %{name}-server = %{version} -Requires: %{name}-deps = %{version} -Requires: %{name}-python = %{version} -Group: System Environment/Libraries -%description setup -The CloudStack setup tools let you set up your Management Server and Usage Server. - -%package agent-libs -Summary: CloudStack agent libraries -Requires: java >= 1.6.0 -Requires: %{name}-utils = %{version}, %{name}-core = %{version}, %{name}-deps = %{version} -Requires: commons-httpclient -Requires: jakarta-commons-logging -Requires: jpackage-utils -Group: System Environment/Libraries -%description agent-libs -The CloudStack agent libraries are used by the KVM Agent - -%package agent -Summary: CloudStack agent -Obsoletes: vmops-agent < %{version}-%{release} -Obsoletes: vmops-console < %{version}-%{release} -Obsoletes: cloud-console < %{version}-%{release} -Obsoletes: cloud-vnet < %{version}-%{release} -Obsoletes: cloud-premium-agent < %{version}-%{release} -Requires: java >= 1.6.0 -Requires: %{name}-utils = %{version}, %{name}-core = %{version}, %{name}-deps = %{version} -Requires: %{name}-agent-libs = %{version} -Requires: %{name}-scripts = %{version} -Requires: python -Requires: %{name}-python = %{version} -Requires: commons-httpclient -Requires: jakarta-commons-logging -Requires: libvirt -Requires: /usr/sbin/libvirtd -Requires: jpackage-utils -Requires: /sbin/service -Requires: /sbin/chkconfig -Requires: jna -Requires: ebtables -Requires: jsvc -Requires: jakarta-commons-daemon -Requires: bridge-utils -Group: System Environment/Libraries - -Requires: kvm - -%if 0%{?fedora} >= 14 && 0%{?fedora} != 16 -Requires: cloud-qemu-kvm -Requires: cloud-qemu-img -%endif - -%if 0%{?rhel} >= 5 -Requires: qemu-img -%endif - -Requires: libcgroup -%if 0%{?fedora} >= 16 -Requires: libcgroup-tools -%endif -Requires: /usr/bin/uuidgen -Requires: rsync -Requires: /bin/egrep -Requires: /sbin/ip -Requires: vconfig -Group: System Environment/Libraries -%description agent -The CloudStack agent is in charge of managing KVM shared computing resources in -a CloudStack-powered cloud. Install this package if this computer -will participate in your cloud. - -%package baremetal-agent -Summary: CloudStack baremetal agent -Requires: PING -Requires: tftp-server -Requires: xinetd -Requires: syslinux -Requires: chkconfig -Requires: dhcp -Group: System Environment/Libraries -%description baremetal-agent -The CloudStack baremetal agent - -%package cli -Summary: CloudStack command line tools -Requires: python -Group: System Environment/Libraries -%description cli -The CloudStack command line tools contain a few Python modules that can call cloudStack APIs. - -%package usage -Summary: CloudStack usage monitor -Obsoletes: vmops-usage < %{version}-%{release} -Requires: java >= 1.6.0 -Requires: %{name}-utils = %{version}, %{name}-core = %{version}, %{name}-deps = %{version}, %{name}-server = %{version} -Requires: %{name}-setup = %{version} -Requires: %{name}-client = %{version} -Requires: jsvc -License: Apache License 2.0 -Group: System Environment/Libraries -%description usage -The CloudStack usage monitor provides usage accounting across the entire cloud for -cloud operators to charge based on usage parameters. - -%package aws-api -Summary: CloudStack CloudBridge -Group: System Environment/Libraries -Requires: java >= 1.6.0 -Requires: tomcat6 -Requires: %{name}-deps = %{version} -%if 0%{?fedora} > 15 -Requires: apache-commons-lang -%endif -%if 0%{?rhel} >= 5 -Requires: jakarta-commons-lang -%endif -Obsoletes: cloud-bridge < %{version}-%{release} -%description aws-api -This is the CloudStack CloudBridge - -%prep - -echo Doing CloudStack build - -%setup -q -n %{name}-%{_ver} - -%build - -# this fixes the /usr/com bug on centos5 -%define _localstatedir /var -%define _sharedstatedir /var/lib -./waf configure --prefix=%{_prefix} --libdir=%{_libdir} --bindir=%{_bindir} --javadir=%{_javadir} --sharedstatedir=%{_sharedstatedir} --localstatedir=%{_localstatedir} --sysconfdir=%{_sysconfdir} --mandir=%{_mandir} --docdir=%{_docdir}/%{name}-%{version} --with-tomcat=%{_datadir}/tomcat6 --tomcat-user=%{name} --fast --build-number=%{_ver}-%{release} --package-version=%{_ver} -./waf build --build-number=%{?_build_number} --package-version=%{_ver} - -%install -[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT} -# we put the build number again here, otherwise state checking will cause an almost-full recompile -./waf install --destdir=$RPM_BUILD_ROOT --nochown --build-number=%{?_build_number} -rm $RPM_BUILD_ROOT/etc/rc.d/init.d/cloud-console-proxy -rm $RPM_BUILD_ROOT/usr/bin/cloud-setup-console-proxy -rm $RPM_BUILD_ROOT/usr/libexec/console-proxy-runner -ant deploy-rpm-install -Drpm.install.dir=$RPM_BUILD_ROOT - -%clean - -[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT} - - -%preun client -/sbin/service %{name}-management stop || true -if [ "$1" == "0" ] ; then - /sbin/chkconfig --del %{name}-management > /dev/null 2>&1 || true - /sbin/service %{name}-management stop > /dev/null 2>&1 || true -fi - -%pre aws-api -id %{name} > /dev/null 2>&1 || /usr/sbin/useradd -M -c "CloudStack unprivileged user" \ - -r -s /bin/sh -d %{_sharedstatedir}/%{name}/management %{name}|| true - -rm -rf %{_localstatedir}/cache/%{name} -# user harcoded here, also hardcoded on wscript - -%pre client-ui -if [ -d %{_datadir}/%{name}/management/webapps/client/ ]; then - pushd /tmp &>/dev/null - file=cloud-ui-backup-%(date +%%F).tar.bz2 - cp -r %{_datadir}/%{name}/management/webapps/client/ . - tar cjf "$file" client/ - rm -rf client/ - mkdir -p /usr/share/cloud/ui-backup/ - mv "$file" /usr/share/cloud/ui-backup/ - popd &>/dev/null -fi - -%preun usage -if [ "$1" == "0" ] ; then - /sbin/chkconfig --del %{name}-usage > /dev/null 2>&1 || true - /sbin/service %{name}-usage stop > /dev/null 2>&1 || true -fi - -%pre usage -id %{name} > /dev/null 2>&1 || /usr/sbin/useradd -M -c "CloudStack unprivileged user" \ - -r -s /bin/sh -d %{_sharedstatedir}/%{name}/management %{name}|| true -# user harcoded here, also hardcoded on wscript - -%post usage -if [ "$1" == "1" ] ; then - /sbin/chkconfig --add %{name}-usage > /dev/null 2>&1 || true - /sbin/chkconfig --level 345 %{name}-usage on > /dev/null 2>&1 || true -else - /sbin/service %{name}-usage condrestart >/dev/null 2>&1 || true -fi - -%preun agent -if [ "$1" == "0" ] ; then - /sbin/chkconfig --del %{name}-agent > /dev/null 2>&1 || true - /sbin/service %{name}-agent stop > /dev/null 2>&1 || true -fi - -%post agent -if [ "$1" == "1" ] ; then - /sbin/chkconfig --add %{name}-agent > /dev/null 2>&1 || true - /sbin/chkconfig --level 345 %{name}-agent on > /dev/null 2>&1 || true -else - /sbin/service %{name}-agent condrestart >/dev/null 2>&1 || true -fi - -if [ -x /etc/sysconfig/modules/kvm.modules ] ; then - /bin/sh /etc/sysconfig/modules/kvm.modules -fi - -%post client - /sbin/chkconfig --add %{name}-management > /dev/null 2>&1 || true - /sbin/chkconfig --level 345 %{name}-management on > /dev/null 2>&1 || true - - root=/usr/share/cloud/bridge - target=/usr/share/cloud/management - - mkdir -p $target/webapps7080 - if [ ! -h $target/webapps7080/awsapi ]; then - ln -sf $root/webapps7080/awsapi $target/webapps7080/awsapi - fi - -# jars=`ls $root/lib` -# for j in $jars -# do -# cp -f $root/lib/$j $root/webapps/awsapi/WEB-INF/lib/ -# done - - confs="cloud-bridge.properties ec2-service.properties" - for c in $confs - do - cp -f $root/conf/$c $target/conf - done - -%files utils -%defattr(0644,root,root,0755) -%{_javadir}/%{name}-utils.jar -%{_javadir}/%{name}-api.jar -%attr(0755,root,root) %{_bindir}/cloud-sccs -%attr(0755,root,root) %{_bindir}/cloud-gitrevs -%doc %{_docdir}/%{name}-%{version}/version-info -%doc LICENSE -%doc NOTICE - -%files client-ui -%defattr(0644,root,root,0755) -%{_datadir}/%{name}/management/webapps/client/* -%doc LICENSE -%doc NOTICE - -%files server -%defattr(0644,root,root,0755) -%{_javadir}/%{name}-server.jar -%{_javadir}/%{name}-ovm.jar -%{_javadir}/%{name}-dp-user-concentrated-pod.jar -%{_javadir}/%{name}-dp-user-dispersing.jar -%{_javadir}/%{name}-host-allocator-random.jar -%{_javadir}/%{name}-plugin-ovs.jar -%{_javadir}/%{name}-storage-allocator-random.jar -%{_javadir}/%{name}-user-authenticator-ldap.jar -%{_javadir}/%{name}-user-authenticator-md5.jar -%{_javadir}/%{name}-user-authenticator-plaintext.jar -%{_javadir}/%{name}-plugin-hypervisor-xen.jar -%{_javadir}/%{name}-plugin-elb.jar -%{_javadir}/%{name}-plugin-nicira-nvp.jar -%{_javadir}/%{name}-plugin-bigswitch-vns.jar -%config(noreplace) %{_sysconfdir}/%{name}/server/* -%doc LICENSE -%doc NOTICE - -%files scripts -%defattr(-,root,root,-) -%{_libdir}/%{name}/common/scripts/* -# maintain the following list in sync with files scripts -%{_libdir}/%{name}/common/vms/systemvm.zip -%{_libdir}/%{name}/common/vms/systemvm.iso -%doc LICENSE -%doc NOTICE - -%files deps -%defattr(0644,root,root,0755) -%{_javadir}/axiom-*.jar -%{_javadir}/axis2-*.jar -%{_javadir}/antlr*.jar -%{_javadir}/XmlSchema-*.jar -%{_javadir}/json-simple*.jar -%{_javadir}/neethi*.jar -%{_javadir}/woden*.jar -%{_javadir}/xercesImpl*.jar -%{_javadir}/xml-apis*.jar -%{_javadir}/dom4j*.jar -%{_javadir}/javassist*.jar -%{_javadir}/commons-fileupload*.jar -%{_javadir}/commons-codec-1.6.jar -%{_javadir}/commons-dbcp-1.4.jar -%{_javadir}/commons-pool-1.6.jar -%{_javadir}/gson-1.7.1.jar -%{_javadir}/CAStorSDK-*.jar -%{_javadir}/backport-util-concurrent-3.1.jar -%{_javadir}/ehcache-1.5.0.jar -%{_javadir}/httpcore-4.0.jar -%{_javadir}/mail-1.4.jar -%{_javadir}/activation-1.1.jar -%{_javadir}/xapi-5.6.100-1-SNAPSHOT.jar -%{_javadir}/log4j-*.jar -%{_javadir}/apache-log4j-extras-1.1.jar -%{_javadir}/trilead-ssh2-build213-svnkit-1.3-patch.jar -%{_javadir}/cglib-nodep-2.2.2.jar -%{_javadir}/xmlrpc-common-3.*.jar -%{_javadir}/xmlrpc-client-3.*.jar -%{_javadir}/wsdl4j-1.6.2.jar -%{_javadir}/jsch-0.1.42.jar -%{_javadir}/jasypt-1.*.jar -%{_javadir}/commons-configuration-1.8.jar -%{_javadir}/ejb-api-3.0.jar -%{_javadir}/axis2-1.5.1.jar -%{_javadir}/commons-discovery-0.5.jar -%{_javadir}/jstl-1.2.jar -%{_javadir}/javax.persistence-2.0.0.jar -%{_javadir}/bcprov-jdk16-1.45.jar -%doc LICENSE -%doc NOTICE - -%files core -%defattr(0644,root,root,0755) -%{_javadir}/%{name}-core.jar -%doc LICENSE -%doc NOTICE - -%files python -%defattr(0644,root,root,0755) -%{_prefix}/lib*/python*/site-packages/%{name}* -%attr(0755,root,root) %{_bindir}/cloud-external-ipallocator.py -%attr(0755,root,root) %{_initrddir}/cloud-ipallocator -%dir %attr(0770,root,root) %{_localstatedir}/log/%{name}/ipallocator -%doc LICENSE -%doc NOTICE - -%files setup -%attr(0755,root,root) %{_bindir}/%{name}-setup-databases -%attr(0755,root,root) %{_bindir}/%{name}-migrate-databases -%attr(0755,root,root) %{_bindir}/%{name}-set-guest-password -%attr(0755,root,root) %{_bindir}/%{name}-set-guest-sshkey -%attr(0755,root,root) %{_bindir}/%{name}-sysvmadm -%attr(0755,root,root) %{_bindir}/%{name}-setup-encryption -%dir %{_datadir}/%{name}/setup -%{_datadir}/%{name}/setup/*.sql -%{_datadir}/%{name}/setup/db/*.sql -%{_datadir}/%{name}/setup/*.sh -%{_datadir}/%{name}/setup/server-setup.xml -%doc LICENSE -%doc NOTICE - -%files client -%defattr(0644,root,root,0775) -%config(noreplace) %{_sysconfdir}/%{name}/management -%config(noreplace) %attr(0640,root,%{name}) %{_sysconfdir}/%{name}/management/db.properties -%config(noreplace) %{_sysconfdir}/%{name}/management/log4j-%{name}.xml -%config(noreplace) %{_sysconfdir}/%{name}/management/tomcat6.conf -%dir %attr(0770,root,%{name}) %{_sysconfdir}/%{name}/management/Catalina -%dir %attr(0770,root,%{name}) %{_sysconfdir}/%{name}/management/Catalina/localhost -%dir %attr(0770,root,%{name}) %{_sysconfdir}/%{name}/management/Catalina/localhost/client -%config(noreplace) %{_sysconfdir}/sysconfig/%{name}-management -%attr(0755,root,root) %{_initrddir}/%{name}-management -%dir %{_datadir}/%{name}/management -%{_datadir}/%{name}/management/* -%attr(0755,root,root) %{_bindir}/%{name}-setup-management -%attr(0755,root,root) %{_bindir}/%{name}-update-xenserver-licenses -%dir %attr(0770,root,%{name}) %{_sharedstatedir}/%{name}/mnt -%dir %attr(0770,%{name},%{name}) %{_sharedstatedir}/%{name}/management -%dir %attr(0770,root,%{name}) %{_localstatedir}/cache/%{name}/management -%dir %attr(0770,root,%{name}) %{_localstatedir}/cache/%{name}/management/work -%dir %attr(0770,root,%{name}) %{_localstatedir}/cache/%{name}/management/temp -%dir %attr(0770,root,%{name}) %{_localstatedir}/log/%{name}/management -%dir %attr(0770,root,%{name}) %{_localstatedir}/log/%{name}/agent -%doc LICENSE -%doc NOTICE - -%files agent-libs -%defattr(0644,root,root,0755) -%{_javadir}/%{name}-agent.jar -%{_javadir}/%{name}-plugin-hypervisor-kvm.jar -%{_javadir}/libvirt-0.4.9.jar -%doc LICENSE -%doc NOTICE - -%files agent -%defattr(0644,root,root,0755) -%config(noreplace) %{_sysconfdir}/%{name}/agent/agent.properties -%config(noreplace) %{_sysconfdir}/%{name}/agent/developer.properties.template -%config(noreplace) %{_sysconfdir}/%{name}/agent/environment.properties -%config(noreplace) %{_sysconfdir}/%{name}/agent/log4j-%{name}.xml -%attr(0755,root,root) %{_initrddir}/%{name}-agent -%attr(0755,root,root) %{_bindir}/%{name}-setup-agent -%attr(0755,root,root) %{_bindir}/%{name}-ssh -%dir %attr(0770,root,root) %{_localstatedir}/log/%{name}/agent -%doc LICENSE -%doc NOTICE - -%files cli -%{_bindir}/%{name}-tool -%{_bindir}/cloudvoladm -%{_bindir}/cloud-grab-dependent-library-versions -%config(noreplace) %{_sysconfdir}/%{name}/cli/commands.xml -%dir %{_prefix}/lib*/python*/site-packages/%{name}tool -%{_prefix}/lib*/python*/site-packages/%{name}tool/* -%{_prefix}/lib*/python*/site-packages/%{name}apis.py -%doc LICENSE -%doc NOTICE - -%files baremetal-agent -%attr(0755,root,root) %{_bindir}/cloud-setup-baremetal -%doc LICENSE -%doc NOTICE - -%files usage -%defattr(0644,root,root,0775) -%{_javadir}/%{name}-usage.jar -%attr(0755,root,root) %{_initrddir}/%{name}-usage -%dir %attr(0770,root,%{name}) %{_localstatedir}/log/%{name}/usage -%config(noreplace) %{_sysconfdir}/%{name}/usage/usage-components.xml -%config(noreplace) %{_sysconfdir}/%{name}/usage/log4j-%{name}_usage.xml -%config(noreplace) %attr(0640,root,%{name}) %{_sysconfdir}/%{name}/usage/db.properties -%doc LICENSE -%doc NOTICE - -%files aws-api -%defattr(0644,cloud,cloud,0755) -%{_datadir}/cloud/bridge/conf/* -%{_datadir}/cloud/bridge/webapps7080/* -%attr(0644,root,root) %{_datadir}/cloud/setup/bridge/db/* -%attr(0755,root,root) %{_bindir}/cloudstack-aws-api-register -%attr(0755,root,root) %{_bindir}/cloud-setup-bridge -%doc LICENSE -%doc NOTICE - -%changelog -* Mon Nov 19 2012 Satoshi Kobayashi 4.0.1 -- adding dependency bridge-utils to fix a system requirement - -* Fri Sep 14 2012 Marcus Sorensen 4.0.1 -- adding dependency jakarta-commons-daemon to fix "cannot find daemon loader" - -* Thu Aug 16 2012 Marcus Sorensen 4.0 -- rearranged files sections to match currently built files - -* Mon May 3 2010 Manuel Amador (Rudd-O) 1.9.12 -- Bump version for RC4 release - -* Fri Apr 30 2010 Manuel Amador (Rudd-O) 1.9.11 -- Rename to CloudStack everywhere - -* Wed Apr 28 2010 Manuel Amador (Rudd-O) 1.9.10 -- FOSS release - -* Mon Apr 05 2010 Manuel Amador (Rudd-O) 1.9.8 -- RC3 branched - -* Wed Feb 17 2010 Manuel Amador (Rudd-O) 1.9.7 -- First initial broken-up release - - diff --git a/core/pom.xml b/core/pom.xml index 3d6356e561e..0da69529400 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT @@ -31,7 +31,11 @@ cloud-api ${project.version} - + + org.apache.cloudstack + cloud-engine-api + ${project.version} + commons-httpclient commons-httpclient diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index fc7f08f76a2..7148e0710ca 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -600,6 +600,10 @@ public class VirtualRoutingResource implements Manager { command.add("-6", cmd.getVmIp6Address()); command.add("-u", cmd.getDuid()); } + + if (!cmd.isDefault()) { + command.add("-z"); + } final String result = command.execute(); return new Answer(cmd, result==null, result); @@ -859,35 +863,29 @@ public class VirtualRoutingResource implements Manager { } public void assignVpcIpToRouter(final String routerIP, final boolean add, final String pubIP, - final String nicname, final String gateway, final String netmask, final String subnet) throws Exception { - try { - String args = ""; + final String nicname, final String gateway, final String netmask, final String subnet) throws InternalErrorException { + String args = ""; - if (add) { - args += " -A "; - } else { - args += " -D "; - } + if (add) { + args += " -A "; + } else { + args += " -D "; + } - args += " -l "; - args += pubIP; - args += " -c "; - args += nicname; - args += " -g "; - args += gateway; - args += " -m "; - args += netmask; - args += " -n "; - args += subnet; + args += " -l "; + args += pubIP; + args += " -c "; + args += nicname; + args += " -g "; + args += gateway; + args += " -m "; + args += netmask; + args += " -n "; + args += subnet; - String result = routerProxy("vpc_ipassoc.sh", routerIP, args); - if (result != null) { - throw new InternalErrorException("KVM plugin \"vpc_ipassoc\" failed:"+result); - } - } catch (Exception e) { - String msg = "Unable to assign public IP address due to " + e.toString(); - s_logger.warn(msg, e); - throw new Exception(msg); + String result = routerProxy("vpc_ipassoc.sh", routerIP, args); + if (result != null) { + throw new InternalErrorException("KVM plugin \"vpc_ipassoc\" failed:"+result); } } diff --git a/core/src/com/cloud/alert/AlertVO.java b/core/src/com/cloud/alert/AlertVO.java index f6089d65043..3f014aa2b1f 100755 --- a/core/src/com/cloud/alert/AlertVO.java +++ b/core/src/com/cloud/alert/AlertVO.java @@ -28,9 +28,7 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; -import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="alert") @@ -68,16 +66,19 @@ public class AlertVO implements Alert { @Temporal(TemporalType.TIMESTAMP) @Column(name="resolved", updatable=true, nullable=true) private Date resolved; - + @Column(name="uuid") private String uuid; + @Column(name="archived") + private boolean archived; + public AlertVO() { - this.uuid = UUID.randomUUID().toString(); + this.uuid = UUID.randomUUID().toString(); } public AlertVO(Long id) { this.id = id; - this.uuid = UUID.randomUUID().toString(); + this.uuid = UUID.randomUUID().toString(); } @Override @@ -103,12 +104,12 @@ public class AlertVO implements Alert { } public Long getClusterId() { - return clusterId; - } - public void setClusterId(Long clusterId) { - this.clusterId = clusterId; - } - @Override + return clusterId; + } + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + @Override public Long getPodId() { return podId; } @@ -164,10 +165,19 @@ public class AlertVO implements Alert { @Override public String getUuid() { - return this.uuid; + return this.uuid; } - + public void setUuid(String uuid) { - this.uuid = uuid; + this.uuid = uuid; + } + + @Override + public boolean getArchived() { + return archived; + } + + public void setArchived(Boolean archived) { + this.archived = archived; } } diff --git a/core/src/com/cloud/event/EventVO.java b/core/src/com/cloud/event/EventVO.java index ac46f24b2ee..2c30eadebdc 100644 --- a/core/src/com/cloud/event/EventVO.java +++ b/core/src/com/cloud/event/EventVO.java @@ -29,74 +29,75 @@ import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; -import org.apache.cloudstack.api.Identity; import com.cloud.utils.db.GenericDao; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="event") public class EventVO implements Event { - @Id + @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private long id = -1; + private long id = -1; - @Column(name="type") - private String type; - - @Enumerated(value=EnumType.STRING) - @Column(name="state") + @Column(name="type") + private String type; + + @Enumerated(value=EnumType.STRING) + @Column(name="state") private State state = State.Completed; - @Column(name="description", length=1024) - private String description; + @Column(name="description", length=1024) + private String description; - @Column(name=GenericDao.CREATED_COLUMN) - private Date createDate; + @Column(name=GenericDao.CREATED_COLUMN) + private Date createDate; @Column(name="user_id") private long userId; - @Column(name="account_id") - private long accountId; + @Column(name="account_id") + private long accountId; @Column(name="domain_id") private long domainId; - @Column(name="level") - private String level = LEVEL_INFO; - - @Column(name="start_id") + @Column(name="level") + private String level = LEVEL_INFO; + + @Column(name="start_id") private long startId; - @Column(name="parameters", length=1024) - private String parameters; - - @Column(name="uuid") - private String uuid; + @Column(name="parameters", length=1024) + private String parameters; - @Transient - private int totalSize; + @Column(name="uuid") + private String uuid; - public static final String LEVEL_INFO = "INFO"; - public static final String LEVEL_WARN = "WARN"; - public static final String LEVEL_ERROR = "ERROR"; - - public EventVO() { - this.uuid = UUID.randomUUID().toString(); - } - - public long getId() { - return id; - } - @Override + @Column(name="archived") + private boolean archived; + + @Transient + private int totalSize; + + public static final String LEVEL_INFO = "INFO"; + public static final String LEVEL_WARN = "WARN"; + public static final String LEVEL_ERROR = "ERROR"; + + public EventVO() { + this.uuid = UUID.randomUUID().toString(); + } + + public long getId() { + return id; + } + @Override public String getType() { - return type; - } - public void setType(String type) { - this.type = type; - } - @Override + return type; + } + public void setType(String type) { + this.type = type; + } + @Override public State getState() { return state; } @@ -105,27 +106,27 @@ public class EventVO implements Event { this.state = state; } - @Override + @Override public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - @Override + return description; + } + public void setDescription(String description) { + this.description = description; + } + @Override public Date getCreateDate() { - return createDate; - } - public void setCreatedDate(Date createdDate) { - createDate = createdDate; - } - @Override + return createDate; + } + public void setCreatedDate(Date createdDate) { + createDate = createdDate; + } + @Override public long getUserId() { - return userId; - } - public void setUserId(long userId) { - this.userId = userId; - } + return userId; + } + public void setUserId(long userId) { + this.userId = userId; + } @Override public long getAccountId() { return accountId; @@ -165,21 +166,29 @@ public class EventVO implements Event { this.startId = startId; } - @Override + @Override public String getParameters() { - return parameters; - } - public void setParameters(String parameters) { - this.parameters = parameters; - } - - @Override - public String getUuid() { - return this.uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } + return parameters; + } + public void setParameters(String parameters) { + this.parameters = parameters; + } + @Override + public String getUuid() { + return this.uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + @Override + public boolean getArchived() { + return archived; + } + + public void setArchived(Boolean archived) { + this.archived = archived; + } } diff --git a/core/src/com/cloud/event/dao/EventDao.java b/core/src/com/cloud/event/dao/EventDao.java index bfcb818f20f..da5f47a90b4 100644 --- a/core/src/com/cloud/event/dao/EventDao.java +++ b/core/src/com/cloud/event/dao/EventDao.java @@ -30,4 +30,9 @@ public interface EventDao extends GenericDao { public List listOlderEvents(Date oldTime); EventVO findCompletedEvent(long startId); + + public List listToArchiveOrDeleteEvents(List ids, String type, Date olderThan, Long accountId); + + public void archiveEvents(List events); + } diff --git a/core/src/com/cloud/event/dao/EventDaoImpl.java b/core/src/com/cloud/event/dao/EventDaoImpl.java index 44fbb030dcc..6ba59c56b0a 100644 --- a/core/src/com/cloud/event/dao/EventDaoImpl.java +++ b/core/src/com/cloud/event/dao/EventDaoImpl.java @@ -30,24 +30,34 @@ import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.db.SearchCriteria.Op; @Component @Local(value={EventDao.class}) public class EventDaoImpl extends GenericDaoBase implements EventDao { - public static final Logger s_logger = Logger.getLogger(EventDaoImpl.class.getName()); - protected final SearchBuilder CompletedEventSearch; - - public EventDaoImpl () { - CompletedEventSearch = createSearchBuilder(); - CompletedEventSearch.and("state",CompletedEventSearch.entity().getState(),SearchCriteria.Op.EQ); - CompletedEventSearch.and("startId", CompletedEventSearch.entity().getStartId(), SearchCriteria.Op.EQ); - CompletedEventSearch.done(); - } + public static final Logger s_logger = Logger.getLogger(EventDaoImpl.class.getName()); + protected final SearchBuilder CompletedEventSearch; + protected final SearchBuilder ToArchiveOrDeleteEventSearch; - @Override - public List searchAllEvents(SearchCriteria sc, Filter filter) { - return listIncludingRemovedBy(sc, filter); - } + public EventDaoImpl () { + CompletedEventSearch = createSearchBuilder(); + CompletedEventSearch.and("state",CompletedEventSearch.entity().getState(),SearchCriteria.Op.EQ); + CompletedEventSearch.and("startId", CompletedEventSearch.entity().getStartId(), SearchCriteria.Op.EQ); + CompletedEventSearch.done(); + + ToArchiveOrDeleteEventSearch = createSearchBuilder(); + ToArchiveOrDeleteEventSearch.and("id", ToArchiveOrDeleteEventSearch.entity().getId(), Op.IN); + ToArchiveOrDeleteEventSearch.and("type", ToArchiveOrDeleteEventSearch.entity().getType(), Op.EQ); + ToArchiveOrDeleteEventSearch.and("accountId", ToArchiveOrDeleteEventSearch.entity().getAccountId(), Op.EQ); + ToArchiveOrDeleteEventSearch.and("createDateL", ToArchiveOrDeleteEventSearch.entity().getCreateDate(), Op.LT); + ToArchiveOrDeleteEventSearch.done(); + } + + @Override + public List searchAllEvents(SearchCriteria sc, Filter filter) { + return listIncludingRemovedBy(sc, filter); + } @Override public List listOlderEvents(Date oldTime) { @@ -55,9 +65,8 @@ public class EventDaoImpl extends GenericDaoBase implements Event SearchCriteria sc = createSearchCriteria(); sc.addAnd("createDate", SearchCriteria.Op.LT, oldTime); return listIncludingRemovedBy(sc, null); - } - + @Override public EventVO findCompletedEvent(long startId) { SearchCriteria sc = CompletedEventSearch.create(); @@ -65,4 +74,36 @@ public class EventDaoImpl extends GenericDaoBase implements Event sc.setParameters("startId", startId); return findOneIncludingRemovedBy(sc); } + + @Override + public List listToArchiveOrDeleteEvents(List ids, String type, Date olderThan, Long accountId) { + SearchCriteria sc = ToArchiveOrDeleteEventSearch.create(); + if (ids != null) { + sc.setParameters("id", ids.toArray(new Object[ids.size()])); + } + if (type != null) { + sc.setParameters("type", type); + } + if (olderThan != null) { + sc.setParameters("createDateL", olderThan); + } + if (accountId != null) { + sc.setParameters("accountId", accountId); + } + return search(sc, null); + } + + @Override + public void archiveEvents(List events) { + + Transaction txn = Transaction.currentTxn(); + txn.start(); + for (EventVO event : events) { + event = lockRow(event.getId(), true); + event.setArchived(true); + update(event.getId(), event); + txn.commit(); + } + txn.close(); + } } diff --git a/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java b/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java index 56e8e0a734d..b525a2d05d5 100644 --- a/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java +++ b/core/src/com/cloud/hypervisor/HypervisorCapabilitiesVO.java @@ -59,6 +59,9 @@ public class HypervisorCapabilitiesVO implements HypervisorCapabilities { @Column(name="max_data_volumes_limit") private Integer maxDataVolumesLimit; + @Column(name="max_hosts_per_cluster") + private Integer maxHostsPerCluster; + protected HypervisorCapabilitiesVO() { this.uuid = UUID.randomUUID().toString(); } @@ -157,6 +160,15 @@ public class HypervisorCapabilitiesVO implements HypervisorCapabilities { this.maxDataVolumesLimit = maxDataVolumesLimit; } + @Override + public Integer getMaxHostsPerCluster() { + return maxHostsPerCluster; + } + + public void setMaxHostsPerCluster(Integer maxHostsPerCluster) { + this.maxHostsPerCluster = maxHostsPerCluster; + } + @Override public boolean equals(Object obj) { if (obj instanceof HypervisorCapabilitiesVO) { diff --git a/core/src/com/cloud/resource/storage/PrimaryStorageHeadResource.java b/core/src/com/cloud/resource/storage/PrimaryStorageHeadResource.java deleted file mode 100644 index 65297a39b96..00000000000 --- a/core/src/com/cloud/resource/storage/PrimaryStorageHeadResource.java +++ /dev/null @@ -1,52 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.resource.storage; - -import com.cloud.agent.api.storage.CreateAnswer; -import com.cloud.agent.api.storage.CreateCommand; -import com.cloud.agent.api.storage.DestroyAnswer; -import com.cloud.agent.api.storage.DestroyCommand; -import com.cloud.agent.api.storage.DownloadAnswer; -import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; -import com.cloud.resource.ServerResource; - -/** - * a primary storage. - * - */ -public interface PrimaryStorageHeadResource extends ServerResource { - /** - * Downloads the template to the primary storage. - * @param cmd - * @return - */ - DownloadAnswer execute(PrimaryStorageDownloadCommand cmd); - - /** - * Creates volumes for the VM. - * @param cmd - * @return - */ - CreateAnswer execute(CreateCommand cmd); - - /** - * Destroys volumes for the VM. - * @param cmd - * @return - */ - DestroyAnswer execute(DestroyCommand cmd); -} diff --git a/core/src/com/cloud/storage/DiskOfferingVO.java b/core/src/com/cloud/storage/DiskOfferingVO.java index 5f4f18bcd34..e4fc21c7c13 100755 --- a/core/src/com/cloud/storage/DiskOfferingVO.java +++ b/core/src/com/cloud/storage/DiskOfferingVO.java @@ -311,4 +311,8 @@ public class DiskOfferingVO implements DiskOffering { public int getSortKey() { return sortKey; } + + public void setRecreatable(boolean recreatable) { + this.recreatable = recreatable; + } } diff --git a/core/src/com/cloud/storage/SnapshotVO.java b/core/src/com/cloud/storage/SnapshotVO.java index 413083e01fa..78b96ec9779 100644 --- a/core/src/com/cloud/storage/SnapshotVO.java +++ b/core/src/com/cloud/storage/SnapshotVO.java @@ -31,7 +31,7 @@ public class SnapshotVO implements Snapshot { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private final long id = -1; + private long id; @Column(name="data_center_id") long dataCenterId; @@ -59,7 +59,7 @@ public class SnapshotVO implements Snapshot { @Expose @Column(name="status", updatable = true, nullable=false) @Enumerated(value=EnumType.STRING) - private State status; + private State state; @Column(name="snapshot_type") short snapshotType; @@ -117,7 +117,7 @@ public class SnapshotVO implements Snapshot { this.snapshotType = snapshotType; this.typeDescription = typeDescription; this.size = size; - this.status = State.Creating; + this.state = State.Allocated; this.prevSnapshotId = 0; this.hypervisorType = hypervisorType; this.version = "2.2"; @@ -175,7 +175,7 @@ public class SnapshotVO implements Snapshot { } @Override - public Type getType() { + public Type getRecurringType() { if (snapshotType < 0 || snapshotType >= Type.values().length) { return null; } @@ -245,11 +245,12 @@ public class SnapshotVO implements Snapshot { @Override public State getState() { - return status; + return state; } - public void setStatus(State status) { - this.status = status; + + public void setState(State state) { + this.state = state; } public String getBackupSnapshotId(){ diff --git a/core/src/com/cloud/storage/StoragePoolDiscoverer.java b/core/src/com/cloud/storage/StoragePoolDiscoverer.java index 816e899f941..c7dd362a5c3 100644 --- a/core/src/com/cloud/storage/StoragePoolDiscoverer.java +++ b/core/src/com/cloud/storage/StoragePoolDiscoverer.java @@ -19,6 +19,8 @@ package com.cloud.storage; import java.net.URI; import java.util.Map; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; + import com.cloud.exception.DiscoveryException; import com.cloud.utils.component.Adapter; diff --git a/core/src/com/cloud/storage/StoragePoolVO.java b/core/src/com/cloud/storage/StoragePoolVO.java deleted file mode 100644 index af6e4e2905c..00000000000 --- a/core/src/com/cloud/storage/StoragePoolVO.java +++ /dev/null @@ -1,346 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.storage; - -import java.util.Date; -import java.util.UUID; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.TableGenerator; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.persistence.Transient; - -import com.cloud.storage.Storage.StoragePoolType; -import com.cloud.utils.db.GenericDao; - -@Entity -@Table(name="storage_pool") -public class StoragePoolVO implements StoragePool { - @Id - @TableGenerator(name="storage_pool_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="storage_pool_seq", allocationSize=1) - @Column(name="id", updatable=false, nullable = false) - private long id; - - @Column(name="name", updatable=false, nullable=false, length=255) - private String name = null; - - @Column(name="uuid", length=255) - private String uuid = null; - - @Column(name="pool_type", updatable=false, nullable=false, length=32) - @Enumerated(value=EnumType.STRING) - private StoragePoolType poolType; - - @Column(name=GenericDao.CREATED_COLUMN) - Date created; - - @Column(name=GenericDao.REMOVED_COLUMN) - private Date removed; - - @Column(name="update_time", updatable=true) - @Temporal(value=TemporalType.TIMESTAMP) - private Date updateTime; - - @Column(name="data_center_id", updatable=true, nullable=false) - private long dataCenterId; - - @Column(name="pod_id", updatable=true) - private Long podId; - - @Column(name="available_bytes", updatable=true, nullable=true) - private long availableBytes; - - @Column(name="capacity_bytes", updatable=true, nullable=true) - private long capacityBytes; - - @Column(name="status", updatable=true, nullable=false) - @Enumerated(value=EnumType.STRING) - private StoragePoolStatus status; - - // TODO, disable persisency of storageProvider and storageType, javelin new code not - // sync with the schema! - - // @Column(name="storage_provider", updatable=true, nullable=false) - @Transient private String storageProvider; - - // Column(name="storage_type", nullable=false) - @Transient private String storageType; - - @Override - public long getId() { - return id; - } - - @Override - public StoragePoolStatus getStatus() { - return status; - } - - public StoragePoolVO() { - // TODO Auto-generated constructor stub - } - - @Override - public String getName() { - return name; - } - - @Override - public String getUuid() { - return uuid; - } - - @Override - public StoragePoolType getPoolType() { - return poolType; - } - - @Override - public Date getCreated() { - return created; - } - - public Date getRemoved() { - return removed; - } - - @Override - public Date getUpdateTime() { - return updateTime; - } - - @Override - public long getDataCenterId() { - return dataCenterId; - } - - @Override - public long getAvailableBytes() { - return availableBytes; - } - - @Override - public String getStorageProvider() { - return storageProvider; - } - - public void setStorageProvider(String provider) { - storageProvider = provider; - } - - @Override - public String getStorageType() { - return storageType; - } - - public void setStorageType(String type) { - storageType = type; - } - - @Override - public long getCapacityBytes() { - return capacityBytes; - } - - public void setAvailableBytes(long available) { - availableBytes = available; - } - - public void setCapacityBytes(long capacity) { - capacityBytes = capacity; - } - - @Column(name="host_address") - private String hostAddress; - - @Column(name="path") - private String path; - - @Column(name="port") - private int port; - - @Column(name="user_info") - private String userInfo; - - @Column(name="cluster_id") - private Long clusterId; - - - @Override - public Long getClusterId() { - return clusterId; - } - - public void setClusterId(Long clusterId) { - this.clusterId = clusterId; - } - - @Override - public String getHostAddress() { - return hostAddress; - } - - @Override - public String getPath() { - return path; - } - - @Override - public String getUserInfo() { - return userInfo; - } - - public StoragePoolVO(long poolId, String name, String uuid, StoragePoolType type, - long dataCenterId, Long podId, long availableBytes, long capacityBytes, String hostAddress, int port, String hostPath) { - this.name = name; - this.id = poolId; - this.uuid = uuid; - this.poolType = type; - this.dataCenterId = dataCenterId; - this.availableBytes = availableBytes; - this.capacityBytes = capacityBytes; - this.hostAddress = hostAddress; - this.path = hostPath; - this.port = port; - this.podId = podId; - this.setStatus(StoragePoolStatus.Creating); - } - - public StoragePoolVO(StoragePoolVO that) { - this(that.id, that.name, that.uuid, that.poolType, that.dataCenterId, that.podId, that.availableBytes, that.capacityBytes, that.hostAddress, that.port, that.path); - } - - public StoragePoolVO(StoragePoolType type, String hostAddress, int port, String path) { - this.poolType = type; - this.hostAddress = hostAddress; - this.port = port; - this.path = path; - this.setStatus(StoragePoolStatus.Creating); - this.uuid = UUID.randomUUID().toString(); - } - - public StoragePoolVO(StoragePoolType type, String hostAddress, int port, String path, String userInfo) { - this.poolType = type; - this.hostAddress = hostAddress; - this.port = port; - this.path = path; - this.userInfo = userInfo; - this.setStatus(StoragePoolStatus.Creating); - this.uuid = UUID.randomUUID().toString(); - } - - public void setStatus(StoragePoolStatus status) - { - this.status = status; - } - - public void setId(long id) { - this.id = id; - } - - public void setDataCenterId(long dcId) { - this.dataCenterId = dcId; - } - - public void setPodId(Long podId) { - this.podId = podId; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - public void setPath(String path) { - this.path = path; - } - - public void setUserInfo(String userInfo) { - this.userInfo = userInfo; - } - - @Override - public int getPort() { - return port; - } - - @Override - public boolean isShared() { - return poolType.isShared(); - } - - @Override - public boolean isLocal() { - return !poolType.isShared(); - } - - @Transient - public String toUri() { - /* - URI uri = new URI(); - try { - if (type == StoragePoolType.Filesystem) { - uri.setScheme("file"); - } else if (type == StoragePoolType.NetworkFilesystem) { - uri.setScheme("nfs"); - } else if (type == StoragePoolType.IscsiLUN) { - } - } catch (MalformedURIException e) { - throw new VmopsRuntimeException("Unable to form the uri " + id); - } - return uri.toString(); - */ - return null; - } - - @Override - public Long getPodId() { - return podId; - } - - public void setName(String name) { - this.name = name; - } - - public boolean isInMaintenance() { - return status == StoragePoolStatus.PrepareForMaintenance || status == StoragePoolStatus.Maintenance || status == StoragePoolStatus.ErrorInMaintenance || removed != null; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof StoragePoolVO) || obj == null) { - return false; - } - StoragePoolVO that = (StoragePoolVO)obj; - return this.id == that.id; - } - - @Override - public int hashCode() { - return new Long(id).hashCode(); - } - - @Override - public String toString() { - return new StringBuilder("Pool[").append(id).append("|").append(poolType).append("]").toString(); - } -} diff --git a/core/src/com/cloud/storage/VMTemplateHostVO.java b/core/src/com/cloud/storage/VMTemplateHostVO.java index 9eae1a00303..b8dfc41d51b 100755 --- a/core/src/com/cloud/storage/VMTemplateHostVO.java +++ b/core/src/com/cloud/storage/VMTemplateHostVO.java @@ -29,8 +29,10 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; + import com.cloud.utils.db.GenericDaoBase; -import org.apache.cloudstack.api.InternalIdentity; /** * Join table for storage hosts and templates @@ -38,7 +40,7 @@ import org.apache.cloudstack.api.InternalIdentity; */ @Entity @Table(name="template_host_ref") -public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc { +public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc, DataObjectInStore { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) Long id; @@ -90,6 +92,18 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc { @Column(name="destroyed") boolean destroyed = false; + @Column(name="update_count", updatable = true, nullable=false) + protected long updatedCount; + + @Column(name = "updated") + @Temporal(value = TemporalType.TIMESTAMP) + Date updated; + + @Column(name = "state") + @Enumerated(EnumType.STRING) + ObjectInDataStoreStateMachine.State state; + + @Override public String getInstallPath() { return installPath; @@ -162,6 +176,7 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc { super(); this.hostId = hostId; this.templateId = templateId; + this.state = ObjectInDataStoreStateMachine.State.Allocated; } public VMTemplateHostVO(long hostId, long templateId, Date lastUpdated, @@ -282,4 +297,26 @@ public class VMTemplateHostVO implements VMTemplateStorageResourceAssoc { return new StringBuilder("TmplHost[").append(id).append("-").append(templateId).append("-").append(hostId).append(installPath).append("]").toString(); } + @Override + public ObjectInDataStoreStateMachine.State getState() { + // TODO Auto-generated method stub + return this.state; + } + + public long getUpdatedCount() { + return this.updatedCount; + } + + public void incrUpdatedCount() { + this.updatedCount++; + } + + public void decrUpdatedCount() { + this.updatedCount--; + } + + public Date getUpdated() { + return updated; + } + } diff --git a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java index 32c9dd2ece5..9b761764359 100644 --- a/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java +++ b/core/src/com/cloud/storage/VMTemplateStoragePoolVO.java @@ -29,8 +29,11 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; + import com.cloud.utils.db.GenericDaoBase; -import org.apache.cloudstack.api.InternalIdentity; /** * Join table for storage pools and templates @@ -38,7 +41,7 @@ import org.apache.cloudstack.api.InternalIdentity; */ @Entity @Table(name="template_spool_ref") -public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc { +public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc, DataObjectInStore { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) long id; @@ -69,7 +72,18 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc { @Column (name="template_size") long templateSize; @Column (name="marked_for_gc") boolean markedForGC; - + + @Column(name="update_count", updatable = true, nullable=false) + protected long updatedCount; + + @Column(name = "updated") + @Temporal(value = TemporalType.TIMESTAMP) + Date updated; + + @Column(name = "state") + @Enumerated(EnumType.STRING) + ObjectInDataStoreStateMachine.State state; + @Override public String getInstallPath() { return installPath; @@ -148,6 +162,7 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc { this.poolId = poolId; this.templateId = templateId; this.downloadState = Status.NOT_DOWNLOADED; + this.state = ObjectInDataStoreStateMachine.State.Allocated; this.markedForGC = false; } @@ -235,4 +250,26 @@ public class VMTemplateStoragePoolVO implements VMTemplateStorageResourceAssoc { return new StringBuilder("TmplPool[").append(id).append("-").append(templateId).append("-").append("poolId").append("-").append(installPath).append("]").toString(); } + @Override + public State getState() { + return this.state; + } + + public long getUpdatedCount() { + return this.updatedCount; + } + + public void incrUpdatedCount() { + this.updatedCount++; + } + + public void decrUpdatedCount() { + this.updatedCount--; + } + + public Date getUpdated() { + return updated; + } + + } diff --git a/core/src/com/cloud/storage/VMTemplateVO.java b/core/src/com/cloud/storage/VMTemplateVO.java index fcfdd0067e1..e643d75bf1e 100755 --- a/core/src/com/cloud/storage/VMTemplateVO.java +++ b/core/src/com/cloud/storage/VMTemplateVO.java @@ -31,17 +31,18 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; -import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState; + import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.TemplateType; import com.cloud.template.VirtualMachineTemplate; import com.cloud.utils.db.GenericDao; -import org.apache.cloudstack.api.InternalIdentity; +import com.cloud.utils.fsm.StateObject; @Entity @Table(name="vm_template") -public class VMTemplateVO implements VirtualMachineTemplate { +public class VMTemplateVO implements VirtualMachineTemplate, StateObject { @Id @TableGenerator(name="vm_template_sq", table="sequence", pkColumnName="name", valueColumnName="value", pkColumnValue="vm_template_seq", allocationSize=1) @Column(name="id", nullable = false) @@ -127,6 +128,22 @@ public class VMTemplateVO implements VirtualMachineTemplate { @Column(name="enable_sshkey") private boolean enableSshKey; + + @Column(name = "image_data_store_id") + private long imageDataStoreId; + + @Column(name = "size") + private Long size; + + @Column(name = "state") + private TemplateState state; + + @Column(name="update_count", updatable = true) + protected long updatedCount; + + @Column(name = "updated") + @Temporal(value = TemporalType.TIMESTAMP) + Date updated; @Transient Map details; @@ -140,8 +157,9 @@ public class VMTemplateVO implements VirtualMachineTemplate { this.uniqueName = uniqueName; } - protected VMTemplateVO() { + public VMTemplateVO() { this.uuid = UUID.randomUUID().toString(); + this.state = TemplateState.Allocated; } /** @@ -150,12 +168,14 @@ public class VMTemplateVO implements VirtualMachineTemplate { public VMTemplateVO(long id, String name, ImageFormat format, boolean isPublic, boolean featured, boolean isExtractable, TemplateType type, String url, boolean requiresHvm, int bits, long accountId, String cksum, String displayText, boolean enablePassword, long guestOSId, boolean bootable, HypervisorType hyperType, Map details) { this(id, generateUniqueName(id, accountId, name), name, format, isPublic, featured, isExtractable, type, url, null, requiresHvm, bits, accountId, cksum, displayText, enablePassword, guestOSId, bootable, hyperType, details); this.uuid = UUID.randomUUID().toString(); + this.state = TemplateState.Allocated; } public VMTemplateVO(long id, String name, ImageFormat format, boolean isPublic, boolean featured, boolean isExtractable, TemplateType type, String url, boolean requiresHvm, int bits, long accountId, String cksum, String displayText, boolean enablePassword, long guestOSId, boolean bootable, HypervisorType hyperType, String templateTag, Map details, boolean sshKeyEnabled) { this(id, name, format, isPublic, featured, isExtractable, type, url, requiresHvm, bits, accountId, cksum, displayText, enablePassword, guestOSId, bootable, hyperType, details); this.templateTag = templateTag; this.uuid = UUID.randomUUID().toString(); + this.state = TemplateState.Allocated; this.enableSshKey = sshKeyEnabled; } @@ -179,6 +199,7 @@ public class VMTemplateVO implements VirtualMachineTemplate { this.bootable = bootable; this.hypervisorType = hyperType; this.uuid = UUID.randomUUID().toString(); + this.state = TemplateState.Allocated; } // Has an extra attribute - isExtractable @@ -468,5 +489,46 @@ public class VMTemplateVO implements VirtualMachineTemplate { public void setEnableSshKey(boolean enable) { enableSshKey = enable; } + + public Long getImageDataStoreId() { + return this.imageDataStoreId; + } + + public void setImageDataStoreId(long dataStoreId) { + this.imageDataStoreId = dataStoreId; + } + + public void setSize(Long size) { + this.size = size; + } + + public Long getSize() { + return this.size; + } + + public TemplateState getState() { + return this.state; + } + + public long getUpdatedCount() { + return this.updatedCount; + } + + public void incrUpdatedCount() { + this.updatedCount++; + } + + public void decrUpdatedCount() { + this.updatedCount--; + } + + public Date getUpdated() { + return updated; + } + + public void setUpdated(Date updated) { + this.updated = updated; + } + } diff --git a/core/src/com/cloud/storage/VolumeHostVO.java b/core/src/com/cloud/storage/VolumeHostVO.java index f4fc7abc4ee..40bae499122 100755 --- a/core/src/com/cloud/storage/VolumeHostVO.java +++ b/core/src/com/cloud/storage/VolumeHostVO.java @@ -29,11 +29,13 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; -//import com.cloud.storage.VMVolumeStorageResourceAssoc.Status; +import org.apache.cloudstack.api.InternalIdentity; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; + import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.utils.db.GenericDaoBase; -import org.apache.cloudstack.api.InternalIdentity; /** * Join table for storage hosts and volumes @@ -41,7 +43,7 @@ import org.apache.cloudstack.api.InternalIdentity; */ @Entity @Table(name="volume_host_ref") -public class VolumeHostVO implements InternalIdentity { +public class VolumeHostVO implements InternalIdentity, DataObjectInStore { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) Long id; @@ -99,6 +101,16 @@ public class VolumeHostVO implements InternalIdentity { @Column(name="destroyed") boolean destroyed = false; + @Column(name="update_count", updatable = true, nullable=false) + protected long updatedCount; + + @Column(name = "updated") + @Temporal(value = TemporalType.TIMESTAMP) + Date updated; + + @Column(name = "state") + @Enumerated(EnumType.STRING) + ObjectInDataStoreStateMachine.State state; public String getInstallPath() { return installPath; @@ -187,6 +199,7 @@ public class VolumeHostVO implements InternalIdentity { super(); this.hostId = hostId; this.volumeId = volumeId; + this.state = ObjectInDataStoreStateMachine.State.Allocated; } public VolumeHostVO(long hostId, long volumeId, long zoneId, Date lastUpdated, @@ -308,5 +321,27 @@ public class VolumeHostVO implements InternalIdentity { public String toString() { return new StringBuilder("VolumeHost[").append(id).append("-").append(volumeId).append("-").append(hostId).append(installPath).append("]").toString(); } + + public long getUpdatedCount() { + return this.updatedCount; + } + + public void incrUpdatedCount() { + this.updatedCount++; + } + + public void decrUpdatedCount() { + this.updatedCount--; + } + + public Date getUpdated() { + return updated; + } + + @Override + public ObjectInDataStoreStateMachine.State getState() { + // TODO Auto-generated method stub + return this.state; + } } diff --git a/core/src/com/cloud/storage/VolumeVO.java b/core/src/com/cloud/storage/VolumeVO.java index defc841e1e3..a287c26348b 100755 --- a/core/src/com/cloud/storage/VolumeVO.java +++ b/core/src/com/cloud/storage/VolumeVO.java @@ -32,11 +32,9 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; -import org.apache.cloudstack.api.Identity; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.utils.NumbersUtil; import com.cloud.utils.db.GenericDao; -import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name = "volumes") @@ -69,7 +67,7 @@ public class VolumeVO implements Volume { Long deviceId = null; @Column(name = "size") - long size; + Long size; @Column(name = "folder") String folder; @@ -257,11 +255,11 @@ public class VolumeVO implements Volume { } @Override - public long getSize() { + public Long getSize() { return size; } - public void setSize(long size) { + public void setSize(Long size) { this.size = size; } diff --git a/core/src/com/cloud/storage/template/RawImageProcessor.java b/core/src/com/cloud/storage/template/RawImageProcessor.java index 7833eabcabf..a002df5c9b2 100644 --- a/core/src/com/cloud/storage/template/RawImageProcessor.java +++ b/core/src/com/cloud/storage/template/RawImageProcessor.java @@ -57,6 +57,7 @@ public class RawImageProcessor extends AdapterBase implements Processor { String imgPath = templatePath + File.separator + templateName + "." + ImageFormat.RAW.getFileExtension(); if (!_storage.exists(imgPath)) { s_logger.debug("Unable to find raw image:" + imgPath); + return null; } FormatInfo info = new FormatInfo(); info.format = ImageFormat.RAW; diff --git a/core/src/com/cloud/vm/UserVmCloneSettingVO.java b/core/src/com/cloud/vm/UserVmCloneSettingVO.java new file mode 100644 index 00000000000..24bb1e87c3b --- /dev/null +++ b/core/src/com/cloud/vm/UserVmCloneSettingVO.java @@ -0,0 +1,50 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.vm; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +@Entity +@Table(name="user_vm_clone_setting") +public class UserVmCloneSettingVO { + + @Column(name="vm_id") + private Long vmId; + + @Column(name="clone_type") + private String cloneType; + + public UserVmCloneSettingVO() { + + } + + public UserVmCloneSettingVO(long id, + String cloneType) { + this.vmId = id; + this.cloneType = cloneType; + } + + public long getVmId() { + return this.vmId; + } + + public String getCloneType() { + return this.cloneType; + } +} diff --git a/core/src/com/cloud/vm/VirtualNetwork.java b/core/src/com/cloud/vm/VirtualNetwork.java deleted file mode 100644 index ace3b80769f..00000000000 --- a/core/src/com/cloud/vm/VirtualNetwork.java +++ /dev/null @@ -1,72 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.vm; - -import com.cloud.network.Networks.IsolationType; -import com.cloud.network.Networks.Mode; - -/** - * VirtualNetwork describes from a management level the - * machine. - */ -public class VirtualNetwork { - /** - * The gateway for this network. - */ - public String gateway; - - /** - * Netmask - */ - public String netmask; - - /** - * ip address. null if mode is DHCP. - */ - public String ip; - - /** - * Mac Address. - */ - public String mac; - - /** - * rate limit on this network. -1 if no limit. - */ - public long rate; - - /** - * tag for virtualization. - */ - public String tag; - - /** - * mode to acquire ip address. - */ - public Mode mode; - - /** - * Isolation method for networking. - */ - public IsolationType method; - - public boolean firewalled; - - public int[] openPorts; - - public int[] closedPorts; -} diff --git a/core/src/com/cloud/vm/snapshot/VMSnapshotVO.java b/core/src/com/cloud/vm/snapshot/VMSnapshotVO.java new file mode 100644 index 00000000000..03d4945fda0 --- /dev/null +++ b/core/src/com/cloud/vm/snapshot/VMSnapshotVO.java @@ -0,0 +1,224 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.vm.snapshot; + +import java.util.Date; +import java.util.UUID; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.TableGenerator; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import com.cloud.utils.db.GenericDao; + +@Entity +@Table(name = "vm_snapshots") +public class VMSnapshotVO implements VMSnapshot { + @Id + @TableGenerator(name = "vm_snapshots_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "vm_snapshots_seq", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.TABLE) + @Column(name = "id") + long id; + + @Column(name = "uuid") + String uuid = UUID.randomUUID().toString(); + + @Column(name = "name") + String name; + + @Column(name = "display_name") + String displayName; + + @Column(name = "description") + String description; + + @Column(name = "vm_id") + long vmId; + + @Column(name = "account_id") + long accountId; + + @Column(name = "domain_id") + long domainId; + + @Column(name = "vm_snapshot_type") + @Enumerated(EnumType.STRING) + VMSnapshot.Type type; + + @Column(name = "state", updatable = true, nullable = false) + @Enumerated(value = EnumType.STRING) + private State state; + + @Column(name = GenericDao.CREATED_COLUMN) + Date created; + + @Column(name = GenericDao.REMOVED_COLUMN) + Date removed; + + @Column(name = "current") + Boolean current; + + @Column(name = "parent") + Long parent; + + @Column(name = "updated") + @Temporal(value = TemporalType.TIMESTAMP) + Date updated; + + @Column(name="update_count", updatable = true, nullable=false) + protected long updatedCount; + + public Long getParent() { + return parent; + } + + public void setParent(Long parent) { + this.parent = parent; + } + + public VMSnapshotVO() { + + } + + public Date getRemoved() { + return removed; + } + + public VMSnapshotVO(Long accountId, Long domainId, Long vmId, + String description, String vmSnapshotName, String vsDisplayName, + Long serviceOfferingId, Type type, Boolean current) { + this.accountId = accountId; + this.domainId = domainId; + this.vmId = vmId; + this.state = State.Allocated; + this.description = description; + this.name = vmSnapshotName; + this.displayName = vsDisplayName; + this.type = type; + this.current = current; + } + + public String getDescription() { + return description; + } + + @Override + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + @Override + public long getId() { + return id; + } + + @Override + public Long getVmId() { + return vmId; + } + + public void setVmId(Long vmId) { + this.vmId = vmId; + } + + @Override + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public State getState() { + return state; + } + + public void setState(State state) { + this.state = state; + } + + @Override + public String getUuid() { + return uuid; + } + + @Override + public long getAccountId() { + return accountId; + } + + @Override + public long getDomainId() { + return domainId; + } + + @Override + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public Boolean getCurrent() { + return current; + } + + public void setCurrent(Boolean current) { + this.current = current; + } + + @Override + public long getUpdatedCount() { + return updatedCount; + } + + @Override + public void incrUpdatedCount() { + this.updatedCount++; + } + + @Override + public Date getUpdated() { + return updated; + } + + @Override + public Type getType() { + return type; + } + + public void setRemoved(Date removed) { + this.removed = removed; + } +} diff --git a/debian/README b/debian/README deleted file mode 100644 index cbfbf1bb9d9..00000000000 --- a/debian/README +++ /dev/null @@ -1,6 +0,0 @@ -The Debian Package ----------------------------- - -This is part of the Cloud Stack collection of packages. - - -- Manuel Amador (Rudd-O) Thu, 25 Mar 2010 15:12:06 -0700 diff --git a/debian/changelog b/debian/changelog index c3243aad5e3..cbbaad32cad 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +cloudstack (4.1.0-incubating-0.0.snapshot) unstable; urgency=low + + * Incorporate incubating into version, remove epoch + + -- Noa Resare Tue, 05 Feb 2013 18:05:28 +0000 + cloud (1:4.0.0-1) unstable; urgency=low * Bumping the version to 4.0.0 diff --git a/debian/cloud-cli.install b/debian/cloud-cli.install deleted file mode 100644 index ce178461150..00000000000 --- a/debian/cloud-cli.install +++ /dev/null @@ -1,21 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/etc/cloud/cli/commands.xml -/usr/bin/cloud-grab-dependent-library-versions -/usr/bin/cloud-tool -/usr/bin/cloudvoladm diff --git a/debian/cloud-client-ui.install b/debian/cloud-client-ui.install deleted file mode 100644 index ba1408afcc5..00000000000 --- a/debian/cloud-client-ui.install +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/usr/share/cloud/management/webapps/client/* - diff --git a/debian/cloud-client.config b/debian/cloud-client.config deleted file mode 100644 index 00ae6c00d2e..00000000000 --- a/debian/cloud-client.config +++ /dev/null @@ -1,17 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - diff --git a/debian/cloud-client.install b/debian/cloud-client.install deleted file mode 100644 index aadb145ae1c..00000000000 --- a/debian/cloud-client.install +++ /dev/null @@ -1,58 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/etc/cloud/management/catalina.policy -/etc/cloud/management/catalina.properties -/etc/cloud/management/commands.properties -/etc/cloud/management/components.xml -/etc/cloud/management/context.xml -/etc/cloud/management/db.properties -/etc/cloud/management/environment.properties -/etc/cloud/management/ehcache.xml -/etc/cloud/management/log4j-cloud.xml -/etc/cloud/management/logging.properties -/etc/cloud/management/server.xml -/etc/cloud/management/tomcat6.conf -/etc/cloud/management/classpath.conf -/etc/cloud/management/tomcat-users.xml -/etc/cloud/management/web.xml -/etc/cloud/management/server-nonssl.xml -/etc/cloud/management/tomcat6-nonssl.conf -/etc/cloud/management/virtualrouter_commands.properties -/etc/cloud/management/f5bigip_commands.properties -/etc/cloud/management/junipersrx_commands.properties -/etc/cloud/management/netscalerloadbalancer_commands.properties -/etc/cloud/management/cisconexusvsm_commands.properties -/etc/cloud/management/Catalina -/etc/cloud/management/Catalina/localhost -/etc/cloud/management/Catalina/localhost/client -/etc/init.d/cloud-management -/usr/share/cloud/management/bin -/usr/share/cloud/management/conf -/usr/share/cloud/management/lib -/usr/share/cloud/management/logs -/usr/share/cloud/management/temp -/usr/share/cloud/management/work -/var/cache/cloud/management -/var/cache/cloud/management/work -/var/cache/cloud/management/temp -/var/log/cloud/management -/var/lib/cloud/mnt -/var/lib/cloud/management -/usr/bin/cloud-setup-management -/usr/bin/cloud-update-xenserver-licenses -/etc/cloud/management/commands-ext.properties diff --git a/debian/cloud-client.postinst b/debian/cloud-client.postinst deleted file mode 100644 index 87c7610320c..00000000000 --- a/debian/cloud-client.postinst +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh -e -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -case "$1" in - configure) - if ! id cloud > /dev/null 2>&1 ; then - adduser --system --home /var/lib/cloud/management --no-create-home \ - --group --disabled-password --shell /bin/sh cloud - # update me in all the .postinst that you can find me in, as well - fi - - for i in /var/lib/cloud/mnt /var/cache/cloud/management \ - /var/cache/cloud/management/work /var/cache/cloud/management/temp \ - /var/log/cloud/management /etc/cloud/management/Catalina \ - /etc/cloud/management/Catalina/localhost /var/lib/cloud/management /etc/cloud/management/Catalina/localhost/client - do - chmod 0770 $i - chgrp cloud $i - done - - for i in /etc/cloud/management/db.properties - do - chmod 0640 $i - chgrp cloud $i - done - - if [ "$2" = "" ] ; then # no recently configured version, this is a first install - /usr/sbin/update-rc.d cloud-management defaults || true - fi - - ;; -esac - -#DEBHELPER# diff --git a/debian/cloud-core.install b/debian/cloud-core.install deleted file mode 100644 index 00a43d48259..00000000000 --- a/debian/cloud-core.install +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/usr/share/java/cloud-core.jar - diff --git a/debian/cloud-deps.install b/debian/cloud-deps.install deleted file mode 100644 index 74aade12543..00000000000 --- a/debian/cloud-deps.install +++ /dev/null @@ -1,34 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/usr/share/java/ehcache-1.5.0.jar -/usr/share/java/mail-1.4.jar -/usr/share/java/httpcore-4.0.jar -/usr/share/java/log4j-*.jar -/usr/share/java/apache-log4j-extras-1.1.jar -/usr/share/java/trilead-ssh2-build213-svnkit-1.3-patch.jar -/usr/share/java/xmlrpc-common-3.*.jar -/usr/share/java/xmlrpc-client-3.*.jar -/usr/share/java/jstl-1.2.jar -/usr/share/java/axis2-1.5.1.jar -/usr/share/java/wsdl4j-1.6.2.jar -/usr/share/java/bcprov-*.jar -/usr/share/java/jasypt-1.*.jar -/usr/share/java/ejb-api-3.0.jar -/usr/share/java/javax.persistence-2.0.0.jar -/usr/share/java/gson-1.7.1.jar -/usr/share/java/xapi-5.6.100-1-SNAPSHOT.jar diff --git a/debian/cloud-python.install b/debian/cloud-python.install deleted file mode 100644 index b8eac722a6d..00000000000 --- a/debian/cloud-python.install +++ /dev/null @@ -1,18 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/usr/lib/python*/dist-packages/cloud* diff --git a/debian/cloud-scripts.install b/debian/cloud-scripts.install deleted file mode 100644 index 5e8896d43a3..00000000000 --- a/debian/cloud-scripts.install +++ /dev/null @@ -1,27 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/usr/lib/cloud/common/scripts/installer/* -/usr/lib/cloud/common/scripts/network/* -/usr/lib/cloud/common/scripts/storage/* -/usr/lib/cloud/common/scripts/util/* -/usr/lib/cloud/common/scripts/vm/network/* -/usr/lib/cloud/common/scripts/vm/systemvm/* -/usr/lib/cloud/common/scripts/vm/pingtest.sh -/usr/lib/cloud/common/scripts/vm/hypervisor/kvm/* -/usr/lib/cloud/common/scripts/vm/hypervisor/versions.sh -/usr/lib/cloud/common/scripts/vm/hypervisor/xenserver/* diff --git a/debian/cloud-server.install b/debian/cloud-server.install deleted file mode 100644 index f792cc2f7cd..00000000000 --- a/debian/cloud-server.install +++ /dev/null @@ -1,32 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/usr/share/java/cloud-server.jar -/usr/share/java/cloud-ovm.jar -/etc/cloud/server/* -/usr/share/java/cloud-dp-user-concentrated-pod.jar -/usr/share/java/cloud-dp-user-dispersing.jar -/usr/share/java/cloud-host-allocator-random.jar -/usr/share/java/cloud-plugin-elb.jar -/usr/share/java/cloud-plugin-ovs.jar -/usr/share/java/cloud-plugin-nicira-nvp.jar -/usr/share/java/cloud-plugin-bigswitch-vns.jar -/usr/share/java/cloud-storage-allocator-random.jar -/usr/share/java/cloud-user-authenticator-ldap.jar -/usr/share/java/cloud-user-authenticator-md5.jar -/usr/share/java/cloud-user-authenticator-plaintext.jar -/usr/share/java/cloud-plugin-hypervisor-xen.jar diff --git a/debian/cloud-system-iso.install b/debian/cloud-system-iso.install deleted file mode 100644 index 5a0b6364f4c..00000000000 --- a/debian/cloud-system-iso.install +++ /dev/null @@ -1,18 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/usr/lib/cloud/common/vms/systemvm.iso diff --git a/debian/cloud-usage.install b/debian/cloud-usage.install deleted file mode 100644 index 22f58344102..00000000000 --- a/debian/cloud-usage.install +++ /dev/null @@ -1,23 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/usr/share/java/cloud-usage.jar -/etc/init.d/cloud-usage -/var/log/cloud/usage -/etc/cloud/usage/usage-components.xml -/etc/cloud/usage/log4j-cloud_usage.xml -/etc/cloud/usage/db.properties diff --git a/debian/cloud-utils.install b/debian/cloud-utils.install deleted file mode 100644 index 39c357a1fa6..00000000000 --- a/debian/cloud-utils.install +++ /dev/null @@ -1,22 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -/usr/share/java/cloud-utils.jar -/usr/share/java/cloud-api.jar -/usr/share/doc/cloud/version-info -/usr/bin/cloud-sccs -/usr/bin/cloud-gitrevs diff --git a/debian/cloud-agent.install b/debian/cloudstack-agent.install similarity index 77% rename from debian/cloud-agent.install rename to debian/cloudstack-agent.install index c67e90ab492..b1425717584 100644 --- a/debian/cloud-agent.install +++ b/debian/cloudstack-agent.install @@ -15,11 +15,12 @@ # specific language governing permissions and limitations # under the License. -/etc/cloud/agent/agent.properties -/etc/cloud/agent/developer.properties.template -/etc/cloud/agent/environment.properties -/etc/cloud/agent/log4j-cloud.xml -/etc/init.d/cloud-agent +/etc/cloudstack/agent/agent.properties +/etc/cloudstack/agent/environment.properties +/etc/cloudstack/agent/log4j-cloud.xml +/etc/init.d/cloudstack-agent /usr/bin/cloud-setup-agent /usr/bin/cloud-ssh -/var/log/cloud/agent +/var/log/cloudstack/agent +/usr/share/cloudstack-agent/lib/* +/usr/share/cloudstack-agent/plugins \ No newline at end of file diff --git a/debian/cloud-usage.postinst b/debian/cloudstack-agent.postinst similarity index 58% rename from debian/cloud-usage.postinst rename to debian/cloudstack-agent.postinst index 56f895df6e0..499ae6a695a 100644 --- a/debian/cloud-usage.postinst +++ b/debian/cloudstack-agent.postinst @@ -1,4 +1,5 @@ -#!/bin/sh -e +#!/bin/bash + # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -6,9 +7,9 @@ # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -16,32 +17,24 @@ # specific language governing permissions and limitations # under the License. +set -e + case "$1" in configure) + OLDCONFDIR="/etc/cloud/agent" + NEWCONFDIR="/etc/cloudstack/agent" + CONFFILES="agent.properties log4j.xml log4j-cloud.xml" - if ! id cloud > /dev/null 2>&1 ; then - adduser --system --home /var/lib/cloud/management --no-create-home \ - --group --disabled-password --shell /bin/sh cloud - # update me in cloud-client.postinst as well + # Copy old configuration so the admin doesn't have to do that + # Only do so when we are installing for the first time + if [ -z "$2" ]; then + for FILE in $CONFFILES; do + if [ -f "$OLDCONFDIR/${FILE}" ]; then + cp -a $OLDCONFDIR/$FILE $NEWCONFDIR/$FILE + fi + done fi - - for i in /var/log/cloud/usage - do - chmod 0770 $i - chgrp cloud $i - done - - for i in /etc/cloud/usage/db.properties - do - chmod 0640 $i - chgrp cloud $i - done - - if [ "$2" = "" ] ; then # no recently configured version, this is a first install - /usr/sbin/update-rc.d cloud-usage defaults || true - fi - - ;; + ;; esac -#DEBHELPER# +exit 0 \ No newline at end of file diff --git a/build/.gitignore b/debian/cloudstack-awsapi.install similarity index 96% rename from build/.gitignore rename to debian/cloudstack-awsapi.install index d11410db1a5..02ba66829ef 100644 --- a/build/.gitignore +++ b/debian/cloudstack-awsapi.install @@ -15,4 +15,4 @@ # specific language governing permissions and limitations # under the License. -/override +/var/log/cloudstack/awsapi \ No newline at end of file diff --git a/debian/cloud-cli.config b/debian/cloudstack-cli.install similarity index 97% rename from debian/cloud-cli.config rename to debian/cloudstack-cli.install index 00ae6c00d2e..287f9b1f651 100644 --- a/debian/cloud-cli.config +++ b/debian/cloudstack-cli.install @@ -13,5 +13,4 @@ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations -# under the License. - +# under the License. \ No newline at end of file diff --git a/build/build-cloud.properties b/debian/cloudstack-common.install old mode 100755 new mode 100644 similarity index 54% rename from build/build-cloud.properties rename to debian/cloudstack-common.install index be67a368fc0..9677f871cf0 --- a/build/build-cloud.properties +++ b/debian/cloudstack-common.install @@ -15,12 +15,17 @@ # specific language governing permissions and limitations # under the License. -debug=true -debuglevel=lines,source,vars -debug.jvmarg=-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -deprecation=off -build.type=developer -target.compat.version=1.6 -source.compat.version=1.6 -branding.name=default -ssvm.include.vmware.jar=true +/usr/share/cloudstack-common/vms/systemvm.iso +/usr/share/cloudstack-common/scripts/installer/* +/usr/share/cloudstack-common/scripts/network/* +/usr/share/cloudstack-common/scripts/storage/* +/usr/share/cloudstack-common/scripts/util/* +/usr/share/cloudstack-common/scripts/vm/network/* +/usr/share/cloudstack-common/scripts/vm/systemvm/* +/usr/share/cloudstack-common/scripts/vm/pingtest.sh +/usr/share/cloudstack-common/scripts/vm/hypervisor/kvm/* +/usr/share/cloudstack-common/scripts/vm/hypervisor/versions.sh +/usr/share/cloudstack-common/scripts/vm/hypervisor/xenserver/* +/usr/bin/cloud-set-guest-password +/usr/bin/cloud-set-guest-sshkey +/usr/lib/python2.?/*-packages/* diff --git a/debian/cloud-management.config b/debian/cloudstack-docs.install similarity index 97% rename from debian/cloud-management.config rename to debian/cloudstack-docs.install index 00ae6c00d2e..287f9b1f651 100644 --- a/debian/cloud-management.config +++ b/debian/cloudstack-docs.install @@ -13,5 +13,4 @@ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations -# under the License. - +# under the License. \ No newline at end of file diff --git a/debian/cloud-setup.install b/debian/cloudstack-management.install similarity index 68% rename from debian/cloud-setup.install rename to debian/cloudstack-management.install index 5c37c64920d..12478e132a1 100644 --- a/debian/cloud-setup.install +++ b/debian/cloudstack-management.install @@ -15,11 +15,17 @@ # specific language governing permissions and limitations # under the License. +/etc/cloudstack/server/* +/etc/cloudstack/management/* +/etc/init.d/cloudstack-management +/var/cache/cloudstack/management +/var/cache/cloudstack/management/work +/var/cache/cloudstack/management/temp +/var/log/cloudstack/management +/var/lib/cloudstack/mnt +/var/lib/cloudstack/management +/usr/bin/cloud-update-xenserver-licenses +/usr/bin/cloud-setup-management /usr/bin/cloud-setup-databases /usr/bin/cloud-migrate-databases -/usr/bin/cloud-set-guest-password -/usr/bin/cloud-set-guest-sshkey -/usr/share/cloud/setup/*.sql -/usr/share/cloud/setup/*.sh -/usr/share/cloud/setup/server-setup.xml -/usr/share/cloud/setup/db/*.sql +/usr/share/cloudstack-management/* diff --git a/debian/cloud-agent.postinst b/debian/cloudstack-management.postinst similarity index 72% rename from debian/cloud-agent.postinst rename to debian/cloudstack-management.postinst index f022f6d16bc..5b6b4b351c3 100644 --- a/debian/cloud-agent.postinst +++ b/debian/cloudstack-management.postinst @@ -16,19 +16,11 @@ # specific language governing permissions and limitations # under the License. -case "$1" in - configure) - - for i in /var/log/cloud/agent - do - chmod 0770 $i - done - - if [ "$2" = "" ] ; then # no recently configured version, this is a first install - /usr/sbin/update-rc.d cloud-agent defaults || true - fi - - ;; -esac - -#DEBHELPER# +if [ "$1" = configure ]; then + if ! getent passwd cloud >/dev/null; then + adduser --quiet --system --group --no-create-home --home /var/lib/cloudstack/management cloud + else + usermod -m /var/lib/cloudstack/management cloud + fi + chown cloud /var/log/cloudstack/management +fi diff --git a/debian/cloud-agent.config b/debian/cloudstack-usage.install similarity index 85% rename from debian/cloud-agent.config rename to debian/cloudstack-usage.install index 00ae6c00d2e..53f2a56afa3 100644 --- a/debian/cloud-agent.config +++ b/debian/cloudstack-usage.install @@ -5,9 +5,9 @@ # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -15,3 +15,7 @@ # specific language governing permissions and limitations # under the License. +/usr/share/cloudstack-usage/lib/cloudstack-usage.jar +/etc/init.d/cloudstack-usage +/var/log/cloudstack/usage +/etc/cloudstack/usage/* diff --git a/debian/control b/debian/control index 380b2e4a78d..8f82fc3ab2f 100644 --- a/debian/control +++ b/debian/control @@ -1,118 +1,51 @@ -Source: cloud +Source: cloudstack Section: libs Priority: extra Maintainer: Wido den Hollander -Build-Depends: debhelper (>= 7), openjdk-6-jdk, tomcat6, libws-commons-util-java, libcommons-codec-java (>= 1.5), libcommons-httpclient-java (>= 3.1), libservlet2.5-java, genisoimage, python-mysqldb, maven3 | maven (>= 3), liblog4j1.2-java (>= 1.2.16) +Build-Depends: debhelper (>= 7), openjdk-6-jdk | openjdk-7-jdk, tomcat6, genisoimage, + python-mysqldb, maven3 | maven (>= 3), python (>= 2.6.6-3~) Standards-Version: 3.8.1 Homepage: http://www.cloudstack.org/ -Package: cloud-deps -Architecture: any -Depends: openjdk-6-jre, libcommons-codec-java (>= 1.5), libcommons-httpclient-java (>= 3.1) -Description: CloudStack library dependencies - This package contains a number of third-party dependencies - not shipped by distributions, required to run the CloudStack - Management Server. +Package: cloudstack-common +Architecture: all +Depends: bash, genisoimage +Conflicts: cloud-scripts, cloud-utils, cloud-system-iso, cloud-console-proxy, cloud-daemonize, cloud-deps, cloud-python, cloud-setup +Description: A common package which contains files which are shared by several CloudStack packages -Package: cloud-agent-deps -Architecture: any -Depends: openjdk-6-jre, cloud-deps (= ${source:Version}) -Description: CloudStack agent library dependencies - This package contains a number of third-party dependencies - not shipped by distributions, required to run the CloudStack - Agent. - -Package: cloud-utils -Architecture: any -Depends: openjdk-6-jre, python, libcglib-java (>= 2.2.2), libjsch-java (>= 0.1.42), libbackport-util-concurrent-java (>= 3.1), libcommons-dbcp-java (>= 1.4), libcommons-pool-java (>= 1.5.6) -Description: CloudStack utility library - The CloudStack utility libraries provide a set of Java classes used - in the CloudStack environment. - -Package: cloud-client-ui -Architecture: any -Depends: openjdk-6-jre, cloud-client (= ${source:Version}) -Description: CloudStack management server UI - The CloudStack management server is the central point of coordination, - management, and intelligence in the CloudStack Cloud Stack. This package - is a requirement of the cloud-client package, which installs the - CloudStack management server. - -Package: cloud-server -Architecture: any -Depends: openjdk-6-jre, cloud-utils (= ${source:Version}), cloud-core (= ${source:Version}), cloud-deps (= ${source:Version}), cloud-scripts (= ${source:Version}), libservlet2.5-java +Package: cloudstack-management +Architecture: all +Depends: cloudstack-common (= ${source:Version}), tomcat6, sysvinit-utils, chkconfig, sudo, jsvc, python-mysqldb, python-paramiko, augeas-tools +Conflicts: cloud-server, cloud-client, cloud-client-ui Description: CloudStack server library - The CloudStack server libraries provide a set of Java classes used - in the CloudStack management server. + The CloudStack management server -Package: cloud-scripts -Replaces: cloud-agent-scripts -Architecture: any -Depends: openjdk-6-jre, python, bash, bzip2, gzip, unzip, nfs-common, openssh-client -Description: CloudStack scripts - This package contains a number of scripts needed for the CloudStack Agent and Management Server. - Both the CloudStack Agent and Management server depend on this package - -Package: cloud-core -Architecture: any -Depends: openjdk-6-jre, cloud-utils (= ${source:Version}) -Description: CloudStack core library - The CloudStack core libraries provide a set of Java classes used - in the CloudStack Cloud Stack. - - -Package: cloud-client -Architecture: any -Depends: openjdk-6-jre, cloud-deps (= ${source:Version}), cloud-utils (= ${source:Version}), cloud-server (= ${source:Version}), cloud-client-ui (= ${source:Version}), cloud-setup (= ${source:Version}), cloud-python (= ${source:Version}), tomcat6, libws-commons-util-java, sysvinit-utils, chkconfig, sudo, jsvc, python-mysqldb, python-paramiko, augeas-tools, genisoimage, cloud-system-iso, libmysql-java (>= 5.1) -Description: CloudStack client - The CloudStack management server is the central point of coordination, - management, and intelligence in the CloudStack Cloud Stack. This package - is required for the management server to work. - -Package: cloud-setup -Architecture: any -Depends: openjdk-6-jre, python, cloud-utils (= ${source:Version}), cloud-deps (= ${source:Version}), cloud-server (= ${source:Version}), cloud-python (= ${source:Version}), python-mysqldb -Description: CloudStack client - The CloudStack setup tools let you set up your Management Server and Usage Server. - -Package: cloud-python -Architecture: any -Depends: python -Description: CloudStack Python library - The CloudStack Python library contains a few Python modules that the - CloudStack uses. - -Package: cloud-agent-libs -Architecture: any -Depends: openjdk-6-jre, cloud-utils (= ${source:Version}), cloud-core (= ${source:Version}), cloud-agent-deps (= ${source:Version}) -Description: CloudStack agent libraries - The CloudStack agent libraries are used by the Cloud Agent. - -Package: cloud-agent -Architecture: any -Depends: openjdk-6-jre, cloud-utils (= ${source:Version}), cloud-core (= ${source:Version}), cloud-agent-deps (= ${source:Version}), cloud-python (= ${source:Version}), cloud-agent-libs (= ${source:Version}), cloud-scripts (= ${source:Version}), cloud-system-iso (= ${source:Version}), libvirt0, sysvinit-utils, chkconfig, qemu-kvm, libvirt-bin, uuid-runtime, rsync, grep, iproute, ebtables, vlan, liblog4j1.2-java (>= 1.2.16), libjna-java, wget, jsvc, lsb-base (>= 3.2) +Package: cloudstack-agent +Architecture: all +Depends: openjdk-6-jre | openjdk-7-jre, cloudstack-common (= ${source:Version}), lsb-base (>= 3.2), libcommons-daemon-java, libjna-java, openssh-client, libvirt0, sysvinit-utils, chkconfig, qemu-kvm, libvirt-bin, uuid-runtime, rsync, grep, iproute, perl-base, perl-modules, ebtables, vlan, wget, jsvc +Conflicts: cloud-agent, cloud-agent-libs, cloud-agent-deps, cloud-agent-scripts Description: CloudStack agent The CloudStack agent is in charge of managing shared computing resources in a CloudStack powered cloud. Install this package if this computer will participate in your cloud as a KVM HyperVisor. -Package: cloud-system-iso -Architecture: any -Description: CloudStack system iso - The CloudStack agent is in charge of managing shared computing resources in - a CloudStack powered cloud. Install this package if this computer - will participate in your cloud. - -Package: cloud-usage -Architecture: any -Depends: openjdk-6-jre, cloud-utils (= ${source:Version}), cloud-core (= ${source:Version}), cloud-deps (= ${source:Version}), cloud-server (= ${source:Version}), cloud-setup (= ${source:Version}), cloud-client (= ${source:Version}), jsvc +Package: cloudstack-usage +Architecture: all +Depends: openjdk-6-jre | openjdk-7-jre, cloudstack-common (= ${source:Version}), jsvc Description: CloudStack usage monitor The CloudStack usage monitor provides usage accounting across the entire cloud for cloud operators to charge based on usage parameters. -Package: cloud-cli -Provides: cloud-cli -Architecture: any -Depends: openjdk-6-jre, cloud-utils (= ${source:Version}), cloud-core (= ${source:Version}), cloud-deps (= ${source:Version}), cloud-server (= ${source:Version}), cloud-setup (= ${source:Version}), cloud-client (= ${source:Version}) -Description: CloudStack commandline tool - The CloudStack commandline tool for invoking APi +Package: cloudstack-awsapi +Architecture: all +Depends: cloudstack-common (= ${source:Version}), cloudstack-management (= ${source:Version}) +Description: CloudStack Amazon EC2 API + +Package: cloudstack-cli +Architecture: all +Depends: cloudstack-common (= ${source:Version}) +Description: The CloudStack CLI called CloudMonkey + +Package: cloudstack-docs +Architecture: all +Description: The CloudStack documentation diff --git a/debian/rules b/debian/rules index 36b611ddc04..f0cb67f276a 100755 --- a/debian/rules +++ b/debian/rules @@ -10,6 +10,12 @@ # Modified to make a template file for a multi-binary package with separated # build-arch and build-indep targets by Bill Allombert 2001 +DEBVERS := $(shell dpkg-parsechangelog | sed -n -e 's/^Version: //p') +VERSION := $(shell echo '$(DEBVERS)' | sed -e 's/^[[:digit:]]*://' -e 's/[~-].*//') +PACKAGE = $(shell dh_listpackages|head -n 1|cut -d '-' -f 1) +SYSCONFDIR = "/etc" +DESTDIR = "debian/tmp" + # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 @@ -19,55 +25,119 @@ export DH_OPTIONS configure: configure-stamp configure-stamp: dh_testdir - cp packaging/debian/replace.properties build/replace.properties - echo VERSION=$VERSION >> build/replace.properties + cp packaging/debian/replace.properties replace.properties.tmp + echo VERSION=${VERSION} >> replace.properties.tmp touch configure-stamp -build: build-arch +build: build-indep -build-arch: build-arch-stamp -build-arch-stamp: configure-stamp - mvn package -Dsystemvm +build-indep: build-indep-stamp + +build-indep-stamp: configure + mvn package -DskipTests -Dsystemvm \ + -Dcs.replace.properties=replace.properties.tmp touch $@ clean: dh_testdir dh_testroot rm -f build-arch-stamp build-indep-stamp configure-stamp + rm -f replace.properties.tmp dh_clean install: dh_testdir dh_testroot dh_prep -s - mkdir -p debian/tmp/usr/bin - mkdir -p debian/tmp/usr/share/cloud/management - mkdir -p debian/tmp/var/log/cloud - mkdir debian/tmp/var/log/cloud/managament - mkdir debian/tmp/var/log/cloud/awsapi - mkdir debian/tmp/var/log/cloud/agent - mkdir debian/tmp/var/log/cloud/ipallocator - mkdir debian/tmp/var/log/cloud/usage - mkdir -p debian/tmp/etc/cloud - mkdir debian/tmp/etc/cloud/agent - mkdir debian/tmp/etc/cloud/server - mkdir debian/tmp/etc/cloud/management - mkdir debian/tmp/etc/cloud/usage - mkdir -p debian/tmp/var/cache/cloud - mkdir debian/tmp/var/cache/cloud/management - mkdir -p debian/tmp/usr/share/cloud - mkdir debian/tmp/usr/share/cloud/setup - mkdir -p debian/tmp/usr/share/cloud/management/webapps/client - - cp -r client/target/utilities/scripts/db/* debian/tmp/usr/share/cloud/setup/ - cp -r client/target/cloud-client-ui-4.1.0-SNAPSHOT/* debian/tmp/usr/share/cloud/management/webapps/client/ - dh_installdirs -s - dh_install -s -binary: binary-common -binary-common: - dh_testdir - dh_testroot + # Common packages + mkdir -p $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE) + mkdir -p $(DESTDIR)/$(SYSCONFDIR)/init.d + mkdir -p $(DESTDIR)/var/cache/$(PACKAGE) + mkdir -p $(DESTDIR)/var/log/$(PACKAGE) + mkdir -p $(DESTDIR)/var/lib/$(PACKAGE) + mkdir -p $(DESTDIR)/usr/bin + mkdir -p $(DESTDIR)/usr/share + + # cloudstack-agent + mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/agent + mkdir $(DESTDIR)/var/log/$(PACKAGE)/agent + mkdir $(DESTDIR)/usr/share/$(PACKAGE)-agent + mkdir $(DESTDIR)/usr/share/$(PACKAGE)-agent/plugins + install -D agent/target/cloud-agent-4.2.0-SNAPSHOT.jar $(DESTDIR)/usr/share/$(PACKAGE)-agent/lib/$(PACKAGE)-agent.jar + install -D plugins/hypervisors/kvm/target/cloud-plugin-hypervisor-kvm-4.2.0-SNAPSHOT.jar $(DESTDIR)/usr/share/$(PACKAGE)-agent/lib/ + install -D plugins/hypervisors/kvm/target/dependencies/* $(DESTDIR)/usr/share/$(PACKAGE)-agent/lib/ + install -D packaging/debian/init/cloud-agent $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-agent + install -D agent/bindir/cloud-setup-agent.in $(DESTDIR)/usr/bin/cloud-setup-agent + install -D agent/bindir/cloud-ssh.in $(DESTDIR)/usr/bin/cloud-ssh + install -D agent/target/transformed/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/agent + + # cloudstack-management + mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/server + mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management + mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-management + mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-management/webapps/client + mkdir $(DESTDIR)/usr/share/$(PACKAGE)-management/setup + mkdir $(DESTDIR)/var/log/$(PACKAGE)/management + mkdir $(DESTDIR)/var/cache/$(PACKAGE)/management + mkdir $(DESTDIR)/var/cache/$(PACKAGE)/management/work + mkdir $(DESTDIR)/var/cache/$(PACKAGE)/management/temp + mkdir $(DESTDIR)/var/log/$(PACKAGE)/ipallocator + mkdir $(DESTDIR)/var/lib/$(PACKAGE)/management + mkdir $(DESTDIR)/var/lib/$(PACKAGE)/mnt + cp -r client/target/utilities/scripts/db/* $(DESTDIR)/usr/share/$(PACKAGE)-management/setup/ + cp -r client/target/cloud-client-ui-4.2.0-SNAPSHOT/* $(DESTDIR)/usr/share/$(PACKAGE)-management/webapps/client/ + cp server/target/conf/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/server/ + cp client/target/conf/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/ + ln -s tomcat6-nonssl.conf $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/tomcat6.conf + mkdir -p $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/Catalina/localhost/client + install -D packaging/debian/init/cloud-management $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-management + install -D client/bindir/cloud-update-xenserver-licenses.in $(DESTDIR)/usr/bin/cloud-update-xenserver-licenses + install -D server/target/cloud-server-4.2.0-SNAPSHOT.jar $(DESTDIR)/usr/share/$(PACKAGE)-management/lib/$(PACKAGE)-server.jar + ln -s /usr/share/tomcat6/bin $(DESTDIR)/usr/share/$(PACKAGE)-management/bin + ln -s ../../..$(SYSCONFDIR)/$(PACKAGE)/management $(DESTDIR)/usr/share/$(PACKAGE)-management/conf + ln -s /usr/share/tomcat6/lib $(DESTDIR)/usr/share/$(PACKAGE)-management/lib + ln -s ../../../var/log/$(PACKAGE)/management $(DESTDIR)/usr/share/$(PACKAGE)-management/logs + ln -s ../../../var/cache/$(PACKAGE)/management/temp $(DESTDIR)/usr/share/$(PACKAGE)-management/temp + ln -s ../../../var/cache/$(PACKAGE)/management/work $(DESTDIR)/usr/share/$(PACKAGE)-management/work + + # cloudstack-common + mkdir -p $(DESTDIR)/usr/share/$(PACKAGE)-common + mkdir $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts + mkdir $(DESTDIR)/usr/share/$(PACKAGE)-common/setup + cp -r scripts/installer $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts + cp -r scripts/network $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts + cp -r scripts/storage $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts + cp -r scripts/util $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts + cp -r scripts/vm $(DESTDIR)/usr/share/$(PACKAGE)-common/scripts + install -D client/target/utilities/bin/cloud-migrate-databases $(DESTDIR)/usr/bin + install -D client/target/utilities/bin/cloud-set-guest-password $(DESTDIR)/usr/bin + install -D client/target/utilities/bin/cloud-set-guest-sshkey $(DESTDIR)/usr/bin + install -D client/target/utilities/bin/cloud-setup-databases $(DESTDIR)/usr/bin + install -D client/target/utilities/bin/cloud-setup-management $(DESTDIR)/usr/bin + install -D services/console-proxy/server/dist/systemvm.iso $(DESTDIR)/usr/share/$(PACKAGE)-common/vms/systemvm.iso + + # cloudstack-python + mkdir -p $(DESTDIR)/usr/lib/python2.7/dist-packages + cp -r python/lib/cloud* $(DESTDIR)/usr/lib/python2.7/dist-packages + + # cloudstack-usage + mkdir $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/usage + mkdir $(DESTDIR)/var/log/$(PACKAGE)/usage + install -D usage/target/cloud-usage-4.2.0-SNAPSHOT.jar $(DESTDIR)/usr/share/$(PACKAGE)-usage/lib/$(PACKAGE)-usage.jar + cp usage/target/transformed/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/usage/ + ln -s ../management/db.properties $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/usage/db.properties + install -D packaging/debian/init/cloud-usage $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-usage + + # cloudstack-awsapi + mkdir $(DESTDIR)/var/log/$(PACKAGE)/awsapi + + dh_installdirs + dh_install + dh_python2 + +binary: install + dh_install dh_installchangelogs dh_installdocs LICENSE dh_installdocs DISCLAIMER diff --git a/deps/XenServerJava/pom.xml b/deps/XenServerJava/pom.xml index 18ba54f56a3..0f2cdf427c8 100644 --- a/deps/XenServerJava/pom.xml +++ b/deps/XenServerJava/pom.xml @@ -21,7 +21,7 @@ org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml xapi diff --git a/deps/install-non-oss.sh b/deps/install-non-oss.sh index 28eb03e1562..74575a8dbd1 100755 --- a/deps/install-non-oss.sh +++ b/deps/install-non-oss.sh @@ -19,13 +19,24 @@ mvn install:install-file -Dfile=cloud-iControl.jar -DgroupId=com.cloud.com.f5 -DartifactId=icontrol -Dversion=1.0 -Dpackaging=jar mvn install:install-file -Dfile=cloud-netscaler.jar -DgroupId=com.cloud.com.citrix -DartifactId=netscaler -Dversion=1.0 -Dpackaging=jar mvn install:install-file -Dfile=cloud-netscaler-sdx.jar -DgroupId=com.cloud.com.citrix -DartifactId=netscaler-sdx -Dversion=1.0 -Dpackaging=jar -# + # From http://support.netapp.com/ (not available online, contact your support representative) # Version: 4.0 +if [ -e cloud-manageontap.jar ]; then mv cloud-manageontap.jar manageontap.jar; fi mvn install:install-file -Dfile=manageontap.jar -DgroupId=com.cloud.com.netapp -DartifactId=manageontap -Dversion=4.0 -Dpackaging=jar -# + # From https://my.vmware.com/group/vmware/get-download?downloadGroup=VSDK41 # Version: 4.1, Release-date: 2010-07-13, Build: 257238 +if [ -e vmware-apputils.jar ]; then mv vmware-apputils.jar apputils.jar; fi +if [ -e vmware-vim.jar ]; then mv vmware-vim.jar vim.jar; fi +if [ -e vmware-vim25.jar ]; then mv vmware-vim25.jar vim25.jar; fi mvn install:install-file -Dfile=vim25.jar -DgroupId=com.cloud.com.vmware -DartifactId=vmware-vim25 -Dversion=4.1 -Dpackaging=jar mvn install:install-file -Dfile=apputils.jar -DgroupId=com.cloud.com.vmware -DartifactId=vmware-apputils -Dversion=4.1 -Dpackaging=jar mvn install:install-file -Dfile=vim.jar -DgroupId=com.cloud.com.vmware -DartifactId=vmware-vim -Dversion=4.1 -Dpackaging=jar + +# +# From https://my.vmware.com/group/vmware/get-download?downloadGroup=VSP510-WEBSDK-510 +# Version: 5.1, Release-date: 2012-09-10, Build: 774886 +mvn install:install-file -Dfile=vim25_51.jar -DgroupId=com.cloud.com.vmware -DartifactId=vmware-vim25 -Dversion=5.1 -Dpackaging=jar + + diff --git a/developer/developer-prefill.sql b/developer/developer-prefill.sql index 8713d731645..6300d35df64 100644 --- a/developer/developer-prefill.sql +++ b/developer/developer-prefill.sql @@ -18,25 +18,25 @@ -- Add a default ROOT domain use cloud; -INSERT INTO `cloud`.`domain` (id, uuid, name, parent, path, owner, region_id) VALUES - (1, UUID(), 'ROOT', NULL, '/', 2, 1); +INSERT INTO `cloud`.`domain` (id, uuid, name, parent, path, owner) VALUES + (1, UUID(), 'ROOT', NULL, '/', 2); -- Add system and admin accounts -INSERT INTO `cloud`.`account` (id, uuid, account_name, type, domain_id, state, region_id) VALUES - (1, UUID(), 'system', 1, 1, 'enabled', 1); +INSERT INTO `cloud`.`account` (id, uuid, account_name, type, domain_id, state) VALUES + (1, UUID(), 'system', 1, 1, 'enabled'); -INSERT INTO `cloud`.`account` (id, uuid, account_name, type, domain_id, state, region_id) VALUES - (2, UUID(), 'admin', 1, 1, 'enabled', 1); +INSERT INTO `cloud`.`account` (id, uuid, account_name, type, domain_id, state) VALUES + (2, UUID(), 'admin', 1, 1, 'enabled'); -- Add system user INSERT INTO `cloud`.`user` (id, uuid, username, password, account_id, firstname, - lastname, email, state, created, region_id) VALUES (1, UUID(), 'system', RAND(), - '1', 'system', 'cloud', NULL, 'enabled', NOW(), 1); + lastname, email, state, created) VALUES (1, UUID(), 'system', RAND(), + '1', 'system', 'cloud', NULL, 'enabled', NOW()); -- Add system user with encrypted password=password INSERT INTO `cloud`.`user` (id, uuid, username, password, account_id, firstname, - lastname, email, state, created, region_id) VALUES (2, UUID(), 'admin', '5f4dcc3b5aa765d61d8327deb882cf99', - '2', 'Admin', 'User', 'admin@mailprovider.com', 'enabled', NOW(), 1); + lastname, email, state, created) VALUES (2, UUID(), 'admin', '5f4dcc3b5aa765d61d8327deb882cf99', + '2', 'Admin', 'User', 'admin@mailprovider.com', 'enabled', NOW()); -- Add configurations INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) diff --git a/developer/pom.xml b/developer/pom.xml index 27849ea2825..ff47b143093 100644 --- a/developer/pom.xml +++ b/developer/pom.xml @@ -18,7 +18,7 @@ org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT @@ -27,7 +27,12 @@ 5.1.21 runtime - + + org.apache.cloudstack + cloud-plugin-hypervisor-simulator + ${project.version} + compile + install @@ -130,7 +135,7 @@ - process-test-resources + process-resources create-schema java @@ -152,10 +157,6 @@ ${basedir}/target/db/create-schema.sql ${basedir}/target/db/create-schema-premium.sql - - ${basedir}/target/db/create-schema-view.sql - - ${basedir}/target/db/4.1-new-db-schema.sql ${basedir}/target/db/templates.sql @@ -177,110 +178,16 @@ - - - - - - - - - simulator - - - deploydb-simulator - - - - - - org.codehaus.mojo - properties-maven-plugin - 1.0-alpha-2 - - - initialize - - read-project-properties - - - - ${project.parent.basedir}/utils/conf/db.properties - ${project.parent.basedir}/utils/conf/db.properties.override - - true - - - - - - - org.codehaus.mojo - exec-maven-plugin - 1.2.1 - - - - mysql - mysql-connector-java - ${cs.mysql.version} - - - commons-dbcp - commons-dbcp - ${cs.dbcp.version} - - - commons-pool - commons-pool - ${cs.pool.version} - - - org.jasypt - jasypt - ${cs.jasypt.version} - - - org.apache.cloudstack - cloud-utils - ${project.version} - - - org.apache.cloudstack - cloud-server - ${project.version} - - - - - process-test-resources - create-schema - - java - - - - - false - true - - org.apache.cloudstack - cloud-server - - com.cloud.upgrade.DatabaseCreator - - - ${project.parent.basedir}/utils/conf/db.properties - ${project.parent.basedir}/utils/conf/db.properties.override - - ${basedir}/target/db/create-schema-simulator.sql - ${basedir}/target/db/templates.simulator.sql - - com.cloud.upgrade.DatabaseUpgradeChecker - --database=simulator - --rootpassword=${db.root.password} - - + + + catalina.home + ${project.parent.basedir}/utils + + + paths.script + ${basedir}/target/db + + diff --git a/docs/.tx/config b/docs/.tx/config index 9b02286ea66..ec3df862093 100644 --- a/docs/.tx/config +++ b/docs/.tx/config @@ -1,25 +1,106 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. [main] -host = https://www.transifex.net +host = https://www.transifex.com + +[ACS_DOCS.Admin_Guide] +file_filter = /Admin_Guide.po +source_file = pot/Admin_Guide.pot +source_lang = en +type = PO + +[ACS_DOCS.Author_Group] +file_filter = /Author_Group.po +source_file = pot/Author_Group.pot +source_lang = en +type = PO + +[ACS_DOCS.Book_Info] +file_filter = /Book_Info.po +source_file = pot/Book_Info.pot +source_lang = en +type = PO + +[ACS_DOCS.Book_Info_Release_Notes_4-0] +file_filter = /Book_Info_Release_Notes_4-0.po +source_file = pot/Book_Info_Release_Notes_4-0.pot +source_lang = en +type = PO + +[ACS_DOCS.CloudStack_Nicira_NVP_Guide] +file_filter = /CloudStack_Nicira_NVP_Guide.po +source_file = pot/CloudStack_Nicira_NVP_Guide.pot +source_lang = en +type = PO + +[ACS_DOCS.Developers_Guide] +file_filter = /Developers_Guide.po +source_file = pot/Developers_Guide.pot +source_lang = en +type = PO + +[ACS_DOCS.Installation_Guide] +file_filter = /Installation_Guide.po +source_file = pot/Installation_Guide.pot +source_lang = en +type = PO + +[ACS_DOCS.LDAPserver-for-user-authentication] +file_filter = /LDAPserver-for-user-authentication.po +source_file = pot/LDAPserver-for-user-authentication.pot +source_lang = en +type = PO + +[ACS_DOCS.Preface] +file_filter = /Preface.po +source_file = pot/Preface.pot +source_lang = en +type = PO + +[ACS_DOCS.Release_Notes] +file_filter = /Release_Notes.po +source_file = pot/Release_Notes.pot +source_lang = en +type = PO + +[ACS_DOCS.Revision_History] +file_filter = /Revision_History.po +source_file = pot/Revision_History.pot +source_lang = en +type = PO + +[ACS_DOCS.Revision_History_Install_Guide] +file_filter = /Revision_History_Install_Guide.po +source_file = pot/Revision_History_Install_Guide.pot +source_lang = en +type = PO + +[ACS_DOCS.SSL-keystore-path-and-password] +file_filter = /SSL-keystore-path-and-password.po +source_file = pot/SSL-keystore-path-and-password.pot +source_lang = en +type = PO + +[ACS_DOCS.VPN-user-usage-record-format] +file_filter = /VPN-user-usage-record-format.po +source_file = pot/VPN-user-usage-record-format.pot +source_lang = en +type = PO [ACS_DOCS.about-clusters] -file_filter = /about-cluster.po +file_filter = /about-clusters.po source_file = pot/about-clusters.pot source_lang = en type = PO @@ -30,14 +111,18 @@ source_file = pot/about-hosts.pot source_lang = en type = PO +[ACS_DOCS.about-password-encryption] +file_filter = /about-password-encryption.po +source_file = pot/about-password-encryption.pot +source_lang = en +type = PO + [ACS_DOCS.about-physical-networks] file_filter = /about-physical-networks.po source_file = pot/about-physical-networks.pot source_lang = en type = PO - - [ACS_DOCS.about-pods] file_filter = /about-pods.po source_file = pot/about-pods.pot @@ -56,6 +141,12 @@ source_file = pot/about-secondary-storage.pot source_lang = en type = PO +[ACS_DOCS.about-security-groups] +file_filter = /about-security-groups.po +source_file = pot/about-security-groups.pot +source_lang = en +type = PO + [ACS_DOCS.about-virtual-networks] file_filter = /about-virtual-networks.po source_file = pot/about-virtual-networks.pot @@ -86,45 +177,57 @@ source_file = pot/accessing-vms.pot source_lang = en type = PO -[ACS_DOCS.accounts] -file_filter = /accounts.po -source_file = pot/accounts.pot -source_lang = en -type = PO - [ACS_DOCS.accounts-users-domains] file_filter = /accounts-users-domains.po source_file = pot/accounts-users-domains.pot source_lang = en type = PO +[ACS_DOCS.accounts] +file_filter = /accounts.po +source_file = pot/accounts.pot +source_lang = en +type = PO + [ACS_DOCS.acquire-new-ip-address] file_filter = /acquire-new-ip-address.po source_file = pot/acquire-new-ip-address.pot source_lang = en type = PO +[ACS_DOCS.acquire-new-ip-for-vpc] +file_filter = /acquire-new-ip-for-vpc.po +source_file = pot/acquire-new-ip-for-vpc.pot +source_lang = en +type = PO + [ACS_DOCS.add-additional-guest-network] file_filter = /add-additional-guest-network.po source_file = pot/add-additional-guest-network.pot source_lang = en type = PO -[ACS_DOCS.added-API-commands] -file_filter = /added-API-commands.po -source_file = pot/added-API-commands.pot +[ACS_DOCS.add-clusters-kvm-xenserver] +file_filter = /add-clusters-kvm-xenserver.po +source_file = pot/add-clusters-kvm-xenserver.pot source_lang = en type = PO -[ACS_DOCS.added-cloudPlatform-error-codes] -file_filter = /added-cloudPlatform-error-codes.po -source_file = pot/added-cloudPlatform-error-codes.pot +[ACS_DOCS.add-clusters-ovm] +file_filter = /add-clusters-ovm.po +source_file = pot/add-clusters-ovm.pot source_lang = en type = PO -[ACS_DOCS.adding-IP-addresses-for-the-public-network] -file_filter = /adding-IP-addresses-for-the-public-network.po -source_file = pot/adding-IP-addresses-for-the-public-network.pot +[ACS_DOCS.add-clusters-vsphere] +file_filter = /add-clusters-vsphere.po +source_file = pot/add-clusters-vsphere.pot +source_lang = en +type = PO + +[ACS_DOCS.add-gateway-vpc] +file_filter = /add-gateway-vpc.po +source_file = pot/add-gateway-vpc.pot source_lang = en type = PO @@ -146,6 +249,12 @@ source_file = pot/add-load-balancer-rule.pot source_lang = en type = PO +[ACS_DOCS.add-loadbalancer-rule-vpc] +file_filter = /add-loadbalancer-rule-vpc.po +source_file = pot/add-loadbalancer-rule-vpc.pot +source_lang = en +type = PO + [ACS_DOCS.add-members-to-projects] file_filter = /add-members-to-projects.po source_file = pot/add-members-to-projects.pot @@ -164,6 +273,12 @@ source_file = pot/add-password-management-to-templates.pot source_lang = en type = PO +[ACS_DOCS.add-portforward-rule-vpc] +file_filter = /add-portforward-rule-vpc.po +source_file = pot/add-portforward-rule-vpc.pot +source_lang = en +type = PO + [ACS_DOCS.add-primary-storage] file_filter = /add-primary-storage.po source_file = pot/add-primary-storage.pot @@ -188,6 +303,54 @@ source_file = pot/add-security-group.pot source_lang = en type = PO +[ACS_DOCS.add-tier] +file_filter = /add-tier.po +source_file = pot/add-tier.pot +source_lang = en +type = PO + +[ACS_DOCS.add-vm-to-tier] +file_filter = /add-vm-to-tier.po +source_file = pot/add-vm-to-tier.pot +source_lang = en +type = PO + +[ACS_DOCS.add-vpc] +file_filter = /add-vpc.po +source_file = pot/add-vpc.pot +source_lang = en +type = PO + +[ACS_DOCS.added-API-commands-4-0] +file_filter = /added-API-commands-4-0.po +source_file = pot/added-API-commands-4-0.pot +source_lang = en +type = PO + +[ACS_DOCS.added-API-commands] +file_filter = /added-API-commands.po +source_file = pot/added-API-commands.pot +source_lang = en +type = PO + +[ACS_DOCS.added-error-codes] +file_filter = /added-error-codes.po +source_file = pot/added-error-codes.pot +source_lang = en +type = PO + +[ACS_DOCS.adding-IP-addresses-for-the-public-network] +file_filter = /adding-IP-addresses-for-the-public-network.po +source_file = pot/adding-IP-addresses-for-the-public-network.pot +source_lang = en +type = PO + +[ACS_DOCS.additional-installation-options] +file_filter = /additional-installation-options.po +source_file = pot/additional-installation-options.pot +source_lang = en +type = PO + [ACS_DOCS.admin-alerts] file_filter = /admin-alerts.po source_file = pot/admin-alerts.pot @@ -200,6 +363,12 @@ source_file = pot/admin-guide.pot source_lang = en type = PO +[ACS_DOCS.adv-zone-topology-req] +file_filter = /adv-zone-topology-req.po +source_file = pot/adv-zone-topology-req.pot +source_lang = en +type = PO + [ACS_DOCS.advanced-zone-configuration] file_filter = /advanced-zone-configuration.po source_file = pot/advanced-zone-configuration.pot @@ -242,15 +411,21 @@ source_file = pot/allocators.pot source_lang = en type = PO -[ACS_DOCS.api-reference] -file_filter = /api-reference.po -source_file = pot/api-reference.pot +[ACS_DOCS.api-calls] +file_filter = /api-calls.po +source_file = pot/api-calls.pot source_lang = en type = PO -[ACS_DOCS.appendix-a-time-zones] -file_filter = /appendix-a-time-zones.po -source_file = pot/appendix-a-time-zones.pot +[ACS_DOCS.api-overview] +file_filter = /api-overview.po +source_file = pot/api-overview.pot +source_lang = en +type = PO + +[ACS_DOCS.api-reference] +file_filter = /api-reference.po +source_file = pot/api-reference.pot source_lang = en type = PO @@ -266,21 +441,15 @@ source_file = pot/asynchronous-commands.pot source_lang = en type = PO -[ACS_DOCS.attaching-volume] -file_filter = /attaching-volume.po -source_file = pot/attaching-volume.pot -source_lang = en -type = PO - [ACS_DOCS.attach-iso-to-vm] file_filter = /attach-iso-to-vm.po source_file = pot/attach-iso-to-vm.pot source_lang = en type = PO -[ACS_DOCS.Author_Group] -file_filter = /Author_Group.po -source_file = pot/Author_Group.pot +[ACS_DOCS.attaching-volume] +file_filter = /attaching-volume.po +source_file = pot/attaching-volume.pot source_lang = en type = PO @@ -290,6 +459,18 @@ source_file = pot/automatic-snapshot-creation-retention.pot source_lang = en type = PO +[ACS_DOCS.autoscale] +file_filter = /autoscale.po +source_file = pot/autoscale.pot +source_lang = en +type = PO + +[ACS_DOCS.aws-api-examples] +file_filter = /aws-api-examples.po +source_file = pot/aws-api-examples.pot +source_lang = en +type = PO + [ACS_DOCS.aws-ec2-configuration] file_filter = /aws-ec2-configuration.po source_file = pot/aws-ec2-configuration.pot @@ -314,15 +495,27 @@ source_file = pot/aws-ec2-supported-commands.pot source_lang = en type = PO +[ACS_DOCS.aws-ec2-timeouts] +file_filter = /aws-ec2-timeouts.po +source_file = pot/aws-ec2-timeouts.pot +source_lang = en +type = PO + [ACS_DOCS.aws-ec2-user-setup] file_filter = /aws-ec2-user-setup.po source_file = pot/aws-ec2-user-setup.pot source_lang = en type = PO -[ACS_DOCS.aws-interface-guide] -file_filter = /aws-interface-guide.po -source_file = pot/aws-interface-guide.pot +[ACS_DOCS.aws-interface-compatibility] +file_filter = /aws-interface-compatibility.po +source_file = pot/aws-interface-compatibility.pot +source_lang = en +type = PO + +[ACS_DOCS.basic-adv-networking] +file_filter = /basic-adv-networking.po +source_file = pot/basic-adv-networking.pot source_lang = en type = PO @@ -380,15 +573,57 @@ source_file = pot/best-practices-virtual-router.pot source_lang = en type = PO -[ACS_DOCS.Book_Info_Build_All] -file_filter = /Book_Info_Build_All.po -source_file = pot/Book_Info_Build_All.pot +[ACS_DOCS.build-deb] +file_filter = /build-deb.po +source_file = pot/build-deb.pot source_lang = en type = PO -[ACS_DOCS.Book_Info] -file_filter = /Book_Info.po -source_file = pot/Book_Info.pot +[ACS_DOCS.build-rpm] +file_filter = /build-rpm.po +source_file = pot/build-rpm.pot +source_lang = en +type = PO + +[ACS_DOCS.building-devcloud] +file_filter = /building-devcloud.po +source_file = pot/building-devcloud.pot +source_lang = en +type = PO + +[ACS_DOCS.building-marvin] +file_filter = /building-marvin.po +source_file = pot/building-marvin.pot +source_lang = en +type = PO + +[ACS_DOCS.building-prerequisites] +file_filter = /building-prerequisites.po +source_file = pot/building-prerequisites.pot +source_lang = en +type = PO + +[ACS_DOCS.building-with-maven-deploy] +file_filter = /building-with-maven-deploy.po +source_file = pot/building-with-maven-deploy.pot +source_lang = en +type = PO + +[ACS_DOCS.building-with-maven-steps] +file_filter = /building-with-maven-steps.po +source_file = pot/building-with-maven-steps.pot +source_lang = en +type = PO + +[ACS_DOCS.building-with-maven] +file_filter = /building-with-maven.po +source_file = pot/building-with-maven.pot +source_lang = en +type = PO + +[ACS_DOCS.castor-with-cs] +file_filter = /castor-with-cs.po +source_file = pot/castor-with-cs.pot source_lang = en type = PO @@ -398,6 +633,18 @@ source_file = pot/change-console-proxy-ssl-certificate-domain.pot source_lang = en type = PO +[ACS_DOCS.change-database-config] +file_filter = /change-database-config.po +source_file = pot/change-database-config.pot +source_lang = en +type = PO + +[ACS_DOCS.change-database-password] +file_filter = /change-database-password.po +source_file = pot/change-database-password.pot +source_lang = en +type = PO + [ACS_DOCS.change-host-password] file_filter = /change-host-password.po source_file = pot/change-host-password.pot @@ -416,6 +663,12 @@ source_file = pot/change-to-behavior-of-list-commands.pot source_lang = en type = PO +[ACS_DOCS.changed-apicommands-4-0] +file_filter = /changed-apicommands-4-0.po +source_file = pot/changed-apicommands-4-0.pot +source_lang = en +type = PO + [ACS_DOCS.changing-root-password] file_filter = /changing-root-password.po source_file = pot/changing-root-password.pot @@ -434,12 +687,6 @@ source_file = pot/changing-secondary-storage-servers.pot source_lang = en type = PO -[ACS_DOCS.changing-secondary-storage-serversp] -file_filter = /changing-secondary-storage-serversp.po -source_file = pot/changing-secondary-storage-serversp.pot -source_lang = en -type = PO - [ACS_DOCS.changing-service-offering-for-vm] file_filter = /changing-service-offering-for-vm.po source_file = pot/changing-service-offering-for-vm.pot @@ -452,9 +699,21 @@ source_file = pot/changing-vm-name-os-group.pot source_lang = en type = PO -[ACS_DOCS.choosing_a_deployment_architecture] -file_filter = /choosing_a_deployment_architecture.po -source_file = pot/choosing_a_deployment_architecture.pot +[ACS_DOCS.choosing-a-deployment-architecture] +file_filter = /choosing-a-deployment-architecture.po +source_file = pot/choosing-a-deployment-architecture.pot +source_lang = en +type = PO + +[ACS_DOCS.cisco3750-hardware] +file_filter = /cisco3750-hardware.po +source_file = pot/cisco3750-hardware.pot +source_lang = en +type = PO + +[ACS_DOCS.cisco3750-layer2] +file_filter = /cisco3750-layer2.po +source_file = pot/cisco3750-layer2.pot source_lang = en type = PO @@ -476,33 +735,9 @@ source_file = pot/cloud-infrastructure-overview.pot source_lang = en type = PO -[ACS_DOCS.cloudplatform-api] -file_filter = /cloudplatform-api.po -source_file = pot/cloudplatform-api.pot -source_lang = en -type = PO - -[ACS_DOCS.cloudstack_admin] -file_filter = /cloudstack_admin.po -source_file = pot/cloudstack_admin.pot -source_lang = en -type = PO - -[ACS_DOCS.cloudstack_developers] -file_filter = /cloudstack_developers.po -source_file = pot/cloudstack_developers.pot -source_lang = en -type = PO - -[ACS_DOCS.cloudstack_features] -file_filter = /cloudstack_features.po -source_file = pot/cloudstack_features.pot -source_lang = en -type = PO - -[ACS_DOCS.cloudstack_installation] -file_filter = /cloudstack_installation.po -source_file = pot/cloudstack_installation.pot +[ACS_DOCS.cloudstack-api] +file_filter = /cloudstack-api.po +source_file = pot/cloudstack-api.pot source_lang = en type = PO @@ -512,18 +747,6 @@ source_file = pot/cloudstack.pot source_lang = en type = PO -[ACS_DOCS.cloudstack_system_requirements] -file_filter = /cloudstack_system_requirements.po -source_file = pot/cloudstack_system_requirements.pot -source_lang = en -type = PO - -[ACS_DOCS.cloudstack_whatis] -file_filter = /cloudstack_whatis.po -source_file = pot/cloudstack_whatis.pot -source_lang = en -type = PO - [ACS_DOCS.cluster-add] file_filter = /cluster-add.po source_file = pot/cluster-add.pot @@ -548,18 +771,36 @@ source_file = pot/concepts.pot source_lang = en type = PO +[ACS_DOCS.configure-acl] +file_filter = /configure-acl.po +source_file = pot/configure-acl.pot +source_lang = en +type = PO + [ACS_DOCS.configure-guest-traffic-in-advanced-zone] file_filter = /configure-guest-traffic-in-advanced-zone.po source_file = pot/configure-guest-traffic-in-advanced-zone.pot source_lang = en type = PO +[ACS_DOCS.configure-package-repository] +file_filter = /configure-package-repository.po +source_file = pot/configure-package-repository.pot +source_lang = en +type = PO + [ACS_DOCS.configure-public-traffic-in-an-advanced-zone] file_filter = /configure-public-traffic-in-an-advanced-zone.po source_file = pot/configure-public-traffic-in-an-advanced-zone.pot source_lang = en type = PO +[ACS_DOCS.configure-snmp-rhel] +file_filter = /configure-snmp-rhel.po +source_file = pot/configure-snmp-rhel.pot +source_lang = en +type = PO + [ACS_DOCS.configure-usage-server] file_filter = /configure-usage-server.po source_file = pot/configure-usage-server.pot @@ -572,6 +813,12 @@ source_file = pot/configure-virtual-router.pot source_lang = en type = PO +[ACS_DOCS.configure-vpc] +file_filter = /configure-vpc.po +source_file = pot/configure-vpc.pot +source_lang = en +type = PO + [ACS_DOCS.configure-vpn] file_filter = /configure-vpn.po source_file = pot/configure-vpn.pot @@ -584,12 +831,6 @@ source_file = pot/configure-xenserver-dom0-memory.pot source_lang = en type = PO -[ACS_DOCS.configure-xenserver-dom-memory] -file_filter = /configure-xenserver-dom-memory.po -source_file = pot/configure-xenserver-dom-memory.pot -source_lang = en -type = PO - [ACS_DOCS.configuring-projects] file_filter = /configuring-projects.po source_file = pot/configuring-projects.pot @@ -656,6 +897,12 @@ source_file = pot/create-vpn-gateway-for-vpc.pot source_lang = en type = PO +[ACS_DOCS.create-vr-network-offering] +file_filter = /create-vr-network-offering.po +source_file = pot/create-vr-network-offering.pot +source_lang = en +type = PO + [ACS_DOCS.create-windows-template] file_filter = /create-windows-template.po source_file = pot/create-windows-template.pot @@ -704,6 +951,12 @@ source_file = pot/customizing-dns.pot source_lang = en type = PO +[ACS_DOCS.database-replication] +file_filter = /database-replication.po +source_file = pot/database-replication.pot +source_lang = en +type = PO + [ACS_DOCS.dates-in-usage-record] file_filter = /dates-in-usage-record.po source_file = pot/dates-in-usage-record.pot @@ -728,6 +981,12 @@ source_file = pot/default-template.pot source_lang = en type = PO +[ACS_DOCS.delete-reset-vpn] +file_filter = /delete-reset-vpn.po +source_file = pot/delete-reset-vpn.pot +source_lang = en +type = PO + [ACS_DOCS.delete-templates] file_filter = /delete-templates.po source_file = pot/delete-templates.pot @@ -740,6 +999,18 @@ source_file = pot/deleting-vms.pot source_lang = en type = PO +[ACS_DOCS.dell62xx-hardware] +file_filter = /dell62xx-hardware.po +source_file = pot/dell62xx-hardware.pot +source_lang = en +type = PO + +[ACS_DOCS.dell62xx-layer2] +file_filter = /dell62xx-layer2.po +source_file = pot/dell62xx-layer2.pot +source_lang = en +type = PO + [ACS_DOCS.deployment-architecture-overview] file_filter = /deployment-architecture-overview.po source_file = pot/deployment-architecture-overview.pot @@ -752,24 +1023,24 @@ source_file = pot/detach-move-volumes.pot source_lang = en type = PO +[ACS_DOCS.devcloud-usage-mode] +file_filter = /devcloud-usage-mode.po +source_file = pot/devcloud-usage-mode.pot +source_lang = en +type = PO + +[ACS_DOCS.devcloud] +file_filter = /devcloud.po +source_file = pot/devcloud.pot +source_lang = en +type = PO + [ACS_DOCS.developer-getting-started] file_filter = /developer-getting-started.po source_file = pot/developer-getting-started.pot source_lang = en type = PO -[ACS_DOCS.developer_guide] -file_filter = /developer_guide.po -source_file = pot/developer_guide.pot -source_lang = en -type = PO - -[ACS_DOCS.developer-guide] -file_filter = /developer-guide.po -source_file = pot/developer-guide.pot -source_lang = en -type = PO - [ACS_DOCS.developer-introduction] file_filter = /developer-introduction.po source_file = pot/developer-introduction.pot @@ -800,6 +1071,12 @@ source_file = pot/domains.pot source_lang = en type = PO +[ACS_DOCS.enable-disable-static-nat-vpc] +file_filter = /enable-disable-static-nat-vpc.po +source_file = pot/enable-disable-static-nat-vpc.pot +source_lang = en +type = PO + [ACS_DOCS.enable-disable-static-nat] file_filter = /enable-disable-static-nat.po source_file = pot/enable-disable-static-nat.pot @@ -842,6 +1119,12 @@ source_file = pot/event-log-queries.pot source_lang = en type = PO +[ACS_DOCS.event-types] +file_filter = /event-types.po +source_file = pot/event-types.pot +source_lang = en +type = PO + [ACS_DOCS.events-log] file_filter = /events-log.po source_file = pot/events-log.pot @@ -854,12 +1137,6 @@ source_file = pot/events.pot source_lang = en type = PO -[ACS_DOCS.event-types] -file_filter = /event-types.po -source_file = pot/event-types.pot -source_lang = en -type = PO - [ACS_DOCS.example-LDAP-configuration-commands] file_filter = /example-LDAP-configuration-commands.po source_file = pot/example-LDAP-configuration-commands.pot @@ -884,6 +1161,30 @@ source_file = pot/external-firewalls-and-load-balancers.pot source_lang = en type = PO +[ACS_DOCS.external-fw-topology-req] +file_filter = /external-fw-topology-req.po +source_file = pot/external-fw-topology-req.pot +source_lang = en +type = PO + +[ACS_DOCS.external-guest-firewall-integration] +file_filter = /external-guest-firewall-integration.po +source_file = pot/external-guest-firewall-integration.pot +source_lang = en +type = PO + +[ACS_DOCS.external-guest-lb-integration] +file_filter = /external-guest-lb-integration.po +source_file = pot/external-guest-lb-integration.pot +source_lang = en +type = PO + +[ACS_DOCS.extracting-source] +file_filter = /extracting-source.po +source_file = pot/extracting-source.pot +source_lang = en +type = PO + [ACS_DOCS.feature-overview] file_filter = /feature-overview.po source_file = pot/feature-overview.pot @@ -902,9 +1203,21 @@ source_file = pot/first_ms_node_install.pot source_lang = en type = PO -[ACS_DOCS.globally-configured-limit] -file_filter = /globally-configured-limit.po -source_file = pot/globally-configured-limit.pot +[ACS_DOCS.generic-firewall-provisions] +file_filter = /generic-firewall-provisions.po +source_file = pot/generic-firewall-provisions.pot +source_lang = en +type = PO + +[ACS_DOCS.getting-release] +file_filter = /getting-release.po +source_file = pot/getting-release.pot +source_lang = en +type = PO + +[ACS_DOCS.global-config] +file_filter = /global-config.po +source_file = pot/global-config.pot source_lang = en type = PO @@ -926,6 +1239,12 @@ source_file = pot/guest-network.pot source_lang = en type = PO +[ACS_DOCS.guest-nw-usage-with-traffic-sentinel] +file_filter = /guest-nw-usage-with-traffic-sentinel.po +source_file = pot/guest-nw-usage-with-traffic-sentinel.pot +source_lang = en +type = PO + [ACS_DOCS.guest-traffic] file_filter = /guest-traffic.po source_file = pot/guest-traffic.pot @@ -950,6 +1269,30 @@ source_file = pot/ha-management-server.pot source_lang = en type = PO +[ACS_DOCS.hardware-config-eg] +file_filter = /hardware-config-eg.po +source_file = pot/hardware-config-eg.pot +source_lang = en +type = PO + +[ACS_DOCS.hardware-firewall] +file_filter = /hardware-firewall.po +source_file = pot/hardware-firewall.pot +source_lang = en +type = PO + +[ACS_DOCS.host-add-vsphere] +file_filter = /host-add-vsphere.po +source_file = pot/host-add-vsphere.pot +source_lang = en +type = PO + +[ACS_DOCS.host-add-xenserver-kvm-ovm] +file_filter = /host-add-xenserver-kvm-ovm.po +source_file = pot/host-add-xenserver-kvm-ovm.pot +source_lang = en +type = PO + [ACS_DOCS.host-add] file_filter = /host-add.po source_file = pot/host-add.pot @@ -968,24 +1311,30 @@ source_file = pot/hypervisor-host-install-agent.pot source_lang = en type = PO +[ACS_DOCS.hypervisor-host-install-finish] +file_filter = /hypervisor-host-install-finish.po +source_file = pot/hypervisor-host-install-finish.pot +source_lang = en +type = PO + [ACS_DOCS.hypervisor-host-install-firewall] file_filter = /hypervisor-host-install-firewall.po source_file = pot/hypervisor-host-install-firewall.pot source_lang = en type = PO -[ACS_DOCS.hypervisor-host-install-flow] -file_filter = /hypervisor-host-install-flow.po -source_file = pot/hypervisor-host-install-flow.pot -source_lang = en -type = PO - [ACS_DOCS.hypervisor-host-install-libvirt] file_filter = /hypervisor-host-install-libvirt.po source_file = pot/hypervisor-host-install-libvirt.pot source_lang = en type = PO +[ACS_DOCS.hypervisor-host-install-network-openvswitch] +file_filter = /hypervisor-host-install-network-openvswitch.po +source_file = pot/hypervisor-host-install-network-openvswitch.pot +source_lang = en +type = PO + [ACS_DOCS.hypervisor-host-install-network] file_filter = /hypervisor-host-install-network.po source_file = pot/hypervisor-host-install-network.pot @@ -1010,6 +1359,24 @@ source_file = pot/hypervisor-host-install-security-policies.pot source_lang = en type = PO +[ACS_DOCS.hypervisor-installation] +file_filter = /hypervisor-installation.po +source_file = pot/hypervisor-installation.pot +source_lang = en +type = PO + +[ACS_DOCS.hypervisor-kvm-install-flow] +file_filter = /hypervisor-kvm-install-flow.po +source_file = pot/hypervisor-kvm-install-flow.pot +source_lang = en +type = PO + +[ACS_DOCS.hypervisor-kvm-requirements] +file_filter = /hypervisor-kvm-requirements.po +source_file = pot/hypervisor-kvm-requirements.pot +source_lang = en +type = PO + [ACS_DOCS.hypervisor-support-for-primarystorage] file_filter = /hypervisor-support-for-primarystorage.po source_file = pot/hypervisor-support-for-primarystorage.pot @@ -1034,15 +1401,21 @@ source_file = pot/incremental-snapshots-backup.pot source_lang = en type = PO +[ACS_DOCS.initial-setup-of-external-firewalls-loadbalancers] +file_filter = /initial-setup-of-external-firewalls-loadbalancers.po +source_file = pot/initial-setup-of-external-firewalls-loadbalancers.pot +source_lang = en +type = PO + [ACS_DOCS.initialize-and-test] file_filter = /initialize-and-test.po source_file = pot/initialize-and-test.pot source_lang = en type = PO -[ACS_DOCS.initial-setup-of-external-firewalls-loadbalancers] -file_filter = /initial-setup-of-external-firewalls-loadbalancers.po -source_file = pot/initial-setup-of-external-firewalls-loadbalancers.pot +[ACS_DOCS.install-usage-server] +file_filter = /install-usage-server.po +source_file = pot/install-usage-server.pot source_lang = en type = PO @@ -1052,9 +1425,9 @@ source_file = pot/installation-complete.pot source_lang = en type = PO -[ACS_DOCS.installation_overview] -file_filter = /installation_overview.po -source_file = pot/installation_overview.pot +[ACS_DOCS.installation-steps-overview] +file_filter = /installation-steps-overview.po +source_file = pot/installation-steps-overview.pot source_lang = en type = PO @@ -1070,9 +1443,9 @@ source_file = pot/installation_steps_overview.pot source_lang = en type = PO -[ACS_DOCS.installation-steps-overview] -file_filter = /installation-steps-overview.po -source_file = pot/installation-steps-overview.pot +[ACS_DOCS.inter-vlan-routing] +file_filter = /inter-vlan-routing.po +source_file = pot/inter-vlan-routing.pot source_lang = en type = PO @@ -1082,12 +1455,6 @@ source_file = pot/introduction.pot source_lang = en type = PO -[ACS_DOCS.ipaddress-usage-record-format] -file_filter = /ipaddress-usage-record-format.po -source_file = pot/ipaddress-usage-record-format.pot -source_lang = en -type = PO - [ACS_DOCS.ip-forwarding-firewalling] file_filter = /ip-forwarding-firewalling.po source_file = pot/ip-forwarding-firewalling.pot @@ -1100,6 +1467,12 @@ source_file = pot/ip-load-balancing.pot source_lang = en type = PO +[ACS_DOCS.ipaddress-usage-record-format] +file_filter = /ipaddress-usage-record-format.po +source_file = pot/ipaddress-usage-record-format.pot +source_lang = en +type = PO + [ACS_DOCS.isolated-networks] file_filter = /isolated-networks.po source_file = pot/isolated-networks.pot @@ -1112,15 +1485,27 @@ source_file = pot/job-status.pot source_lang = en type = PO +[ACS_DOCS.kvm-topology-req] +file_filter = /kvm-topology-req.po +source_file = pot/kvm-topology-req.pot +source_lang = en +type = PO + [ACS_DOCS.large_scale_redundant_setup] file_filter = /large_scale_redundant_setup.po source_file = pot/large_scale_redundant_setup.pot source_lang = en type = PO -[ACS_DOCS.LDAPserver-for-user-authentication] -file_filter = /LDAPserver-for-user-authentication.po -source_file = pot/LDAPserver-for-user-authentication.pot +[ACS_DOCS.layer2-switch] +file_filter = /layer2-switch.po +source_file = pot/layer2-switch.pot +source_lang = en +type = PO + +[ACS_DOCS.lb-policy-pfwd-rule-usage-record-format] +file_filter = /lb-policy-pfwd-rule-usage-record-format.po +source_file = pot/lb-policy-pfwd-rule-usage-record-format.pot source_lang = en type = PO @@ -1130,30 +1515,24 @@ source_file = pot/linux-installation.pot source_lang = en type = PO -[ACS_DOCS.loadbal-policy-port-fwd-rule-usage-record-fmt] -file_filter = /loadbalancer-policy-port-forwarding-rule-usage-record-format.po -source_file = pot/loadbalancer-policy-port-forwarding-rule-usage-record-format.pot -source_lang = en -type = PO - [ACS_DOCS.load-balancer-rules] file_filter = /load-balancer-rules.po source_file = pot/load-balancer-rules.pot source_lang = en type = PO -[ACS_DOCS.log-in] -file_filter = /log-in.po -source_file = pot/log-in.pot -source_lang = en -type = PO - [ACS_DOCS.log-in-root-admin] file_filter = /log-in-root-admin.po source_file = pot/log-in-root-admin.pot source_lang = en type = PO +[ACS_DOCS.log-in] +file_filter = /log-in.po +source_file = pot/log-in.pot +source_lang = en +type = PO + [ACS_DOCS.long-running-job-events] file_filter = /long-running-job-events.po source_file = pot/long-running-job-events.pot @@ -1196,12 +1575,6 @@ source_file = pot/management-server-install-complete.pot source_lang = en type = PO -[ACS_DOCS.management-server-install-db] -file_filter = /management-server-install-db.po -source_file = pot/management-server-install-db.pot -source_lang = en -type = PO - [ACS_DOCS.management-server-install-db-external] file_filter = /management-server-install-db-external.po source_file = pot/management-server-install-db-external.pot @@ -1214,6 +1587,12 @@ source_file = pot/management-server-install-db-local.pot source_lang = en type = PO +[ACS_DOCS.management-server-install-db] +file_filter = /management-server-install-db.po +source_file = pot/management-server-install-db.pot +source_lang = en +type = PO + [ACS_DOCS.management-server-install-flow] file_filter = /management-server-install-flow.po source_file = pot/management-server-install-flow.pot @@ -1250,6 +1629,12 @@ source_file = pot/management-server-install-systemvm.pot source_lang = en type = PO +[ACS_DOCS.management-server-lb] +file_filter = /management-server-lb.po +source_file = pot/management-server-lb.pot +source_lang = en +type = PO + [ACS_DOCS.management-server-overview] file_filter = /management-server-overview.po source_file = pot/management-server-overview.pot @@ -1262,6 +1647,12 @@ source_file = pot/manual-live-migration.pot source_lang = en type = PO +[ACS_DOCS.marvin] +file_filter = /marvin.po +source_file = pot/marvin.pot +source_lang = en +type = PO + [ACS_DOCS.max-result-page-returned] file_filter = /max-result-page-returned.po source_file = pot/max-result-page-returned.pot @@ -1304,15 +1695,51 @@ source_file = pot/multi_node_overview.pot source_lang = en type = PO +[ACS_DOCS.multi_site_deployment] +file_filter = /multi_site_deployment.po +source_file = pot/multi_site_deployment.pot +source_lang = en +type = PO + [ACS_DOCS.multiple-system-vm-vmware] file_filter = /multiple-system-vm-vmware.po source_file = pot/multiple-system-vm-vmware.pot source_lang = en type = PO -[ACS_DOCS.multi_site_deployment] -file_filter = /multi_site_deployment.po -source_file = pot/multi_site_deployment.pot +[ACS_DOCS.network-offering-usage-record-format] +file_filter = /network-offering-usage-record-format.po +source_file = pot/network-offering-usage-record-format.pot +source_lang = en +type = PO + +[ACS_DOCS.network-offerings] +file_filter = /network-offerings.po +source_file = pot/network-offerings.pot +source_lang = en +type = PO + +[ACS_DOCS.network-rate] +file_filter = /network-rate.po +source_file = pot/network-rate.pot +source_lang = en +type = PO + +[ACS_DOCS.network-service-providers] +file_filter = /network-service-providers.po +source_file = pot/network-service-providers.pot +source_lang = en +type = PO + +[ACS_DOCS.network-setup] +file_filter = /network-setup.po +source_file = pot/network-setup.pot +source_lang = en +type = PO + +[ACS_DOCS.network-usage-record-format] +file_filter = /network-usage-record-format.po +source_file = pot/network-usage-record-format.pot source_lang = en type = PO @@ -1328,39 +1755,27 @@ source_file = pot/networking-in-a-zone.pot source_lang = en type = PO -[ACS_DOCS.networking_overview] -file_filter = /networking_overview.po -source_file = pot/networking-overview.pot -source_lang = en -type = PO - [ACS_DOCS.networking-overview] file_filter = /networking-overview.po source_file = pot/networking-overview.pot source_lang = en type = PO -[ACS_DOCS.network-offerings] -file_filter = /network-offerings.po -source_file = pot/network-offerings.pot +[ACS_DOCS.networking_overview] +file_filter = /networking_overview.po +source_file = pot/networking_overview.pot source_lang = en type = PO -[ACS_DOCS.network-offering-usage-record-format] -file_filter = /network-offering-usage-record-format.po -source_file = pot/network-offering-usage-record-format.pot +[ACS_DOCS.networks-for-users-overview] +file_filter = /networks-for-users-overview.po +source_file = pot/networks-for-users-overview.pot source_lang = en type = PO -[ACS_DOCS.network-service-providers] -file_filter = /network-service-providers.po -source_file = pot/network-service-providers.pot -source_lang = en -type = PO - -[ACS_DOCS.network-usage-record-format] -file_filter = /network-usage-record-format.po -source_file = pot/network-usage-record-format.pot +[ACS_DOCS.networks] +file_filter = /networks.po +source_file = pot/networks.pot source_lang = en type = PO @@ -1376,9 +1791,15 @@ source_file = pot/nfs-shares-on-separate-server.pot source_lang = en type = PO -[ACS_DOCS.ongoing-config-of-external-firewall-loadbalancer] -file_filter = /ongoing-configuration-of-external-firewalls-loadbalancer.po -source_file = pot/ongoing-configuration-of-external-firewalls-loadbalancer.pot +[ACS_DOCS.offerings] +file_filter = /offerings.po +source_file = pot/offerings.pot +source_lang = en +type = PO + +[ACS_DOCS.ongoing-config-of-external-firewalls-lb] +file_filter = /ongoing-config-of-external-firewalls-lb.po +source_file = pot/ongoing-config-of-external-firewalls-lb.pot source_lang = en type = PO @@ -1388,6 +1809,18 @@ source_file = pot/over-provisioning-service-offering-limits.pot source_lang = en type = PO +[ACS_DOCS.ovm-install] +file_filter = /ovm-install.po +source_file = pot/ovm-install.pot +source_lang = en +type = PO + +[ACS_DOCS.ovm-requirements] +file_filter = /ovm-requirements.po +source_file = pot/ovm-requirements.pot +source_lang = en +type = PO + [ACS_DOCS.per-domain-limits] file_filter = /per-domain-limits.po source_file = pot/per-domain-limits.pot @@ -1406,6 +1839,84 @@ source_file = pot/physical-network-configuration-settings.pot source_lang = en type = PO +[ACS_DOCS.plugin-niciranvp-about] +file_filter = /plugin-niciranvp-about.po +source_file = pot/plugin-niciranvp-about.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-devicemanagement] +file_filter = /plugin-niciranvp-devicemanagement.po +source_file = pot/plugin-niciranvp-devicemanagement.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-features] +file_filter = /plugin-niciranvp-features.po +source_file = pot/plugin-niciranvp-features.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-guide] +file_filter = /plugin-niciranvp-guide.po +source_file = pot/plugin-niciranvp-guide.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-introduction] +file_filter = /plugin-niciranvp-introduction.po +source_file = pot/plugin-niciranvp-introduction.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-preparations] +file_filter = /plugin-niciranvp-preparations.po +source_file = pot/plugin-niciranvp-preparations.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-provider] +file_filter = /plugin-niciranvp-provider.po +source_file = pot/plugin-niciranvp-provider.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-revisions] +file_filter = /plugin-niciranvp-revisions.po +source_file = pot/plugin-niciranvp-revisions.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-tables] +file_filter = /plugin-niciranvp-tables.po +source_file = pot/plugin-niciranvp-tables.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-troubleshooting] +file_filter = /plugin-niciranvp-troubleshooting.po +source_file = pot/plugin-niciranvp-troubleshooting.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-ui] +file_filter = /plugin-niciranvp-ui.po +source_file = pot/plugin-niciranvp-ui.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-usage] +file_filter = /plugin-niciranvp-usage.po +source_file = pot/plugin-niciranvp-usage.pot +source_lang = en +type = PO + +[ACS_DOCS.plugin-niciranvp-uuidreferences] +file_filter = /plugin-niciranvp-uuidreferences.po +source_file = pot/plugin-niciranvp-uuidreferences.pot +source_lang = en +type = PO + [ACS_DOCS.pod-add] file_filter = /pod-add.po source_file = pot/pod-add.pot @@ -1418,18 +1929,6 @@ source_file = pot/port-forwarding.pot source_lang = en type = PO -[ACS_DOCS.Preface] -file_filter = /Preface.po -source_file = pot/Preface.pot -source_lang = en -type = PO - -[ACS_DOCS.prepare_os] -file_filter = /prepare_os.po -source_file = pot/prepare_os.pot -source_lang = en -type = PO - [ACS_DOCS.prepare-system-vm-template] file_filter = /prepare-system-vm-template.po source_file = pot/prepare-system-vm-template.pot @@ -1460,6 +1959,12 @@ source_file = pot/private-public-template.pot source_lang = en type = PO +[ACS_DOCS.projects-overview] +file_filter = /projects-overview.po +source_file = pot/projects-overview.pot +source_lang = en +type = PO + [ACS_DOCS.projects] file_filter = /projects.po source_file = pot/projects.pot @@ -1472,12 +1977,6 @@ source_file = pot/provisioning-auth-api.pot source_lang = en type = PO -[ACS_DOCS.provisioning] -file_filter = /provisioning.po -source_file = pot/provisioning.pot -source_lang = en -type = PO - [ACS_DOCS.provisioning-steps-overview] file_filter = /provisioning-steps-overview.po source_file = pot/provisioning-steps-overview.pot @@ -1496,21 +1995,51 @@ source_file = pot/query-filter.pot source_lang = en type = PO +[ACS_DOCS.re-install-hosts] +file_filter = /re-install-hosts.po +source_file = pot/re-install-hosts.pot +source_lang = en +type = PO + [ACS_DOCS.release-ip-address] file_filter = /release-ip-address.po source_file = pot/release-ip-address.pot source_lang = en type = PO +[ACS_DOCS.release-ip-for-vpc] +file_filter = /release-ip-for-vpc.po +source_file = pot/release-ip-for-vpc.pot +source_lang = en +type = PO + +[ACS_DOCS.remove-member-from-project] +file_filter = /remove-member-from-project.po +source_file = pot/remove-member-from-project.pot +source_lang = en +type = PO + +[ACS_DOCS.remove-tier] +file_filter = /remove-tier.po +source_file = pot/remove-tier.pot +source_lang = en +type = PO + +[ACS_DOCS.remove-vpc] +file_filter = /remove-vpc.po +source_file = pot/remove-vpc.pot +source_lang = en +type = PO + [ACS_DOCS.removed-API-commands] file_filter = /removed-API-commands.po source_file = pot/removed-API-commands.pot source_lang = en type = PO -[ACS_DOCS.remove-member-from-project] -file_filter = /remove-member-from-project.po -source_file = pot/remove-member-from-project.pot +[ACS_DOCS.removing-hosts] +file_filter = /removing-hosts.po +source_file = pot/removing-hosts.pot source_lang = en type = PO @@ -1550,12 +2079,6 @@ source_file = pot/responses.pot source_lang = en type = PO -[ACS_DOCS.Revision_History] -file_filter = /Revision_History.po -source_file = pot/Revision_History.pot -source_lang = en -type = PO - [ACS_DOCS.roles] file_filter = /roles.po source_file = pot/roles.pot @@ -1580,6 +2103,12 @@ source_file = pot/runtime-behavior-of-primary-storage.pot source_lang = en type = PO +[ACS_DOCS.runtime-internal-comm-req] +file_filter = /runtime-internal-comm-req.po +source_file = pot/runtime-internal-comm-req.pot +source_lang = en +type = PO + [ACS_DOCS.scheduled-maintenance-maintenance-mode-hosts] file_filter = /scheduled-maintenance-maintenance-mode-hosts.po source_file = pot/scheduled-maintenance-maintenance-mode-hosts.pot @@ -1610,24 +2139,30 @@ source_file = pot/secondary-storage-outage-and-data-loss.pot source_lang = en type = PO -[ACS_DOCS.secondary-storage] -file_filter = /secondary-storage.po -source_file = pot/secondary-storage.pot -source_lang = en -type = PO - [ACS_DOCS.secondary-storage-vm] file_filter = /secondary-storage-vm.po source_file = pot/secondary-storage-vm.pot source_lang = en type = PO +[ACS_DOCS.secondary-storage] +file_filter = /secondary-storage.po +source_file = pot/secondary-storage.pot +source_lang = en +type = PO + [ACS_DOCS.security-groups] file_filter = /security-groups.po source_file = pot/security-groups.pot source_lang = en type = PO +[ACS_DOCS.security-req] +file_filter = /security-req.po +source_file = pot/security-req.pot +source_lang = en +type = PO + [ACS_DOCS.send-projects-membership-invitation] file_filter = /send-projects-membership-invitation.po source_file = pot/send-projects-membership-invitation.pot @@ -1652,12 +2187,24 @@ source_file = pot/set-database-buffer-pool-size.pot source_lang = en type = PO +[ACS_DOCS.set-global-project-resource-limits] +file_filter = /set-global-project-resource-limits.po +source_file = pot/set-global-project-resource-limits.pot +source_lang = en +type = PO + [ACS_DOCS.set-monitor-total-vm-limits-per-host] file_filter = /set-monitor-total-vm-limits-per-host.po source_file = pot/set-monitor-total-vm-limits-per-host.pot source_lang = en type = PO +[ACS_DOCS.set-per-project-resource-limits] +file_filter = /set-per-project-resource-limits.po +source_file = pot/set-per-project-resource-limits.pot +source_lang = en +type = PO + [ACS_DOCS.set-projects-creator-permissions] file_filter = /set-projects-creator-permissions.po source_file = pot/set-projects-creator-permissions.pot @@ -1688,6 +2235,12 @@ source_file = pot/set-usage-limit.pot source_lang = en type = PO +[ACS_DOCS.set-zone-vlan-run-vm-max] +file_filter = /set-zone-vlan-run-vm-max.po +source_file = pot/set-zone-vlan-run-vm-max.pot +source_lang = en +type = PO + [ACS_DOCS.shared-networks] file_filter = /shared-networks.po source_file = pot/shared-networks.pot @@ -1718,9 +2271,27 @@ source_file = pot/snapshot-restore.pot source_lang = en type = PO -[ACS_DOCS.SSL-keystore-path-and-password] -file_filter = /SSL-keystore-path-and-password.po -source_file = pot/SSL-keystore-path-and-password.pot +[ACS_DOCS.source-build] +file_filter = /source-build.po +source_file = pot/source-build.pot +source_lang = en +type = PO + +[ACS_DOCS.source-prereqs] +file_filter = /source-prereqs.po +source_file = pot/source-prereqs.pot +source_lang = en +type = PO + +[ACS_DOCS.source] +file_filter = /source.po +source_file = pot/source.pot +source_lang = en +type = PO + +[ACS_DOCS.ssl] +file_filter = /ssl.po +source_file = pot/ssl.pot source_lang = en type = PO @@ -1742,6 +2313,12 @@ source_file = pot/sticky-session-policies-for-lb-rules.pot source_lang = en type = PO +[ACS_DOCS.stop-restart-management-server] +file_filter = /stop-restart-management-server.po +source_file = pot/stop-restart-management-server.pot +source_lang = en +type = PO + [ACS_DOCS.stopped-vm] file_filter = /stopped-vm.po source_file = pot/stopped-vm.pot @@ -1754,15 +2331,15 @@ source_file = pot/stopping-and-starting-vms.pot source_lang = en type = PO -[ACS_DOCS.stop-restart-management-server] -file_filter = /stop-restart-management-server.po -source_file = pot/stop-restart-management-server.pot +[ACS_DOCS.storage-nw-topology-req] +file_filter = /storage-nw-topology-req.po +source_file = pot/storage-nw-topology-req.pot source_lang = en type = PO -[ACS_DOCS.storage] -file_filter = /storage.po -source_file = pot/storage.pot +[ACS_DOCS.storage-overview] +file_filter = /storage-overview.po +source_file = pot/storage-overview.pot source_lang = en type = PO @@ -1772,12 +2349,30 @@ source_file = pot/storage-tags.pot source_lang = en type = PO +[ACS_DOCS.storage] +file_filter = /storage.po +source_file = pot/storage.pot +source_lang = en +type = PO + [ACS_DOCS.suspend-project] file_filter = /suspend-project.po source_file = pot/suspend-project.pot source_lang = en type = PO +[ACS_DOCS.sys-offering-sysvm] +file_filter = /sys-offering-sysvm.po +source_file = pot/sys-offering-sysvm.pot +source_lang = en +type = PO + +[ACS_DOCS.sys-reliability-and-ha] +file_filter = /sys-reliability-and-ha.po +source_file = pot/sys-reliability-and-ha.pot +source_lang = en +type = PO + [ACS_DOCS.sysprep-for-windows-server-2003R2] file_filter = /sysprep-for-windows-server-2003R2.po source_file = pot/sysprep-for-windows-server-2003R2.pot @@ -1790,12 +2385,6 @@ source_file = pot/sysprep-windows-server-2008R2.pot source_lang = en type = PO -[ACS_DOCS.sys-reliability-and-ha] -file_filter = /sys-reliability-and-ha.po -source_file = pot/sys-reliability-and-ha.pot -source_lang = en -type = PO - [ACS_DOCS.system-reserved-ip-addresses] file_filter = /system-reserved-ip-addresses.po source_file = pot/system-reserved-ip-addresses.pot @@ -1814,6 +2403,12 @@ source_file = pot/system-vm-template.pot source_lang = en type = PO +[ACS_DOCS.tagging-resources] +file_filter = /tagging-resources.po +source_file = pot/tagging-resources.pot +source_lang = en +type = PO + [ACS_DOCS.template-iso-snapshot-usage-record-format] file_filter = /template-iso-snapshot-usage-record-format.po source_file = pot/template-iso-snapshot-usage-record-format.pot @@ -1832,36 +2427,30 @@ source_file = pot/time-zones.pot source_lang = en type = PO +[ACS_DOCS.tools] +file_filter = /tools.po +source_file = pot/tools.pot +source_lang = en +type = PO + +[ACS_DOCS.topology-req] +file_filter = /topology-req.po +source_file = pot/topology-req.pot +source_lang = en +type = PO + [ACS_DOCS.troubleshooting-alerts] file_filter = /troubleshooting-alerts.po source_file = pot/troubleshooting-alerts.pot source_lang = en type = PO -[ACS_DOCS.troubleshoot-dataloss-on-exported-primary-storage] -file_filter = /troubleshooting-dataloss-on-exported-primary-storage.po -source_file = pot/troubleshooting-dataloss-on-exported-primary-storage.pot -source_lang = en -type = PO - [ACS_DOCS.troubleshooting-lb-rules-fails] file_filter = /troubleshooting-lb-rules-fails.po source_file = pot/troubleshooting-lb-rules-fails.pot source_lang = en type = PO -[ACS_DOCS.troubleshoot-maint-mode-not-working-on-vCenter] -file_filter = /troubleshooting-maintenance-mode-not-working-on-vCenter.po -source_file = pot/troubleshooting-maintenance-mode-not-working-on-vCenter.pot -source_lang = en -type = PO - -[ACS_DOCS.troubleshooting] -file_filter = /troubleshooting.po -source_file = pot/troubleshooting.pot -source_lang = en -type = PO - [ACS_DOCS.troubleshooting-recover-lost-virtual-router] file_filter = /troubleshooting-recover-lost-virtual-router.po source_file = pot/troubleshooting-recover-lost-virtual-router.pot @@ -1886,6 +2475,24 @@ source_file = pot/troubleshooting-working-with-server-logs.pot source_lang = en type = PO +[ACS_DOCS.troubleshooting] +file_filter = /troubleshooting.po +source_file = pot/troubleshooting.pot +source_lang = en +type = PO + +[ACS_DOCS.troublesht-dataloss-on-exp-primary-storage] +file_filter = /troublesht-dataloss-on-exp-primary-storage.po +source_file = pot/troublesht-dataloss-on-exp-primary-storage.pot +source_lang = en +type = PO + +[ACS_DOCS.troublesht-mtn-mode-not-working-on-vCenter] +file_filter = /troublesht-mtn-mode-not-working-on-vCenter.po +source_file = pot/troublesht-mtn-mode-not-working-on-vCenter.pot +source_lang = en +type = PO + [ACS_DOCS.tuning] file_filter = /tuning.po source_file = pot/tuning.pot @@ -1988,18 +2595,36 @@ source_file = pot/vcenter-maintenance-mode.pot source_lang = en type = PO +[ACS_DOCS.verifying-source] +file_filter = /verifying-source.po +source_file = pot/verifying-source.pot +source_lang = en +type = PO + [ACS_DOCS.virtual-machine-usage-record-format] file_filter = /virtual-machine-usage-record-format.po source_file = pot/virtual-machine-usage-record-format.pot source_lang = en type = PO +[ACS_DOCS.virtual-machines] +file_filter = /virtual-machines.po +source_file = pot/virtual-machines.pot +source_lang = en +type = PO + [ACS_DOCS.virtual-router] file_filter = /virtual-router.po source_file = pot/virtual-router.pot source_lang = en type = PO +[ACS_DOCS.vlan-allocation-eg] +file_filter = /vlan-allocation-eg.po +source_file = pot/vlan-allocation-eg.pot +source_lang = en +type = PO + [ACS_DOCS.vlan-provisioning] file_filter = /vlan-provisioning.po source_file = pot/vlan-provisioning.pot @@ -2018,6 +2643,24 @@ source_file = pot/vm-storage-migration.pot source_lang = en type = PO +[ACS_DOCS.vmware-install] +file_filter = /vmware-install.po +source_file = pot/vmware-install.pot +source_lang = en +type = PO + +[ACS_DOCS.vmware-requirements] +file_filter = /vmware-requirements.po +source_file = pot/vmware-requirements.pot +source_lang = en +type = PO + +[ACS_DOCS.vmware-topology-req] +file_filter = /vmware-topology-req.po +source_file = pot/vmware-topology-req.pot +source_lang = en +type = PO + [ACS_DOCS.volume-deletion-garbage-collection] file_filter = /volume-deletion-garbage-collection.po source_file = pot/volume-deletion-garbage-collection.pot @@ -2042,12 +2685,6 @@ source_file = pot/vpn.pot source_lang = en type = PO -[ACS_DOCS.VPN-user-usage-record-format] -file_filter = /VPN-user-usage-record-format.po -source_file = pot/VPN-user-usage-record-format.pot -source_lang = en -type = PO - [ACS_DOCS.whatis] file_filter = /whatis.po source_file = pot/whatis.pot @@ -2078,6 +2715,12 @@ source_file = pot/windows-installation.pot source_lang = en type = PO +[ACS_DOCS.work-with-usage] +file_filter = /work-with-usage.po +source_file = pot/work-with-usage.pot +source_lang = en +type = PO + [ACS_DOCS.working-with-hosts] file_filter = /working-with-hosts.po source_file = pot/working-with-hosts.pot @@ -2120,20 +2763,21 @@ source_file = pot/working-with-volumes.pot source_lang = en type = PO -[ACS_DOCS.work-with-usage] -file_filter = /work-with-usage.po -source_file = pot/work-with-usage.pot -source_lang = en -type = PO - [ACS_DOCS.xenserver-maintenance-mode] file_filter = /xenserver-maintenance-mode.po source_file = pot/xenserver-maintenance-mode.pot source_lang = en type = PO +[ACS_DOCS.xenserver-topology-req] +file_filter = /xenserver-topology-req.po +source_file = pot/xenserver-topology-req.pot +source_lang = en +type = PO + [ACS_DOCS.zone-add] file_filter = /zone-add.po source_file = pot/zone-add.pot source_lang = en type = PO + diff --git a/docs/en-US/Developers_Guide.xml b/docs/en-US/Developers_Guide.xml index 6c09354f6a8..c86208b3271 100644 --- a/docs/en-US/Developers_Guide.xml +++ b/docs/en-US/Developers_Guide.xml @@ -26,7 +26,7 @@ &PRODUCT; Developer's Guide Apache CloudStack - 4.0.0-incubating + 4.1.0-incubating @@ -50,6 +50,7 @@ + diff --git a/docs/en-US/accessing-vms.xml b/docs/en-US/accessing-vms.xml index ce780cff080..67d9d774172 100644 --- a/docs/en-US/accessing-vms.xml +++ b/docs/en-US/accessing-vms.xml @@ -32,9 +32,9 @@ To access a VM directly over the network: - The VM must have some port open to incoming traffic. For example, in a basic zone, a new VM might be assigned to a security group which allows incoming traffic. This depends on what security group you picked when creating the VM. In other cases, you can open a port by setting up a port forwarding policy. See IP Forwarding and Firewalling. + The VM must have some port open to incoming traffic. For example, in a basic zone, a new VM might be assigned to a security group which allows incoming traffic. This depends on what security group you picked when creating the VM. In other cases, you can open a port by setting up a port forwarding policy. See . If a port is open but you can not access the VM using ssh, it’s possible that ssh is not already enabled on the VM. This will depend on whether ssh is enabled in the template you picked when creating the VM. Access the VM through the &PRODUCT; UI and enable ssh on the machine using the commands for the VM’s operating system. - If the network has an external firewall device, you will need to create a firewall rule to allow access. See IP Forwarding and Firewalling. + If the network has an external firewall device, you will need to create a firewall rule to allow access. See . diff --git a/docs/en-US/add-clusters-ovm.xml b/docs/en-US/add-clusters-ovm.xml index aa07dfa6506..d0b0688e6a3 100644 --- a/docs/en-US/add-clusters-ovm.xml +++ b/docs/en-US/add-clusters-ovm.xml @@ -28,12 +28,12 @@ Add a companion non-OVM cluster to the Pod. This cluster provides an environment where the &PRODUCT; System VMs can run. You should have already installed a non-OVM hypervisor on at least one Host to prepare for this step. Depending on which hypervisor you used: - For VMWare, follow the steps in Add Cluster: vSphere. When finished, return here and continue with the next step. + For VMWare, follow the steps in . When finished, return here and continue with the next step. For KVM or XenServer, follow the steps in . When finished, return here and continue with the next step - In the left navigation, choose Infrastructure. In Zones, click View More, then click the zone in which you want to add the cluster. - Click the Compute tab. In the Pods node, click View All. Select the same pod you used in step 1. + In the left navigation, choose Infrastructure. In Zones, click View All, then click the zone in which you want to add the cluster. + Click the Compute and Storage tab. In the Pods node, click View All. Click View Clusters, then click Add Cluster. The Add Cluster dialog is displayed. In Hypervisor, choose OVM. diff --git a/docs/en-US/add-load-balancer-rule.xml b/docs/en-US/add-load-balancer-rule.xml index 8cd0da4b7da..2d911feaf75 100644 --- a/docs/en-US/add-load-balancer-rule.xml +++ b/docs/en-US/add-load-balancer-rule.xml @@ -4,19 +4,19 @@ %BOOK_ENTITIES; ]>
Adding a Load Balancer Rule @@ -70,6 +70,10 @@ the algorithm for the stickiness policy. See Sticky Session Policies for Load Balancer Rules. + + AutoScale: Click Configure and complete the + AutoScale configuration as explained in . + diff --git a/docs/en-US/add-remove-nic.xml b/docs/en-US/add-remove-nic.xml new file mode 100644 index 00000000000..15dc66c2b83 --- /dev/null +++ b/docs/en-US/add-remove-nic.xml @@ -0,0 +1,127 @@ + + +%BOOK_ENTITIES; +]> + +
+ Reconfiguring Physical Networks in VMs + &PRODUCT; provides you the ability to move VMs between networks and reconfigure a VM's + network. You can remove a VM from a physical network and add to a new physical network. You can + also change the default physical network of a virtual machine. With this functionality, hybrid + or traditional server loads can be accommodated with ease. + This feature is supported on XenServer and KVM hypervisors. + The following APIs have been added to support this feature. These API calls can function + only while the VM is in running or stopped state. +
+ addNicToVirtualMachine + The addNicToVirtualMachine API adds a new NIC to the specified VM on a selected + network. + + + + + parameter + description + Value + + + + + virtualmachineid + The unique ID of the VM to which the NIC is to be added. + true + + + networkid + The unique ID of the network the NIC that you add should apply + to. + true + + + ipaddress + The IP address of the VM on the network. + false + + + + + The network and VM must reside in the same zone. Two VMs with the same name cannot reside + in the same network. Therefore, adding a second VM that duplicates a name on a network will + fail. +
+
+ removeNicFromVirtualMachine + The removeNicFromVirtualMachine API removes a NIC from the specified VM on a selected + network. + + + + + parameter + description + Value + + + + + virtualmachineid + The unique ID of the VM from which the NIC is to be removed. + + true + + + nicid + The unique ID of the NIC that you want to remove. + true + + + + + Removing the default NIC is not allowed. +
+
+ updateDefaultNicForVirtualMachine + The updateDefaultNicForVirtualMachine API updates the specified NIC to be the default one + for a selected VM. + + + + + parameter + description + Value + + + + + virtualmachineid + The unique ID of the VM for which you want to specify the default NIC. + + true + + + nicid + The unique ID of the NIC that you want to set as the default + one. + true + + + + +
+
diff --git a/docs/en-US/added-API-commands-4-1.xml b/docs/en-US/added-API-commands-4-1.xml new file mode 100644 index 00000000000..aa5529e41ff --- /dev/null +++ b/docs/en-US/added-API-commands-4-1.xml @@ -0,0 +1,69 @@ + + +%BOOK_ENTITIES; +]> + +
+ Added API Commands in 4.1-incubating + + + createEgressFirewallRules (creates an egress firewall rule on the guest network.) + + + deleteEgressFirewallRules (deletes a egress firewall rule on the guest network.) + + + listEgressFirewallRules (lists the egress firewall rules configured for a guest + network.) + + + resetSSHKeyForVirtualMachine (Resets the SSHkey for virtual machine.) + + + addBaremetalHost (Adds a new host.) + + + addNicToVirtualMachine (Adds a new NIC to the specified VM on a selected + network.) + + + removeNicFromVirtualMachine (Removes the specified NIC from a selected VM.) + + + updateDefaultNicForVirtualMachine (Updates the specified NIC to be the default one for a + selected VM.) + + + addRegion (Registers a Region into another Region.) + + + updateRegion (Updates Region details: ID, Name, Endpoint, User API Key, and User Secret + Key.) + + + removeRegion (Removes a Region from current Region.) + + + listRegions (Get all the Regions. They can be filtered by using the ID or Name.) + + + getUser (This API can only be used by the Admin. Get user details by using the API Key.) + + + +
diff --git a/docs/en-US/added-error-codes.xml b/docs/en-US/added-error-codes.xml index dbfea263598..ae7389122f9 100644 --- a/docs/en-US/added-error-codes.xml +++ b/docs/en-US/added-error-codes.xml @@ -24,7 +24,7 @@
Added &PRODUCT; Error Codes - You can now find the &PRODUCT;-specific error code in the exception response for each type of exception. The following list of error codes is added to the new class named CSExceptionErrorCode. These codes are applicable in &PRODUCT; 3.0.3 and later versions. + You can now find the &PRODUCT;-specific error code in the exception response for each type of exception. The following list of error codes is added to the new class named CSExceptionErrorCode. diff --git a/docs/en-US/advanced-zone-guest-ip-addresses.xml b/docs/en-US/advanced-zone-guest-ip-addresses.xml index fbc6144bec1..66bc0826683 100644 --- a/docs/en-US/advanced-zone-guest-ip-addresses.xml +++ b/docs/en-US/advanced-zone-guest-ip-addresses.xml @@ -11,9 +11,7 @@ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -22,6 +20,12 @@ under the License. -->
- Advanced Zone Guest IP Addresses - When advanced networking is used, the administrator can create additional networks for use by the guests. These networks can span the zone and be available to all accounts, or they can be scoped to a single account, in which case only the named account may create guests that attach to these networks. The networks are defined by a VLAN ID, IP range, and gateway. The administrator may provision thousands of these networks if desired. + Advanced Zone Guest IP Addresses + When advanced networking is used, the administrator can create additional networks for use + by the guests. These networks can span the zone and be available to all accounts, or they can be + scoped to a single account, in which case only the named account may create guests that attach + to these networks. The networks are defined by a VLAN ID, IP range, and gateway. The + administrator may provision thousands of these networks if desired. Additionally, the + administrator can reserve a part of the IP address space for non-&PRODUCT; VMs and + servers.
diff --git a/docs/en-US/aws-ec2-configuration.xml b/docs/en-US/aws-ec2-configuration.xml index 7d26027ba35..dd7732ebced 100644 --- a/docs/en-US/aws-ec2-configuration.xml +++ b/docs/en-US/aws-ec2-configuration.xml @@ -28,14 +28,13 @@ The software that provides AWS API compatibility is installed along with &PRODUCT;. You must enable the services and perform some setup steps prior to using it. - Set the global configuration parameters for each service to true. + Set the global configuration parameters for each service to true. See . Create a set of &PRODUCT; service offerings with names that match the Amazon service offerings. You can do this through the &PRODUCT; UI as described in the Administration Guide. Be sure you have included the Amazon default service offering, m1.small. As well as any EC2 instance types that you will use. - If you did not already do so when you set the configuration parameter in step 1, - restart the Management Server. + If you did not already do so when you set the configuration parameter in step , restart the Management Server. # service cloud-management restart diff --git a/docs/en-US/aws-ec2-user-setup.xml b/docs/en-US/aws-ec2-user-setup.xml index edc371ef376..f41eaa158d7 100644 --- a/docs/en-US/aws-ec2-user-setup.xml +++ b/docs/en-US/aws-ec2-user-setup.xml @@ -45,7 +45,7 @@ AWS API User Registration Each user must perform a one-time registration. The user follows these steps: - + Obtain the following by looking in the &PRODUCT; UI, using the API, or asking the cloud administrator: @@ -69,7 +69,7 @@ wget -O cloudstack-aws-api-register "https://git-wip-us.apache.org/repos/asf?p=incubator-cloudstack.git;a=blob_plain;f=awsapi-setup/setup/cloudstack-aws-api-register;hb=HEAD" - Then execute it, using the parameter values that were obtained in step 1. An example is shown below. + Then execute it, using the access and secret keys that were obtained in step . An example is shown below. $ cloudstack-aws-api-register --apikey=User’s &PRODUCT; API key --secretkey=User’s &PRODUCT; Secret key --cert=/path/to/cert.pem --url=http://&PRODUCT;.server:7080/awsapi diff --git a/docs/en-US/build-deb.xml b/docs/en-US/build-deb.xml index 37e5a7d7474..dca31d23a28 100644 --- a/docs/en-US/build-deb.xml +++ b/docs/en-US/build-deb.xml @@ -51,7 +51,7 @@ and packaging them into DEBs by issuing the following command. -$ dpkg-buildpackge -uc -us +$ dpkg-buildpackage -uc -us diff --git a/docs/en-US/build-rpm.xml b/docs/en-US/build-rpm.xml index e983aba8fe5..ba32ef568ab 100644 --- a/docs/en-US/build-rpm.xml +++ b/docs/en-US/build-rpm.xml @@ -5,78 +5,82 @@ ]>
- Building RPMs - - While we have defined, and you have presumably already installed the - bootstrap prerequisites, there are a number of build time prerequisites - that need to be resolved. &PRODUCT; uses maven for dependency resolution. - You can resolve the buildtime depdencies for CloudStack by running the - following command: - $ mvn -P deps - - - Now that we have resolved the dependencies we can move on to building &PRODUCT; - and packaging them into RPMs by issuing the following command. - $ ./waf rpm - - - Once this completes, you should find assembled RPMs in - artifacts/rpmbuild/RPMS/x86_64 - -
- Creating a yum repo - - While RPMs is an ideal packaging format - it's most easily consumed from - yum repositories over a network. We'll move into the directory with the - newly created RPMs by issuing the following command: - $ cd artifacts/rpmbuild/RPMS/x86_64 - - - Next we'll issue a command to create the repository metadata by - issuing the following command: - $ createrepo ./ - - - The files and directories within our current working directory can now - be uploaded to a web server and serve as a yum repository - + Building RPMs from Source + As mentioned previously in , you will need to install several prerequisites before you can build packages for &PRODUCT;. Here we'll assume you're working with a 64-bit build of CentOS or Red Hat Enterprise Linux. + # yum groupinstall "Development Tools" + # yum install java-1.6.0-openjdk-devel.x86_64 genisoimage mysql mysql-server ws-common-utils MySQL-python tomcat6 createrepo + Next, you'll need to install build-time dependencies for CloudStack with + Maven. We're using Maven 3, so you'll want to + grab a Maven 3 tarball + and uncompress it in your home directory (or whatever location you prefer): + $ tar zxvf apache-maven-3.0.4-bin.tar.gz + $ export PATH=/usr/local/apache-maven-3.0.4//bin:$PATH + Maven also needs to know where Java is, and expects the JAVA_HOME environment + variable to be set: + $ export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/ + Verify that Maven is installed correctly: + $ mvn --version + You probably want to ensure that your environment variables will survive a logout/reboot. + Be sure to update ~/.bashrc with the PATH and JAVA_HOME variables. + + Building RPMs for $PRODUCT; is fairly simple. Assuming you already have the source downloaded and have uncompressed the tarball into a local directory, you're going to be able to generate packages in just a few minutes. + Packaging has Changed + If you've created packages for $PRODUCT; previously, you should be aware that the process has changed considerably since the project has moved to using Apache Maven. Please be sure to follow the steps in this section closely. + +
+ Generating RPMS + Now that we have the prerequisites and source, you will cd to the packaging/centos63/ directory. + Generating RPMs is done using the package.sh script: + $./package.sh + + That will run for a bit and then place the finished packages in dist/rpmbuild/RPMS/x86_64/. + You should see seven RPMs in that directory: cloudstack-agent-4.1.0-SNAPSHOT.el6.x86_64.rpm, cloudstack-awsapi-4.1.0-SNAPSHOT.el6.x86_64.rpm, cloudstack-cli-4.1.0-SNAPSHOT.el6.x86_64.rpm, cloudstack-common-4.1.0-SNAPSHOT.el6.x86_64.rpm, cloudstack-docs-4.1.0-SNAPSHOT.el6.x86_64.rpm, cloudstack-management-4.1.0-SNAPSHOT.el6.x86_64.rpm, and cloudstack-usage-4.1.0-SNAPSHOT.el6.x86_64.rpm. +
+ Creating a yum repo + + While RPMs is a useful packaging format - it's most easily consumed from Yum repositories over a network. The next step is to create a Yum Repo with the finished packages: + $ mkdir -p ~/tmp/repo + $ cp dist/rpmbuild/RPMS/x86_64/*rpm ~/tmp/repo/ + $ createrepo ~/tmp/repo + + + The files and directories within ~/tmp/repo can now be uploaded to a web server and serve as a yum repository. + +
+
+ Configuring your systems to use your new yum repository + + Now that your yum repository is populated with RPMs and metadata + we need to configure the machines that need to install $PRODUCT;. + Create a file named /etc/yum.repos.d/cloudstack.repo with this information: + + [apache-cloudstack] + name=Apache CloudStack + baseurl=http://webserver.tld/path/to/repo + enabled=1 + gpgcheck=0 + + + Completing this step will allow you to easily install $PRODUCT; on a number of machines across the network. + +
+
-
- Configuring your systems to use your new yum repository - - Now that your yum repository is populated with RPMs and metadata - we need to configure our machines that need to install CloudStack. - We will create a file at /etc/yum.repos.d/cloudstack.repo - with the following content: - -[apache-cloudstack] -name=Apache CloudStack -baseurl=http://webserver.tld/path/to/repo -enabled=1 -gpgcheck=0 - - - - Completing this step will allow you to easily install CloudStack on a number of - machines across the network. - -
-
diff --git a/docs/en-US/building-documentation.xml b/docs/en-US/building-documentation.xml new file mode 100644 index 00000000000..484826604fa --- /dev/null +++ b/docs/en-US/building-documentation.xml @@ -0,0 +1,40 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Building &PRODUCT; Documentation + To build a specific guide, go to the source tree of the documentation in /docs and identify the guide you want to build. + Currenlty there are four guides plus the release notes, all defined in publican configuration files: + + publican-adminguide.cfg + publican-devguide.cfg + publican-installation.cfg + publican-plugin-niciranvp.cfg + publican-release-notes.cfg + + To build the Developer guide for example, do the following: + publican build --config=publican-devguide.cfg --formats=pdf --langs=en-US + A pdf file will be created in tmp/en-US/pdf, you may choose to build the guide in a different format like html. In that case just replace the format value. + +
diff --git a/docs/en-US/building-marvin.xml b/docs/en-US/building-marvin.xml index 3dac9d65d60..3332b16d9b1 100644 --- a/docs/en-US/building-marvin.xml +++ b/docs/en-US/building-marvin.xml @@ -25,8 +25,8 @@
Building and Installing Marvin Marvin is built with Maven and is dependent on APIdoc. To build it do the following in the root tree of &PRODUCT;: - mvn -P developer -l :cloud-apidoc - mvn -P developer -l :cloud-marvin + mvn -P developer -pl :cloud-apidoc + mvn -P developer -pl :cloud-marvin If successfull the build will have created the cloudstackAPI Python package under tools/marvin/marvin/cloudstackAPI as well as a gziped Marvin package under tools/marvin dist. To install the Python Marvin module do the following in tools/marvin: sudo python ./setup.py install The dependencies will be downloaded the Python module installed and you should be able to use Marvin in Python. Check that you can import the module before starting to use it. diff --git a/docs/en-US/building-translation.xml b/docs/en-US/building-translation.xml new file mode 100644 index 00000000000..659c55ffc5e --- /dev/null +++ b/docs/en-US/building-translation.xml @@ -0,0 +1,75 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Translating &PRODUCT; Documentation + Now that you know how to build the documentation with Publican, let's move on to building it in different languages. Publican helps us + build the documentation in various languages by using Portable Object Template (POT) files and Portable Objects (PO) files for each language. + + The POT files are generated by parsing all the DocBook files in the language of origin, en-US for us, and creating a long list of strings + for each file that needs to be translated. The translation can be done by hand directly in the PO files of each target language or via the + transifex service. + + + Transifex is a free service to help translate documents and organize distributed teams + of translators. Anyone interested in helping with the translation should get an account on Transifex + + + Three &PRODUCT; projects exist on Transifex. It is recommended to tour those projects to become familiar with Transifex: + + https://www.transifex.com/projects/p/ACS_DOCS/ + https://www.transifex.com/projects/p/ACS_Runbook/ + https://www.transifex.com/projects/p/CloudStackUI/ + + + + + The pot directory should already exist in the source tree. If you want to build an up to date translation, you might have to update it to include any pot file that was not previously generated. + To register new resources on transifex, you will need to be an admin of the transifex &PRODUCT; site. Send an email to the developer list if you want access. + + First we need to generate the .pot files for all the DocBook xml files needed for a particular guide. This is well explained at the publican website in a section on + how to prepare a document for translation. + The basic command to execute to build the pot files for the developer guide is: + publican update_pot --config=publican-devguide.cfg + This will create a pot directory with pot files in it, one for each corresponding xml files needed to build the guide. Once genereated, all pots files need to be configured for translation using transifex this is best done by using the transifex client that you can install with the following command (For RHEL and its derivatives): + yum install transifex-client + The transifex client is also available via PyPi and you can install it like this: + easy_install transifex-client + Once you have installed the transifex client you can run the settx.sh script in the docs directory. This will create the .tx/config file used by transifex to push and pull all translation strings. + All the resource files need to be uploaded to transifex, this is done with the transifex client like so: + tx push -s + Once the translators have completed translation of the documentation, the translated strings can be pulled from transifex like so: + tx pull -a + If you wish to push specific resource files or pull specific languages translation strings, you can do so with the transifex client. A complete documentation of + the client is available on the client website + When you pull new translation strings a directory will be created corresponding to the language of the translation. This directory will contain PO files that will be used by Publican to create the documentation in that specific language. For example assuming that you pull the French translation whose language code is fr-FR, you will build the documentation with publican: + publican build --config=publican-devguide.cfg --formats=html --langs=fr-FR + + + Some languages like Chinese or Japanese will not render well in pdf format and html should be used. + + + + +
diff --git a/docs/en-US/change-console-proxy-ssl-certificate-domain.xml b/docs/en-US/change-console-proxy-ssl-certificate-domain.xml index 46ceaae1a19..89796a22c23 100644 --- a/docs/en-US/change-console-proxy-ssl-certificate-domain.xml +++ b/docs/en-US/change-console-proxy-ssl-certificate-domain.xml @@ -38,8 +38,8 @@ In the Update SSL Certificate screen of the &PRODUCT; UI, paste the following - Certificate from step 1(c). - Private key from step 1(e). + The Certificate you generated in the previous steps. + The Private key you generated in the previous steps. The desired new domain name; for example, company.com diff --git a/docs/en-US/change-network-offering-on-guest-network.xml b/docs/en-US/change-network-offering-on-guest-network.xml index c440c208ffc..2c7db3e9176 100644 --- a/docs/en-US/change-network-offering-on-guest-network.xml +++ b/docs/en-US/change-network-offering-on-guest-network.xml @@ -28,7 +28,9 @@ Log in to the &PRODUCT; UI as an administrator or end user. If you are changing from a network offering that uses the &PRODUCT; virtual router to one that uses external devices as network service providers, you must first stop all the - VMs on the network. See . + VMs on the network. + See "Stopping and Starting Virtual Machines" in the Administrator's Guide. + See . In the left navigation, choose Network. Click the name of the network you want to modify. In the Details tab, click Edit. diff --git a/docs/en-US/changed-apicommands-4.1.xml b/docs/en-US/changed-apicommands-4.1.xml new file mode 100644 index 00000000000..42bd088afb3 --- /dev/null +++ b/docs/en-US/changed-apicommands-4.1.xml @@ -0,0 +1,106 @@ + + +%BOOK_ENTITIES; +]> + +
+ Changed API Commands in 4.1-incubating + + + + + + + API Commands + Description + + + + + + createNetworkOffering + listNetworkOfferings + listNetworks + + + The following request parameters is added: isPersistent. + This parameter determines if the network or network offering created or listed by + using this offering are persistent or not. + + + + + addF5LoadBalancer + configureNetscalerLoadBalancer + addNetscalerLoadBalancer + listF5LoadBalancers + configureF5LoadBalancer + listNetscalerLoadBalancers + + + The following response parameter is removed: inline. + + + + listFirewallRules + createFirewallRule + + The following request parameter is added: traffictype (optional). + + + + listUsageRecords + The following response parameter is added: virtualsize. + + + + + deleteIso + + + The following request parameter is added: forced (optional). + + + + + createStoragePool + + + The following request parameters are made mandatory: + + + podid + + + clusterid + + + + + + + listZones + + + The following request parameters is added: securitygroupenabled + + + + + +
diff --git a/docs/en-US/citrix-xenserver-installation.xml b/docs/en-US/citrix-xenserver-installation.xml index 867d36e1b10..40538658078 100644 --- a/docs/en-US/citrix-xenserver-installation.xml +++ b/docs/en-US/citrix-xenserver-installation.xml @@ -261,15 +261,15 @@ server 3.xenserver.pool.ntp.org Connect FiberChannel cable to all hosts in the cluster and to the FiberChannel storage host.
- + Rescan the SCSI bus. Either use the following command or use XenCenter to perform an HBA rescan. # scsi-rescan - Repeat step 2 on every host. + Repeat step on every host. - + Check to be sure you see the new SCSI disk. # ls /dev/disk/by-id/scsi-360a98000503365344e6f6177615a516b -l The output should look like this, although the specific file name will be different @@ -279,7 +279,7 @@ server 3.xenserver.pool.ntp.org - Repeat step 4 on every host. + Repeat step on every host. On the storage server, run this command to get a unique ID for the new SR. diff --git a/docs/en-US/cloudmonkey.xml b/docs/en-US/cloudmonkey.xml new file mode 100644 index 00000000000..0057562cca2 --- /dev/null +++ b/docs/en-US/cloudmonkey.xml @@ -0,0 +1,224 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ CloudMonkey + CloudMonkey is the &PRODUCT; Command Line Interface (CLI). It is written in Python and leverages Marvin. CloudMonkey can be used both as an interactive shell and as a command line tool which simplifies &PRODUCT; configuration and management. + + CloudMonkey is still under development and should be considered a Work In Progress (WIP), the wiki is the most up to date documentation: + https://cwiki.apache.org/CLOUDSTACK/cloudstack-cloudmonkey-cli.html + + +
+ Installing CloudMonkey + There are two ways to get CloudMonkey: + + + Via the official Apache &PRODUCT; releases (starting with 4.1). + + + + + + Via a community maintained package on Cheese Shop + pip install cloudmonkey + + + +
+ +
+ Configuration + To configure CloudMonkey you can edit the .cloudmonkey_config file in the user's home directory as shown below. The values can also be set interactively at the cloudmonkey prompt + +$ cat .cloudmonkey_config +[CLI] +protocol = http +asyncblock = true +color = true +prompt = cloudmonkey> +history_file = /Users/sebastiengoasguen/.cloudmonkey_history +host = localhost +path = /client/api +port = 8080 +apikey = plgWJfZK4gyS3mOMTVmjUVg-X-jlWlnfaUJ9GAbBbf9EdM-kAYMmAiLqzzq1ElZLYq_u38zCm0bewzGUdP66mg +secretkey = VDaACYb0LV9eNjTetIOElcVQkvJck_J_QljX_FcHRj87ZKiy0z0ty0ZsYBkoXkY9b7eq1EhwJaw7FF3akA3KBQ +timeout = 600 +log_file = /Users/sebastiengoasguen/.cloudmonkey_log + + The values can also be set at the cloudmonkey prompt. The API and secret keys are obtained via the &PRODUCT; UI or via a raw api call. + + set prompt myprompt> +myprompt> set host localhost +myprompt> set port 8080 +myprompt> set apikey +myprompt> set secretkey +]]> + + You can use cloudmonkey to interact with a local cloud, and even with a remote public cloud. You just need to set the host value properly and obtain the keys from the cloud administrator. +
+ +
+ Interactive Shell Usage + To start learning cloudmonkey, the best is to use the interactive shell. Simply type cloudmonkey at the prompt and you should get the interactive shell. + At the cloudmonkey prompt press the tab key twice, you will see all potential verbs available. Pick on, enter a space and then press tab twice. You will see all actions available for that verb + + +EOF assign cancel create detach extract ldap prepare reconnect restart shell update +activate associate change delete disable generate list query register restore start upload +add attach configure deploy enable get mark quit remove revoke stop +api authorize copy destroy exit help migrate reboot reset set suspend +cloudmonkey>create +account diskoffering loadbalancerrule portforwardingrule snapshot tags vpc +autoscalepolicy domain network privategateway snapshotpolicy template vpcoffering +autoscalevmgroup firewallrule networkacl project sshkeypair user vpnconnection +autoscalevmprofile instancegroup networkoffering remoteaccessvpn staticroute virtualrouterelement vpncustomergateway +condition ipforwardingrule physicalnetwork securitygroup storagenetworkiprange vlaniprange vpngateway +counter lbstickinesspolicy pod serviceoffering storagepool volume zone +]]> + + Picking one action and entering a space plus the tab key, you will obtain the list of parameters for that specific api call. + +create network +account= domainid= isAsync= networkdomain= projectid= vlan= +acltype= endip= name= networkofferingid= startip= vpcid= +displaytext= gateway= netmask= physicalnetworkid= subdomainaccess= zoneid= +]]> + + To get additional help on that specific api call you can use the following: + +create network -h +Creates a network +Required args: displaytext name networkofferingid zoneid +Args: account acltype displaytext domainid endip gateway isAsync name netmask networkdomain networkofferingid physicalnetworkid projectid startip subdomainaccess vlan vpcid zoneid + +cloudmonkey>create network -help +Creates a network +Required args: displaytext name networkofferingid zoneid +Args: account acltype displaytext domainid endip gateway isAsync name netmask networkdomain networkofferingid physicalnetworkid projectid startip subdomainaccess vlan vpcid zoneid + +cloudmonkey>create network --help +Creates a network +Required args: displaytext name networkofferingid zoneid +Args: account acltype displaytext domainid endip gateway isAsync name netmask networkdomain networkofferingid physicalnetworkid projectid startip subdomainaccess vlan vpcid zoneid +cloudmonkey> +]]> + + Note the required arguments necessary for the calls. + To find out the required parameters value, using a debugger console on the &PRODUCT; UI might be very useful. For instance using Firebug on Firefox, you can navigate the UI and check the parameters values for each call you are making as you navigate the UI. +
+ +
+ Starting a Virtual Machine instance with CloudMonkey + To start a virtual machine instance we will use the deploy virtualmachine call. + +deploy virtualmachine -h +Creates and automatically starts a virtual machine based on a service offering, disk offering, and template. +Required args: serviceofferingid templateid zoneid +Args: account diskofferingid displayname domainid group hostid hypervisor ipaddress iptonetworklist isAsync keyboard keypair name networkids projectid securitygroupids securitygroupnames serviceofferingid size startvm templateid userdata zoneid +]]> + + The required arguments are serviceofferingid, templateid and zoneid + In order to specify the template that we want to use, we can list all available templates with the following call: + +list templates templatefilter=all +count = 2 +template: +======== +domain = ROOT +domainid = 8a111e58-e155-4482-93ce-84efff3c7c77 +zoneid = e1bfdfaf-3d9b-43d4-9aea-2c9f173a1ae7 +displaytext = SystemVM Template (XenServer) +ostypeid = 849d7d0a-9fbe-452a-85aa-70e0a0cbc688 +passwordenabled = False +id = 6d360f79-4de9-468c-82f8-a348135d298e +size = 2101252608 +isready = True +templatetype = SYSTEM +zonename = devcloud +... +]]> + + In this snippet, I used DevCloud and only showed the beginning output of the first template, the SystemVM template + Similarly to get the serviceofferingid you would do: + +list serviceofferings | grep id +id = ef2537ad-c70f-11e1-821b-0800277e749c +id = c66c2557-12a7-4b32-94f4-48837da3fa84 +id = 3d8b82e5-d8e7-48d5-a554-cf853111bc50 +]]> + + Note that we can use the linux pipe as well as standard linux commands within the interactive shell. Finally we would start an instance with the following call: + +deploy virtualmachine templateid=13ccff62-132b-4caf-b456-e8ef20cbff0e zoneid=e1bfdfaf-3d9b-43d4-9aea-2c9f173a1ae7 serviceofferingid=ef2537ad-c70f-11e1-821b-0800277e749c +jobprocstatus = 0 +created = 2013-03-05T13:04:51-0800 +cmd = com.cloud.api.commands.DeployVMCmd +userid = 7ed6d5da-93b2-4545-a502-23d20b48ef2a +jobstatus = 1 +jobid = c441d894-e116-402d-aa36-fdb45adb16b7 +jobresultcode = 0 +jobresulttype = object +jobresult: +========= +virtualmachine: +============== +domain = ROOT +domainid = 8a111e58-e155-4482-93ce-84efff3c7c77 +haenable = False +templatename = tiny Linux +... +]]> + + The instance would be stopped with: + +cloudmonkey>stop virtualmachine id=7efe0377-4102-4193-bff8-c706909cc2d2 + + The ids that you will use will differ from this example. Make sure you use the ones that corresponds to your &PRODUCT; cloud. +
+ +
+ Scripting with CloudMonkey + All previous examples use CloudMonkey via the interactive shell, however it can be used as a straightfoward CLI, passing the commands to the cloudmonkey command like shown below. + $cloudmonkey list users + As such it can be used in shell scripts, it can received commands via stdin and its output can be parsed like any other unix commands as mentioned before. +
+ +
diff --git a/docs/en-US/console-proxy.xml b/docs/en-US/console-proxy.xml index ade50bbd59f..64183b4bfc0 100644 --- a/docs/en-US/console-proxy.xml +++ b/docs/en-US/console-proxy.xml @@ -3,34 +3,138 @@ %BOOK_ENTITIES; ]> - -
- Console Proxy - The Console Proxy is a type of System Virtual Machine that has a role in presenting a console view via the web UI. It connects the user’s browser to the VNC port made available via the hypervisor for the console of the guest. Both the administrator and end user web UIs offer a console connection. - Clicking on a console icon brings up a new window. The AJAX code downloaded into that window refers to the public IP address of a console proxy VM. There is exactly one public IP address allocated per console proxy VM. The AJAX application connects to this IP. The console proxy then proxies the connection to the VNC port for the requested VM on the Host hosting the guest. . - The hypervisors will have many ports assigned to VNC usage so that multiple VNC sessions can occur simultaneously. - There is never any traffic to the guest virtual IP, and there is no need to enable VNC within the guest. - The console proxy VM will periodically report its active session count to the Management Server. The default reporting interval is five seconds. This can be changed through standard Management Server configuration with the parameter consoleproxy.loadscan.interval. - Assignment of guest VM to console proxy is determined by first determining if the guest VM has a previous session associated with a console proxy. If it does, the Management Server will assign the guest VM to the target Console Proxy VM regardless of the load on the proxy VM. Failing that, the first available running Console Proxy VM that has the capacity to handle new sessions is used. - Console proxies can be restarted by administrators but this will interrupt existing console sessions for users. - The console viewing functionality uses a dynamic DNS service under the domain name realhostip.com to assist in providing SSL security to console sessions. The console proxy is assigned a public IP address. In order to avoid browser warnings for mismatched SSL certificates, the URL for the new console window is set to the form of https://aaa-bbb-ccc-ddd.realhostip.com. Customers will see this URL during console session creation. &PRODUCT; includes the realhostip.com SSL certificate in the console proxy VM. Of course, &PRODUCT; cannot know about DNS A records for our customers' public IPs prior to shipping the software. &PRODUCT; therefore runs a dynamic DNS server that is authoritative for the realhostip.com domain. It maps the aaa-bbb-ccc-ddd part of the DNS name to the IP address aaa.bbb.ccc.ddd on lookups. This allows the browser to correctly connect to the console proxy's public IP, where it then expects and receives a SSL certificate for realhostip.com, and SSL is set up without browser warnings. - -
\ No newline at end of file + Console Proxy + The Console Proxy is a type of System Virtual Machine that has a role in presenting a + console view via the web UI. It connects the user’s browser to the VNC port made available via + the hypervisor for the console of the guest. Both the administrator and end user web UIs offer a + console connection. + Clicking a console icon brings up a new window. The AJAX code downloaded into that window + refers to the public IP address of a console proxy VM. There is exactly one public IP address + allocated per console proxy VM. The AJAX application connects to this IP. The console proxy then + proxies the connection to the VNC port for the requested VM on the Host hosting the + guest. + + The hypervisors will have many ports assigned to VNC usage so that multiple VNC sessions + can occur simultaneously. + + There is never any traffic to the guest virtual IP, and there is no need to enable VNC + within the guest. + The console proxy VM will periodically report its active session count to the Management + Server. The default reporting interval is five seconds. This can be changed through standard + Management Server configuration with the parameter consoleproxy.loadscan.interval. + Assignment of guest VM to console proxy is determined by first determining if the guest VM + has a previous session associated with a console proxy. If it does, the Management Server will + assign the guest VM to the target Console Proxy VM regardless of the load on the proxy VM. + Failing that, the first available running Console Proxy VM that has the capacity to handle new + sessions is used. + Console proxies can be restarted by administrators but this will interrupt existing console + sessions for users. +
+ Using a SSL Certificate for the Console Proxy + The console viewing functionality uses a dynamic DNS service under the domain name + realhostip.com to assist in providing SSL security to console sessions. The console proxy is + assigned a public IP address. In order to avoid browser warnings for mismatched SSL + certificates, the URL for the new console window is set to the form of + https://aaa-bbb-ccc-ddd.realhostip.com. You will see this URL during console session creation. + &PRODUCT; includes the realhostip.com SSL certificate in the console proxy VM. Of course, + &PRODUCT; cannot know about the DNS A records for our customers' public IPs prior to shipping + the software. &PRODUCT; therefore runs a dynamic DNS server that is authoritative for the + realhostip.com domain. It maps the aaa-bbb-ccc-ddd part of the DNS name to the IP address + aaa.bbb.ccc.ddd on lookups. This allows the browser to correctly connect to the console + proxy's public IP, where it then expects and receives a SSL certificate for realhostip.com, + and SSL is set up without browser warnings. +
+
+ Changing the Console Proxy SSL Certificate and Domain + If the administrator prefers, it is possible for the URL of the customer's console session + to show a domain other than realhostip.com. The administrator can customize the displayed + domain by selecting a different domain and uploading a new SSL certificate and private key. + The domain must run a DNS service that is capable of resolving queries for addresses of the + form aaa-bbb-ccc-ddd.your.domain to an IPv4 IP address in the form aaa.bbb.ccc.ddd, for + example, 202.8.44.1. To change the console proxy domain, SSL certificate, and private + key: + + + Set up dynamic name resolution or populate all possible DNS names in your public IP + range into your existing DNS server with the format aaa-bbb-ccc-ddd.company.com -> + aaa.bbb.ccc.ddd. + + + Generate the private key and certificate signing request (CSR). When you are using + openssl to generate private/public key pairs and CSRs, for the private key that you are + going to paste into the &PRODUCT; UI, be sure to convert it into PKCS#8 format. + + + Generate a new 2048-bit private key + openssl genrsa -des3 -out yourprivate.key 2048 + + + Generate a new certificate CSR + openssl req -new -key yourprivate.key -out yourcertificate.csr + + + Head to the website of your favorite trusted Certificate Authority, purchase an + SSL certificate, and submit the CSR. You should receive a valid certificate in + return + + + Convert your private key format into PKCS#8 encrypted format. + openssl pkcs8 -topk8 -in yourprivate.key -out yourprivate.pkcs8.encryped.key + + + Convert your PKCS#8 encrypted private key into the PKCS#8 format that is compliant + with &PRODUCT; + openssl pkcs8 -in yourprivate.pkcs8.encrypted.key -out yourprivate.pkcs8.key + + + + + In the Update SSL Certificate screen of the &PRODUCT; UI, paste the following: + + + The certificate you've just generated. + + + The private key you've just generated. + + + The desired new domain name; for example, company.com + + + + + + + + updatessl.png: Updating Console Proxy SSL Certificate + + + + + The desired new domain name; for example, company.com + This stops all currently running console proxy VMs, then restarts them with the new + certificate and key. Users might notice a brief interruption in console + availability. + + + The Management Server generates URLs of the form "aaa-bbb-ccc-ddd.company.com" after this + change is made. The new console requests will be served with the new DNS domain name, + certificate, and key. +
+
diff --git a/docs/en-US/create-bare-metal-template.xml b/docs/en-US/create-bare-metal-template.xml index 19db2ed5f30..0ee4c11fead 100644 --- a/docs/en-US/create-bare-metal-template.xml +++ b/docs/en-US/create-bare-metal-template.xml @@ -24,7 +24,6 @@
Creating a Bare Metal Template - Beta feature. Untested in &PRODUCT; 3.0.3. Provided without guarantee of performance. Before you can create a bare metal template, you must have performed several other installation and setup steps to create a bare metal cluster and environment. See Bare Metal Installation in the Installation Guide. It is assumed you already have a directory named "win7_64bit" on your CIFS server, containing the image for the bare metal instance. This directory and image are set up as part of the Bare Metal Installation procedure. Log in to the &PRODUCT; UI as an administrator or end user. diff --git a/docs/en-US/creating-network-offerings.xml b/docs/en-US/creating-network-offerings.xml index d733924ba70..1f79fb166ce 100644 --- a/docs/en-US/creating-network-offerings.xml +++ b/docs/en-US/creating-network-offerings.xml @@ -22,146 +22,208 @@ under the License. -->
- Creating a New Network Offering - To create a network offering: - - Log in with admin privileges to the &PRODUCT; UI. - In the left navigation bar, click Service Offerings. - In Select Offering, choose Network Offering. - Click Add Network Offering. - In the dialog, make the following choices: - - Name. Any desired name for the network offering - Description. A short description of the offering that can be - displayed to users - Network Rate. Allowed data transfer rate in MB per - second - Guest Type. Choose whether the guest network is isolated or - shared. For a description of these terms, see - - Specify VLAN. (Isolated guest networks only) Indicate whether - a VLAN should be specified when this offering is used - Supported Services. Select one or more of the possible - network services. For some services, you must also choose the service - provider; for example, if you select Load Balancer, you can choose the - &PRODUCT; virtual router or any other load balancers that have been - configured in the cloud. Depending on which services you choose, additional - fields may appear in the rest of the dialog box.Based on the guest network type selected, you can see the following supported services: - - - - Supported Services - Description - Isolated - Shared - - - - - DHCP - For more information, see . - Supported - Supported - - - DNS - For more information, see . - Supported - Supported - - - Load Balancer - If you select Load Balancer, you can choose the &PRODUCT; virtual router or any other load - balancers that have been configured in the cloud. - Supported - Supported - - - Source NAT - If you select Source NAT, you can choose the &PRODUCT; virtual router or any other Source - NAT providers that have been configured in the - cloud. - Supported - Supported - - - Static NAT - If you select Static NAT, you can choose the &PRODUCT; virtual router or any other Static - NAT providers that have been configured in the - cloud. - Supported - Supported - - - Port Forwarding - If you select Port Forwarding, you can choose the &PRODUCT; virtual router or any other - Port Forwarding providers that have been configured in - the cloud. - Supported - Not Supported - - - VPN - For more information, see . - Supported - Not Supported - - - User Data - For more information, see . - Not Supported - Supported - - - Network ACL - For more information, see . - Supported - Not Supported - - - Security Groups - For more information, see . - Not Supported - Supported - - - - - - System Offering. If the service provider for any of the - services selected in Supported Services is a virtual router, the System - Offering field appears. Choose the system service offering that you want - virtual routers to use in this network. For example, if you selected Load - Balancer in Supported Services and selected a virtual router to provide load - balancing, the System Offering field appears so you can choose between the - &PRODUCT; default system service offering and any custom system service - offerings that have been defined by the &PRODUCT; root administrator. - For more information, see System Service Offerings. - Redundant router capability. (v3.0.3 and greater) Available - only when Virtual Router is selected as the Source NAT provider. Select this - option if you want to use two virtual routers in the network for - uninterrupted connection: one operating as the master virtual router and the - other as the backup. The master virtual router receives requests from and - sends responses to the user’s VM. The backup virtual router is activated - only when the master is down. After the failover, the backup becomes the - master virtual router. &PRODUCT; deploys the routers on different hosts - to ensure reliability if one host is down. - Conserve mode. Indicate whether to use conserve mode. In this - mode, network resources are allocated only when the first virtual machine - starts in the network. When the conservative mode is off, the public IP can - only be used for a single service. For example, a public IP used for a port - forwarding rule cannot be used for defining other services, such as SaticNAT - or load balancing. When the conserve mode is on, you can define more than - one service on the same public IP. - If StaticNAT is enabled, irrespective of the status of the conserve mode, no port forwarding - or load balancing rule can be created for the IP. However, you can add - the firewall rules by using the createFirewallRule command. - Tags. Network tag to specify which physical network to - use. - - Click Add. - - - + Creating a New Network Offering + To create a network offering: + + + Log in with admin privileges to the &PRODUCT; UI. + + + In the left navigation bar, click Service Offerings. + + + In Select Offering, choose Network Offering. + + + Click Add Network Offering. + + + In the dialog, make the following choices: + + + Name. Any desired name for the network + offering. + + + Description. A short description of the offering + that can be displayed to users. + + + Network Rate. Allowed data transfer rate in MB per + second. + + + Guest Type. Choose whether the guest network is + isolated or shared. + For a description of this term, see . + For a description of this term, see the Administration Guide. + + + + Persistent. Indicate whether the guest network is + persistent or not. The network that you can provision without having to deploy a VM on + it is termed persistent network. For more information, see . + + + Specify VLAN. (Isolated guest networks only) + Indicate whether a VLAN should be specified when this offering is used. + + + VPC. This option indicate whether the guest network + is Virtual Private Cloud-enabled. A Virtual Private Cloud (VPC) is a private, isolated + part of &PRODUCT;. A VPC can have its own virtual network topology that resembles a + traditional physical network. For more information on VPCs, see . + + + Supported Services. Select one or more of the + possible network services. For some services, you must also choose the service provider; + for example, if you select Load Balancer, you can choose the &PRODUCT; virtual router or + any other load balancers that have been configured in the cloud. Depending on which + services you choose, additional fields may appear in the rest of the dialog box. + Based on the guest network type selected, you can see the following supported + services: + + + + + Supported Services + Description + Isolated + Shared + + + + + DHCP + For more information, see . + Supported + Supported + + + DNS + For more information, see . + Supported + Supported + + + Load Balancer + If you select Load Balancer, you can choose the &PRODUCT; virtual + router or any other load balancers that have been configured in the + cloud. + Supported + Supported + + + Firewall + For more information, see . + For more information, see the Administration + Guide. + Supported + Supported + + + Source NAT + If you select Source NAT, you can choose the &PRODUCT; virtual router + or any other Source NAT providers that have been configured in the + cloud. + Supported + Supported + + + Static NAT + If you select Static NAT, you can choose the &PRODUCT; virtual router + or any other Static NAT providers that have been configured in the + cloud. + Supported + Supported + + + Port Forwarding + If you select Port Forwarding, you can choose the &PRODUCT; virtual + router or any other Port Forwarding providers that have been configured in the + cloud. + Supported + Not Supported + + + VPN + For more information, see . + Supported + Not Supported + + + User Data + For more information, see . + For more information, see the Administration + Guide. + Not Supported + Supported + + + Network ACL + For more information, see . + Supported + Not Supported + + + Security Groups + For more information, see . + Not Supported + Supported + + + + + + + System Offering. If the service provider for any of + the services selected in Supported Services is a virtual router, the System Offering + field appears. Choose the system service offering that you want virtual routers to use + in this network. For example, if you selected Load Balancer in Supported Services and + selected a virtual router to provide load balancing, the System Offering field appears + so you can choose between the &PRODUCT; default system service offering and any custom + system service offerings that have been defined by the &PRODUCT; root + administrator. + For more information, see . + For more information, see the Administration Guide. + + + Redundant router capability. Available only when + Virtual Router is selected as the Source NAT provider. Select this option if you want to + use two virtual routers in the network for uninterrupted connection: one operating as + the master virtual router and the other as the backup. The master virtual router + receives requests from and sends responses to the user’s VM. The backup virtual router + is activated only when the master is down. After the failover, the backup becomes the + master virtual router. &PRODUCT; deploys the routers on different hosts to ensure + reliability if one host is down. + + + Conserve mode. Indicate whether to use conserve + mode. In this mode, network resources are allocated only when the first virtual machine + starts in the network. When conservative mode is off, the public IP can only be used for + a single service. For example, a public IP used for a port forwarding rule cannot be + used for defining other services, such as SaticNAT or load balancing. When the conserve + mode is on, you can define more than one service on the same public IP. + + If StaticNAT is enabled, irrespective of the status of the conserve mode, no port + forwarding or load balancing rule can be created for the IP. However, you can add the + firewall rules by using the createFirewallRule command. + + + + Tags. Network tag to specify which physical network + to use. + + + + + Click Add. + +
diff --git a/docs/en-US/creating-vms.xml b/docs/en-US/creating-vms.xml index 86d89fd2e92..18995979a80 100644 --- a/docs/en-US/creating-vms.xml +++ b/docs/en-US/creating-vms.xml @@ -23,7 +23,7 @@
Creating VMs Virtual machines are usually created from a template. Users can also create blank virtual machines. A blank virtual machine is a virtual machine without an OS template. Users can attach an ISO file and install the OS from the CD/DVD-ROM. - Starting with v3.0.3, you can create a VM without starting it. You can determine whether the VM needs to be started as part of the VM deployment. A new request parameter, startVM, is introduced in the deployVm API to support this feature. For more information, see the Developer's Guide + You can create a VM without starting it. You can determine whether the VM needs to be started as part of the VM deployment. A request parameter, startVM, in the deployVm API provides this feature. For more information, see the Developer's Guide To create a VM from a template: Log in to the &PRODUCT; UI as an administrator or user. diff --git a/docs/en-US/dedicated-ha-hosts.xml b/docs/en-US/dedicated-ha-hosts.xml index ab50700197a..89c721f080a 100644 --- a/docs/en-US/dedicated-ha-hosts.xml +++ b/docs/en-US/dedicated-ha-hosts.xml @@ -24,7 +24,7 @@
Dedicated HA Hosts - (v3.0.3 and greater) One or more hosts can be designated for use only by HA-enabled VMs that are restarting due to a host failure. Setting up a pool of such dedicated HA hosts as the recovery destination for all HA-enabled VMs is useful to: + One or more hosts can be designated for use only by HA-enabled VMs that are restarting due to a host failure. Setting up a pool of such dedicated HA hosts as the recovery destination for all HA-enabled VMs is useful to: Make it easier to determine which VMs have been restarted as part of the &PRODUCT; high-availability function. If a VM is running on a dedicated HA host, then it must be an HA-enabled VM whose original host failed. (With one exception: It is possible for an administrator to manually migrate any VM to a dedicated HA host.). Keep HA-enabled VMs from restarting on hosts which may be reserved for other purposes. diff --git a/docs/en-US/deployment-architecture-overview.xml b/docs/en-US/deployment-architecture-overview.xml index fba36eb85a3..e3103c52c1c 100644 --- a/docs/en-US/deployment-architecture-overview.xml +++ b/docs/en-US/deployment-architecture-overview.xml @@ -48,7 +48,8 @@ A more full-featured installation consists of a highly-available multi-node Management Server installation and up to tens of thousands of hosts using any of several advanced networking setups. For - information about deployment options, see Choosing a Deployment Architecture. + information about deployment options, see the "Choosing a Deployment Architecture" + section of the $PRODUCT; Installation Guide. diff --git a/docs/en-US/devcloud-usage-mode.xml b/docs/en-US/devcloud-usage-mode.xml index bb65f904ccd..bc211ce1436 100644 --- a/docs/en-US/devcloud-usage-mode.xml +++ b/docs/en-US/devcloud-usage-mode.xml @@ -32,7 +32,7 @@ The following diagram shows the architecture of the SandBox mode. - + DevCloud.png: Schematic of the DevCloud SandBox architecture @@ -49,7 +49,7 @@ The following schematic shows the architecture of the Host-Only mode. - + DevCloud-hostonly.png: Schematic of the DevCloud host-only architecture diff --git a/docs/en-US/egress-firewall-rule.xml b/docs/en-US/egress-firewall-rule.xml new file mode 100644 index 00000000000..ef0e25efd03 --- /dev/null +++ b/docs/en-US/egress-firewall-rule.xml @@ -0,0 +1,98 @@ + + +%BOOK_ENTITIES; +]> + +
+ Creating Egress Firewall Rules in an Advanced Zone + + The egress firewall rules are supported only on virtual routers. + + + The egress traffic originates from a private network to a public network, such as the + Internet. By default, the egress traffic is blocked, so no outgoing traffic is allowed from a + guest network to the Internet. However, you can control the egress traffic in an Advanced zone + by creating egress firewall rules. When an egress firewall rule is applied, the traffic specific + to the rule is allowed and the remaining traffic is blocked. When all the firewall rules are + removed the default policy, Block, is applied. + Consider the following scenarios to apply egress firewall rules: + + + Allow the egress traffic from specified source CIDR. The Source CIDR is part of guest + network CIDR. + + + Allow the egress traffic with destination protocol TCP,UDP,ICMP, or ALL. + + + Allow the egress traffic with destination protocol and port range. The port range is + specified for TCP, UDP or for ICMP type and code. + + + To configure an egress firewall rule: + + + Log in to the &PRODUCT; UI as an administrator or end user. + + + In the left navigation, choose Network. + + + In Select view, choose Guest networks, then click the Guest network you want. + + + To add an egress rule, click the Egress rules tab and fill out the following fields to + specify what type of traffic is allowed to be sent out of VM instances in this guest + network: + + + + + + egress-firewall-rule.png: adding an egress firewall rule + + + + + CIDR: (Add by CIDR only) To send traffic only to + the IP addresses within a particular address block, enter a CIDR or a comma-separated + list of CIDRs. The CIDR is the base IP address of the destination. For example, + 192.168.0.0/22. To allow all CIDRs, set to 0.0.0.0/0. + + + Protocol: The networking protocol that VMs uses to + send outgoing traffic. The TCP and UDP protocols are typically used for data exchange + and end-user communications. The ICMP protocol is typically used to send error messages + or network monitoring data. + + + Start Port, End Port: (TCP, UDP only) A range of + listening ports that are the destination for the outgoing traffic. If you are opening a + single port, use the same number in both fields. + + + ICMP Type, ICMP Code: (ICMP only) The type of + message and error code that are sent. + + + + + Click Add. + + +
diff --git a/docs/en-US/event-framework.xml b/docs/en-US/event-framework.xml new file mode 100644 index 00000000000..88c45c9033d --- /dev/null +++ b/docs/en-US/event-framework.xml @@ -0,0 +1,110 @@ + + +%BOOK_ENTITIES; +]> + + +
+ Event Notification + Event notification framework provides a means for the Management Server components to + publish and subscribe to &PRODUCT; events. Event notification is achieved by implementing the + concept of event bus abstraction in the Management Server. An event bus is introduced in the + Management Server that allows the &PRODUCT;components and extension plug-ins to subscribe to the + events by using the Advanced Message Queuing Protocol (AMQP) client. In &PRODUCT;, a default + implementation of event bus is provided as a plug-in that uses the RabbitMQ AMQP client. The + AMQP client pushes the published events to a compatible AMQP server. Therefore all the &PRODUCT; + events are published to an exchange in the AMQP server. + A new event for state change, resource state change, is introduced as part of Event + notification framework. Every resource, such as user VM, volume, NIC, network, public IP, + snapshot, and template, is associated with a state machine and generates events as part of the + state change. That implies that a change in the state of a resource results in a state change + event, and the event is published in the corresponding state machine on the event bus. All the + &PRODUCT; events (alerts, action events, usage events) and the additional category of resource + state change events, are published on to the events bus. + + Use Cases + The following are some of the use cases: + + + + Usage or Billing Engines: A third-party cloud usage solution can implement a plug-in + that can connects to &PRODUCT; to subscribe to &PRODUCT; events and generate usage data. The + usage data is consumed by their usage software. + + + AMQP plug-in can place all the events on the a message queue, then a AMQP message broker + can provide topic-based notification to the subscribers. + + + Publish and Subscribe notification service can be implemented as a pluggable service in + &PRODUCT; that can provide rich set of APIs for event notification, such as topics-based + subscription and notification. Additionally, the pluggable service can deal with + multi-tenancy, authentication, and authorization issues. + + + + Configuration + As a &PRODUCT; administrator, perform the following one-time configuration to enable event + notification framework. At run time no changes can control the behaviour. + + + + Open 'componentContext.xml. + + + Define a bean named eventNotificationBus as follows: + + + name : Specify a name for the bean. + + + server : The name or the IP address of the RabbitMQ AMQP server. + + + port : The port on which RabbitMQ server is running. + + + username : The username associated with the account to access the RabbitMQ + server. + + + password : The password associated with the username of the account to access the + RabbitMQ server. + + + exchange : The exchange name on the RabbitMQ server where &PRODUCT; events are + published. + A sample bean is given below: + <bean id="eventNotificationBus" class="org.apache.cloudstack.mom.rabbitmq.RabbitMQEventBus"> + <property name="name" value="eventNotificationBus"/> + <property name="server" value="127.0.0.1"/> + <property name="port" value="5672"/> + <property name="username" value="guest"/> + <property name="password" value="guest"/> + <property name="exchange" value="cloudstack-events"/> + </bean> + The eventNotificationBus bean represents the + org.apache.cloudstack.mom.rabbitmq.RabbitMQEventBus class. + + + + + Restart the Management Server. + + +
diff --git a/docs/en-US/events.xml b/docs/en-US/events.xml index 242ff4511ff..49ef86e62b5 100644 --- a/docs/en-US/events.xml +++ b/docs/en-US/events.xml @@ -21,11 +21,17 @@ specific language governing permissions and limitations under the License. --> -
- Events - - - - + Events + An event is essentially a significant or meaningful change in the state of both virtual and + physical resources associated with a cloud environment. Events are used by monitoring systems, + usage and billing systems, or any other event-driven workflow systems to discern a pattern and + make the right business decision. In &PRODUCT; an event could be a state change of virtual or + psychical resources, an action performed by an user (action events), or policy based events + (alerts). + + + + +
diff --git a/docs/en-US/external-firewalls-and-load-balancers.xml b/docs/en-US/external-firewalls-and-load-balancers.xml index 6ca49f0ef03..b947daf7361 100644 --- a/docs/en-US/external-firewalls-and-load-balancers.xml +++ b/docs/en-US/external-firewalls-and-load-balancers.xml @@ -27,7 +27,7 @@ -
diff --git a/docs/en-US/firewall-rules.xml b/docs/en-US/firewall-rules.xml index 01d072bbcc4..837a4c6f9d0 100644 --- a/docs/en-US/firewall-rules.xml +++ b/docs/en-US/firewall-rules.xml @@ -3,53 +3,80 @@ %BOOK_ENTITIES; ]> -
- Firewall Rules - By default, all incoming traffic to the public IP address is rejected by the firewall. To allow external traffic, you can open firewall ports by specifying firewall rules. You can optionally specify one or more CIDRs to filter the source IPs. This is useful when you want to allow only incoming requests from certain IP addresses. - You cannot use firewall rules to open ports for an elastic IP address. When elastic IP is used, outside access is instead controlled through the use of security groups. See . - Firewall rules can be created using the Firewall tab in the Management Server UI. This tab is not displayed by default when &PRODUCT; is installed. To display the Firewall tab, the &PRODUCT; administrator must set the global configuration parameter firewall.rule.ui.enabled to "true." - To create a firewall rule: - - Log in to the &PRODUCT; UI as an administrator or end user. - In the left navigation, choose Network. - Click the name of the network where you want to work with. - Click View IP Addresses. - Click the IP address you want to work with. - - Click the Configuration tab and fill in the following values. - - Source CIDR. (Optional) To accept only traffic from IP - addresses within a particular address block, enter a CIDR or a - comma-separated list of CIDRs. Example: 192.168.0.0/22. Leave empty to allow - all CIDRs. - Protocol. The communication protocol in use on the opened - port(s). - Start Port and End Port. The port(s) you want to open on the - firewall. If you are opening a single port, use the same number in both - fields - ICMP Type and ICMP Code. Used only if Protocol is set to - ICMP. Provide the type and code required by the ICMP protocol to fill out - the ICMP header. Refer to ICMP documentation for more details if you are not - sure what to enter - - Click Add. - + Firewall Rules + By default, all incoming traffic to the public IP address is rejected by the firewall. To + allow external traffic, you can open firewall ports by specifying firewall rules. You can + optionally specify one or more CIDRs to filter the source IPs. This is useful when you want to + allow only incoming requests from certain IP addresses. + You cannot use firewall rules to open ports for an elastic IP address. When elastic IP is + used, outside access is instead controlled through the use of security groups. See . + In an advanced zone, you can also create egress firewall rules by using the virtual router. + For more information, see . + Firewall rules can be created using the Firewall tab in the Management Server UI. This tab + is not displayed by default when &PRODUCT; is installed. To display the Firewall tab, the + &PRODUCT; administrator must set the global configuration parameter firewall.rule.ui.enabled to + "true." + To create a firewall rule: + + + Log in to the &PRODUCT; UI as an administrator or end user. + + + In the left navigation, choose Network. + + + Click the name of the network where you want to work with. + + + Click View IP Addresses. + + + Click the IP address you want to work with. + + + Click the Configuration tab and fill in the following values. + + + Source CIDR. (Optional) To accept only traffic from + IP addresses within a particular address block, enter a CIDR or a comma-separated list + of CIDRs. Example: 192.168.0.0/22. Leave empty to allow all CIDRs. + + + Protocol. The communication protocol in use on the + opened port(s). + + + Start Port and End Port. The port(s) you want to + open on the firewall. If you are opening a single port, use the same number in both + fields + + + ICMP Type and ICMP Code. Used only if Protocol is + set to ICMP. Provide the type and code required by the ICMP protocol to fill out the + ICMP header. Refer to ICMP documentation for more details if you are not sure what to + enter + + + + + Click Add. + +
diff --git a/docs/en-US/getting-release.xml b/docs/en-US/getting-release.xml index 09f0a7b08fe..b9e97c9b03d 100644 --- a/docs/en-US/getting-release.xml +++ b/docs/en-US/getting-release.xml @@ -29,35 +29,13 @@ Apache CloudStack project download page. - - You'll notice several links under the 'Latest release' section. - - - - - - apache-cloudstack-4.0.0-incubating-src.tar.bz2 - - This is the link to the release itself. - - - - - PGP - - This is a detached cryptographic signature that can be used to help - verify the authenticity of the release. - - - - - MD5 - - An MD5 hash of the release to aid in verify the validity of the release download. - - - - - SHA512 - - A SHA512 hash of the release to aid in verify the validity of the release download. - - - + Prior releases are available via archive.apache.org at http://archive.apache.org/dist/incubator/cloudstack/releases/. + + You'll notice several links under the 'Latest release' section. A link to a file ending in tar.bz2, as well as a PGP/GPG signature, MD5, and SHA512 file. + + The tar.bz2 file contains the Bzip2-compressed tarball with the source code. + The .asc file is a detached cryptographic signature that can be used to help verify the authenticity of the release. + The .md5 file is an MD5 hash of the release to aid in verify the validity of the release download. + The .sha file is a SHA512 hash of the release to aid in verify the validity of the release download. +
diff --git a/docs/en-US/globally-configured-limits.xml b/docs/en-US/globally-configured-limits.xml index 48a91f1b01e..ac71112b310 100644 --- a/docs/en-US/globally-configured-limits.xml +++ b/docs/en-US/globally-configured-limits.xml @@ -22,7 +22,7 @@ under the License. --> -
+
Globally Configured Limits In a zone, the guest virtual network has a 24 bit CIDR by default. This limits the guest virtual network to 254 running instances. It can be adjusted as needed, but this must be done before any instances are created in the zone. For example, 10.1.1.0/22 would provide for ~1000 addresses. The following table lists limits set in the Global Configuration: diff --git a/docs/en-US/guest-traffic.xml b/docs/en-US/guest-traffic.xml index 16dfa41cf7b..bca635582a8 100644 --- a/docs/en-US/guest-traffic.xml +++ b/docs/en-US/guest-traffic.xml @@ -23,7 +23,14 @@ -->
Guest Traffic - A network can carry guest traffic only between VMs within one zone. Virtual machines in different zones cannot communicate with each other using their IP addresses; they must communicate with each other by routing through a public IP address. + A network can carry guest traffic only between VMs within one zone. Virtual machines in different zones cannot communicate with each other using their IP addresses; they must communicate with each other by routing through a public IP address. + This figure illustrates a typical guest traffic setup: + + + + + Depicts a guest traffic setup. + The Management Server automatically creates a virtual router for each network. A virtual router is a special virtual machine that runs on the hosts. Each virtual router has three network interfaces. Its eth0 interface serves as the gateway for the guest traffic and has the IP address of 10.1.1.1. Its eth1 interface is used by the system to configure the virtual router. Its eth2 interface is assigned a public IP address for public traffic. The virtual router provides DHCP and will automatically assign an IP address for each guest VM within the IP range assigned for the network. The user can manually reconfigure guest VMs to assume different IP addresses. Source NAT is automatically configured in the virtual router to forward outbound traffic for all guest VMs diff --git a/docs/en-US/host-add.xml b/docs/en-US/host-add.xml index c602d36d726..74509d69be7 100644 --- a/docs/en-US/host-add.xml +++ b/docs/en-US/host-add.xml @@ -27,6 +27,7 @@ Before adding a host to the &PRODUCT; configuration, you must first install your chosen hypervisor on the host. &PRODUCT; can manage hosts running VMs under a variety of hypervisors. The &PRODUCT; Installation Guide provides instructions on how to install each supported hypervisor + and configure it for use with &PRODUCT;. See the appropriate section in the Installation Guide for information about which version of your chosen hypervisor is supported, as well as crucial additional steps to configure the hypervisor hosts for use with &PRODUCT;. Be sure you have performed the additional &PRODUCT;-specific configuration steps described in the hypervisor installation section for your particular hypervisor. Now add the hypervisor host to &PRODUCT;. The technique to use varies depending on the hypervisor. diff --git a/docs/en-US/hypervisor-host-install-libvirt.xml b/docs/en-US/hypervisor-host-install-libvirt.xml index 8ba2fe99a2a..d7dc47f8dbd 100644 --- a/docs/en-US/hypervisor-host-install-libvirt.xml +++ b/docs/en-US/hypervisor-host-install-libvirt.xml @@ -31,7 +31,7 @@ Set the following paramaters: listen_tls = 0 listen_tcp = 1 - tcp_port = "16059" + tcp_port = "16509" auth_tcp = "none" mdns_adv = 0 @@ -40,11 +40,11 @@ On RHEL or CentOS modify /etc/sysconfig/libvirtd: Uncomment the following line: #LIBVIRTD_ARGS="--listen" - On Ubuntu: modify /etc/init/libvirt-bin.conf - Change the following line (at the end of the file): - exec /usr/sbin/libvirtd -d - to (just add -l) - exec /usr/sbin/libvirtd -d -l + On Ubuntu: modify /etc/default/libvirt-bin + Add "-l" to the following line:: + libvirtd_opts="-d" + so it looks like: + libvirtd_opts="-d -l" Restart libvirt diff --git a/docs/en-US/images/egress-firewall-rule.png b/docs/en-US/images/egress-firewall-rule.png new file mode 100644 index 00000000000..fa1d8ecd0bd Binary files /dev/null and b/docs/en-US/images/egress-firewall-rule.png differ diff --git a/docs/en-US/images/resize-volume-icon.png b/docs/en-US/images/resize-volume-icon.png new file mode 100644 index 00000000000..48499021f06 Binary files /dev/null and b/docs/en-US/images/resize-volume-icon.png differ diff --git a/docs/en-US/images/resize-volume.png b/docs/en-US/images/resize-volume.png new file mode 100644 index 00000000000..6195623ab49 Binary files /dev/null and b/docs/en-US/images/resize-volume.png differ diff --git a/docs/en-US/installing-publican.xml b/docs/en-US/installing-publican.xml new file mode 100644 index 00000000000..9f180aad375 --- /dev/null +++ b/docs/en-US/installing-publican.xml @@ -0,0 +1,46 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Installing Publican + &PRODUCT; documentation is built using publican. This section describes how to install publican on your own machine so that you can build the documentation guides. + + The &PRODUCT; documentation source code is located under /docs + Publican documentation itself is also very useful. + + On RHEL and RHEL derivatives, install publican with the following command: + yum install publican publican-doc + On Ubuntu, install publican with the following command: + apt-get install publican publican-doc + For other distribution refer to the publican documentation listed above. For latest versions of OSX you may have to install from source and tweak it to your own setup. + Once publican is installed, you need to setup the so-called &PRODUCT; brand defined in the docs/publican-&PRODUCT; directory. + To do so, enter the following commands: + + sudo cp -R publican-cloudstack /usr/share/publican/Common_Content/cloudstack + + If this fails or you later face errors related to the brand files, see the publican documentation. + With publican installed and the &PRODUCT; brand files in place, you should be able to build any documentation guide. + + +
diff --git a/docs/en-US/ip-forwarding-firewalling.xml b/docs/en-US/ip-forwarding-firewalling.xml index c154b078da3..54e18b7cfbc 100644 --- a/docs/en-US/ip-forwarding-firewalling.xml +++ b/docs/en-US/ip-forwarding-firewalling.xml @@ -3,28 +3,30 @@ %BOOK_ENTITIES; ]> -
- IP Forwarding and Firewalling - By default, all incoming traffic to the public IP address is rejected. All outgoing traffic from the guests is translated via NAT to the public IP address and is allowed. - To allow incoming traffic, users may set up firewall rules and/or port forwarding rules. For example, you can use a firewall rule to open a range of ports on the public IP address, such as 33 through 44. Then use port forwarding rules to direct traffic from individual ports within that range to specific ports on user VMs. For example, one port forwarding rule could route incoming traffic on the public IP's port 33 to port 100 on one user VM's private IP. - - + IP Forwarding and Firewalling + By default, all incoming traffic to the public IP address is rejected. All outgoing traffic + from the guests is translated via NAT to the public IP address and is allowed. + To allow incoming traffic, users may set up firewall rules and/or port forwarding rules. For + example, you can use a firewall rule to open a range of ports on the public IP address, such as + 33 through 44. Then use port forwarding rules to direct traffic from individual ports within + that range to specific ports on user VMs. For example, one port forwarding rule could route + incoming traffic on the public IP's port 33 to port 100 on one user VM's private IP. + +
diff --git a/docs/en-US/load-balancer-rules.xml b/docs/en-US/load-balancer-rules.xml index 1ce5cd09c5d..77739001966 100644 --- a/docs/en-US/load-balancer-rules.xml +++ b/docs/en-US/load-balancer-rules.xml @@ -22,11 +22,19 @@ under the License. -->
- Load Balancer Rules - A &PRODUCT; user or administrator may create load balancing rules that balance traffic received at a public IP to one or more VMs. A user creates a rule, specifies an algorithm, and assigns the rule to a set of VMs. - If you create load balancing rules while using a network service offering that includes an external load balancer device such as NetScaler, and later change the network service offering to one that uses the &PRODUCT; virtual router, you must create a firewall rule on the virtual router for each of your existing load balancing rules so that they continue to function. - - - - + Load Balancer Rules + A &PRODUCT; user or administrator may create load balancing rules that balance traffic + received at a public IP to one or more VMs. A user creates a rule, specifies an algorithm, and + assigns the rule to a set of VMs. + + If you create load balancing rules while using a network service offering that includes an + external load balancer device such as NetScaler, and later change the network service offering + to one that uses the &PRODUCT; virtual router, you must create a firewall rule on the virtual + router for each of your existing load balancing rules so that they continue to + function. + + + +
diff --git a/docs/en-US/management-server-install-client.xml b/docs/en-US/management-server-install-client.xml index 7e81ec735fc..b5329e3442a 100644 --- a/docs/en-US/management-server-install-client.xml +++ b/docs/en-US/management-server-install-client.xml @@ -1,5 +1,5 @@ - %BOOK_ENTITIES; ]> @@ -11,9 +11,7 @@ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -31,16 +29,6 @@ The &PRODUCT; Management server can be installed using either RPM or DEB packages. These packages will depend on everything you need to run the Management server. -
- Downloading vhd-util - This procedure is required only for installations where XenServer is installed on the hypervisor hosts. - Before setting up the Management Server, download vhd-util from vhd-util. - If the Management Server is RHEL or CentOS, copy vhd-util to - /usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver. - If the Management Server is Ubuntu, copy vhd-util to - /usr/lib/cloud/common/scripts/vm/hypervisor/xenserver/vhd-util. -
Install on CentOS/RHEL We start by installing the required packages: @@ -50,4 +38,16 @@ Install on Ubuntu apt-get install cloud-client
-
\ No newline at end of file + +
+ Downloading vhd-util + This procedure is required only for installations where XenServer is installed on the + hypervisor hosts. + Before setting up the Management Server, download vhd-util from vhd-util. + If the Management Server is RHEL or CentOS, copy vhd-util to + /usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver. + If the Management Server is Ubuntu, copy vhd-util to + /usr/lib/cloud/common/scripts/vm/hypervisor/xenserver. +
+
diff --git a/docs/en-US/management-server-install-db-external.xml b/docs/en-US/management-server-install-db-external.xml index 3bba45f3ee1..a28dee56934 100644 --- a/docs/en-US/management-server-install-db-external.xml +++ b/docs/en-US/management-server-install-db-external.xml @@ -127,12 +127,17 @@ bind-address = 0.0.0.0 recommended that you replace this with a more secure value. See . + + (Optional) For management_server_ip, you may explicitly specify cluster management + server node IP. If not specified, the local IP address will be used. + cloud-setup-databases cloud:<dbpassword>@<ip address mysql server> \ --deploy-as=root:<password> \ -e <encryption_type> \ -m <management_server_key> \ --k <database_key> +-k <database_key> \ +-i <management_server_ip> When this script is finished, you should see a message like “Successfully initialized the database.†diff --git a/docs/en-US/management-server-install-db-local.xml b/docs/en-US/management-server-install-db-local.xml index 3e09c554df0..918cdc0a265 100644 --- a/docs/en-US/management-server-install-db-local.xml +++ b/docs/en-US/management-server-install-db-local.xml @@ -11,9 +11,7 @@ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -29,19 +27,23 @@ MySQL. See . - Install MySQL from the package repository from your distribution: + Install MySQL from the package repository of your distribution: On RHEL or CentOS: yum install mysql-server On Ubuntu: apt-get install mysql-server - Edit the MySQL configuration (/etc/my.cnf or /etc/mysql/my.cnf, depending on your OS) - and insert the following lines in the [mysqld] section. You can put these lines below the - datadir line. The max_connections parameter should be set to 350 multiplied by the number of - Management Servers you are deploying. This example assumes one Management Server. + Open the MySQL configuration file. The configuration file is /etc/my.cnf or + /etc/mysql/my.cnf, depending on your OS. + + + Insert the following lines in the [mysqld] section. + You can put these lines below the datadir line. The max_connections parameter should be + set to 350 multiplied by the number of Management Servers you are deploying. This example + assumes one Management Server. - On Ubuntu, you can also create a file /etc/mysql/conf.d/cloudstack.cnf and add these + On Ubuntu, you can also create a file /etc/mysql/conf.d/cloudstack.cnf and add these directives there. Don't forget to add [mysqld] on the first line of the file. innodb_rollback_on_timeout=1 @@ -68,6 +70,36 @@ binlog-format = 'ROW' questions. mysql_secure_installation + + &PRODUCT; can be blocked by security mechanisms, such as SELinux. Disable SELinux to + ensure + that the Agent has all the required permissions. + Configure SELinux (RHEL and CentOS): + + + Check whether SELinux is installed on your machine. If not, you can skip this + section. + In RHEL or CentOS, SELinux is installed and enabled by default. You can verify this + with: + $ rpm -qa | grep selinux + + + Set the SELINUX variable in /etc/selinux/config to + "permissive". This ensures that the permissive setting will be maintained after a system + reboot. + In RHEL or CentOS: + vi /etc/selinux/config + Change the following line + SELINUX=enforcing + to this: + SELINUX=permissive + + + Set SELinux to permissive starting immediately, without requiring a system + reboot. + $ setenforce permissive + + + Set up the database. The following command creates the "cloud" user on the database. @@ -98,12 +130,17 @@ binlog-format = 'ROW' recommended that you replace this with a more secure value. See . + + (Optional) For management_server_ip, you may explicitly specify cluster management + server node IP. If not specified, the local IP address will be used. + cloud-setup-databases cloud:<dbpassword>@localhost \ --deploy-as=root:<password> \ -e <encryption_type> \ -m <management_server_key> \ --k <database_key> +-k <database_key> \ +-i <management_server_ip> When this script is finished, you should see a message like “Successfully initialized the database.†@@ -111,14 +148,11 @@ binlog-format = 'ROW' If you are running the KVM hypervisor on the same machine with the Management Server, edit /etc/sudoers and add the following line: Defaults:cloud !requiretty - - This type of single-machine setup is recommended only for a trial installation. - Now that the database is set up, you can finish configuring the OS for the Management Server. This command will set up iptables, sudoers, and start the Management Server. - # cloud-setup-management + # cloud-setup-management You should see the message “&PRODUCT; Management Server setup is done.†diff --git a/docs/en-US/management-server-install-multi-node.xml b/docs/en-US/management-server-install-multi-node.xml index e61f6230ff0..3f011b83b87 100644 --- a/docs/en-US/management-server-install-multi-node.xml +++ b/docs/en-US/management-server-install-multi-node.xml @@ -53,7 +53,7 @@ linkend="sect-source-buildrpm"/> or as Configure the database client. Note the absence of the --deploy-as argument in this case. (For more details about the arguments to this command, see .) - # cloud-setup-databases cloud:dbpassword@dbhost -e encryption_type -m management_server_key -k database_key + # cloud-setup-databases cloud:dbpassword@dbhost -e encryption_type -m management_server_key -k database_key -i management_server_ip @@ -69,4 +69,4 @@ linkend="sect-source-buildrpm"/> or as Load Balancing. -
\ No newline at end of file +
diff --git a/docs/en-US/management-server-install-nfs-shares.xml b/docs/en-US/management-server-install-nfs-shares.xml index e917a8e0b6c..a12e09c3eca 100644 --- a/docs/en-US/management-server-install-nfs-shares.xml +++ b/docs/en-US/management-server-install-nfs-shares.xml @@ -26,7 +26,7 @@ Prepare NFS Shares &PRODUCT; needs a place to keep primary and secondary storage (see Cloud Infrastructure Overview). Both of these can be NFS shares. This section tells how to set up the NFS shares before adding the storage to &PRODUCT;. Alternative Storage - NFS is not the only option for primary or secondary storage. For example, you may use a Ceph RDB cluster, GlusterFS, iSCSI, and otthers. + NFS is not the only option for primary or secondary storage. For example, you may use Ceph RBD, GlusterFS, iSCSI, and others. The choice of storage system will depend on the choice of hypervisor and whether you are dealing with primary or secondary storage. The requirements for primary and secondary storage are described in: diff --git a/docs/en-US/management-server-install-systemvm.xml b/docs/en-US/management-server-install-systemvm.xml index df2c3738abf..8dc73deb992 100644 --- a/docs/en-US/management-server-install-systemvm.xml +++ b/docs/en-US/management-server-install-systemvm.xml @@ -54,6 +54,8 @@ # /usr/lib64/cloud/common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2 -h kvm -s <optional-management-server-secret-key> -F
+ On Ubuntu, use the following path instead: + # /usr/lib/cloud/common/scripts/storage/secondary/cloud-install-sys-tmplt
If you are using a separate NFS server, perform this step. If you are using the diff --git a/docs/en-US/network-offerings.xml b/docs/en-US/network-offerings.xml index 7386e109883..0a7b8e78e3b 100644 --- a/docs/en-US/network-offerings.xml +++ b/docs/en-US/network-offerings.xml @@ -42,5 +42,5 @@ If you create load balancing rules while using a network service offering that includes an external load balancer device such as NetScaler, and later change the network service offering to one that uses the &PRODUCT; virtual router, you must create a firewall rule on the virtual router for each of your existing load balancing rules so that they continue to function. When creating a new virtual network, the &PRODUCT; administrator chooses which network offering to enable for that network. Each virtual network is associated with one network offering. A virtual network can be upgraded or downgraded by changing its associated network offering. If you do this, be sure to reprogram the physical network to match. &PRODUCT; also has internal network offerings for use by &PRODUCT; system VMs. These network offerings are not visible to users but can be modified by administrators. - +
diff --git a/docs/en-US/networks.xml b/docs/en-US/networks.xml index a7b9ea12466..f877aa55584 100644 --- a/docs/en-US/networks.xml +++ b/docs/en-US/networks.xml @@ -31,6 +31,7 @@ + @@ -45,4 +46,5 @@ - \ No newline at end of file + + diff --git a/docs/en-US/nfs-shares-on-management-server.xml b/docs/en-US/nfs-shares-on-management-server.xml index c000ce4818d..881ca8d7600 100644 --- a/docs/en-US/nfs-shares-on-management-server.xml +++ b/docs/en-US/nfs-shares-on-management-server.xml @@ -27,9 +27,9 @@ This section tells how to set up NFS shares for primary and secondary storage on the same node with the Management Server. This is more typical of a trial installation, but is technically possible in a larger deployment. It is assumed that you will have less than 16TB of storage on the host. The exact commands for the following steps may vary depending on your operating system version. - On Ubuntu/Debian systems, you'll need to install the nfs-kernel-server package: + On RHEL/CentOS systems, you'll need to install the nfs-utils package: -$ sudo apt-get install nfs-kernel-server +$ sudo yum install nfs-utils On the Management Server host, create two directories that you will use for primary and secondary storage. For example: diff --git a/docs/en-US/ongoing-config-of-ext-firewalls-lb.xml b/docs/en-US/ongoing-config-of-ext-firewalls-lb.xml deleted file mode 100644 index 6a02d27fb7b..00000000000 --- a/docs/en-US/ongoing-config-of-ext-firewalls-lb.xml +++ /dev/null @@ -1,34 +0,0 @@ - - -%BOOK_ENTITIES; -]> - - - -
- Ongoing Configuration of External Firewalls and Load Balancers - Additional user actions (e.g. setting a port forward) will cause further programming of the firewall and load balancer. A user may request additional public IP addresses and forward traffic received at these IPs to specific VMs. This is accomplished by enabling static NAT for a public IP address, assigning the IP to a VM, and specifying a set of protocols and port ranges to open. When a static NAT rule is created, &PRODUCT; programs the zone's external firewall with the following objects: - - A static NAT rule that maps the public IP address to the private IP address of a VM. - A security policy that allows traffic within the set of protocols and port ranges that are specified. - A firewall filter counter that measures the number of bytes of incoming traffic to the public IP. - - The number of incoming and outgoing bytes through source NAT, static NAT, and load balancing rules is measured and saved on each external element. This data is collected on a regular basis and stored in the &PRODUCT; database. -
diff --git a/docs/en-US/ongoing-configuration-of-external-firewalls-loadbalancer.xml b/docs/en-US/ongoing-config-of-external-firewalls-lb.xml similarity index 97% rename from docs/en-US/ongoing-configuration-of-external-firewalls-loadbalancer.xml rename to docs/en-US/ongoing-config-of-external-firewalls-lb.xml index c90c7ada622..f5864da2b2d 100644 --- a/docs/en-US/ongoing-configuration-of-external-firewalls-loadbalancer.xml +++ b/docs/en-US/ongoing-config-of-external-firewalls-lb.xml @@ -18,7 +18,7 @@ specific language governing permissions and limitations under the License. --> -
+
Ongoing Configuration of External Firewalls and Load Balancers Additional user actions (e.g. setting a port forward) will cause further programming of the firewall and load balancer. A user may request additional public IP addresses and forward diff --git a/docs/en-US/persistent-network.xml b/docs/en-US/persistent-network.xml new file mode 100644 index 00000000000..1ccc99c59a6 --- /dev/null +++ b/docs/en-US/persistent-network.xml @@ -0,0 +1,100 @@ + + +%BOOK_ENTITIES; +]> + + +
+ Persistent Networks + The network that you can provision without having to deploy any VMs on it is called a + persistent network. A persistent network can be part of a VPC or a non-VPC environment. + When you create other types of network, a network is only a database entry until the first + VM is created on that network. When the first VM is created, a VLAN ID is assigned and the + network is provisioned. Also, when the last VM is destroyed, the VLAN ID is released and the + network is no longer available. With the addition of persistent network, you will have the + ability to create a network in &PRODUCT; in which physical devices can be deployed without + having to run any VMs. Additionally, you can deploy physical devices on that network. + One of the advantages of having a persistent network is that you can create a VPC with a tier + consisting of only physical devices. For example, you might create a VPC for a three-tier + application, deploy VMs for Web and Application tier, and use physical machines for the + Database tier. Another use case is that if you are providing services by using physical + hardware, you can define the network as persistent and therefore even if all its VMs are + destroyed the services will not be discontinued. +
+ Persistent Network Considerations + + + Persistent network is designed for isolated networks. + + + All default network offerings are non-persistent. + + + A network offering cannot be editable because changing it affects the behavior of the + existing networks that were created using this network offering. + + + When you create a guest network, the network offering that you select defines the + network persistence. This in turn depends on whether persistent network is enabled in the + selected network offering. + + + An existing network can be made persistent by changing its network offering to an + offering that has the Persistent option enabled. While setting this property, even if the + network has no running VMs, the network is provisioned. + + + An existing network can be made non-persistent by changing its network offering to an + offering that has the Persistent option disabled. If the network has no running VMs, + during the next network garbage collection run the network is shut down. + + + When the last VM on a network is destroyed, the network garbage collector checks if + the network offering associated with the network is persistent, and shuts down the network + only if it is non-persistent. + + +
+
+ Creating a Persistent Guest Network + To create a persistent network, perform the following: + + + Create a network offering with the Persistent option enabled. + See . + See the Administration Guide. + + + Select Network from the left navigation pane. + + + Select the guest network that you want to offer this network service to. + + + Click the Edit button. + + + From the Network Offering drop-down, select the persistent network offering you have + just created. + + + Click OK. + + +
+
diff --git a/docs/en-US/plugin-niciranvp-devicemanagement.xml b/docs/en-US/plugin-niciranvp-devicemanagement.xml index 2423ce3925d..57b8eee9d7d 100644 --- a/docs/en-US/plugin-niciranvp-devicemanagement.xml +++ b/docs/en-US/plugin-niciranvp-devicemanagement.xml @@ -22,7 +22,7 @@ -->
Device-management - In CloudStack 4.0.x each Nicira NVP setup is considered a "device" that can be added and removed from a physical network. To complete the configuration of the Nicira NVP plugin a device needs to be added to the physical network using the "addNiciraNVPDevice" API call. The plugin is now enabled on the physical network and any guest networks created on that network will be provisioned using the Nicra NVP Controller. + In &PRODUCT; 4.0.x each Nicira NVP setup is considered a "device" that can be added and removed from a physical network. To complete the configuration of the Nicira NVP plugin a device needs to be added to the physical network using the "addNiciraNVPDevice" API call. The plugin is now enabled on the physical network and any guest networks created on that network will be provisioned using the Nicira NVP Controller. The plugin introduces a set of new API calls to manage the devices, see below or refer to the API reference. addNiciraNvpDevice @@ -44,4 +44,4 @@ listNiciraNVPDevices -
\ No newline at end of file +
diff --git a/docs/en-US/plugin-niciranvp-features.xml b/docs/en-US/plugin-niciranvp-features.xml index b71e67f4199..c346bfb64e3 100644 --- a/docs/en-US/plugin-niciranvp-features.xml +++ b/docs/en-US/plugin-niciranvp-features.xml @@ -22,12 +22,12 @@ -->
Features of the Nicira NVP Plugin - In CloudStack release 4.0.0-incubating this plugin supports the Connectivity service. This service is responsible for creating Layer 2 networks supporting the networks created by Guests. In other words when an tennant creates a new network, instead of the traditional VLAN a logical network will be created by sending the appropriate calls to the Nicira NVP Controller. + In &PRODUCT; release 4.0.0-incubating this plugin supports the Connectivity service. This service is responsible for creating Layer 2 networks supporting the networks created by Guests. In other words when an tenant creates a new network, instead of the traditional VLAN a logical network will be created by sending the appropriate calls to the Nicira NVP Controller. The plugin has been tested with Nicira NVP versions 2.1.0, 2.2.0 and 2.2.1 - In CloudStack 4.0.0-incubating only the XenServer hypervisor is supported for use in + In &PRODUCT; 4.0.0-incubating only the XenServer hypervisor is supported for use in combination with Nicira NVP. - In CloudStack 4.1.0-incubating both KVM and XenServer hypervisors are + In &PRODUCT; 4.1.0-incubating both KVM and XenServer hypervisors are supported. - In CloudStack 4.0.0-incubating the UI components for this plugin are not complete, + In &PRODUCT; 4.0.0-incubating the UI components for this plugin are not complete, configuration is done by sending commands to the API.
diff --git a/docs/en-US/plugin-niciranvp-preparations.xml b/docs/en-US/plugin-niciranvp-preparations.xml index 86b795ccd0b..762c941fd13 100644 --- a/docs/en-US/plugin-niciranvp-preparations.xml +++ b/docs/en-US/plugin-niciranvp-preparations.xml @@ -23,7 +23,7 @@
Prerequisites Before enabling the Nicira NVP plugin the NVP Controller needs to be configured. Please review the NVP User Guide on how to do that. - CloudStack needs to have at least one physical network with the isolation method set to "STT". This network should be enabled for the Guest traffic type. + &PRODUCT; needs to have at least one physical network with the isolation method set to "STT". This network should be enabled for the Guest traffic type. The Guest traffic type should be configured with the traffic label that matches the name of the Integration Bridge on the hypervisor. See the Nicira NVP User Guide for more details on how to set this up in XenServer or KVM. @@ -33,6 +33,6 @@ The username to access the API The password to access the API The UUID of the Transport Zone that contains the hypervisors in this Zone - The UUID of the Physical Network that will used for the Guest networks + The UUID of the Physical Network that will be used for the Guest networks -
\ No newline at end of file +
diff --git a/docs/en-US/plugin-niciranvp-uuidreferences.xml b/docs/en-US/plugin-niciranvp-uuidreferences.xml index c912971736b..cb5f1cae834 100644 --- a/docs/en-US/plugin-niciranvp-uuidreferences.xml +++ b/docs/en-US/plugin-niciranvp-uuidreferences.xml @@ -22,9 +22,9 @@ -->
UUID References - The plugin maintains several references in the CloudStack database to items created on the NVP Controller. - Every guest network this is created will have its broadcast type set to Lswitch and if the network is in state "Implemented", the broadcast URI will have the UUID of the Logical Switch that was created for this network on the NVP Controller. + The plugin maintains several references in the &PRODUCT; database to items created on the NVP Controller. + Every guest network that is created will have its broadcast type set to Lswitch and if the network is in state "Implemented", the broadcast URI will have the UUID of the Logical Switch that was created for this network on the NVP Controller. The Nics that are connected to one of the Logical Switches will have their Logical Switch Port UUID listed in the nicira_nvp_nic_map table All devices created on the NVP Controller will have a tag set to domain-account of the owner of the network, this string can be used to search for items in the NVP Controller. -
\ No newline at end of file +
diff --git a/docs/en-US/prepare-system-vm-template.xml b/docs/en-US/prepare-system-vm-template.xml index 22674d47952..b53a509b4a1 100644 --- a/docs/en-US/prepare-system-vm-template.xml +++ b/docs/en-US/prepare-system-vm-template.xml @@ -26,22 +26,28 @@ Secondary storage must be seeded with a template that is used for &PRODUCT; system VMs. Citrix provides you with the necessary binary package of the system VM. - When copying and pasting a command, be sure the command has pasted as a single line before - executing. Some document viewers may introduce unwanted line breaks in copied text. + When copying and pasting a command, ensure that the command has pasted as a single line + before executing. Some document viewers may introduce unwanted line breaks in copied + text. - + + + If you are using a separate NFS server, mount the secondary storage on your Management + Server. Replace the example NFS server name and NFS share paths below with your own. + # mount -t nfs nfsservername:/nfs/share/secondary /mnt/secondary + If your secondary storage mount point is not named /mnt/secondary, substitute your own + mount point name. + On the Management Server, run one or more of the following cloud-install-sys-tmplt commands to retrieve and decompress the system VM template. Run the command for each hypervisor type that you expect end users to run in this Zone. - If your secondary storage mount point is not named /mnt/secondary, substitute your own - mount point name. - If you set the &PRODUCT; database encryption type to "web" when you set up the database, + If you set the &PRODUCT; database encryption type to "web" when you set up the database, you must now add the parameter -s <management-server-secret-key>. See . This process will require approximately 5 GB of free space on the local file system and - up to 30 minutes each time it runs. - + up to 30 minutes each time it runs. + For XenServer: # /usr/lib64/cloud/common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.vhd.bz2 -h xenserver -s <optional-management-server-secret-key> -F @@ -57,12 +63,7 @@ - If you are using a separate NFS server, perform this step. - - Do not perform this step if you are using the Management Server as the NFS - server. - - When the script has finished, unmount secondary storage and remove the created + When the script has finished, unmount secondary storage and remove the created directory. # umount /mnt/secondary # rmdir /mnt/secondary diff --git a/docs/en-US/reserved-ip-addresses-non-csvms.xml b/docs/en-US/reserved-ip-addresses-non-csvms.xml new file mode 100644 index 00000000000..18ba3ca0e42 --- /dev/null +++ b/docs/en-US/reserved-ip-addresses-non-csvms.xml @@ -0,0 +1,163 @@ + + +%BOOK_ENTITIES; +]> + + +
+ IP Reservation in Isolated Guest Networks + In isolated guest networks, a part of the guest IP address space can be reserved for + non-&PRODUCT; VMs or physical servers. To do so, you configure a range of Reserved IP addresses + by specifying the CIDR when a guest network is in Implemented state. If your customers wish to + have non-&PRODUCT; controlled VMs or physical servers on the same network, they can share a part + of the IP address space that is primarily provided to the guest network. + In an Advanced zone, an IP address range or a CIDR is assigned to a network when the network + is defined. The &PRODUCT; virtual router acts as the DHCP server and uses CIDR for assigning IP + addresses to the guest VMs. If you decide to reserve IP ranges for non-&PRODUCT; purposes, you + can specify a part of the IP address range or the CIDR that should only be allocated by the DHCP + service of the virtual router to the guest VMs created in &PRODUCT;. The remaining IPs in that + network are called Reserved IP Range. When IP reservation is configured, the administrator can + add additional VMs or physical servers that are not part of &PRODUCT; to the same network and + assign them the Reserved IP addresses. &PRODUCT; guest VMs cannot acquire IPs from the Reserved + IP Range. +
+ IP Reservation Considerations + Consider the following before you reserve an IP range for non-&PRODUCT; machines: + + + IP Reservation can be applied only when the network is in Implemented state. + + + No IP Reservation is done by default. + + + Guest VM CIDR you specify must be a subset of the network CIDR. + + + Specify a valid Guest VM CIDR. IP Reservation is applied only if no active IPs exist + outside the Guest VM CIDR. + You cannot apply IP Reservation if any VM is alloted with an IP address that is + outside the Guest VM CIDR. + + + To reset an existing IP Reservation, apply IP reservation by specifying the value of + network CIDR in the CIDR field. + For example, the following table describes three scenarios of guest network + creation: + + + + + + + + + + Case + CIDR + Network CIDR + Reserved IP Range for Non-&PRODUCT; VMs + Description + + + + + 1 + 10.1.1.0/24 + None + None + No IP Reservation. + + + 2 + 10.1.1.0/26 + 10.1.1.0/24 + 10.1.1.64 to 10.1.1.254 + IP Reservation configured by the UpdateNetwork API with + guestvmcidr=10.1.1.0/26 or enter 10.1.1.0/26 in the CIDR field in the + UI. + + + 3 + 10.1.1.0/24 + None + None + Removing IP Reservation by the UpdateNetwork API with + guestvmcidr=10.1.1.0/24 or enter 10.1.1.0/24 in the CIDR field in the UI. + + + + + + + +
+
+ Limitations + + + The IP Reservation is not supported if active IPs that are found outside the Guest VM + CIDR. + + + Upgrading network offering which causes a change in CIDR (such as upgrading an + offering with no external devices to one with external devices) IP Reservation becomes + void if any. Reconfigure IP Reservation in the new re-implemeted network. + + +
+
+ Best Practices + Apply IP Reservation to the guest network as soon as the network state changes to + Implemented. If you apply reservation soon after the first guest VM is deployed, lesser + conflicts occurs while applying reservation. +
+
+ Reserving an IP Range + + + Log in to the &PRODUCT; UI as an administrator or end user. + + + In the left navigation, choose Network. + + + Click the name of the network you want to modify. + + + In the Details tab, click Edit. + + + + + edit-icon.png: button to edit a network + + + The CIDR field changes to editable one. + + + In CIDR, specify the Guest VM CIDR. + + + Click Apply. + Wait for the update to complete. The Network CIDR and the Reserved IP Range are + displayed on the Details page. + + +
+
diff --git a/docs/en-US/reset-ssh-key-dev.xml b/docs/en-US/reset-ssh-key-dev.xml new file mode 100644 index 00000000000..1a904e566ef --- /dev/null +++ b/docs/en-US/reset-ssh-key-dev.xml @@ -0,0 +1,27 @@ + + +%BOOK_ENTITIES; +]> + +
+ Resetting SSH Keys to Access VMs + Use the resetSSHKeyForVirtualMachine API to set or reset the SSH keypair assigned to a + virtual machine. With the addition of this feature, a lost or compromised SSH keypair can be + changed, and the user can access the VM by using the new keypair. Just create or register a new + keypair, then call resetSSHKeyForVirtualMachine. +
diff --git a/docs/en-US/resizing-volumes.xml b/docs/en-US/resizing-volumes.xml index 471411df5fe..42b584bf6c6 100644 --- a/docs/en-US/resizing-volumes.xml +++ b/docs/en-US/resizing-volumes.xml @@ -11,9 +11,7 @@ to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -21,18 +19,80 @@ specific language governing permissions and limitations under the License. --> -
- Resizing Volumes - &PRODUCT; does not provide the ability to resize root disks or data disks; the disk size is fixed based on the template used to create the VM. However, the tool VHD Resizer), while not officially supported by Cloud.com or Citrix, might provide a workaround. To increase disk size with VHD Resizer: - - Get the VHD from the secondary storage. - Import it into VHD Resizer. - Resize the VHD. - Upload the new VHD. - Create a new VM. - Take a snapshot, then create a new template from that snapshot. - For more information, see How to Resize a Provisioning Server 5 Virtual Disk at the Citrix Knowledge Center - + Resizing Volumes + &PRODUCT; provides the ability to resize data disks; &PRODUCT; controls volume size by using + disk offerings. This provides &PRODUCT; administrators with the flexibility to choose how much + space they want to make available to the end users. Volumes within the disk offerings with the + same storage tag can be resized. For example, if you only want to offer 10, 50, and 100 GB + offerings, the allowed resize should stay within those limits. That implies if you define a 10 + GB, a 50 GB and a 100 GB disk offerings, a user can upgrade from 10 GB to 50 GB, or 50 GB to 100 + GB. If you create a custom-sized disk offering, then you have the option to resize the volume by + specifying a new, larger size. + Additionally, using the resizeVolume API, a data volume can be moved from a static disk + offering to a custom disk offering with the size specified. This functionality allows those who + might be billing by certain volume sizes or disk offerings to stick to that model, while + providing the flexibility to migrate to whatever custom size necessary. + This feature is supported on KVM, XenServer, and VMware hosts. However, shrinking volumes is + not supported on VMware hosts. + Before you try to resize a volume, consider the following: + + + The VMs associated with the volume are stopped. + + + The data disks associated with the volume are removed. + + + When a volume is shrunk, the disk associated with it is simply truncated, and doing so + would put its content at risk of data loss. Therefore, resize any partitions or file systems + before you shrink a data disk so that all the data is moved off from that disk. + + + To resize a volume: + + + Log in to the &PRODUCT; UI as a user or admin. + + + In the left navigation bar, click Storage. + + + In Select View, choose Volumes. + + + Select the volume name in the Volumes list, then click the Resize Volume button + + + + + resize-volume-icon.png: button to display the resize volume option. + + + + + In the Resize Volume pop-up, choose desired characteristics for the storage. + + + + + + resize-volume.png: option to resize a volume. + + + + + If you select Custom Disk, specify a custom size. + + + Click Shrink OK to confirm that you are reducing the size of a volume. + This parameter protects against inadvertent shrinking of a disk, which might lead to + the risk of data loss. You must sign off that you know what you are doing. + + + + + Click OK. + +
- diff --git a/docs/en-US/security-groups.xml b/docs/en-US/security-groups.xml index 42f531956c4..6b36650005e 100644 --- a/docs/en-US/security-groups.xml +++ b/docs/en-US/security-groups.xml @@ -28,6 +28,5 @@ - diff --git a/docs/en-US/shared-networks.xml b/docs/en-US/shared-networks.xml index d5a7ede9bdb..4c323208135 100644 --- a/docs/en-US/shared-networks.xml +++ b/docs/en-US/shared-networks.xml @@ -25,8 +25,7 @@ Shared Networks A shared network can be accessed by virtual machines that belong to many different accounts. Network Isolation on shared networks is accomplished using techniques such as - security groups (supported only in basic zones in &PRODUCT; 3.0.3 and later - versions). + security groups (supported only in basic zones).
Shared Networks are created by the administrator Shared Networks can be designated to a certain domain diff --git a/docs/en-US/site-to-site-vpn.xml b/docs/en-US/site-to-site-vpn.xml index 6570aabe0bd..a5899eac4f1 100644 --- a/docs/en-US/site-to-site-vpn.xml +++ b/docs/en-US/site-to-site-vpn.xml @@ -55,6 +55,9 @@ Create VPN connection from the VPC VPN gateway to the customer VPN gateway.
+ Appropriate events are generated on the &PRODUCT; UI when status of a Site-to-Site VPN + connection changes from connected to disconnected, or vice versa. Currently no events are generated + when establishing a VPN connection fails or pending. diff --git a/docs/en-US/source-prereqs.xml b/docs/en-US/source-prereqs.xml index 6c2bc2a3cb8..2e40a58c59a 100644 --- a/docs/en-US/source-prereqs.xml +++ b/docs/en-US/source-prereqs.xml @@ -30,12 +30,15 @@ for package management. - The minimum bootstrapped prerequisites for building &PRODUCT; includes - the following: + You will need, at a minimum, the following to compile &PRODUCT;: - ant - maven (version 3) - Java (Java 6/OpenJDK 1.6) + Maven (version 3) + Java (OpenJDK 1.6 or Java 7/OpenJDK 1.7) + Apache Web Services Common Utilities (ws-commons-util) + MySQL + MySQLdb (provides Python database API) + Tomcat 6 (not 6.0.35) + genisoimage rpmbuild or dpkg-dev diff --git a/docs/en-US/source.xml b/docs/en-US/source.xml index 3cb4af2321f..5d911c23050 100644 --- a/docs/en-US/source.xml +++ b/docs/en-US/source.xml @@ -24,20 +24,10 @@ Building from Source - The official &PRODUCT; release is always in source code form. While there may - exist convenience binaries in various forms from a number of places, the - source is the canonical release will be source. In this document we'll cover - acquiring the source release, building that into binary, deployable packages. - - - While building and deploying directly from source is certainly possible, the reality - of Infrastructure-as-a-Service cloud computing implies a need to deploy packages on - a potentially large number of systems, which RPMs and DEBs fill nicely. - - - Building and deploying directly from source is thus outside the scope of this - document, but is documented in the INSTALL.md file in the release. - + The official &PRODUCT; release is always in source code form. You will likely be able to find "convenience binaries," the source is the canonical release. In this section, we'll cover acquiring the source release and building that so that you can deploy it using Maven or create Debian packages or RPMs. + Note that building and deploying directly from source is typically not the most efficient way to deploy an IaaS. However, we will cover that method as well as building RPMs or Debian packages for deploying &PRODUCT;. + The instructions here are likely version-specific. That is, the method for building from source for the 4.0.x series is different from the 4.1.x series. + If you are working with a unreleased version of &PRODUCT;, see the INSTALL.md file in the top-level directory of the release. diff --git a/docs/en-US/sticky-session-policies-for-lb-rules.xml b/docs/en-US/sticky-session-policies-for-lb-rules.xml index a8acfa087d2..09780855f7e 100644 --- a/docs/en-US/sticky-session-policies-for-lb-rules.xml +++ b/docs/en-US/sticky-session-policies-for-lb-rules.xml @@ -21,10 +21,21 @@ specific language governing permissions and limitations under the License. --> -
- Sticky Session Policies for Load Balancer Rules - Sticky sessions are used in Web-based applications to ensure continued availability of information across the multiple requests in a user's session. For example, if a shopper is filling a cart, you need to remember what has been purchased so far. The concept of "stickiness" is also referred to as persistence or maintaining state. - Any load balancer rule defined in &PRODUCT; can have a stickiness policy. The policy consists of a name, stickiness method, and parameters. The parameters are name-value pairs or flags, which are defined by the load balancer vendor. The stickiness method could be load balancer-generated cookie, application-generated cookie, or source-based. In the source-based method, the source IP address is used to identify the user and locate the user’s stored data. In the other methods, cookies are used. The cookie generated by the load balancer or application is included in request and response URLs to create persistence. The cookie name can be specified by the administrator or automatically generated. A variety of options are provided to control the exact behavior of cookies, such as how they are generated and whether they are cached. - For the most up to date list of available stickiness methods, see the &PRODUCT; UI or call listNetworks and check the SupportedStickinessMethods capability. + Sticky Session Policies for Load Balancer Rules + Sticky sessions are used in Web-based applications to ensure continued availability of + information across the multiple requests in a user's session. For example, if a shopper is + filling a cart, you need to remember what has been purchased so far. The concept of "stickiness" + is also referred to as persistence or maintaining state. + Any load balancer rule defined in &PRODUCT; can have a stickiness policy. The policy + consists of a name, stickiness method, and parameters. The parameters are name-value pairs or + flags, which are defined by the load balancer vendor. The stickiness method could be load + balancer-generated cookie, application-generated cookie, or source-based. In the source-based + method, the source IP address is used to identify the user and locate the user’s stored data. In + the other methods, cookies are used. The cookie generated by the load balancer or application is + included in request and response URLs to create persistence. The cookie name can be specified by + the administrator or automatically generated. A variety of options are provided to control the + exact behavior of cookies, such as how they are generated and whether they are cached. + For the most up to date list of available stickiness methods, see the &PRODUCT; UI or call + listNetworks and check the SupportedStickinessMethods capability.
diff --git a/docs/en-US/tools.xml b/docs/en-US/tools.xml index 66fe894e171..db6a510d593 100644 --- a/docs/en-US/tools.xml +++ b/docs/en-US/tools.xml @@ -26,4 +26,5 @@ Tools +
diff --git a/docs/en-US/translating-documentation.xml b/docs/en-US/translating-documentation.xml new file mode 100644 index 00000000000..afe27658f1a --- /dev/null +++ b/docs/en-US/translating-documentation.xml @@ -0,0 +1,38 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Translating &PRODUCT; Documentation + + There are two ways to translate the documentation: + + + Directly using the Transifex website and using their user interface. + Using the Transifex client and pushing your translated strings to the website. + + + Once a translation is complete, a site admin will pull the translated strings within the &PRODUCT; repository, build the documenation and publish it. + For instructions on how to use the Transifex website see http://sebgoa.blogspot.ch/2012/11/translating-apache-cloudstack-docs-with.html + For instructions on how to use the Transifex client to translate from the command line see http://sebgoa.blogspot.ch/2012/12/using-transifex-client-to-translate.html +
diff --git a/docs/en-US/upgrade-virtual-router-with-service-offering.xml b/docs/en-US/upgrade-virtual-router-with-service-offering.xml index 8291c3af46c..dad1d906c5f 100644 --- a/docs/en-US/upgrade-virtual-router-with-service-offering.xml +++ b/docs/en-US/upgrade-virtual-router-with-service-offering.xml @@ -27,7 +27,10 @@ When &PRODUCT; creates a virtual router, it uses default settings which are defined in a default system service offering. See . All the virtual routers in a single guest network use the same system service offering. You can upgrade the capabilities of the virtual router by creating and applying a custom system service offering. Define your custom system service offering. See . In System VM Type, choose Domain Router. - Associate the system service offering with a network offering. See + Associate the system service offering with a network offering. + See "Creating Network Offerings" in the Administrator's Guide. + See . + Apply the network offering to the network where you want the virtual routers to use the new system service offering. If this is a new network, follow the steps in Adding an Additional Guest Network on page 66. To change the service offering for existing virtual routers, follow the steps in . diff --git a/docs/en-US/upload-existing-volume-to-vm.xml b/docs/en-US/upload-existing-volume-to-vm.xml index 86dc8e54758..d2b657164c8 100644 --- a/docs/en-US/upload-existing-volume-to-vm.xml +++ b/docs/en-US/upload-existing-volume-to-vm.xml @@ -29,7 +29,7 @@ You cannot upload a volume if the preconfigured volume limit has already been reached. The default limit for the cloud is set in the global configuration parameter max.account.volumes, but administrators can also set per-domain limits that are different from the global default. See Setting Usage Limits To upload a volume: - (Optional) Create an MD5 hash (checksum) of the disk image file that you are going to upload. After uploading the data disk, &PRODUCT; will use this value to verify that no data corruption has occurred. + (Optional) Create an MD5 hash (checksum) of the disk image file that you are going to upload. After uploading the data disk, &PRODUCT; will use this value to verify that no data corruption has occurred. Log in to the &PRODUCT; UI as an administrator or user In the left navigation bar, click Storage. Click Upload Volume. @@ -68,9 +68,9 @@ URL. The secure HTTP or HTTPS URL that &PRODUCT; can use to access your disk. The type of file at the URL must match the value chosen in Format. For example, if Format is VHD, the URL might look like the following: http://yourFileServerIP/userdata/myDataDisk.vhd - MD5 checksum. (Optional) Use the hash that you created in step 1. + MD5 checksum. (Optional) Use the hash that you created in step . - Wait until the status of the volume shows that the upload is complete. Click Instances - Volumes, find the name you specified in step 5, and make sure the status is Uploaded. + Wait until the status of the volume shows that the upload is complete. Click Instances - Volumes, find the name you specified in step , and make sure the status is Uploaded. diff --git a/docs/en-US/using-vpn-with-mac.xml b/docs/en-US/using-vpn-with-mac.xml index 718ebc777a9..a41dcab5e02 100644 --- a/docs/en-US/using-vpn-with-mac.xml +++ b/docs/en-US/using-vpn-with-mac.xml @@ -24,5 +24,18 @@
Using VPN with Mac OS X - In Mac OS X, in Network Preferences - Advanced, make sure Send all traffic over VPN connection is not checked. + First, be sure you've configured the VPN settings in your &PRODUCT; install. This section is only concerned with connecting via Mac OS X to your VPN. + Note, these instructions were written on Mac OS X 10.7.5. They may differ slightly in older or newer releases of Mac OS X. + + On your Mac, open System Preferences and click Network. + Make sure Send all traffic over VPN connection is not checked. + If your preferences are locked, you'll need to click the lock in the bottom left-hand corner to make any changes and provide your administrator credentials. + You will need to create a new network entry. Click the plus icon on the bottom left-hand side and you'll see a dialog that says "Select the interface and enter a name for the new service." Select VPN from the Interface drop-down menu, and "L2TP over IPSec" for the VPN Type. Enter whatever you like within the "Service Name" field. + You'll now have a new network interface with the name of whatever you put in the "Service Name" field. For the purposes of this example, we'll assume you've named it "CloudStack." Click on that interface and provide the IP address of the interface for your VPN under the Server Address field, and the user name for your VPN under Account Name. + Click Authentication Settings, and add the user's password under User Authentication and enter the pre-shared IPSec key in the Shared Secret field under Machine Authentication. Click OK. + You may also want to click the "Show VPN status in menu bar" but that's entirely optional. + Now click "Connect" and you will be connected to the CloudStack VPN. + + +
diff --git a/docs/en-US/using-vpn-with-windows.xml b/docs/en-US/using-vpn-with-windows.xml index e0e15692d35..c5d95ddd3e0 100644 --- a/docs/en-US/using-vpn-with-windows.xml +++ b/docs/en-US/using-vpn-with-windows.xml @@ -26,17 +26,17 @@ Using VPN with Windows The procedure to use VPN varies by Windows version. Generally, the user must edit the VPN properties and make sure that the default route is not the VPN. The following steps are for Windows L2TP clients on Windows Vista. The commands should be similar for other Windows versions. - Log in to the &PRODUCT; UI and click on the source NAT IP for the account. The VPN tab should display the IPsec preshared key. Make a note of this and the source NAT IP. The UI also lists one or more users and their passwords. Choose one of these users, or, if none exists, add a user and password. + Log in to the &PRODUCT; UI and click on the source NAT IP for the account. The VPN tab should display the IPsec preshared key. Make a note of this and the source NAT IP. The UI also lists one or more users and their passwords. Choose one of these users, or, if none exists, add a user and password. On the Windows box, go to Control Panel, then select Network and Sharing center. Click Setup a connection or network. In the next dialog, select No, create a new connection. In the next dialog, select Use my Internet Connection (VPN). - In the next dialog, enter the source NAT IP from step 1 and give the connection a name. Check Don't connect now. - In the next dialog, enter the user name and password selected in step 1. + In the next dialog, enter the source NAT IP from step and give the connection a name. Check Don't connect now. + In the next dialog, enter the user name and password selected in step . Click Create. Go back to the Control Panel and click Network Connections to see the new connection. The connection is not active yet. Right-click the new connection and select Properties. In the Properties dialog, select the Networking tab. - In Type of VPN, choose L2TP IPsec VPN, then click IPsec settings. Select Use preshared key. Enter the preshared key from Step 1. + In Type of VPN, choose L2TP IPsec VPN, then click IPsec settings. Select Use preshared key. Enter the preshared key from step . The connection is ready for activation. Go back to Control Panel -> Network Connections and double-click the created connection. - Enter the user name and password from Step 1. + Enter the user name and password from step . diff --git a/docs/en-US/verifying-source.xml b/docs/en-US/verifying-source.xml index f8bd102379d..b20b9bbacf9 100644 --- a/docs/en-US/verifying-source.xml +++ b/docs/en-US/verifying-source.xml @@ -32,11 +32,11 @@ Getting the KEYS To enable you to verify the GPG signature, you will need to download the - KEYS + KEYS file. - You next need to import those keys, which you can do by running the following command: + You next need to import those keys, which you can do by running: # gpg --import KEYS diff --git a/docs/en-US/vlan-provisioning.xml b/docs/en-US/vlan-provisioning.xml index 8abd5da0a75..9345647d47a 100644 --- a/docs/en-US/vlan-provisioning.xml +++ b/docs/en-US/vlan-provisioning.xml @@ -21,10 +21,23 @@ specific language governing permissions and limitations under the License. --> -
- VLAN Provisioning - &PRODUCT; automatically creates and destroys interfaces bridged to VLANs on the hosts. In general the administrator does not need to manage this process. - &PRODUCT; manages VLANs differently based on hypervisor type. For XenServer or KVM, the VLANs are created on only the hosts where they will be used and then they are destroyed when all guests that require them have been terminated or moved to another host. - For vSphere the VLANs are provisioned on all hosts in the cluster even if there is no guest running on a particular Host that requires the VLAN. This allows the administrator to perform live migration and other functions in vCenter without having to create the VLAN on the destination Host. Additionally, the VLANs are not removed from the Hosts when they are no longer needed. + VLAN Provisioning + &PRODUCT; automatically creates and destroys interfaces bridged to VLANs on the hosts. In + general the administrator does not need to manage this process. + &PRODUCT; manages VLANs differently based on hypervisor type. For XenServer or KVM, the + VLANs are created on only the hosts where they will be used and then they are destroyed when all + guests that require them have been terminated or moved to another host. + For vSphere the VLANs are provisioned on all hosts in the cluster even if there is no guest + running on a particular Host that requires the VLAN. This allows the administrator to perform + live migration and other functions in vCenter without having to create the VLAN on the + destination Host. Additionally, the VLANs are not removed from the Hosts when they are no longer + needed. + You can use the same VLANs on different physical networks provided that each physical + network has its own underlying layer-2 infrastructure, such as switches. For example, you can + specify VLAN range 500 to 1000 while deploying physical networks A and B in an Advanced zone + setup. This capability allows you to set up an additional layer-2 physical infrastructure on a + different physical NIC and use the same set of VLANs if you run out of VLANs. Another advantage + is that you can use the same set of IPs for different customers, each one with their own routers + and the guest networks on different physical NICs.
diff --git a/docs/en-US/vmx-settings-dev.xml b/docs/en-US/vmx-settings-dev.xml new file mode 100644 index 00000000000..a0fdf7f7825 --- /dev/null +++ b/docs/en-US/vmx-settings-dev.xml @@ -0,0 +1,40 @@ + + +%BOOK_ENTITIES; +]> + +
+ Additional VMX Settings + A VMX (.vmx) file is the primary configuration file for a virtual machine. When a new VM is + created, information on the operating system, disk sizes, and networking is stored in this file. + The VM actively writes to its .vmx file for all the configuration changes. The VMX file is + typically located in the directory where the VM is created. In Windows Vista / Windows 7 / + Windows Server 2008, the default location is C:\Users\<your_user_name>\My + Documents\Virtual Machines\<virtual_machine_name>.vmx. In Linux, vmware-cmd -l lists the + full path to all the registered VMX files. Any manual additions to the .vmx file from ESX/ESXi + are overwritten by the entries stored in the vCenter Server database. Therefore, before you edit + a .vmx file, first remove the VM from the vCenter server's inventory and register the VM again + after editing. + The CloudStack API that supports passing some of the VMX settings is registerTemplate. The + supported parameters are rootDiskController, nicAdapter, and keyboard. In addition to these + existing VMX parameters, you can now use the keyboard.typematicMinDelay parameter in the + registerTemplate API call. This parameter controls the amount of delay for the repeated key + strokes on remote consoles. For more information on keyboard.typematicMinDelay, see keyboard.typematicMinDelay. +
diff --git a/docs/en-US/whats-new.xml b/docs/en-US/whats-new.xml index 77b3ec3df22..761d7a2eb37 100644 --- a/docs/en-US/whats-new.xml +++ b/docs/en-US/whats-new.xml @@ -3,40 +3,46 @@ %BOOK_ENTITIES; ]> - - - What's New in the API? - The following describes any new major features of each &PRODUCT; version as it applies to API usage. -
- What's New in the API for 4.0 - - -
-
- What's New in the API for 3.0 - - - - - - -
+ What's New in the API? + The following describes any new major features of each &PRODUCT; version as it applies to + API usage. +
+ What's New in the API for 4.1 + + + + + +
+
+ What's New in the API for 4.0 + + +
+
+ What's New in the API for 3.0 + + + + + + +
diff --git a/docs/en-US/working-with-documentation.xml b/docs/en-US/working-with-documentation.xml new file mode 100644 index 00000000000..67748427299 --- /dev/null +++ b/docs/en-US/working-with-documentation.xml @@ -0,0 +1,32 @@ + + +%BOOK_ENTITIES; +]> + + + + + Preparing and Building &PRODUCT; Documentation + This chapter describes how to install publican, how to write new documentation and build a guide as well as how to build a translated version of the documentation using transifex + + + + + diff --git a/docs/en-US/working-with-snapshots.xml b/docs/en-US/working-with-snapshots.xml index a381707e8f0..b984439203c 100644 --- a/docs/en-US/working-with-snapshots.xml +++ b/docs/en-US/working-with-snapshots.xml @@ -29,4 +29,8 @@ Users can create snapshots manually or by setting up automatic recurring snapshot policies. Users can also create disk volumes from snapshots, which may be attached to a VM like any other disk volume. Snapshots of both root disks and data disks are supported. However, &PRODUCT; does not currently support booting a VM from a recovered root disk. A disk recovered from snapshot of a root disk is treated as a regular data disk; the data on recovered disk can be accessed by attaching the disk to a VM. A completed snapshot is copied from primary storage to secondary storage, where it is stored until deleted or purged by newer snapshot. + + + + diff --git a/docs/en-US/working-with-system-vm.xml b/docs/en-US/working-with-system-vm.xml index 97459f947bf..70f7dd1aa4e 100644 --- a/docs/en-US/working-with-system-vm.xml +++ b/docs/en-US/working-with-system-vm.xml @@ -1,33 +1,39 @@ - %BOOK_ENTITIES; ]> - - - Working with System Virtual Machines - &PRODUCT; uses several types of system virtual machines to perform tasks in the cloud. In general &PRODUCT; manages these system VMs and creates, starts, and stops them as needed based on scale and immediate needs. However, the administrator should be aware of them and their roles to assist in debugging issues. - - - - - + Working with System Virtual Machines + &PRODUCT; uses several types of system virtual machines to perform tasks in the cloud. In + general &PRODUCT; manages these system VMs and creates, starts, and stops them as needed based + on scale and immediate needs. However, the administrator should be aware of them and their roles + to assist in debugging issues. + + You can configure the system.vm.random.password parameter to create a random system VM + password to ensure higher security. If you reset the value for system.vm.random.password to + true and restart the Management Server, a random password is generated and stored encrypted in + the database. You can view the decrypted password under the system.vm.password global + parameter on the &PRODUCT; UI or by calling the listConfigurations API. + + + + + + diff --git a/docs/en-US/working-with-usage-data.xml b/docs/en-US/working-with-usage-data.xml index 56a929fd6c1..5324617ab23 100644 --- a/docs/en-US/working-with-usage-data.xml +++ b/docs/en-US/working-with-usage-data.xml @@ -31,4 +31,5 @@ + diff --git a/docs/en-US/writing-new-documentation.xml b/docs/en-US/writing-new-documentation.xml new file mode 100644 index 00000000000..340900e3c60 --- /dev/null +++ b/docs/en-US/writing-new-documentation.xml @@ -0,0 +1,100 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Writing &PRODUCT; Documentation + &PRODUCT; documentation is written in DocBook xml format. Each guide defined with a publican configuration file refers to a DocBook book. + These books are defined in xml files in docs/en-US, for instance if we look at the Developers guide, its configuration file contains: + + xml_lang: en-US + type: Book + docname: Developers_Guide + brand: cloudstack + chunk_first: 1 + chunk_section_depth: 1 + + The docname key gives you the basename of the DocBook file located in the en-US directory that contains the description of the book. + Looking closely at Developers_Guide.xml we see that it contains book tags and several references to other xml files. These are the chapters of the book, currently they are: + + + + + + + + + + + + + + ]]> + + All these xml files are written in DocBook format. + + DocBook format is well documented, refer to the documentation for any questions about DocBook tags + + When writing documentation, you therefore need to located the book,chapter and section of the content you want to write/correct. + Or create a new book,chapter,section. + You will then learn much more about DocBook tagging. In order to write this chapter about documentation, I added the working-with-documentation.xmlfile describing a chapter in the Developer book and I created several sections within that chapter like so: + + + Preparing and Building &PRODUCT; Documentation + This chapter describes how to install publican, how to write new documentation and build a guide as well as how to build a translated version of the documentation using transifex + + + + + + ]]> + + + Note the id witin the chapter tag, it represents the basename of the xml file describing the chapter. + For translation purposes it is important that this basename be less than 50 characters long. + + This chapter also refers to xml files which contains each section. While you could embed the sections directly in the chapter file and as a matter of fact also write the chapters within a single book file. Breaking things up in smaller files at the granularity of the section, allows us to re-use any section to build different books. + For completeness here is an example of a section: + + + Building &PRODUCT; Documentation + To build a specific guide, go to the source tree of the documentation in /docs and identify the guide you want to build. + Currenlty there are four guides plus the release notes, all defined in publican configuration files: + + publican-adminguide.cfg + publican-devguide.cfg + publican-installation.cfg + publican-plugin-niciranvp.cfg + publican-release-notes.cfg + + To build the Developer guide for example, do the following: + publican build --config=publican-devguide.cfg --formats=pdf --langs=en-US + A pdf file will be created in tmp/en-US/pdf, you may choose to build the guide in a different format like html. In that case just replace the format value. +
+ ]]> + + Happy Publicaning and DocBooking. + diff --git a/docs/en-US/zone-add.xml b/docs/en-US/zone-add.xml index 2a85bb0b432..4f6606fce03 100644 --- a/docs/en-US/zone-add.xml +++ b/docs/en-US/zone-add.xml @@ -63,7 +63,7 @@ Basic. For AWS-style networking. Provides 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). Advanced. 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. - For more information about the network types, see Network Setup. + For more information about the network types, see . The rest of the steps differ depending on whether you chose Basic or Advanced. Continue with the steps that apply to you: diff --git a/docs/pot/Admin_Guide.pot b/docs/pot/Admin_Guide.pot new file mode 100644 index 00000000000..d3acd9b8e29 --- /dev/null +++ b/docs/pot/Admin_Guide.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:55\n" +"PO-Revision-Date: 2013-02-02T20:11:55\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "&PRODUCT; Administrator's Guide" +msgstr "" + +#. Tag: productname +#, no-c-format +msgid "Apache CloudStack" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Administration Guide for &PRODUCT;." +msgstr "" + diff --git a/docs/pot/Author_Group.pot b/docs/pot/Author_Group.pot new file mode 100644 index 00000000000..7e9c48f48bd --- /dev/null +++ b/docs/pot/Author_Group.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:55\n" +"PO-Revision-Date: 2013-02-02T20:11:55\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: firstname +#, no-c-format +msgid "Apache" +msgstr "" + +#. Tag: surname +#, no-c-format +msgid "CloudStack" +msgstr "" + diff --git a/docs/pot/Book_Info.pot b/docs/pot/Book_Info.pot new file mode 100644 index 00000000000..a2f07956e9c --- /dev/null +++ b/docs/pot/Book_Info.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:55\n" +"PO-Revision-Date: 2013-02-02T20:11:55\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "&PRODUCT; Guide" +msgstr "" + +#. Tag: subtitle +#, no-c-format +msgid "Revised August 9, 2012 10:48 pm Pacific" +msgstr "" + +#. Tag: productname +#, no-c-format +msgid "Apache CloudStack" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Complete technical documentation of &PRODUCT;." +msgstr "" + diff --git a/docs/pot/Book_Info_Release_Notes_4-0.pot b/docs/pot/Book_Info_Release_Notes_4-0.pot new file mode 100644 index 00000000000..ea3ff8bf1ca --- /dev/null +++ b/docs/pot/Book_Info_Release_Notes_4-0.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:55\n" +"PO-Revision-Date: 2013-02-02T20:11:55\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Version 4.0.0-incubating Release Notes" +msgstr "" + +#. Tag: subtitle +#, no-c-format +msgid "Revised October 17, 2012 19:49 UTC" +msgstr "" + +#. Tag: productname +#, no-c-format +msgid "Apache CloudStack" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Release notes for the Apache CloudStack 4.0.0-incubating release." +msgstr "" + diff --git a/docs/pot/CloudStack_Nicira_NVP_Guide.pot b/docs/pot/CloudStack_Nicira_NVP_Guide.pot new file mode 100644 index 00000000000..5320c4b66a8 --- /dev/null +++ b/docs/pot/CloudStack_Nicira_NVP_Guide.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:55\n" +"PO-Revision-Date: 2013-02-02T20:11:55\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "&PRODUCT; Plugin Guide for the Nicira NVP Plugin" +msgstr "" + +#. Tag: productname +#, no-c-format +msgid "Apache CloudStack" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Plugin Guide for the Nicira NVP Plugin." +msgstr "" + diff --git a/docs/pot/Common_Content/Legal_Notice.pot b/docs/pot/Common_Content/Legal_Notice.pot new file mode 100644 index 00000000000..f059a2bc57f --- /dev/null +++ b/docs/pot/Common_Content/Legal_Notice.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:55\n" +"PO-Revision-Date: 2013-02-02T20:11:55\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: para +#, no-c-format +msgid "Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "http://www.apache.org/licenses/LICENSE-2.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Apache CloudStack is an effort undergoing incubation at The Apache Software Foundation (ASF)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF." +msgstr "" + diff --git a/docs/pot/Developers_Guide.pot b/docs/pot/Developers_Guide.pot new file mode 100644 index 00000000000..c5706c2e7e6 --- /dev/null +++ b/docs/pot/Developers_Guide.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:55\n" +"PO-Revision-Date: 2013-02-02T20:11:55\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "&PRODUCT; Developer's Guide" +msgstr "" + +#. Tag: productname +#, no-c-format +msgid "Apache CloudStack" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This guide shows how to develop &PRODUCT;, use the API for operation and integration, access the usage data and use &PRODUCT; specific tools to ease development, testing and integration." +msgstr "" + diff --git a/docs/pot/Installation_Guide.pot b/docs/pot/Installation_Guide.pot new file mode 100644 index 00000000000..ee6bb9da0e2 --- /dev/null +++ b/docs/pot/Installation_Guide.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:55\n" +"PO-Revision-Date: 2013-02-02T20:11:55\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "&PRODUCT; Installation Guide" +msgstr "" + +#. Tag: productname +#, no-c-format +msgid "Apache CloudStack" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Installation Guide for &PRODUCT;." +msgstr "" + diff --git a/docs/pot/LDAPserver-for-user-authentication.pot b/docs/pot/LDAPserver-for-user-authentication.pot new file mode 100644 index 00000000000..fbac556906c --- /dev/null +++ b/docs/pot/LDAPserver-for-user-authentication.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:55\n" +"PO-Revision-Date: 2013-02-02T20:11:55\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using an LDAP Server for User Authentication" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can use an external LDAP server such as Microsoft Active Directory or ApacheDS to authenticate &PRODUCT; end-users. Just map &PRODUCT; accounts to the corresponding LDAP accounts using a query filter. The query filter is written using the query syntax of the particular LDAP server, and can include special wildcard characters provided by &PRODUCT; for matching common values such as the user’s email address and name. &PRODUCT; will search the external LDAP directory tree starting at a specified base directory and return the distinguished name (DN) and password of the matching user. This information along with the given password is used to authenticate the user.." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To set up LDAP authentication in &PRODUCT;, call the &PRODUCT; API command ldapConfig and provide the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hostname or IP address and listening port of the LDAP server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Base directory and query filter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Search user DN credentials, which give &PRODUCT; permission to search on the LDAP server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SSL keystore and password, if SSL is used" +msgstr "" + diff --git a/docs/pot/Preface.pot b/docs/pot/Preface.pot new file mode 100644 index 00000000000..0684f6ca3e2 --- /dev/null +++ b/docs/pot/Preface.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:55\n" +"PO-Revision-Date: 2013-02-02T20:11:55\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Preface" +msgstr "" + diff --git a/docs/pot/Release_Notes.pot b/docs/pot/Release_Notes.pot new file mode 100644 index 00000000000..e95dc9e5985 --- /dev/null +++ b/docs/pot/Release_Notes.pot @@ -0,0 +1,4478 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Submitting Feedback and Getting Help" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Apache CloudStack project has mailing lists for users and developers. These are the official channels of communication for the project and are the best way to get answers about using and contributing to CloudStack. It's a good idea to subscribe to the cloudstack-users mailing list if you've deployed or are deploying CloudStack into production, and even for test deployments." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The CloudStack developer's mailing list (cloudstack-dev) is for discussions about CloudStack development, and is the best list for discussing possible bugs in CloudStack. Anyone contributing to CloudStack should be on this mailing list." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can also report bugs in CloudStack using the Apache Defect Tracking System." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To posts to the lists, you'll need to be subscribed. See the CloudStack Web site for instructions." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Upgrade Instructions" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Upgrade from 3.0.2 to 4.0.0-incubating" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Perform the following to upgrade from version 3.0.2 to version 4.0.0-incubating. Note that some of the steps here are only required if you're using a specific hypervisor. The steps that are hypervisor-specific are called out with a note." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that you query your IP address usage records and process them or make a backup. During the upgrade you will lose the old IP address usage records." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Starting in 3.0.2, the usage record format for IP addresses is the same as the rest of the usage types. Instead of a single record with the assignment and release dates, separate records are generated per aggregation period with start and end dates. After upgrading, any existing IP address usage records in the old format will no longer be available." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following upgrade instructions apply only if you're using VMware hosts. If you're not using VMware hosts, skip this step and move on to step 3: stopping all usage servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In each zone that includes VMware hosts, you need to add a new system VM template." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "While running the existing 3.0.2 system, log in to the UI as root administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select view, click Templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Register template." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Register template dialog box is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Register template dialog box, specify the following values (do not change these):" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Field" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Value" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "systemvm-vmware-3.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "http://download.cloud.com/templates/burbank/burbank-systemvm-08012012.ova" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the zone where this hypervisor is used" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMware" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OVA" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OS Type" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Debian GNU/Linux 5.0 (32-bit)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Extractable" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "no" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Password Enabled" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Featured" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Watch the screen to be sure that the template downloads successfully and enters the READY state. Do not proceed until this is successful." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stop all Usage Servers if running. Run this on all Usage Server hosts." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-usage stop" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stop the Management Servers. Run this on all Management Server hosts." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management stop" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the MySQL master, take a backup of the MySQL databases. We recommend performing this step even in test upgrades. If there is an issue, this will assist with debugging." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the following commands, it is assumed that you have set the root password on the database, which is a CloudStack recommended best practice. Substitute your own MySQL root password." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# mysqldump -u root -pmysql_password cloud > cloud-backup.dmp\n" +"# mysqldump -u root -pmysql_password cloud_usage > cloud-usage-backup.dmp" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Either build RPM/DEB packages as detailed in the Installation Guide, or use one of the community provided yum/apt repositories to gain access to the &PRODUCT; binaries." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After you have configured an appropriate yum or apt repository, you may execute the one of the following commands as appropriate for your environment in order to upgrade &PRODUCT;:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# yum update cloud-*" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# apt-get update\n" +"# apt-get upgrade cloud-*" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You will, of course, have to agree to the changes suggested by Yum or APT." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the upgrade output includes a message similar to the following, then some custom content was found in your old components.xml, and you need to merge the two files:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "warning: /etc/cloud/management/components.xml created as /etc/cloud/management/components.xml.rpmnew " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Instructions follow in the next step." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have made changes to your copy of /etc/cloud/management/components.xml the changes will be preserved in the upgrade. However, you need to do the following steps to place these changes in a new version of the file which is compatible with version 4.0.0-incubating." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make a backup copy of /etc/cloud/management/components.xml. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# mv /etc/cloud/management/components.xml /etc/cloud/management/components.xml-backup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy /etc/cloud/management/components.xml.rpmnew to create a new /etc/cloud/management/components.xml:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# cp -ap /etc/cloud/management/components.xml.rpmnew /etc/cloud/management/components.xml" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Merge your changes from the backup file into the new components.xml." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# vi /etc/cloud/management/components.xml" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have more than one management server node, repeat the upgrade steps on each node." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start the first Management Server. Do not start any other Management Server nodes yet." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management start" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Wait until the databases are upgraded. Ensure that the database upgrade is complete. After confirmation, start the other Management Servers one at a time by running the same command on each node." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Failing to restart the Management Server indicates a problem in the upgrade. Having the Management Server restarted without any issues indicates that the upgrade is successfully completed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start all Usage Servers (if they were running on your previous version). Perform this on each Usage Server host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# service cloud-usage start" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Additional steps are required for each KVM host. These steps will not affect running guests in the cloud. These steps are required only for clouds using KVM as hosts and only on the KVM hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure a yum or apt respository containing the &PRODUCT; packages as outlined in the Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stop the running agent." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# service cloud-agent stop" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Update the agent software with one of the following command sets as appropriate for your environment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# yum update cloud-*" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# apt-get update" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# apt-get upgrade cloud-*" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start the agent." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-agent start" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit /etc/cloud/agent/agent.properties to change the resource parameter from \"com.cloud.agent.resource.computing.LibvirtComputingResource\" to \"com.cloud.hypervisor.kvm.resource.LibvirtComputingResource\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start the cloud agent and cloud management services." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the Management Server is up and running, log in to the CloudStack UI and restart the virtual router for proper functioning of all the features." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the CloudStack UI as administrator, and check the status of the hosts. All hosts should come to Up state (except those that you know to be offline). You may need to wait 20 or 30 minutes, depending on the number of hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Troubleshooting: If login fails, clear your browser cache and reload the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Do not proceed to the next step until the hosts show in Up state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are upgrading from 3.0.2, perform the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that the admin port is set to 8096 by using the \"integration.api.port\" global parameter." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This port is used by the cloud-sysvmadm script at the end of the upgrade procedure. For information about how to set this parameter, see \"Setting Global Configuration Parameters\" in the Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you don't want the admin port to remain open, you can set it to null after the upgrade is done and restart the management server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the cloud-sysvmadm script to stop, then start, all Secondary Storage VMs, Console Proxy VMs, and virtual routers. Run the script once on each management server. Substitute your own IP address of the MySQL instance, the MySQL user to connect as, and the password to use for that user. In addition to those parameters, provide the -c and -r arguments. For example:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# nohup cloud-sysvmadm -d 192.168.1.5 -u cloud -p password -c -r > sysvm.log 2>&1 &" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# tail -f sysvm.log" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This might take up to an hour or more to run, depending on the number of accounts in the system." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If needed, upgrade all Citrix XenServer hypervisor hosts in your cloud to a version supported by CloudStack 4.0.0-incubating. The supported versions are XenServer 5.6 SP2 and 6.0.2. Instructions for upgrade can be found in the CloudStack 4.0.0-incubating Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now apply the XenServer hotfix XS602E003 (and any other needed hotfixes) to XenServer v6.0.2 hypervisor hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disconnect the XenServer cluster from CloudStack." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar of the CloudStack UI, select Infrastructure. Under Clusters, click View All. Select the XenServer cluster and click Actions - Unmanage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This may fail if there are hosts not in one of the states Up, Down, Disconnected, or Alert. You may need to fix that before unmanaging this cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Wait until the status of the cluster has reached Unmanaged. Use the CloudStack UI to check on the status. When the cluster is in the unmanaged state, there is no connection to the hosts in the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To clean up the VLAN, log in to one XenServer host and run:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/cloud-clean-vlan.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now prepare the upgrade by running the following on one XenServer host:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/cloud-prepare-upgrade.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you see a message like \"can't eject CD\", log in to the VM and unmount the CD, then run this script again." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Upload the hotfix to the XenServer hosts. Always start with the Xen pool master, then the slaves. Using your favorite file copy utility (e.g. WinSCP), copy the hotfixes to the host. Place them in a temporary folder such as /tmp." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the Xen pool master, upload the hotfix with this command:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "xe patch-upload file-name=XS602E003.xsupdate" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make a note of the output from this command, which is a UUID for the hotfix file. You'll need it in another step later." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) If you are applying other hotfixes as well, you can repeat the commands in this section with the appropriate hotfix number. For example, XS602E004.xsupdate." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Manually live migrate all VMs on this host to another host. First, get a list of the VMs on this host:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# xe vm-list" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Then use this command to migrate each VM. Replace the example host name and VM name with your own:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# xe vm-migrate live=true host=host-name vm=VM-name" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Troubleshooting" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you see a message like \"You attempted an operation on a VM which requires PV drivers to be installed but the drivers were not detected,\" run:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/make_migratable.sh b6cf79c8-02ee-050b-922f-49583d9f1a14." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Apply the hotfix. First, get the UUID of this host:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe host-list" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Then use the following command to apply the hotfix. Replace the example host UUID with the current host ID, and replace the hotfix UUID with the output from the patch-upload command you ran on this machine earlier. You can also get the hotfix UUID by running xe patch-list." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "xe patch-apply host-uuid=host-uuid uuid=hotfix-uuid" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy the following files from the CloudStack Management Server to the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy from here..." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "...to here" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/xenserver60/NFSSR.py" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/sm/NFSSR.py" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/setupxenserver.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/setupxenserver.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/make_migratable.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/make_migratable.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Only for hotfixes XS602E005 and XS602E007) You need to apply a new Cloud Support Pack." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Download the CSP software onto the XenServer host from one of the following links:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For hotfix XS602E005: http://coltrane.eng.hq.xensource.com/release/XenServer-6.x/XS-6.0.2/hotfixes/XS602E005/56710/xe-phase-2/xenserver-cloud-supp.tgz" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For hotfix XS602E007: http://coltrane.eng.hq.xensource.com/release/XenServer-6.x/XS-6.0.2/hotfixes/XS602E007/57824/xe-phase-2/xenserver-cloud-supp.tgz" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Extract the file:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# tar xf xenserver-cloud-supp.tgz" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following script:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe-install-supplemental-pack xenserver-cloud-supp.iso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the XenServer host is part of a zone that uses basic networking, disable Open vSwitch (OVS):" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe-switch-network-backend bridge" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reboot this XenServer host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the message \"mv: cannot stat `/etc/cron.daily/logrotate': No such file or directory\" appears, you can safely ignore it." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "for pbd in `xe pbd-list currently-attached=false| grep ^uuid | awk '{print $NF}'`; do xe pbd-plug uuid=$pbd ; " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On each slave host in the Xen pool, repeat these steps, starting from \"manually live migrate VMs.\"" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Troubleshooting Tip" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If passwords which you know to be valid appear not to work after upgrade, or other UI issues are seen, try clearing your browser cache and reloading the UI page." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Upgrade from 2.2.14 to 4.0.0-incubating" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that you query your IPaddress usage records and process them; for example, issue invoices for any usage that you have not yet billed users for." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Starting in 3.0.2, the usage record format for IP addresses is the same as the rest of the usage types. Instead of a single record with the assignment and release dates, separate records are generated per aggregation period with start and end dates. After upgrading to 4.0.0-incubating, any existing IP address usage records in the old format will no longer be available." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are using version 2.2.0 - 2.2.13, first upgrade to 2.2.14 by using the instructions in the 2.2.14 Release Notes." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "KVM Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If KVM hypervisor is used in your cloud, be sure you completed the step to insert a valid username and password into the host_details table on each KVM node as described in the 2.2.14 Release Notes. This step is critical, as the database will be encrypted after the upgrade to 4.0.0-incubating." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "While running the 2.2.14 system, log in to the UI as root administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Using the UI, add a new System VM template for each hypervisor type that is used in your cloud. In each zone, add a system VM template for each hypervisor used in that zone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Register template dialog box, specify the following values depending on the hypervisor type (do not change these):" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: systemvm-xenserver-3.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description: systemvm-xenserver-3.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL: http://download.cloud.com/templates/acton/acton-systemvm-02062012.vhd.bz2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zone: Choose the zone where this hypervisor is used" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor: XenServer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Format: VHD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OS Type: Debian GNU/Linux 5.0 (32-bit)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Extractable: no" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Password Enabled: no" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public: no" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Featured: no" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: systemvm-kvm-3.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description: systemvm-kvm-3.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL: http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor: KVM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Format: QCOW2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: systemvm-vmware-3.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description: systemvm-vmware-3.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL: http://download.cloud.com/templates/burbank/burbank-systemvm-08012012.ova" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor: VMware" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Format: OVA" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Watch the screen to be sure that the template downloads successfully and enters the READY state. Do not proceed until this is successful" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "WARNING: If you use more than one type of hypervisor in your cloud, be sure you have repeated these steps to download the system VM template for each hypervisor type. Otherwise, the upgrade will fail." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# mysqldump -u root -pmysql_password cloud > cloud-backup.dmp\n" +"# mysqldump -u root -pmysql_password cloud_usage > cloud-usage-backup.dmp\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have made changes to your existing copy of the file components.xml in your previous-version CloudStack installation, the changes will be preserved in the upgrade. However, you need to do the following steps to place these changes in a new version of the file which is compatible with version 4.0.0-incubating." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How will you know whether you need to do this? If the upgrade output in the previous step included a message like the following, then some custom content was found in your old components.xml, and you need to merge the two files:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make a backup copy of your /etc/cloud/management/components.xml file. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# mv /etc/cloud/management/components.xml /etc/cloud/management/components.xml-backup" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# cp -ap /etc/cloud/management/components.xml.rpmnew /etc/cloud/management/components.xml" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Merge your changes from the backup file into the new components.xml file." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# vi /etc/cloud/management/components.xml\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have made changes to your existing copy of the /etc/cloud/management/db.properties file in your previous-version CloudStack installation, the changes will be preserved in the upgrade. However, you need to do the following steps to place these changes in a new version of the file which is compatible with version 4.0.0-incubating." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make a backup copy of your file /etc/cloud/management/db.properties. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# mv /etc/cloud/management/db.properties /etc/cloud/management/db.properties-backup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy /etc/cloud/management/db.properties.rpmnew to create a new /etc/cloud/management/db.properties:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# cp -ap /etc/cloud/management/db.properties.rpmnew etc/cloud/management/db.properties" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Merge your changes from the backup file into the new db.properties file." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# vi /etc/cloud/management/db.properties" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the management server node, run the following command. It is recommended that you use the command-line flags to provide your own encryption keys. See Password and Key Encryption in the Installation Guide." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# cloud-setup-encryption -e encryption_type -m management_server_key -k database_key" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When used without arguments, as in the following example, the default encryption type and keys will be used:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) For encryption_type, use file or web to indicate the technique used to pass in the database encryption password. Default: file." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) For management_server_key, substitute the default key that is used to encrypt confidential parameters in the properties file. Default: password. It is highly recommended that you replace this with a more secure value" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) For database_key, substitute the default key that is used to encrypt confidential parameters in the CloudStack database. Default: password. It is highly recommended that you replace this with a more secure value." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat steps 10 - 14 on every management server node. If you provided your own encryption key in step 14, use the same key on all other management servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Wait until the databases are upgraded. Ensure that the database upgrade is complete. You should see a message like \"Complete! Done.\" After confirmation, start the other Management Servers one at a time by running the same command on each node." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-usage start" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(KVM only) Additional steps are required for each KVM host. These steps will not affect running guests in the cloud. These steps are required only for clouds using KVM as hosts and only on the KVM hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure your CloudStack package repositories as outlined in the Installation Guide" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-agent stop" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Update the agent software with one of the following command sets as appropriate." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" # apt-get update\n" +"# apt-get upgrade cloud-*\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy the contents of the agent.properties file to the new agent.properties file by using the following command" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "sed -i 's/com.cloud.agent.resource.computing.LibvirtComputingResource/com.cloud.hypervisor.kvm.resource.LibvirtComputingResource/g' /etc/cloud/agent/agent.properties" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the CloudStack UI as admin, and check the status of the hosts. All hosts should come to Up state (except those that you know to be offline). You may need to wait 20 or 30 minutes, depending on the number of hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Do not proceed to the next step until the hosts show in the Up state. If the hosts do not come to the Up state, contact support." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following script to stop, then start, all Secondary Storage VMs, Console Proxy VMs, and virtual routers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the command once on one management server. Substitute your own IP address of the MySQL instance, the MySQL user to connect as, and the password to use for that user. In addition to those parameters, provide the \"-c\" and \"-r\" arguments. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# nohup cloud-sysvmadm -d 192.168.1.5 -u cloud -p password -c -r > sysvm.log 2>&1 &\n" +"# tail -f sysvm.log" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After the script terminates, check the log to verify correct execution:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# tail -f sysvm.log" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The content should be like the following:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"Stopping and starting 1 secondary storage vm(s)...\n" +"Done stopping and starting secondary storage vm(s)\n" +"Stopping and starting 1 console proxy vm(s)...\n" +"Done stopping and starting console proxy vm(s).\n" +"Stopping and starting 4 running routing vm(s)...\n" +"Done restarting router(s).\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you would like additional confirmation that the new system VM templates were correctly applied when these system VMs were rebooted, SSH into the System VM and check the version." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use one of the following techniques, depending on the hypervisor." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "XenServer or KVM:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SSH in by using the link local IP address of the system VM. For example, in the command below, substitute your own path to the private key used to log in to the system VM and your own link local IP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following commands on the XenServer or KVM host on which the system VM is present:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# ssh -i private-key-path link-local-ip -p 3922\n" +"# cat /etc/cloudstack-release" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The output should be like the following:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "Cloudstack Release 4.0.0-incubating Mon Oct 9 15:10:04 PST 2012" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "ESXi" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SSH in using the private IP address of the system VM. For example, in the command below, substitute your own path to the private key used to log in to the system VM and your own private IP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following commands on the Management Server:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# ssh -i private-key-path private-ip -p 3922\n" +"# cat /etc/cloudstack-release\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Apply the XenServer hotfix XS602E003 (and any other needed hotfixes) to XenServer v6.0.2 hypervisor hosts." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "/opt/xensource/bin/cloud-clean-vlan.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare the upgrade by running the following on one XenServer host:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "/opt/xensource/bin/cloud-prepare-upgrade.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you see a message like \"can't eject CD\", log in to the VM and umount the CD, then run this script again." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Upload the hotfix to the XenServer hosts. Always start with the Xen pool master, then the slaves. Using your favorite file copy utility (e.g. WinSCP), copy the hotfixes to the host. Place them in a temporary folder such as /root or /tmp." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "xe patch-upload file-name=XS602E003.xsupdate" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe vm-list" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe vm-migrate live=true host=host-name vm=VM-name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# xe host-list" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "xe patch-apply host-uuid=host-uuid uuid=hotfix-uuid" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/xenserver60/NFSSR.py" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/sm/NFSSR.py" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/setupxenserver.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/setupxenserver.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/make_migratable.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/make_migratable.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# tar xf xenserver-cloud-supp.tgz" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# xe-install-supplemental-pack xenserver-cloud-supp.iso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# xe-switch-network-backend bridge" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/setupxenserver.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "for pbd in `xe pbd-list currently-attached=false| grep ^uuid | awk '{print $NF}'`; do xe pbd-plug uuid=$pbd ; " +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Version 4.0.0-incubating" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "What’s New in 4.0.0-incubating" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Apache CloudStack 4.0.0-incubating includes the following new features:" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Inter-VLAN Routing" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Inter-VLAN Routing is the capability to route network traffic between VLANs. This feature enables you to set up Virtual Private Clouds (VPC) that can hold multi-tier applications. These tiers are deployed on different VLANs that can communicate with each other. You can provision VLANs to the tiers your create, and VMs can be deployed on different tiers, such as Web, Application, or Database. The VLANs are connected to a virtual router, which facilitates communication between the VMs. In effect, you can segment VMs by means of VLANs into different networks that can host multi-tier applications. Such segmentation by means of VLANs logically separate application VMs for higher security and lower broadcasts, while remaining physically connected to the same device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This feature is supported on XenServer and VMware hypervisors." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A Site-to-Site VPN connection helps you establish a secure connection from an enterprise datacenter to the cloud infrastructure. This allows users to access the guest VMs by establishing a VPN connection to the virtual router of the account from a device in the datacenter of the enterprise. Having this facility eliminates the need to establish VPN connections to individual VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The supported endpoints on the remote datacenters are:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Cisco ISR with IOS 12.4 or later" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Juniper J-Series routers with JunOS 9.5 or later" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Local Storage Support for Data Volumes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can now create data volumes on local storage. The data volume is placed on the same XenServer host as the VM instance that is attached to the data volume. These local data volumes can be attached to virtual machines, detached, re-attached, and deleted just as with the other types of data volume. In earlier releases of CloudStack, only the root disk could be placed in local storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Local storage is ideal for scenarios where persistence of data volumes and HA is not required. Some of the benefits include reduced disk I/O latency and cost reduction from using inexpensive local disks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In order for local volumes to be used, the feature must be enabled for the zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can create a data disk offering for local storage. When a user creates a new VM, they can select this disk offering in order to cause the data disk volume to be placed in local storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can not migrate a VM that has a volume in local storage to a different host, nor migrate the volume itself away to a different host. If you want to put a host into maintenance mode, you must first stop any VMs with local data volumes on that host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Local storage support for volumes is available for XenServer, KVM, and VMware hypervisors." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Tags" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A tag is a key-value pair that stores metadata about a resource in the cloud. Tags are useful for categorizing resources. For example, you can tag a user VM with a value that indicates the user's city of residence. In this case, the key would be \"city\" and the value might be \"Toronto\" or \"Tokyo.\" You can then request CloudStack to find all resources that have a given tag; for example, VMs for users in a given city." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can tag a user virtual machine, volume, snapshot, guest network, template, ISO, firewall rule, port forwarding rule, public IP address, security group, load balancer rule, project, VPC, network ACL, or static route. You can not tag a remote access VPN." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can work with tags through the UI or through the new API commands createTags, deleteTags, and listTags. You can define multiple tags for each resource. There is no limit on the number of tags you can define. Each tag can be up to 255 characters long. Users can define tags on the resources they own, and administrators can define tags on any resources in the cloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new optional input parameter, \"tags,\" has been added to many of the list* API commands. The following example shows how to use this new parameter to find all the volumes having tag region=canada OR tag city=Toronto:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "command=listVolumes\n" +"&listAll=true\n" +"&tags[0].key=region\n" +"&tags[0].value=canada\n" +"&tags[1].key=city\n" +"&tags[1].value=Toronto" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following API commands have the new \"tags\" input parameter:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVirtualMachines" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVolumes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSnapshots" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetworks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listTemplates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listIsos" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listFirewallRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listPortForwardingRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listPublicIpAddresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSecurityGroups" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listLoadBalancerRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listProjects" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVPCs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetworkACLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listStaticRoutes" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "AWS API Changes for Tags" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Some changes have been made to the Amazon Web Services API compatibility support in order to accommodate the new tagging feature." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New APIs:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New API" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ec2-create-tags" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add tags to one or more resources." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ec2-delete-tags" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Remove tags from one or more resources." +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-tags" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Show currently defined tags." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Changed APIs:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Changed API" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-images" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Output now shows tags defined for each image." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ec2-describe-instances" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following filters can now be passed in to limit the output result set: tag-key, tag-value and tag:key" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ec2-describe-snapshots" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-volumes" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Secure Console Access on XenServer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "With the addition of Secure Console feature, users can now securely access the VM consoles on the XenServer hypervisor. You can either SSH or use the View Console option in the Management Server to securely connect to the VMs on the XenServer host. The Management Server uses the xapi API to stream the VM consoles. However, there is no change in the way you can access the console of a VM. This feature is supported on XenServer 5.6 and 6.0 versions." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Stopped VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This release supports creating VMs without starting them on the backend. You can determine whether the VM needs to be started as part of the VM deployment. A VM can be deployed in two ways: create and start a VM (the default method); create a VM and leave it in the stopped state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new request parameter, startVM, is introduced in the deployVm API to support the stopped VM feature. The possible values are:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "true - The VM starts as a part of the VM deployment" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "false - The VM is left in stopped state at the end of the VM deployment" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Uploading an Existing Volume to a Virtual Machine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Existing data can now be made accessible to a virtual machine. This is called uploading a volume to the VM. For example, this is useful to upload data from a local file system and attach it to a VM. Root administrators, domain administrators, and end users can all upload existing volumes to VMs. The upload is performed by using HTTP. The uploaded volume is placed in the zone's secondary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This functionality is supported for the following hypervisors:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor : Disk Image Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer : VHD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMware : OVA" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM : QCOW2" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Dedicated High-Availability Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "One or more hosts can now be designated for use only by high-availability (HA) enabled VMs that are restarted due to a host failure. Setting up a pool of such dedicated HA hosts as the recovery destination for all HA-enabled VMs make it easier to determine which VMs are restarted as part of the high-availability function. You can designate a host as a dedicated-HA restart node only if the Dedicated HA Hosts feature is enabled by setting the appropriate global configuration parameter." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Support for Amazon Web Services API" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This release supports Amazon Web Services APIs, including Elastic Compute Cloud (EC2) API. Fidelity with the EC2 API and the installation experience for this functionality are both enhanced. In prior releases, users were required to install a separate component called CloudBridge, in addition to installing the Management Server. For new installations of CloudStack 4.0.0-incubating, this software is installed automatically along with CloudStack and runs in a more closely integrated fashion. The feature is disabled by default, but can be easily enabled by setting the appropriate global configuration parameter and performing a few setup steps." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "The Nicira NVP Plugin" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Nicira NVP plug-in allows CloudStack to use the Nicira solution for virtualized network as a provider for CloudStack networks and services. In CloudStack 4.0.0-incubating this plug-in supports the Connectivity service. This service is responsible for creating Layer 2 networks supporting the networks created by guests. When a tenant creates a new network, instead of a traditional VLAN, a logical network will be created by sending the appropriate calls to the Nicira NVP Controller. The plug-in has been tested with Nicira NVP versions 2.1.0, 2.2.0 and 2.2.1." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Support for CAStor Cluster" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack 4.0.0-incubating supports using a CAStor cluster as the back-end storage system for a CloudStack S3 front-end. The CAStor back-end storage for CloudStack extends the existing storage classes and allows the storage configuration attribute to point to a CAStor cluster. This feature makes use of the CloudStack server's local disk to spool files before writing them to CAStor when handling the PUT operations. However, a file must be successfully written into the CAStor cluster prior to the return of a success code to the S3 client to ensure that the transaction outcome is correctly reported." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The S3 multipart file upload is not supported in this release. You are prompted with proper error message if a multipart upload is attempted." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Clustered Logical Volume Manager Support for KVM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This release adds Clustered Logical Volume Manager (CLVM) storage support for KVM hosts. With this support, you can use CLVM as primary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The CLVM support for KVM allows root and data disks (primary storage) to reside on Linux logical volumes. The administrators are required to configure CLVM on the KVM hosts independent of CloudStack. When the volume groups are available, an administrator can simply add primary storage of type CLVM, providing the volume group name. Then CloudStack creates and manages logical volumes as needed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CLVM also supports Snapshots. CloudStack creates an LVM snapshot, copy the applicable logical volume to the secondary storage in the qcow2 format, and then delete the LVM snapshot." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Rados Block Device Support for KVM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can now use Rados Block Device (RBD) to run instances on Apache CloudStack 4.0.0-incubating. This can be done by adding a RBD pool as primary storage. Before using RBD, ensure that Qemu is compiled with RBD enabled, and the libvirt version is at least 0.10 with RBD enabled on the KVM host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a disk offering for RBD so that you can ensure that StoragePoolAllocator chooses the RBD pool to deploy instances." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Issues Fixed in 4.0.0-incubating" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Many bugs include a defect number that reflects the bug number that was held in the bug tracker run by Citrix (bugs.cloudstack.org). The Apache CloudStack project now uses Jira to manage its bugs, so some of the bugs that are referenced here may not be available to view. However, we are still including them for completeness." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Defect" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Many" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vSphere 5.0 now has GA support. Formerly only Beta support was provided." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16135" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Creating volumes after upgrading from snapshot taken in 2.2.14 no longer deletes the snapshot physically from the secondary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16122" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a site-to-site VPN setup, alerts are generated when the VPC virtual router is rebooted with multiple vpn connections." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16022" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If host connection fails due to a database error, host now disconnects and the Managerment Server id is removed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16011" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name of network offering is no longer truncated due to too-narrow field width in Add Guest Network dialog box." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15978" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the virtual router and its host go down, the high availability mechanism now works for the virtual router." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15921" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The 2.2.x security group script now accounts for the VMs created in the version 2.1 timeframe." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15919" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A level parameter is added to the listVolumes command; therefore queries return the response more quickly." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15904" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Upgrade from version 2.2.14 to CloudStack-3.0.5-0.2944-rhel5 works as expected. The upgrade script, /usr/share/cloud/setup/db/schema-2214to30-cleanup.sql, works as expected." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15879" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The database upgrade from version 3.0.4 to 3.0.5 works as expected." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15807" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network label for OVM now available in UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15779" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the thumbnail is requested, the console session will not be terminated." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15778" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fetching a VM thumbnail now gets a thumbnail of appropriate visual dimensions." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15734" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM Snapshots no longer shows incorrect disk usage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15733" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The domainId parameter for the listNetworks command now lists the resources belonging to the domain specified." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15676" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stopping the router no longer fails with the null pointer exception." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15648" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If creating a volume from a snapshot fails, the error is reported on the UI but the volume is stuck in the creating state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15646" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createFirewallRule API no longer causes null pointer exception." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15628" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a KVM host, the high availability mechanism no longer takes a long time to migrate VMs to another KVM host if there are multiple storage pools." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15627" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Metadata instance-id and vm-id for existing VMs stays the same after upgrade." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15621" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Solved difficulty with allocating disk volumes when running multiple VM deployment in parallel." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15603" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack now stop the VMs when destroyVM command is called." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15586" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public Vlan for an account no longer fails if multiple physical networks are present." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15582" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The dns-name filter is now supported for ec2-describe-instances in the Amazon Web Services API compatibility commands. The filter maps to the name of a user VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15503" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "An IP address which has static NAT rules can now be released. Subsequently, restarting this network after it was shutdown can succeed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15464" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Can now delete static route whose state is set to Revoke." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15443" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Creating a firewall rule no longer fails with an internal server error." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15398" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Corrected technique for programming DNS on the user VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15356" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Internal DNS 2 entry now correctly shown in UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15335" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The CloudBridge S3 Engine now connects to the database by using the deciphered password in the db.properties file." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15318" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "UI now correctly prevents the user from stopping a VM that is in the Starting state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15307" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fixed Japanese localization of instance statuses in the Instances menu." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15278" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The deployment planner no longer takes long time to locate a suitable host to deploy VMs when large number of clusters are present." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15274" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Creating a VLAN range using Zone ID without network ID now succeeds." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15243" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now check to be sure source NAT and VPN have same provider." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15232" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that networks using external load balancer/firewall in 2.2.14 or earlier can properly upgrade." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15200" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "No exception when trying to attach the same volume while attaching the first volume is in progress." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15173" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Additional cluster can no longer be added with same VSM IP address as another cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15167" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "AWS API calls now honor the admin account's ability to view or act on the resources owned by the regular users." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15163" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The minimum limit is not honored when there is not enough capacity to deploy all the VMs and the ec2-run-instances command with the -n >n1 -n2> option is used to deploy multiple VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15157" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Can now add/enable service providers for multiple physical networks through the UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15145" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "AWS API call ec2-register has better error handling for negative cases." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15122" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Filters now supported for AWS API call ec2-describe-availability-zones." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15120" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Actions column in UI of Volume page now shows action links." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15099" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Buttons no longer overlap text on Account Deletion confirmation page in UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15095" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensures you can not create a VM with a CPU frequency greater than the host CPU frequency." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15094" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CPU cap now set properly in VMware." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15077" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NullPointerException is no longer observed while executing the command to list the public IP in a basic zone created with the default shared NetScaler EIP and ELB network offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15044" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "UI now provides option to view the list of instances which are part of the guest network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15026" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "UI in Deploy VM dialog now lists only templates or ISOs depending on which is selected in previous dialog." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14989" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In KVM, the Create Instance wizard now shows only templates from the current (KVM) zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14986, CS-14985" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Listing filters works as expected in the ec2-describe-volumes and ec2-describe-snapshots commands." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14964" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Automatically starting the Console Proxy no longer fails due to its missing volume on the primary storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14907" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "User is now correctly prevented from trying to download an uploaded volume which has not yet been moved to primary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14879" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a user VM is stopped or terminated, the static NAT associated with this VM is now disabled. This public IP address is no longer owned by this account and can be associated to any other user VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14854" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Only the admin user can change the template permission to Public, so this option is removed from the UI for domain Admins and regular Users." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14817" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "While checking if network has any external provider, CloudStack will consider all providers in the network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14796" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When deploying a VM with ec2-run-instances, userdata is now encoded." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14770" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The API returns the keypair information when a VM is deployed with sshkey. This affects the API commands related to virtual machines (deployVirtualMachine, listVirtualMachines, ... *VirtualMachine), as well as the corresponding AWS APIs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14724" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "UI no longer displays the dropdown list of isolation method choices if sdn.ovs.controller is false." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14345" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Logout API returns XML header." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host IPs now associated with appropriate IPs according to traffic type." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14253" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Can now delete and re-create port forwarding rule on same firewall." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14452" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Data disk volumes are now automatically copied from one cluster to another." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13539" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Windows VM can get IP after reboot." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13537" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When user tries to delete a domain that contains sub-domains, an error message is now sent to convey the reason for the delete failure." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13153" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "System VMs support HTTP proxy." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-12642" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Added Close button to Select Project list view popup in UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-12510" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Deleting and reinserting host_details no longer causes deadlocks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-12407" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "F5 and Netscaler - when dedicated is selected, capacity field is disabled." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-12111" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Email validation for edit user form." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-10928" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network read/write values now always positive numbers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15376, CS-15373" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The AWS APIs (EC2 and S3) now listen on the 7080 port and send request to CloudStack on the 8080 port just as any other clients of CloudStack." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13944" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The CloudStack 2.2.x to 3.0.x database upgrade for multiple physical networks is now supported." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15300" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The admin accounts of a domain now honour the limits imposed on that domain just like the regular accounts do. A domain admin now is not allowed to create an unlimited number of instances, volumes, snapshots, and so on." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15396" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The CloudStack database now contain the UUD information after the 2.2.14 to 3.0.4 upgrade." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15450" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Upgrade from 2.2.14 to 3.0.4 no longer fails on a VMware host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15449" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Running cloudstack-aws-api-register no longer fails with the \"User registration failed with error: [Errno 113] No route to host\" error." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15455" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The iptable rules are configured to open the awsapi port (7080) as part of the installation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15429" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "While creating an instance with data volume, disk offering also is considered while checking the account limit on volume resources." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15414" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After the 2.2.14 to 3.0.4 upgrade, the value of the global parameter xen.guest.network.device is now decrypted before setting the traffic label." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15382" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "During 2.2.14 to 3.0.4 upgrade, the hosts no longer go to the Alert state if destroyed networks existed with non-existent tags prior to upgrade." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15323" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack supports the following Citrix XenServer hotfixes: XS602E003, XS602E004, and XS602E005." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15430" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create snapshot now fails if creating a snapshot exceeds the snapshot resource limit for a domain admin or a user account." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14256" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Virtual Router no longer remains in starting state for subdomain or user on a KVM 3.0.1 prerlease host on RHEL 6.2." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-7495" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Implemented a variety of Xen management host improvements." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-8105" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NFS v4 for primary storage now works as expected on KVM hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-9989" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The error messages returned during VM deployment failure will have much more details than before." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-12584" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can no longer add security groups not supported by the hypervisor in use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-12705" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When creating a Network offering by using SRX as the service provider for SourceNAT servcies, an option is given in the CloudStack UI now to set the source_nat type to \"per Zone\"/\"per account\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-12782" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Assigning a VM from Basic to Advanced zone no longer ignores the network ID. A warning message is displayed for VM movements across zones." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-12591" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Broadcast Address on the Second Public IP NIC is now corrected." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13272" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a user is deleted, all the associated properties, such as IPs and virtual routers, are now deleted." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13377" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Creating template from a root disk of a stopped instance now provides an option to make it a \"Featured template\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13500" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reaching the first guest VM by using its public IP from the second guest VM no longer fails." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13853" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The default gateway can no longer be 0.0.0.0 in the Secondary Storage VM (SSVM)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13863" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The queryAsyncJobResult command in XML format now returns the correct UUIDs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13867" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Corrected CSP xenserver-cloud-supp.tgz for XenServer 5.6 and 6.0." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13904" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Labels and values for the service offerings CPU and memory are now consistent." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13998" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The SSVM kernel panic issue is fixed on XenServer." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14090" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The issue is fixed where running the VMware snapshots randomly fails with the ArrayIndexOutOfBoundsException error." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14021" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The java.lang.OutOfMemoryError is fixed on the Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14025" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Python Eggs are provided to easily package the test client for each branch of CloudStack." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14068" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Resetting the VM password through the CloudStack UI no longer causes any error." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14156" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The pod which has the administrator's virtual router is no longer selected while creating the virtual routers for guests." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14182" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The users can now delete their ISOs as normal users." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14185" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The listOSTypes API now filters out the types of operating system by using the keywords." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14204" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The cloud-setup-bonding.sh command no longer generates the \"command not found\" error." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14214" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Specify VLAN option cannot be enabled now for an isolated Network offering with SourceNAT enabled." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14234" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Sending project invite email to an account now requires SMTP configured in CloudStack." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14237" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The garbage collector of the primary storage no longer fails when the first host in the cluster is not up." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14241" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Custom Volume Disk Offering is now matching the Global configuration value." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14270" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The listNetworks API no longer assumes that the broadcast type is always VLAN." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14319" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The internal name of the VM is no longer present in the error message that is displayed to a domain administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14321" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The listVolumes API call now returns a valid value for the isExtractable parameter for the ISO-derived disk and data disk volumes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14323" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Invalid API calls will now give valid response in json/xml format." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14339" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Custom Disk Size will now allow values larger than 100GB." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14357" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The ConsoleProxyLoadReportCommand is no longer fired continuously." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14421" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fixed the issue of virtual router deployments. The DHCP entries can now be assigned to the router." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14555" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Unzipped downloaded template MD5SUM will no longer override the zipped template MD5SUM in the database." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14598" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The complete screen of the running VM is now displayed in the console proxy." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14600" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Windows or Linux based consoles are no longer lost upon rebooting VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14784" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Multiple subnets with the same VLAN now work as expected." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13303, 14874, 13897, 13944, 14088, 14190" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A variety of upgrade issues have been fixed in release 3.0.3." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15080" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Setting a private network on a VLAN for VMWare environment is now supported." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15168" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The console proxy now works as expected and no exception is shown in the log after upgrading from version 2.2.14 to 3.0.2." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15172" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Version 3.0.2 now accepts the valid public key." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Known Issues in 4.0.0-incubating" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Issue ID" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CLOUDSTACK-301" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Nexus 1000v DVS integration is not functional" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This source code release includes some partial functionality to support the Cisco Nexus 1000v Distributed Virtual Switch within a VMware hypervisor environment. The functionality is not complete at this time." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CLOUDSTACK-368" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OVM - cannot create guest VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This source code release has regressed from the CloudStack 2.2.x code and is unable to support Oracle VM (OVM)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CLOUDSTACK-279" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Deleting a project fails when executed by the regular user. This works as expected for root/domain admin. To workaround, perform either of the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use the account cleanup thread which will eventually complete the project deletion." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Execute the call as the root/domain admin on behalf of the regular user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16067" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The command=listTags&key=city command does not work as expected. The command does not return tags for the resources of the account with the tag, city" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16063" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The current values of volumes and snapshots are incorrect when using KVM as a host. To fix this, the database upgrade codes, volumes.size and snapshots.size, should be changed to show the virtual sizes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16058" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Null pointer Exception while deleting the host after moving the host to maintenance state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16045" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Only the root administrator can handle the API keys. The domain administrators are not allowed to create, delete, or retrieve API keys for the users in their domain." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16019" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CIDR list in the Add VPN Customer Gateway dialog does not prompt the user that they can provide a comma separated CIDRs if multiple CIDRs have to be supplied." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16015" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Deleting a network is not supported when its network providers are disabled." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-16012" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Unable to delete a zone in the UI because the necessary cleanup cannot be completed. When the hosts are removed, the expunge process fails to delete the volumes as no hosts are present to send the commands to. Therefore, the storage pool removal fails, and zone can't be cleaned and deleted." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name of network offering might be truncated due to too-narrow field width in Add Guest Network dialog box." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15789" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Invalid global setting prevents management server to restart. For example, if you configure the \"project.invite.timeout\" parameter to \"300\" and attempt to restart management server, it fails without throwing a warning or setting the value to the default." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15749" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restarting VPC is resulting in intermittent connection loss to the port forwarding and StaticNAT rules." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15690" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IpAssoc command failed as a part of starting the virtual router, but the final start result is reported as succes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15672, CS-15635" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The FQDN of the VM is not configured if it is deployed as a part of default shared network and isolated guest network (DefaultIsolatedNetworkOfferingWithSourceNatService)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15634" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The FQDN of a VM that is deployed as a part of both a shared network and default isolated guest network has the suffix of the shared network instead of the default isolated guest network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15576" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stopping a VM on XenServer creates a backlog of API commands. For example, the Attach volume calls become delayed while waiting for the stopVirtualMachine command to be executed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15569" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Misleading error message in the exception when creating a StaticNAT rule fails in a VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15566" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "External device such as Netscaler is not supported in VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15557" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Intermittent traffic loss in the VPN connection if Juniper is the remote router and the life time is 300 seconds." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15361" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Egress rules are not working in NetScaler loadbalancer." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15105" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The cloud-sysvmadm script does not work if the integration.api.port parameter is set to any port other than 8096." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15092" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Connecting to the guest VMs through SSH is extremely slow, and it results in connection timeout." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15037" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hairpin NAT is not supported when NetScaler is used for EIP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15009" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The port_profile table will not be populated with port profile information. In this release, CloudStack directly connects to the VSM for all the port profile operations; therefore, no port profile information is cached." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14939" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Adding a VMware cluster is not supported when the Management Network is migrated to the Distributed Virtual Switch environment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14780" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You are allowed to ping the elastic IP address of the VM even though no ingress rule is set that allows the ICMP protocol." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14756" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Installing KVM on RHEL 6.2 will result in unreliable network performance. Workaround: blacklist vhost-net. Edit /etc/modprobe.d/blacklist-kvm.conf and include vhost-net." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14346" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The UpdateVirtualMachine API call does not check whether the VM is stopped. Therefore, stop the VM manually before issuing this call." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14303 (was 14537)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IP addresses for a shared network are still being consumed even if no services are defined for that network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14296 (was 14530)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OVM: Network traffic labels are not supported." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14291 (was 14523)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The EIP/ELB network offering for basic zones does not support multiple NetScalers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14275 (was 14506)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "F5: Unable to properly remove a F5 device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14201 (was 14430)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMWare: Template sizes are being reported different depending on whether the primary storage is using ISCSI or NFS." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13758 (was 13963)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vSphere: template download from templates created off of the root volume does not work properly." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13733 (was 13935)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vSphere: detaching an ISO from a restored VM instance fails." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13682 (was 13883)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Multiple NetScalers are not supported in Basic Networking." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13599 (was 13359)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Programming F5/NetScaler rules can be better optimized." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13337 (was 13518)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Security Groups are not supported in Advanced Networking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-13173 (was 13336)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vSphere: cross cluster volume migration does not work properly." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-12714 (was 12840)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Capacity view is not available for pods or clusters." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-12624 (was 12741)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vSphere: maintenance mode will not live migrate system VM to another host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15476" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The 2.2.14 to 4.0.0-incubating upgrade fails if multiple untagged physical networks exist before the upgrade." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15407" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After the 2.2.14 to 4.0.0-incubating upgrade, VLAN allocation on multiple physical networks does not happen as expected." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To workaround this issue, follow the instructions given below:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Revert to your 2.2.14 setup." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stop all the VMs with the isolated virtual networks in your cloud setup." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run following query to find if any networks still have the NICs allocated:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Check if any virtual guest networks have the NICs allocated:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "#SELECT DISTINCT op.id from `cloud`.`op_networks` op JOIN `cloud`.`networks` n on op.id=n.id WHERE nics_count != 0 AND guest_type = 'Virtual'; " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If this returns any network IDs, then ensure the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VMs are stopped." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "No new VM is started." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Shutdown the Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Remove the NICs count for the virtual network IDs returned in step (a), and set the NIC count to 0:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "UPDATE `cloud`.`op_networks` SET nics_count = 0 WHERE id = enter id of virtual network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Server, and wait for all the networks to shut down." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Networks shutdown is determined by the network.gc.interval and network.gc.wait parameters." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that all the networks are shut down and all the guest VNETs are free." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the upgrade script." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This allocates all your guest VNET ranges to the first physical network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "By using the updatePhysicalNetwork API, reconfigure the VNET ranges for each physical network as desired." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start all the VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-14680" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack and LDAP user validation cannot happen simultaneously because the user password is hashed and stored in the database, and LDAP requires the passwords in plain text." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To work with the LDAP user, the MD5 hash should be disabled in the login process by commenting the following variable in sharedFunctions.js file available at /usr/share/cloud/management/webapps/client/scripts, and restart the cloud-management service." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "var md5HashedLogin = false;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "However, if md5HashedLogin is set to false, the end user can login with the LDAP credentials but not with the CloudStack user credentials." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CS-15130" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Data disk volumes are not automatically copied from one cluster to another." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "API Changes from 3.0.2 to 4.0.0-incubating" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "New API Commands in 4.0.0-incubating" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createCounter (Adds metric counter)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteCounter (Deletes a counter)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listCounters (List the counters)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createCondition (Creates a condition)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteCondition (Removes a condition)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listConditions (List Conditions for the specific user)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createTags. Add tags to one or more resources. Example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "command=createTags\n" +"&resourceIds=1,10,12\n" +"&resourceType=userVm\n" +"&tags[0].key=region\n" +"&tags[0].value=canada\n" +"&tags[1].key=city\n" +"&tags[1].value=Toronto" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteTags. Remove tags from one or more resources. Example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "command=deleteTags\n" +"&resourceIds=1,12\n" +"&resourceType=Snapshot\n" +"&tags[0].key=city" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listTags (Show currently defined resource tags)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVPC (Creates a VPC)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVPCs (Lists VPCs)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteVPC (Deletes a VPC)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateVPC (Updates a VPC)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "restartVPC (Restarts a VPC)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVPCOffering (Creates VPC offering)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateVPCOffering (Updates VPC offering)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteVPCOffering (Deletes VPC offering)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVPCOfferings (Lists VPC offerings)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createPrivateGateway (Creates a private gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listPrivateGateways (List private gateways)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deletePrivateGateway (Deletes a Private gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createNetworkACL (Creates a ACL rule the given network (the network has to belong to VPC))" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteNetworkACL (Deletes a Network ACL)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetworkACLs (Lists all network ACLs)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createStaticRoute (Creates a static route)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteStaticRoute (Deletes a static route)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listStaticRoutes (Lists all static routes)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVpnCustomerGateway (Creates site to site vpn customer gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVpnGateway (Creates site to site vpn local gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVpnConnection (Create site to site vpn connection)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteVpnCustomerGateway (Delete site to site vpn customer gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteVpnGateway (Delete site to site vpn gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteVpnConnection (Delete site to site vpn connection)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateVpnCustomerGateway (Update site to site vpn customer gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "resetVpnConnection (Reset site to site vpn connection)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVpnCustomerGateways (Lists site to site vpn customer gateways)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVpnGateways (Lists site 2 site vpn gateways)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVpnConnections (Lists site to site vpn connection gateways)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "markDefaultZoneForAccount (Marks a default zone for the current account)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "uploadVolume (Uploads a data disk)" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Changed API Commands in 4.0.0-incubating" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "API Commands" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "copyTemplate" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "prepareTemplate" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "registerTemplate" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateTemplate" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createProject" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "activateProject" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "suspendProject" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateProject" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listProjectAccounts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVolume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "migrateVolume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "attachVolume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "detachVolume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "uploadVolume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createSecurityGroup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "registerIso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "copyIso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateIso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createIpForwardingRule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listIpForwardingRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createLoadBalancerRule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateLoadBalancerRule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createSnapshot" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The commands in this list have a single new response parameter, and no other changes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameter: tags(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Many other commands also have the new tags(*) parameter in addition to other changes; those commands are listed separately." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rebootVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "attachIso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "detachIso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listLoadBalancerRuleInstances" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "resetPasswordForVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "changeServiceForVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "recoverVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "migrateVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deployVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "assignVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "restoreVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "stopVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "destroyVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The commands in this list have two new response parameters, and no other changes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: keypair, tags(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The commands in this list have the following new parameters, and no other changes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameter: tags (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listF5LoadBalancerNetworks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetscalerLoadBalancerNetworks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSrxFirewallNetworks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateNetwork" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The commands in this list have three new response parameters, and no other changes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: canusefordeploy, vpcid, tags(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createZone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateZone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameter: localstorageenabled (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameter: localstorageenabled" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listZones" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rebootRouter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "changeServiceForRouter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startRouter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "destroyRouter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "stopRouter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: vpcid, nic(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateAccount" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "disableAccount" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listAccounts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "markDefaultZoneForAccount" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "enableAccount" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: vpcavailable, vpclimit, vpctotal" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listRouters" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: forvpc (optional), vpcid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetworkOfferings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: forvpc (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: forvpc" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: details (optional), tags (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: tags(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addTrafficMonitor" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: excludezones (optional), includezones (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createNetwork" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: vpcid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: tags (optional), vpcid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: vpcid, tags(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: canusefordeploy (optional), forvpc (optional), tags (optional), vpcid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "restartNetwork" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "enableStaticNat" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameter: networkid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createDiskOffering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameter: storagetype (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameter: storagetype" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listDiskOfferings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateDiskOffering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createFirewallRule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Changed request parameters: ipaddressid (old version - optional, new version - required)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: isoid (optional), tags (optional), templateid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateStorageNetworkIpRange" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: id, endip, gateway, netmask, networkid, podid, startip, vlan, zoneid" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "reconnectHost" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new response parameter is added: hahost." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addCluster" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following request parameters are added:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vsmipaddress (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vsmpassword (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vsmusername (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following parameter is made mandatory: podid" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new response parameter is added: status" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "prepareHostForMaintenance" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addSecondaryStorage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new response parameter is added: defaultzoneid" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "cancelHostMaintenance" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new response parameter is added: hahost" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addSwift" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSwifts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listExternalLoadBalancers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listCapabilities" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new response parameter is added: customdiskofferingmaxsize" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new request parameter is added: startvm (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteStoragePool" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new request parameter is added: forced (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addHost" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateHost" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listHosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new request parameter is added: hahost (optional)" +msgstr "" + diff --git a/docs/pot/Revision_History.pot b/docs/pot/Revision_History.pot new file mode 100644 index 00000000000..3f213ced877 --- /dev/null +++ b/docs/pot/Revision_History.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Revision History" +msgstr "" + +#. Tag: firstname +#, no-c-format +msgid "Jessica" +msgstr "" + +#. Tag: surname +#, no-c-format +msgid "Tomechak" +msgstr "" + +#. Tag: member +#, no-c-format +msgid "Initial creation of book by publican" +msgstr "" + diff --git a/docs/pot/Revision_History_Install_Guide.pot b/docs/pot/Revision_History_Install_Guide.pot new file mode 100644 index 00000000000..632f931b123 --- /dev/null +++ b/docs/pot/Revision_History_Install_Guide.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Revision History" +msgstr "" + +#. Tag: firstname +#, no-c-format +msgid "Jessica" +msgstr "" + +#. Tag: surname +#, no-c-format +msgid "Tomechak" +msgstr "" + +#. Tag: firstname +#, no-c-format +msgid "Radhika" +msgstr "" + +#. Tag: surname +#, no-c-format +msgid "PC" +msgstr "" + +#. Tag: firstname +#, no-c-format +msgid "Wido" +msgstr "" + +#. Tag: surname +#, no-c-format +msgid "den Hollander" +msgstr "" + +#. Tag: member +#, no-c-format +msgid "Initial publication" +msgstr "" + diff --git a/docs/pot/SSL-keystore-path-and-password.pot b/docs/pot/SSL-keystore-path-and-password.pot new file mode 100644 index 00000000000..54955c82243 --- /dev/null +++ b/docs/pot/SSL-keystore-path-and-password.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "SSL Keystore Path and Password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the LDAP server requires SSL, you need to enable it in the ldapConfig command by setting the parameters ssl, truststore, and truststorepass. Before enabling SSL for ldapConfig, you need to get the certificate which the LDAP server is using and add it to a trusted keystore. You will need to know the path to the keystore and the password." +msgstr "" + diff --git a/docs/pot/VPN-user-usage-record-format.pot b/docs/pot/VPN-user-usage-record-format.pot new file mode 100644 index 00000000000..fd5669107a3 --- /dev/null +++ b/docs/pot/VPN-user-usage-record-format.pot @@ -0,0 +1,80 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "VPN User Usage Record Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "account – name of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "accountid – ID of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "domainid – ID of the domain in which this account resides" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "zoneid – Zone where the usage occurred" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "description – A string describing what the usage record is tracking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage – String representation of the usage, including the units of usage (e.g. 'Hrs' for hours)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usagetype – A number representing the usage type (see Usage Types)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rawusage – A number representing the actual usage in hours" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usageid – VPN user ID" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startdate, enddate – The range of time for which the usage is aggregated; see Dates in the Usage Record" +msgstr "" + diff --git a/docs/pot/about-clusters.pot b/docs/pot/about-clusters.pot new file mode 100644 index 00000000000..8247f2d16c4 --- /dev/null +++ b/docs/pot/about-clusters.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Clusters" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A cluster provides a way to group hosts. To be precise, a cluster is a XenServer server pool, a set of KVM servers, , or a VMware cluster preconfigured in vCenter. The hosts in a cluster all have identical hardware, run the same hypervisor, are on the same subnet, and access the same shared primary storage. Virtual machine instances (VMs) can be live-migrated from one host to another within the same cluster, without interrupting service to the user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A cluster is the third-largest organizational unit within a &PRODUCT; deployment. Clusters are contained within pods, and pods are contained within zones. Size of the cluster is limited by the underlying hypervisor, although the &PRODUCT; recommends less in most cases; see Best Practices." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A cluster consists of one or more hosts and one or more primary storage servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; allows multiple clusters in a cloud deployment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Even when local storage is used exclusively, clusters are still required organizationally, even if there is just one host per cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When VMware is used, every VMware cluster is managed by a vCenter server. Administrator must register the vCenter server with &PRODUCT;. There may be multiple vCenter servers per zone. Each vCenter server may manage multiple VMware clusters." +msgstr "" + diff --git a/docs/pot/about-hosts.pot b/docs/pot/about-hosts.pot new file mode 100644 index 00000000000..9a5e67c03cc --- /dev/null +++ b/docs/pot/about-hosts.pot @@ -0,0 +1,100 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A host is a single computer. Hosts provide the computing resources that run the guest virtual machines. Each host has hypervisor software installed on it to manage the guest VMs. For example, a Linux KVM-enabled server, a Citrix XenServer server, and an ESXi server are hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The host is the smallest organizational unit within a &PRODUCT; deployment. Hosts are contained within clusters, clusters are contained within pods, and pods are contained within zones." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hosts in a &PRODUCT; deployment:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the CPU, memory, storage, and networking resources needed to host the virtual machines" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Interconnect using a high bandwidth TCP/IP network and connect to the Internet" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "May reside in multiple data centers across different geographic locations" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "May have different capacities (different CPU speeds, different amounts of RAM, etc.), although the hosts within a cluster must all be homogeneous" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Additional hosts can be added at any time to provide more capacity for guest VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; automatically detects the amount of CPU and memory resources provided by the Hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hosts are not visible to the end user. An end user cannot determine which host their guest has been assigned to." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For a host to function in &PRODUCT;, you must do the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install hypervisor software on the host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Assign an IP address to the host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure the host is connected to the &PRODUCT; Management Server" +msgstr "" + diff --git a/docs/pot/about-password-encryption.pot b/docs/pot/about-password-encryption.pot new file mode 100644 index 00000000000..2219780d907 --- /dev/null +++ b/docs/pot/about-password-encryption.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Password and Key Encryption" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; stores several sensitive passwords and secret keys that are used to provide security. These values are always automatically encrypted:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Database secret key" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Database password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SSH keys" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Compute node root password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPN password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "User API secret key" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VNC password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; uses the Java Simplified Encryption (JASYPT) library. The data values are encrypted and decrypted using a database secret key, which is stored in one of &PRODUCT;’s internal properties files along with the database password. The other encrypted values listed above, such as SSH keys, are in the &PRODUCT; internal database." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Of course, the database secret key itself can not be stored in the open – it must be encrypted. How then does &PRODUCT; read it? A second secret key must be provided from an external source during Management Server startup. This key can be provided in one of two ways: loaded from a file or provided by the &PRODUCT; administrator. The &PRODUCT; database has a new configuration setting that lets it know which of these methods will be used. If the encryption type is set to \"file,\" the key must be in a file in a known location. If the encryption type is set to \"web,\" the administrator runs the utility com.cloud.utils.crypt.EncryptionSecretKeySender, which relays the key to the Management Server over a known port." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The encryption type, database secret key, and Management Server secret key are set during &PRODUCT; installation. They are all parameters to the &PRODUCT; database setup script (cloud-setup-databases). The default values are file, password, and password. It is, of course, highly recommended that you change these to more secure keys." +msgstr "" + diff --git a/docs/pot/about-physical-networks.pot b/docs/pot/about-physical-networks.pot new file mode 100644 index 00000000000..734803c236c --- /dev/null +++ b/docs/pot/about-physical-networks.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Physical Networks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Part of adding a zone is setting up the physical network. One or (in an advanced zone) more physical networks can be associated with each zone. The network corresponds to a NIC on the hypervisor host. Each physical network can carry one or more types of network traffic. The choices of traffic type for each network vary depending on whether you are creating a zone with basic networking or advanced networking." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A physical network is the actual network hardware and wiring in a zone. A zone can have multiple physical networks. An administrator can:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add/Remove/Update physical networks in a zone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure VLANs on the physical network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure a name so the network can be recognized by hypervisors" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure the service providers (firewalls, load balancers, etc.) available on a physical network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure the IP addresses trunked to a physical network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify what type of traffic is carried on the physical network, as well as other properties like network speed" +msgstr "" + diff --git a/docs/pot/about-pods.pot b/docs/pot/about-pods.pot new file mode 100644 index 00000000000..f80760c0654 --- /dev/null +++ b/docs/pot/about-pods.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Pods" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A pod often represents a single rack. Hosts in the same pod are in the same subnet." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A pod is the second-largest organizational unit within a &PRODUCT; deployment. Pods are contained within zones. Each zone can contain one or more pods." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Pods are not visible to the end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A pod consists of one or more clusters of hosts and one or more primary storage servers." +msgstr "" + diff --git a/docs/pot/about-primary-storage.pot b/docs/pot/about-primary-storage.pot new file mode 100644 index 00000000000..c2ba526788d --- /dev/null +++ b/docs/pot/about-primary-storage.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Primary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Primary storage is associated with a cluster, and it stores the disk volumes for all the VMs running on hosts in that cluster. You can add multiple primary storage servers to a cluster. At least one is required. It is typically located close to the hosts for increased performance." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; is designed to work with all standards-compliant iSCSI and NFS servers that are supported by the underlying hypervisor, including, for example:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Dell EqualLogicâ„¢ for iSCSI" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Appliances filers for NFS and iSCSI" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Scale Computing for NFS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you intend to use only local disk for your installation, you can skip to Add Secondary Storage." +msgstr "" + diff --git a/docs/pot/about-secondary-storage.pot b/docs/pot/about-secondary-storage.pot new file mode 100644 index 00000000000..4543890df21 --- /dev/null +++ b/docs/pot/about-secondary-storage.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Secondary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Secondary storage is associated with a zone, and it stores the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Templates — OS images that can be used to boot VMs and can include additional configuration information, such as installed applications" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISO images — disc images containing data or bootable media for operating systems" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disk volume snapshots — saved copies of VM data which can be used for data recovery or to create new templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The items in zone-based NFS secondary storage are available to all hosts in the zone. &PRODUCT; manages the allocation of guest virtual disks to particular primary storage devices." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To make items in secondary storage available to all hosts throughout the cloud, you can add OpenStack Object Storage (Swift, swift.openstack.org) in addition to the zone-based NFS secondary storage. When using Swift, you configure Swift storage for the entire &PRODUCT;, then set up NFS secondary storage for each zone as usual. The NFS storage in each zone acts as a staging area through which all templates and other secondary storage data pass before being forwarded to Swift. The Swift storage acts as a cloud-wide resource, making templates and other data available to any zone in the cloud. There is no hierarchy in the Swift storage, just one Swift container per storage object. Any secondary storage in the whole cloud can pull a container from Swift at need. It is not necessary to copy templates and snapshots from one zone to another, as would be required when using zone NFS alone. Everything is available everywhere." +msgstr "" + diff --git a/docs/pot/about-security-groups.pot b/docs/pot/about-security-groups.pot new file mode 100644 index 00000000000..2acdbb4b484 --- /dev/null +++ b/docs/pot/about-security-groups.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Security Groups" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Security groups provide a way to isolate traffic to VMs. A security group is a group of VMs that filter their incoming and outgoing traffic according to a set of rules, called ingress and egress rules. These rules filter network traffic according to the IP address that is attempting to communicate with the VM. Security groups are particularly useful in zones that use basic networking, because there is a single guest network for all guest VMs. In &PRODUCT; 3.0.3 - 3.0.5, security groups are supported only in zones that use basic networking." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a zone that uses advanced networking, you can instead define multiple guest networks to isolate traffic to VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each &PRODUCT; account comes with a default security group that denies all inbound traffic and allows all outbound traffic. The default security group can be modified so that all new VMs inherit some other desired set of rules." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Any &PRODUCT; user can set up any number of additional security groups. When a new VM is launched, it is assigned to the default security group unless another user-defined security group is specified. A VM can be a member of any number of security groups. Once a VM is assigned to a security group, it remains in that group for its entire lifetime; you can not move a running VM from one security group to another." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can modify a security group by deleting or adding any number of ingress and egress rules. When you do, the new rules apply to all VMs in the group, whether running or stopped." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If no ingress rules are specified, then no traffic will be allowed in, except for responses to any traffic that has been allowed out through an egress rule." +msgstr "" + diff --git a/docs/pot/about-virtual-networks.pot b/docs/pot/about-virtual-networks.pot new file mode 100644 index 00000000000..7d396bf51e6 --- /dev/null +++ b/docs/pot/about-virtual-networks.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Virtual Networks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A virtual network is a logical construct that enables multi-tenancy on a single physical network. In &PRODUCT; a virtual network can be shared or isolated." +msgstr "" + diff --git a/docs/pot/about-working-with-vms.pot b/docs/pot/about-working-with-vms.pot new file mode 100644 index 00000000000..1b566121ba8 --- /dev/null +++ b/docs/pot/about-working-with-vms.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Working with Virtual Machines" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides administrators with complete control over the lifecycle of all guest VMs executing in the cloud. &PRODUCT; provides several guest management operations for end users and administrators. VMs may be stopped, started, rebooted, and destroyed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest VMs have a name and group. VM names and groups are opaque to &PRODUCT; and are available for end users to organize their VMs. Each VM can have three names for use in different contexts. Only two of these names can be controlled by the user:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Instance name – a unique, immutable ID that is generated by &PRODUCT; and can not be modified by the user. This name conforms to the requirements in IETF RFC 1123." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Display name – the name displayed in the &PRODUCT; web UI. Can be set by the user. Defaults to instance name." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name – host name that the DHCP server assigns to the VM. Can be set by the user. Defaults to instance name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest VMs can be configured to be Highly Available (HA). An HA-enabled VM is monitored by the system. If the system detects that the VM is down, it will attempt to restart the VM, possibly on a different host. For more information, see HA-Enabled Virtual Machines on" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each new VM is allocated one public IP address. When the VM is started, &PRODUCT; automatically creates a static NAT between this public IP address and the private IP address of the VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If elastic IP is in use (with the NetScaler load balancer), the IP address initially allocated to the new VM is not marked as elastic. The user must replace the automatically configured IP with a specifically acquired elastic IP, and set up the static NAT mapping between this new IP and the guest VM’s private IP. The VM’s original IP address is then released and returned to the pool of available public IPs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; cannot distinguish a guest VM that was shut down by the user (such as with the “shutdown†command in Linux) from a VM that shut down unexpectedly. If an HA-enabled VM is shut down from inside the VM, &PRODUCT; will restart it. To shut down an HA-enabled VM, you must go through the &PRODUCT; UI or API." +msgstr "" + diff --git a/docs/pot/about-zones.pot b/docs/pot/about-zones.pot new file mode 100644 index 00000000000..c9111a7e484 --- /dev/null +++ b/docs/pot/about-zones.pot @@ -0,0 +1,100 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Zones" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A zone is the largest organizational unit within a &PRODUCT; deployment. A zone typically corresponds to a single datacenter, although it is permissible to have multiple zones in a datacenter. The benefit of organizing infrastructure into zones is to provide physical isolation and redundancy. For example, each zone can have its own power supply and network uplink, and the zones can be widely separated geographically (though this is not required)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A zone consists of:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "One or more pods. Each pod contains one or more clusters of hosts and one or more primary storage servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Secondary storage, which is shared by all the pods in the zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zones are visible to the end user. When a user starts a guest VM, the user must select a zone for their guest. Users might also be required to copy their private templates to additional zones to enable creation of guest VMs using their templates in those zones." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zones can be public or private. Public zones are visible to all users. This means that any user may create a guest in that zone. Private zones are reserved for a specific domain. Only users in that domain or its subdomains may create guests in that zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hosts in the same zone are directly accessible to each other without having to go through a firewall. Hosts in different zones can access each other through statically configured VPN tunnels." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For each zone, the administrator must decide the following." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How many pods to place in a zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How many clusters to place in each pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How many hosts to place in each cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How many primary storage servers to place in each cluster and total capacity for the storage servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How much secondary storage to deploy in a zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you add a new zone, you will be prompted to configure the zone’s physical network and add the first pod, cluster, host, primary storage, and secondary storage." +msgstr "" + diff --git a/docs/pot/accept-membership-invite.pot b/docs/pot/accept-membership-invite.pot new file mode 100644 index 00000000000..977962aa115 --- /dev/null +++ b/docs/pot/accept-membership-invite.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Accepting a Membership Invitation" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have received an invitation to join a &PRODUCT; project, and you want to accept the invitation, follow these steps:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select View, choose Invitations." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you see the invitation listed onscreen, click the Accept button." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Invitations listed on screen were sent to you using your &PRODUCT; account name." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you received an email invitation, click the Enter Token button, and provide the project ID and unique ID code (token) from the email." +msgstr "" + diff --git a/docs/pot/accessing-vms.pot b/docs/pot/accessing-vms.pot new file mode 100644 index 00000000000..2ca92867a87 --- /dev/null +++ b/docs/pot/accessing-vms.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Accessing VMs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Any user can access their own virtual machines. The administrator can access all VMs running in the cloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To access a VM through the &PRODUCT; UI:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Instances, then click the name of a running VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the View Console button ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To access a VM directly over the network:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VM must have some port open to incoming traffic. For example, in a basic zone, a new VM might be assigned to a security group which allows incoming traffic. This depends on what security group you picked when creating the VM. In other cases, you can open a port by setting up a port forwarding policy. See IP Forwarding and Firewalling." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If a port is open but you can not access the VM using ssh, it’s possible that ssh is not already enabled on the VM. This will depend on whether ssh is enabled in the template you picked when creating the VM. Access the VM through the &PRODUCT; UI and enable ssh on the machine using the commands for the VM’s operating system." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the network has an external firewall device, you will need to create a firewall rule to allow access. See IP Forwarding and Firewalling." +msgstr "" + diff --git a/docs/pot/accounts-users-domains.pot b/docs/pot/accounts-users-domains.pot new file mode 100644 index 00000000000..542934b8c62 --- /dev/null +++ b/docs/pot/accounts-users-domains.pot @@ -0,0 +1,100 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Accounts, Users, and Domains" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Accounts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "An account typically represents a customer of the service provider or a department in a large organization. Multiple users can exist in an account." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Domains" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Accounts are grouped by domains. Domains usually contain multiple accounts that have some logical relationship to each other and a set of delegated administrators with some authority over the domain and its subdomains. For example, a service provider with several resellers could create a domain for each reseller." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For each account created, the Cloud installation creates three different types of user accounts: root administrator, domain administrator, and user." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Users" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Users are like aliases in the account. Users in the same account are not isolated from each other, but they are isolated from users in other accounts. Most installations need not surface the notion of users; they just have one user per account. The same user cannot belong to multiple accounts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Username is unique in a domain across accounts in that domain. The same username can exist in other domains, including sub-domains. Domain name can repeat only if the full pathname from root is unique. For example, you can create root/d1, as well as root/foo/d1, and root/sales/d1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Administrators are accounts with special privileges in the system. There may be multiple administrators in the system. Administrators can create or delete other administrators, and change the password for any user in the system." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Domain Administrators" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Domain administrators can perform administrative operations for users who belong to that domain. Domain administrators do not have visibility into physical servers or other domains." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Root Administrator" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Root administrators have complete access to the system, including managing templates, service offerings, customer care administrators, and domains" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The resources belong to the account, not individual users in that account. For example, billing, resource limits, and so on are maintained by the account, not the users. A user can operate on any resource in the account provided the user has privileges for that operation. The privileges are determined by the role." +msgstr "" + diff --git a/docs/pot/accounts.pot b/docs/pot/accounts.pot new file mode 100644 index 00000000000..1c37079b7e8 --- /dev/null +++ b/docs/pot/accounts.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Accounts" +msgstr "" + diff --git a/docs/pot/acquire-new-ip-address.pot b/docs/pot/acquire-new-ip-address.pot new file mode 100644 index 00000000000..16b58478319 --- /dev/null +++ b/docs/pot/acquire-new-ip-address.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Acquiring a New IP Address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the network where you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click View IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Acquire New IP, and click Yes in the confirmation dialog." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You are prompted for confirmation because, typically, IP addresses are a limited resource. Within a few moments, the new IP address should appear with the state Allocated. You can now use the IP address in port forwarding or static NAT rules." +msgstr "" + diff --git a/docs/pot/acquire-new-ip-for-vpc.pot b/docs/pot/acquire-new-ip-for-vpc.pot new file mode 100644 index 00000000000..b11b61eb072 --- /dev/null +++ b/docs/pot/acquire-new-ip-for-vpc.pot @@ -0,0 +1,115 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Acquiring a New IP Address for a VPC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you acquire an IP address, all IP addresses are allocated to VPC, not to the guest networks within the VPC. The IPs are associated to the guest network only when the first port-forwarding, load balancing, or Static NAT rule is created for the IP or the network. IP can't be associated to more than one network at a time." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC to which you want to deploy the VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VPC page is displayed where all the tiers you created are listed in a diagram." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Settings icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following options are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network ACLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IP Addresses page is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Acquire New IP, and click Yes in the confirmation dialog." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You are prompted for confirmation because, typically, IP addresses are a limited resource. Within a few moments, the new IP address should appear with the state Allocated. You can now use the IP address in port forwarding, load balancing, and static NAT rules." +msgstr "" + diff --git a/docs/pot/add-additional-guest-network.pot b/docs/pot/add-additional-guest-network.pot new file mode 100644 index 00000000000..a673cbc9e07 --- /dev/null +++ b/docs/pot/add-additional-guest-network.pot @@ -0,0 +1,80 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding an Additional Guest Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add guest network. Provide the following information:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: The name of the network. This will be user-visible." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Display Text: The description of the network. This will be user-visible." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zone. The name of the zone this network applies to. Each zone is a broadcast domain, and therefore each zone has a different IP range for the guest network. The administrator must configure the IP range for each zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network offering: If the administrator has configured multiple network offerings, select the one you want to use for this network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest Gateway: The gateway that the guests should use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest Netmask: The netmask in use on the subnet the guests will use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Create." +msgstr "" + diff --git a/docs/pot/add-clusters-kvm-xenserver.pot b/docs/pot/add-clusters-kvm-xenserver.pot new file mode 100644 index 00000000000..97fb78c96ab --- /dev/null +++ b/docs/pot/add-clusters-kvm-xenserver.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Add Cluster: KVM or XenServer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These steps assume you have already installed the hypervisor on the hosts and logged in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Infrastructure. In Zones, click View More, then click the zone in which you want to add the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Compute tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Clusters node of the diagram, click View All." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the hypervisor type for this cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the pod in which you want to create the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Enter a name for the cluster. This can be text of your choosing and is not used by &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + diff --git a/docs/pot/add-clusters-ovm.pot b/docs/pot/add-clusters-ovm.pot new file mode 100644 index 00000000000..25ad8ce2c01 --- /dev/null +++ b/docs/pot/add-clusters-ovm.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Add Cluster: OVM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To add a Cluster of hosts that run Oracle VM (OVM):" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add a companion non-OVM cluster to the Pod. This cluster provides an environment where the &PRODUCT; System VMs can run. You should have already installed a non-OVM hypervisor on at least one Host to prepare for this step. Depending on which hypervisor you used:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For VMWare, follow the steps in Add Cluster: vSphere. When finished, return here and continue with the next step." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For KVM or XenServer, follow the steps in . When finished, return here and continue with the next step" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Infrastructure. In Zones, click View More, then click the zone in which you want to add the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Compute tab. In the Pods node, click View All. Select the same pod you used in step 1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click View Clusters, then click Add Cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Add Cluster dialog is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Hypervisor, choose OVM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Cluster, enter a name for the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add." +msgstr "" + diff --git a/docs/pot/add-clusters-vsphere.pot b/docs/pot/add-clusters-vsphere.pot new file mode 100644 index 00000000000..2c4ebe4e3aa --- /dev/null +++ b/docs/pot/add-clusters-vsphere.pot @@ -0,0 +1,125 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Add Cluster: vSphere" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host management for vSphere is done through a combination of vCenter and the &PRODUCT; admin UI. &PRODUCT; requires that all hosts be in a &PRODUCT; cluster, but the cluster may consist of a single host. As an administrator you must decide if you would like to use clusters of one host or of multiple hosts. Clusters of multiple hosts allow for features like live migration. Clusters also require shared storage such as NFS or iSCSI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For vSphere servers, we recommend creating the cluster of hosts in vCenter and then adding the entire cluster to &PRODUCT;. Follow these requirements:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Do not put more than 8 hosts in a vSphere cluster" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure the hypervisor hosts do not have any VMs already running before you add them to &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To add a vSphere cluster to &PRODUCT;:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create the cluster of hosts in vCenter. Follow the vCenter instructions to do this. You will create a cluster that looks something like this in vCenter." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Infrastructure. In Zones, click View More, then click the zone in which you want to add the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Compute tab, and click View All on Pods. Choose the pod to which you want to add the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click View Clusters." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Hypervisor, choose VMware." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the following information in the dialog. The fields below make reference to values from vCenter." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Cluster Name. Enter the name of the cluster you created in vCenter. For example, \"cloud.cluster.2.2.1\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter Host. Enter the hostname or IP address of the vCenter server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter Username. Enter the username that &PRODUCT; should use to connect to vCenter. This user must have all administrative privileges." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter Password. Enter the password for the user named above" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter Datacenter. Enter the vCenter datacenter that the cluster is in. For example, \"cloud.dc.VM\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There might be a slight delay while the cluster is provisioned. It will automatically display in the UI" +msgstr "" + diff --git a/docs/pot/add-gateway-vpc.pot b/docs/pot/add-gateway-vpc.pot new file mode 100644 index 00000000000..a73b92ad54d --- /dev/null +++ b/docs/pot/add-gateway-vpc.pot @@ -0,0 +1,145 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Private Gateway to a VPC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A private gateway can be added by the root admin only. The VPC private network has 1:1 relationship with the NIC of the physical network. No gateways with duplicated VLAN and IP are allowed in the same data center." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC to which you want to configure load balancing rules." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VPC page is displayed where all the tiers you created are listed in a diagram." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Settings icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following options are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private Gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network ACLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select Private Gateways." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Gateways page is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add new gateway:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Physical Network: The physical network you have created in the zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Address: The IP address associated with the VPC gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateway: The gateway through which the traffic is routed to and from the VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Netmask: The netmask associated with the VPC gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN: The VLAN associated with the VPC gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The new gateway appears in the list. You can repeat these steps to add more gateway for this VPC." +msgstr "" + diff --git a/docs/pot/add-ingress-egress-rules.pot b/docs/pot/add-ingress-egress-rules.pot new file mode 100644 index 00000000000..c0d3e4eef12 --- /dev/null +++ b/docs/pot/add-ingress-egress-rules.pot @@ -0,0 +1,125 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding Ingress and Egress Rules to a Security Group" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select view, choose Security Groups, then click the security group you want ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To add an ingress rule, click the Ingress Rules tab and fill out the following fields to specify what network traffic is allowed into VM instances in this security group. If no ingress rules are specified, then no traffic will be allowed in, except for responses to any traffic that has been allowed out through an egress rule." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add by CIDR/Account. Indicate whether the source of the traffic will be defined by IP address (CIDR) or an existing security group in a &PRODUCT; account (Account). Choose Account if you want to allow incoming traffic from all VMs in another security group" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol. The networking protocol that sources will use to send traffic to the security group. TCP and UDP are typically used for data exchange and end-user communications. ICMP is typically used to send error messages or network monitoring data." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start Port, End Port. (TCP, UDP only) A range of listening ports that are the destination for the incoming traffic. If you are opening a single port, use the same number in both fields." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ICMP Type, ICMP Code. (ICMP only) The type of message and error code that will be accepted." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CIDR. (Add by CIDR only) To accept only traffic from IP addresses within a particular address block, enter a CIDR or a comma-separated list of CIDRs. The CIDR is the base IP address of the incoming traffic. For example, 192.168.0.0/22. To allow all CIDRs, set to 0.0.0.0/0." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Account, Security Group. (Add by Account only) To accept only traffic from another security group, enter the &PRODUCT; account and name of a security group that has already been defined in that account. To allow traffic between VMs within the security group you are editing now, enter the same name you used in step 7." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following example allows inbound HTTP access from anywhere:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To add an egress rule, click the Egress Rules tab and fill out the following fields to specify what type of traffic is allowed to be sent out of VM instances in this security group. If no egress rules are specified, then all traffic will be allowed out. Once egress rules are specified, the following types of traffic are allowed out: traffic specified in egress rules; queries to DNS and DHCP servers; and responses to any traffic that has been allowed in through an ingress rule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add by CIDR/Account. Indicate whether the destination of the traffic will be defined by IP address (CIDR) or an existing security group in a &PRODUCT; account (Account). Choose Account if you want to allow outgoing traffic to all VMs in another security group." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol. The networking protocol that VMs will use to send outgoing traffic. TCP and UDP are typically used for data exchange and end-user communications. ICMP is typically used to send error messages or network monitoring data." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start Port, End Port. (TCP, UDP only) A range of listening ports that are the destination for the outgoing traffic. If you are opening a single port, use the same number in both fields." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ICMP Type, ICMP Code. (ICMP only) The type of message and error code that will be sent" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CIDR. (Add by CIDR only) To send traffic only to IP addresses within a particular address block, enter a CIDR or a comma-separated list of CIDRs. The CIDR is the base IP address of the destination. For example, 192.168.0.0/22. To allow all CIDRs, set to 0.0.0.0/0." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Account, Security Group. (Add by Account only) To allow traffic to be sent to another security group, enter the &PRODUCT; account and name of a security group that has already been defined in that account. To allow traffic between VMs within the security group you are editing now, enter its name." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add." +msgstr "" + diff --git a/docs/pot/add-iso.pot b/docs/pot/add-iso.pot new file mode 100644 index 00000000000..eb1e630c7e0 --- /dev/null +++ b/docs/pot/add-iso.pot @@ -0,0 +1,215 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding an ISO" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To make additional operating system or other software available for use with guest VMs, you can add an ISO. The ISO is typically thought of as an operating system image, but you can also add ISOs for other types of software, such as desktop applications that you want to be installed as part of a template." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select View, choose ISOs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add ISO." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Add ISO screen, provide the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: Short name for the ISO image. For example, CentOS 6.2 64-bit." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description: Display test for the ISO image. For example, CentOS 6.2 64-bit." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL: The URL that hosts the ISO image. The Management Server must be able to access this location via HTTP. If needed you can place the ISO image directly on the Management Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zone: Choose the zone where you want the ISO to be available, or All Zones to make it available throughout &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Bootable: Whether or not a guest could boot off this ISO image. For example, a CentOS ISO is bootable, a Microsoft Office ISO is not bootable." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OS Type: This helps &PRODUCT; and the hypervisor perform certain operations and make assumptions that improve the performance of the guest. Select one of the following." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the operating system of your desired ISO image is listed, choose it." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the OS Type of the ISO is not listed or if the ISO is not bootable, choose Other." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(XenServer only) If you want to boot from this ISO in PV mode, choose Other PV (32-bit) or Other PV (64-bit)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(KVM only) If you choose an OS that is PV-enabled, the VMs created from this ISO will have a SCSI (virtio) root disk. If the OS is not PV-enabled, the VMs will have an IDE root disk. The PV-enabled types are:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fedora 13" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fedora 12" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fedora 11" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fedora 10" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fedora 9" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Other PV" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Debian GNU/Linux" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CentOS 5.3" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CentOS 5.4" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CentOS 5.5" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Red Hat Enterprise Linux 5.3" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Red Hat Enterprise Linux 5.4" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Red Hat Enterprise Linux 5.5" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Red Hat Enterprise Linux 6" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "It is not recommended to choose an older version of the OS than the version in the image. For example, choosing CentOS 5.4 to support a CentOS 6.2 image will usually not work. In these cases, choose Other." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Extractable: Choose Yes if the ISO should be available for extraction." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public: Choose Yes if this ISO should be available to other users." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Featured: Choose Yes if you would like this ISO to be more prominent for users to select. The ISO will appear in the Featured ISOs list. Only an administrator can make an ISO Featured." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server will download the ISO. Depending on the size of the ISO, this may take a long time. The ISO status column will display Ready once it has been successfully downloaded into secondary storage. Clicking Refresh updates the download percentage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Important: Wait for the ISO to finish downloading. If you move on to the next task and try to use the ISO right away, it will appear to fail. The entire ISO must be available before &PRODUCT; can work with it." +msgstr "" + diff --git a/docs/pot/add-load-balancer-rule.pot b/docs/pot/add-load-balancer-rule.pot new file mode 100644 index 00000000000..b2f82e0dd6c --- /dev/null +++ b/docs/pot/add-load-balancer-rule.pot @@ -0,0 +1,110 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Load Balancer Rule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the network where you want to load balance the traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click View IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the IP address for which you want to create the rule, then click the Configuration tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Load Balancing node of the diagram, click View All." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a Basic zone, you can also create a load balancing rule without acquiring or selecting an IP address. &PRODUCT; internally assign an IP when you create the load balancing rule, which is listed in the IP Addresses page when the rule is created." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To do that, select the name of the network, then click Add Load Balancer tab. Continue with ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fill in the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: A name for the load balancer rule." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public Port: The port receiving incoming traffic to be balanced." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private Port: The port that the VMs will use to receive the traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Algorithm: Choose the load balancing algorithm you want &PRODUCT; to use. &PRODUCT; supports a variety of well-known algorithms. If you are not familiar with these choices, you will find plenty of information about them on the Internet." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stickiness: (Optional) Click Configure and choose the algorithm for the stickiness policy. See Sticky Session Policies for Load Balancer Rules." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add VMs, then select two or more VMs that will divide the load of incoming traffic, and click Apply." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The new load balancer rule appears in the list. You can repeat these steps to add more load balancer rules for this IP address." +msgstr "" + diff --git a/docs/pot/add-loadbalancer-rule-vpc.pot b/docs/pot/add-loadbalancer-rule-vpc.pot new file mode 100644 index 00000000000..15b5d76a5c2 --- /dev/null +++ b/docs/pot/add-loadbalancer-rule-vpc.pot @@ -0,0 +1,180 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding Load Balancing Rules on a VPC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A &PRODUCT; user or administrator may create load balancing rules that balance traffic received at a public IP to one or more VMs that belong to a network tier that provides load balancing service in a VPC. A user creates a rule, specifies an algorithm, and assigns the rule to a set of VMs within a VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC to which you want to configure load balancing rules." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VPC page is displayed where all the tiers you created are listed in a diagram." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Settings icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following options are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network ACLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IP Addresses page is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the IP address for which you want to create the rule, then click the Configuration tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Load Balancing node of the diagram, click View All." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the tier to which you want to apply the rule." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a VPC, the load balancing service is supported only on a single tier." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: A name for the load balancer rule." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public Port: The port that receives the incoming traffic to be balanced." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private Port: The port that the VMs will use to receive the traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Algorithm. Choose the load balancing algorithm you want &PRODUCT; to use. &PRODUCT; supports the following well-known algorithms:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Round-robin" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Least connections" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Source" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stickiness. (Optional) Click Configure and choose the algorithm for the stickiness policy. See Sticky Session Policies for Load Balancer Rules." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add VMs: Click Add VMs, then select two or more VMs that will divide the load of incoming traffic, and click Apply." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The new load balancing rule appears in the list. You can repeat these steps to add more load balancing rules for this IP address." +msgstr "" + diff --git a/docs/pot/add-members-to-projects.pot b/docs/pot/add-members-to-projects.pot new file mode 100644 index 00000000000..f3a581792de --- /dev/null +++ b/docs/pot/add-members-to-projects.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding Members to a Project" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New members can be added to a project by the project’s administrator, the domain administrator of the domain where the project resides or any parent domain, or the &PRODUCT; root administrator. There are two ways to add members in &PRODUCT;, but only one way is enabled at a time:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If invitations have been enabled, you can send invitations to new members." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If invitations are not enabled, you can add members directly through the UI." +msgstr "" + diff --git a/docs/pot/add-more-clusters.pot b/docs/pot/add-more-clusters.pot new file mode 100644 index 00000000000..d2d1d8ddafe --- /dev/null +++ b/docs/pot/add-more-clusters.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Add More Clusters (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You need to tell &PRODUCT; about the hosts that it will manage. Hosts exist inside clusters, so before you begin adding hosts to the cloud, you must add at least one cluster." +msgstr "" + diff --git a/docs/pot/add-password-management-to-templates.pot b/docs/pot/add-password-management-to-templates.pot new file mode 100644 index 00000000000..0a0df6f65f6 --- /dev/null +++ b/docs/pot/add-password-management-to-templates.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding Password Management to Your Templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides an optional password reset feature that allows users to set a temporary admin or root password as well as reset the existing admin or root password from the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To enable the Reset Password feature, you will need to download an additional script to patch your template. When you later upload the template into &PRODUCT;, you can specify whether reset admin/root password feature should be enabled for this template." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The password management feature works always resets the account password on instance boot. The script does an HTTP call to the virtual router to retrieve the account password that should be set. As long as the virtual router is accessible the guest will have access to the account password that should be used. When the user requests a password reset the management server generates and sends a new password to the virtual router for the account. Thus an instance reboot is necessary to effect any password changes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the script is unable to contact the virtual router during instance boot it will not set the password but boot will continue normally." +msgstr "" + diff --git a/docs/pot/add-portforward-rule-vpc.pot b/docs/pot/add-portforward-rule-vpc.pot new file mode 100644 index 00000000000..1700043e3b6 --- /dev/null +++ b/docs/pot/add-portforward-rule-vpc.pot @@ -0,0 +1,155 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Port Forwarding Rule on a VPC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC to which you want to deploy the VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VPC page is displayed where all the tiers you created are listed in a diagram." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Settings icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following options are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network ACLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose an existing IP address or acquire a new IP address. Click the name of the IP address in the list." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IP Addresses page is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the IP address for which you want to create the rule, then click the Configuration tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Port Forwarding node of the diagram, click View All." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the tier to which you want to apply the rule." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public Port: The port to which public traffic will be addressed on the IP address you acquired in the previous step." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private Port: The port on which the instance is listening for forwarded public traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol: The communication protocol in use between the two ports." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TCP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "UDP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add VM: Click Add VM. Select the name of the instance to which this rule applies, and click Apply." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can test the rule by opening an ssh session to the instance." +msgstr "" + diff --git a/docs/pot/add-primary-storage.pot b/docs/pot/add-primary-storage.pot new file mode 100644 index 00000000000..bac6723efee --- /dev/null +++ b/docs/pot/add-primary-storage.pot @@ -0,0 +1,145 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding Primary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that nothing stored on the server. Adding the server to CloudStack will destroy any existing data." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you create a new zone, the first primary storage is added as part of that procedure. You can add primary storage servers at any time, such as when adding a new cluster or adding more servers to an existing cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Infrastructure. In Zones, click View More, then click the zone in which you want to add the primary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Compute tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Primary Storage node of the diagram, click View All." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Primary Storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the following information in the dialog. The information required varies depending on your choice in Protocol." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Pod. The pod for the storage device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Cluster. The cluster for the storage device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. The name of the storage device" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol. For XenServer, choose either NFS, iSCSI, or PreSetup. For KVM, choose NFS or SharedMountPoint. For vSphere choose either VMFS (iSCSI or FiberChannel) or NFS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Server (for NFS, iSCSI, or PreSetup). The IP address or DNS name of the storage device" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Server (for VMFS). The IP address or DNS name of the vCenter server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Path (for NFS). In NFS this is the exported path from the server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Path (for VMFS). In vSphere this is a combination of the datacenter name and the datastore name. The format is \"/\" datacenter name \"/\" datastore name. For example, \"/cloud.dc.VM/cluster1datastore\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Path (for SharedMountPoint). With KVM this is the path on each host that is where this primary storage is mounted. For example, \"/mnt/primary\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SR Name-Label (for PreSetup). Enter the name-label of the SR that has been set up outside &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Target IQN (for iSCSI). In iSCSI this is the IQN of the target. For example, iqn.1986-03.com.sun:02:01ec9bb549-1271378984" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Lun # (for iSCSI). In iSCSI this is the LUN number. For example, 3." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tags (optional). The comma-separated list of tags for this storage device. It should be an equivalent set or superset of the tags on your disk offerings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The tag sets on primary storage across clusters in a Zone must be identical. For example, if cluster A provides primary storage that has tags T1 and T2, all other clusters in the Zone must also provide primary storage that has tags T1 and T2." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + diff --git a/docs/pot/add-projects-members-from-ui.pot b/docs/pot/add-projects-members-from-ui.pot new file mode 100644 index 00000000000..26515261a2b --- /dev/null +++ b/docs/pot/add-projects-members-from-ui.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding Project Members From the UI" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The steps below tell how to add a new member to a project if the invitations feature is not enabled in the cloud. If the invitations feature is enabled cloud,as described in , use the procedure in ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select View, choose Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the project you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Accounts tab. The current members of the project are listed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Type the account name of the new member you want to add, and click Add Account. You can add only people who have an account in this cloud and within the same domain as the project." +msgstr "" + diff --git a/docs/pot/add-secondary-storage.pot b/docs/pot/add-secondary-storage.pot new file mode 100644 index 00000000000..d75c1dc56cc --- /dev/null +++ b/docs/pot/add-secondary-storage.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding Secondary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure there is nothing stored on the server. Adding the server to CloudStack will destroy any existing data." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you create a new zone, the first secondary storage is added as part of that procedure. You can add secondary storage servers at any time to add more servers to an existing zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are going to use Swift for cloud-wide secondary storage, you must add the Swift storage to &PRODUCT; before you add the local zone secondary storage servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To prepare for local zone secondary storage, you should have created and mounted an NFS share during Management Server installation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure you prepared the system VM template during Management Server installation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4. Now that the secondary storage server for per-zone storage is prepared, add it to &PRODUCT;. Secondary storage is added as part of the procedure for adding a new zone." +msgstr "" + diff --git a/docs/pot/add-security-group.pot b/docs/pot/add-security-group.pot new file mode 100644 index 00000000000..38a117412a9 --- /dev/null +++ b/docs/pot/add-security-group.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Security Group" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A user or administrator can define a new security group." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select view, choose Security Groups." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Security Group." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide a name and description." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The new security group appears in the Security Groups Details tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To make the security group useful, continue to Adding Ingress and Egress Rules to a Security Group." +msgstr "" + diff --git a/docs/pot/add-tier.pot b/docs/pot/add-tier.pot new file mode 100644 index 00000000000..f51b6eae721 --- /dev/null +++ b/docs/pot/add-tier.pot @@ -0,0 +1,125 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding Tiers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tiers are distinct locations within a VPC that act as isolated networks, which do not have access to other tiers by default. Tiers are set up on different VLANs that can communicate with each other by using a virtual router. Tiers provide inexpensive, low latency network connectivity to other tiers within the VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPC that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The end users can see their own VPCs, while root and domain admin can see any VPC they are authorized to see." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC for which you want to set up tiers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Add new tier dialog is displayed, as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have already created tiers, the VPC diagram is displayed. Click Create Tier to add a new tier." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the fields are mandatory." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: A unique name for the tier you create." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Offering: The following default network offerings are listed: DefaultIsolatedNetworkOfferingForVpcNetworksNoLB, DefaultIsolatedNetworkOfferingForVpcNetworks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a VPC, only one tier can be created by using LB-enabled network offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateway: The gateway for the tier you create. Ensure that the gateway is within the Super CIDR range that you specified while creating the VPC, and is not overlapped with the CIDR of any existing tier within the VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Netmask: The netmask for the tier you create." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example, if the VPC CIDR is 10.0.0.0/16 and the network tier CIDR is 10.0.1.0/24, the gateway of the tier is 10.0.1.1, and the netmask of the tier is 255.255.255.0." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Continue with configuring access control list for the tier." +msgstr "" + diff --git a/docs/pot/add-vm-to-tier.pot b/docs/pot/add-vm-to-tier.pot new file mode 100644 index 00000000000..0b997934bb8 --- /dev/null +++ b/docs/pot/add-vm-to-tier.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Deploying VMs to the Tier" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC to which you want to deploy the VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VPC page is displayed where all the tiers you created are listed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Add VM button of the tier for which you want to add a VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Add Instance page is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Follow the on-screen instruction to add an instance. For information on adding an instance, see Adding Instances section in the Installation Guide." +msgstr "" + diff --git a/docs/pot/add-vpc.pot b/docs/pot/add-vpc.pot new file mode 100644 index 00000000000..626b41369bb --- /dev/null +++ b/docs/pot/add-vpc.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Virtual Private Cloud" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When creating the VPC, you simply provide the zone and a set of IP addresses for the VPC network address space. You specify this set of addresses in the form of a Classless Inter-Domain Routing (CIDR) block." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add VPC. The Add VPC page is displayed as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the following information:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: A short name for the VPC that you are creating." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description: A brief description of the VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zone: Choose the zone where you want the VPC to be available." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Super CIDR for Guest Networks: Defines the CIDR range for all the tiers (guest networks) within a VPC. When you create a tier, ensure that its CIDR is within the Super CIDR value you enter. The CIDR must be RFC1918 compliant." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DNS domain for Guest Networks: If you want to assign a special domain name, specify the DNS suffix. This parameter is applied to all the tiers within the VPC. That implies, all the tiers you create in the VPC belong to the same DNS domain. If the parameter is not specified, a DNS domain name is generated automatically." +msgstr "" + diff --git a/docs/pot/added-API-commands-4-0.pot b/docs/pot/added-API-commands-4-0.pot new file mode 100644 index 00000000000..1a477c316a2 --- /dev/null +++ b/docs/pot/added-API-commands-4-0.pot @@ -0,0 +1,259 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Added API Commands in 4.0.0-incubating" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createCounter (Adds metric counter)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteCounter (Deletes a counter)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listCounters (List the counters)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createCondition (Creates a condition)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteCondition (Removes a condition)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listConditions (List Conditions for the specific user)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createTags. Add tags to one or more resources. Example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "command=createTags\n" +"&resourceIds=1,10,12\n" +"&resourceType=userVm\n" +"&tags[0].key=region\n" +"&tags[0].value=canada\n" +"&tags[1].key=city\n" +"&tags[1].value=Toronto " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteTags. Remove tags from one or more resources. Example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "command=deleteTags\n" +"&resourceIds=1,12\n" +"&resourceType=Snapshot\n" +"&tags[0].key=city " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listTags (Show currently defined resource tags)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVPC (Creates a VPC)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVPCs (Lists VPCs)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteVPC (Deletes a VPC)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateVPC (Updates a VPC)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "restartVPC (Restarts a VPC)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVPCOffering (Creates VPC offering)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateVPCOffering (Updates VPC offering)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteVPCOffering (Deletes VPC offering)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVPCOfferings (Lists VPC offerings)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createPrivateGateway (Creates a private gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listPrivateGateways (List private gateways)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deletePrivateGateway (Deletes a Private gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createNetworkACL (Creates a ACL rule the given network (the network has to belong to VPC))" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteNetworkACL (Deletes a Network ACL)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetworkACLs (Lists all network ACLs)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createStaticRoute (Creates a static route)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteStaticRoute (Deletes a static route)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listStaticRoutes (Lists all static routes)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVpnCustomerGateway (Creates site to site vpn customer gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVpnGateway (Creates site to site vpn local gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVpnConnection (Create site to site vpn connection)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteVpnCustomerGateway (Delete site to site vpn customer gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteVpnGateway (Delete site to site vpn gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteVpnConnection (Delete site to site vpn connection)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateVpnCustomerGateway (Update site to site vpn customer gateway)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "resetVpnConnection (Reset site to site vpn connection)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVpnCustomerGateways (Lists site to site vpn customer gateways)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVpnGateways (Lists site 2 site vpn gateways)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVpnConnections (Lists site to site vpn connection gateways)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "enableCiscoNexusVSM (Enables Nexus 1000v dvSwitch in &PRODUCT;.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "disableCiscoNexusVSM (Disables Nexus 1000v dvSwitch in &PRODUCT;.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteCiscoNexusVSM (Deletes Nexus 1000v dvSwitch in &PRODUCT;.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listCiscoNexusVSMs (Lists the control VLAN ID, packet VLAN ID, and data VLAN ID, as well as the IP address of the Nexus 1000v dvSwitch.)" +msgstr "" + diff --git a/docs/pot/added-API-commands.pot b/docs/pot/added-API-commands.pot new file mode 100644 index 00000000000..fd6cb1e4a47 --- /dev/null +++ b/docs/pot/added-API-commands.pot @@ -0,0 +1,375 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:56\n" +"PO-Revision-Date: 2013-02-02T20:11:56\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Added API commands in 3.0" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Added in 3.0.2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "changeServiceForSystemVm" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Changes the service offering for a system VM (console proxy or secondary storage). The system VM must be in a \"Stopped\" state for this command to take effect." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Added in 3.0.1" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Added in 3.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "assignVirtualMachine (Move a user VM to another user under same domain.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "restoreVirtualMachine (Restore a VM to original template or specific snapshot)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createLBStickinessPolicy (Creates a Load Balancer stickiness policy )" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteLBStickinessPolicy (Deletes a LB stickiness policy.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listLBStickinessPolicies (Lists LBStickiness policies.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ldapConfig (Configure the LDAP context for this site.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addSwift (Adds Swift.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSwifts (List Swift.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "migrateVolume (Migrate volume)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateStoragePool (Updates a storage pool.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "authorizeSecurityGroupEgress (Authorizes a particular egress rule for this security group)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "revokeSecurityGroupEgress (Deletes a particular egress rule from this security group)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createNetworkOffering (Creates a network offering.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteNetworkOffering (Deletes a network offering.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createProject (Creates a project)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteProject (Deletes a project)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateProject (Updates a project)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "activateProject (Activates a project)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "suspendProject (Suspends a project)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listProjects (Lists projects and provides detailed information for listed projects)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addAccountToProject (Adds acoount to a project)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteAccountFromProject (Deletes account from the project)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listProjectAccounts (Lists project's accounts)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listProjectInvitations (Lists an account's invitations to join projects)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateProjectInvitation (Accepts or declines project invitation)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteProjectInvitation (Deletes a project invitation)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateHypervisorCapabilities (Updates a hypervisor capabilities.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listHypervisorCapabilities (Lists all hypervisor capabilities.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createPhysicalNetwork (Creates a physical network)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deletePhysicalNetwork (Deletes a Physical Network.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listPhysicalNetworks (Lists physical networks)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updatePhysicalNetwork (Updates a physical network)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSupportedNetworkServices (Lists all network services provided by &PRODUCT; or for the given Provider.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addNetworkServiceProvider (Adds a network serviceProvider to a physical network)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteNetworkServiceProvider (Deletes a Network Service Provider.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetworkServiceProviders (Lists network serviceproviders for a given physical network.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateNetworkServiceProvider (Updates a network serviceProvider of a physical network)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addTrafficType (Adds traffic type to a physical network)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteTrafficType (Deletes traffic type of a physical network)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listTrafficTypes (Lists traffic types of a given physical network.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateTrafficType (Updates traffic type of a physical network)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listTrafficTypeImplementors (Lists implementors of implementor of a network traffic type or implementors of all network traffic types)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createStorageNetworkIpRange (Creates a Storage network IP range.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteStorageNetworkIpRange (Deletes a storage network IP Range.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listStorageNetworkIpRange (List a storage network IP range.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateStorageNetworkIpRange (Update a Storage network IP range, only allowed when no IPs in this range have been allocated.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listUsageTypes (List Usage Types)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addF5LoadBalancer (Adds a F5 BigIP load balancer device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "configureF5LoadBalancer (configures a F5 load balancer device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteF5LoadBalancer ( delete a F5 load balancer device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listF5LoadBalancers (lists F5 load balancer devices)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listF5LoadBalancerNetworks (lists network that are using a F5 load balancer device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addSrxFirewall (Adds a SRX firewall device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteSrxFirewall ( delete a SRX firewall device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSrxFirewalls (lists SRX firewall devices in a physical network)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSrxFirewallNetworks (lists network that are using SRX firewall device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addNetscalerLoadBalancer (Adds a netscaler load balancer device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteNetscalerLoadBalancer ( delete a netscaler load balancer device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "configureNetscalerLoadBalancer (configures a netscaler load balancer device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetscalerLoadBalancers (lists netscaler load balancer devices)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetscalerLoadBalancerNetworks (lists network that are using a netscaler load balancer device)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVirtualRouterElement (Create a virtual router element.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "configureVirtualRouterElement (Configures a virtual router element.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVirtualRouterElements (Lists all available virtual router elements.)" +msgstr "" + diff --git a/docs/pot/added-error-codes.pot b/docs/pot/added-error-codes.pot new file mode 100644 index 00000000000..5062c9ebbac --- /dev/null +++ b/docs/pot/added-error-codes.pot @@ -0,0 +1,330 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Added &PRODUCT; Error Codes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can now find the &PRODUCT;-specific error code in the exception response for each type of exception. The following list of error codes is added to the new class named CSExceptionErrorCode. These codes are applicable in &PRODUCT; 3.0.3 and later versions." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4250 : \"com.cloud.utils.exception.CloudRuntimeException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4255 : \"com.cloud.utils.exception.ExceptionUtil\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4260 : \"com.cloud.utils.exception.ExecutionException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4265 : \"com.cloud.utils.exception.HypervisorVersionChangedException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4270 : \"com.cloud.utils.exception.RuntimeCloudException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4275 : \"com.cloud.exception.CloudException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4280 : \"com.cloud.exception.AccountLimitException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4285 : \"com.cloud.exception.AgentUnavailableException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4290 : \"com.cloud.exception.CloudAuthenticationException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4295 : \"com.cloud.exception.CloudExecutionException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4300 : \"com.cloud.exception.ConcurrentOperationException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4305 : \"com.cloud.exception.ConflictingNetworkSettingsException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4310 : \"com.cloud.exception.DiscoveredWithErrorException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4315 : \"com.cloud.exception.HAStateException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4320 : \"com.cloud.exception.InsufficientAddressCapacityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4325 : \"com.cloud.exception.InsufficientCapacityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4330 : \"com.cloud.exception.InsufficientNetworkCapacityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4335 : \"com.cloud.exception.InsufficientServerCapacityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4340 : \"com.cloud.exception.InsufficientStorageCapacityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4345 : \"com.cloud.exception.InternalErrorException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4350 : \"com.cloud.exception.InvalidParameterValueException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4355 : \"com.cloud.exception.ManagementServerException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4360 : \"com.cloud.exception.NetworkRuleConflictException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4365 : \"com.cloud.exception.PermissionDeniedException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4370 : \"com.cloud.exception.ResourceAllocationException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4375 : \"com.cloud.exception.ResourceInUseException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4380 : \"com.cloud.exception.ResourceUnavailableException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4385 : \"com.cloud.exception.StorageUnavailableException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4390 : \"com.cloud.exception.UnsupportedServiceException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4395 : \"com.cloud.exception.VirtualMachineMigrationException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4400 : \"com.cloud.exception.AccountLimitException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4405 : \"com.cloud.exception.AgentUnavailableException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4410 : \"com.cloud.exception.CloudAuthenticationException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4415 : \"com.cloud.exception.CloudException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4420 : \"com.cloud.exception.CloudExecutionException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4425 : \"com.cloud.exception.ConcurrentOperationException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4430 : \"com.cloud.exception.ConflictingNetworkSettingsException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4435 : \"com.cloud.exception.ConnectionException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4440 : \"com.cloud.exception.DiscoveredWithErrorException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4445 : \"com.cloud.exception.DiscoveryException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4450 : \"com.cloud.exception.HAStateException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4455 : \"com.cloud.exception.InsufficientAddressCapacityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4460 : \"com.cloud.exception.InsufficientCapacityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4465 : \"com.cloud.exception.InsufficientNetworkCapacityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4470 : \"com.cloud.exception.InsufficientServerCapacityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4475 : \"com.cloud.exception.InsufficientStorageCapacityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4480 : \"com.cloud.exception.InsufficientVirtualNetworkCapcityException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4485 : \"com.cloud.exception.InternalErrorException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4490 : \"com.cloud.exception.InvalidParameterValueException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4495 : \"com.cloud.exception.ManagementServerException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4500 : \"com.cloud.exception.NetworkRuleConflictException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4505 : \"com.cloud.exception.PermissionDeniedException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4510 : \"com.cloud.exception.ResourceAllocationException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4515 : \"com.cloud.exception.ResourceInUseException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4520 : \"com.cloud.exception.ResourceUnavailableException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4525 : \"com.cloud.exception.StorageUnavailableException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4530 : \"com.cloud.exception.UnsupportedServiceException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4535 : \"com.cloud.exception.VirtualMachineMigrationException\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "9999 : \"org.apache.cloudstack.api.ServerApiException\"" +msgstr "" + diff --git a/docs/pot/adding-IP-addresses-for-the-public-network.pot b/docs/pot/adding-IP-addresses-for-the-public-network.pot new file mode 100644 index 00000000000..ef9a609f5c1 --- /dev/null +++ b/docs/pot/adding-IP-addresses-for-the-public-network.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding IP Addresses for the Public Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These instructions assume you have already logged in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Infrastructure. In Zones, click View More, then click the desired zone ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Network tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Public node of the diagram, click Configure." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the IP Ranges tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the following information:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateway. The gateway in use for these IP addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Netmask. The netmask associated with this IP range" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN. The VLAN that will be used for public traffic" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start IP/End IP. A range of IP addresses that are assumed to be accessible from the Internet and will be allocated for access to guest networks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add." +msgstr "" + diff --git a/docs/pot/additional-installation-options.pot b/docs/pot/additional-installation-options.pot new file mode 100644 index 00000000000..1e00eaed152 --- /dev/null +++ b/docs/pot/additional-installation-options.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Additional Installation Options" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The next few sections describe &PRODUCT; features above and beyond the basic deployment options." +msgstr "" + diff --git a/docs/pot/admin-alerts.pot b/docs/pot/admin-alerts.pot new file mode 100644 index 00000000000..7935a2b3655 --- /dev/null +++ b/docs/pot/admin-alerts.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Administrator Alerts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The system provides alerts and events to help with the management of the cloud. Alerts are notices to an administrator, generally delivered by e-mail, notifying the administrator that an error has occurred in the cloud. Alert behavior is configurable." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Events track all of the user and administrator actions in the cloud. For example, every guest VM start creates an associated event. Events are stored in the Management Server’s database." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Emails will be sent to administrators under the following circumstances:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server cluster runs low on CPU, memory, or storage resources" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server loses heartbeat from a Host for more than 3 minutes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Host cluster runs low on CPU, memory, or storage resources" +msgstr "" + diff --git a/docs/pot/admin-guide.pot b/docs/pot/admin-guide.pot new file mode 100644 index 00000000000..b571c79a78c --- /dev/null +++ b/docs/pot/admin-guide.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Administrator Guide" +msgstr "" + diff --git a/docs/pot/adv-zone-topology-req.pot b/docs/pot/adv-zone-topology-req.pot new file mode 100644 index 00000000000..2b0fd2d948c --- /dev/null +++ b/docs/pot/adv-zone-topology-req.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Advanced Zone Topology Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "With Advanced Networking, separate subnets must be used for private and public networks." +msgstr "" + diff --git a/docs/pot/advanced-zone-configuration.pot b/docs/pot/advanced-zone-configuration.pot new file mode 100644 index 00000000000..2c0543140b4 --- /dev/null +++ b/docs/pot/advanced-zone-configuration.pot @@ -0,0 +1,345 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Advanced Zone Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After you select Advanced in the Add Zone wizard and click Next, you will be asked to enter the following details. Then click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. A name for the zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DNS 1 and 2. These are DNS servers for use by guest VMs in the zone. These DNS servers will be accessed via the public network you will add later. The public IP addresses for the zone must have a route to the DNS server named here." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Internal DNS 1 and Internal DNS 2. These are DNS servers for use by system VMs in the zone(these are VMs used by &PRODUCT; itself, such as virtual routers, console proxies,and Secondary Storage VMs.) These DNS servers will be accessed via the management traffic network interface of the System VMs. The private IP address you provide for the pods must have a route to the internal DNS server named here." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Domain. (Optional) If you want to assign a special domain name to the guest VM network, specify the DNS suffix." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest CIDR. This is the CIDR that describes the IP addresses in use in the guest virtual networks in this zone. For example, 10.1.1.0/24. As a matter of good practice you should set different CIDRs for different zones. This will make it easier to set up VPNs between networks in different zones." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor. (Introduced in version 3.0.1) Choose the hypervisor for the first cluster in the zone. You can add clusters with different hypervisors later, after you finish adding the zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public. A public zone is available to all users. A zone that is not public will be assigned to a particular domain. Only users in that domain will be allowed to create guest VMs in this zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose which traffic types will be carried by the physical network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The traffic types are management, public, guest, and storage traffic. For more information about the types, roll over the icons to display their tool tips, or see . This screen starts out with one network already configured. If you have multiple physical networks, you need to add more. Drag and drop traffic types onto a greyed-out network and it will become active. You can move the traffic icons from one network to another; for example, if the default traffic types shown for Network 1 do not match your actual setup, you can move them down. You can also change the network names if desired." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Introduced in version 3.0.1) Assign a network traffic label to each traffic type on each physical network. These labels must match the labels you have already defined on the hypervisor host. To assign each label, click the Edit button under the traffic type icon within each physical network. A popup dialog appears where you can type the label, then click OK." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These traffic labels will be defined only for the hypervisor selected for the first cluster. For all other hypervisors, the labels can be configured after the zone is created." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure the IP range for public Internet traffic. Enter the following details, then click Add. If desired, you can repeat this step to add more public Internet IP ranges. When done, click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateway. The gateway in use for these IP addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Netmask. The netmask associated with this IP range." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN. The VLAN that will be used for public traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start IP/End IP. A range of IP addresses that are assumed to be accessible from the Internet and will be allocated for access to guest networks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a new zone, &PRODUCT; adds the first pod for you. You can always add more pods later. For an overview of what a pod is, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the first pod, enter the following, then click Next:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Pod Name. A name for the pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reserved system gateway. The gateway for the hosts in that pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reserved system netmask. The network prefix that defines the pod's subnet. Use CIDR notation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start/End Reserved System IP. The IP range in the management network that &PRODUCT; uses to manage various system VMs, such as Secondary Storage VMs, Console Proxy VMs, and DHCP. For more information, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify a range of VLAN IDs to carry guest traffic for each physical network (see VLAN Allocation Example ), then click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a new pod, &PRODUCT; adds the first cluster for you. You can always add more clusters later. For an overview of what a cluster is, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the first cluster, enter the following, then click Next:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor. (Version 3.0.0 only; in 3.0.1, this field is read only) Choose the type of hypervisor software that all hosts in this cluster will run. If you choose VMware, additional fields appear so you can give information about a vSphere cluster. For vSphere servers, we recommend creating the cluster of hosts in vCenter and then adding the entire cluster to &PRODUCT;. See Add Cluster: vSphere ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Cluster name. Enter a name for the cluster. This can be text of your choosing and is not used by &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a new cluster, &PRODUCT; adds the first host for you. You can always add more hosts later. For an overview of what a host is, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you deploy &PRODUCT;, the hypervisor host must not have any VMs already running." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before you can configure the host, you need to install the hypervisor software on the host. You will need to know which version of the hypervisor software version is supported by &PRODUCT; and what additional configuration is required to ensure the host will work with &PRODUCT;. To find these installation details, see:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Citrix XenServer Installation for &PRODUCT;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMware vSphere Installation and Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM Installation and Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the first host, enter the following, then click Next:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host Name. The DNS name or IP address of the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Username. Usually root." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Password. This is the password for the user named above (from your XenServer or KVM install)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host Tags. (Optional) Any labels that you use to categorize hosts for ease of maintenance. For example, you can set to the cloud's HA tag (set in the ha.tag global configuration parameter) if you want this host to be used only for VMs with the \"high availability\" feature enabled. For more information, see HA-Enabled Virtual Machines as well as HA for Hosts, both in the Administration Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a new cluster, &PRODUCT; adds the first primary storage server for you. You can always add more servers later. For an overview of what primary storage is, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the first primary storage server, enter the following, then click Next:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. The name of the storage device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol. For XenServer, choose either NFS, iSCSI, or PreSetup. For KVM, choose NFS, SharedMountPoint, CLVM, and RBD. For vSphere choose either VMFS (iSCSI or FiberChannel) or NFS. The remaining fields in the screen vary depending on what you choose here." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NFS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Server. The IP address or DNS name of the storage device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Path. The exported path from the server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tags (optional). The comma-separated list of tags for this storage device. It should be an equivalent set or superset of the tags on your disk offerings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The tag sets on primary storage across clusters in a Zone must be identical. For example, if cluster A provides primary storage that has tags T1 and T2, all other clusters in the Zone must also provide primary storage that has tags T1 and T2." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "iSCSI" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Target IQN. The IQN of the target. For example, iqn.1986-03.com.sun:02:01ec9bb549-1271378984." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Lun. The LUN number. For example, 3." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "preSetup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SR Name-Label. Enter the name-label of the SR that has been set up outside &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SharedMountPoint" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Path. The path on each host that is where this primary storage is mounted. For example, \"/mnt/primary\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMFS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Server. The IP address or DNS name of the vCenter server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Path. A combination of the datacenter name and the datastore name. The format is \"/\" datacenter name \"/\" datastore name. For example, \"/cloud.dc.VM/cluster1datastore\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a new zone, &PRODUCT; adds the first secondary storage server for you. For an overview of what secondary storage is, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before you can fill out this screen, you need to prepare the secondary storage by setting up NFS shares and installing the latest &PRODUCT; System VM template. See Adding Secondary Storage :" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NFS Server. The IP address of the server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Launch." +msgstr "" + diff --git a/docs/pot/advanced-zone-guest-ip-addresses.pot b/docs/pot/advanced-zone-guest-ip-addresses.pot new file mode 100644 index 00000000000..c0ed786071b --- /dev/null +++ b/docs/pot/advanced-zone-guest-ip-addresses.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Advanced Zone Guest IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When advanced networking is used, the administrator can create additional networks for use by the guests. These networks can span the zone and be available to all accounts, or they can be scoped to a single account, in which case only the named account may create guests that attach to these networks. The networks are defined by a VLAN ID, IP range, and gateway. The administrator may provision thousands of these networks if desired." +msgstr "" + diff --git a/docs/pot/advanced-zone-network-traffic-types.pot b/docs/pot/advanced-zone-network-traffic-types.pot new file mode 100644 index 00000000000..3b24de1289e --- /dev/null +++ b/docs/pot/advanced-zone-network-traffic-types.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Advanced Zone Network Traffic Types" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When advanced networking is used, there can be multiple physical networks in the zone. Each physical network can carry one or more traffic types, and you need to let &PRODUCT; know which type of network traffic you want each network to carry. The traffic types in an advanced zone are:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest. When end users run VMs, they generate guest traffic. The guest VMs communicate with each other over a network that can be referred to as the guest network. This network can be isolated or shared. In an isolated guest network, the administrator needs to reserve VLAN ranges to provide isolation for each &PRODUCT; account’s network (potentially a large number of VLANs). In a shared guest network, all guest VMs share a single network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Management. When &PRODUCT;’s internal resources communicate with each other, they generate management traffic. This includes communication between hosts, system VMs (VMs used by &PRODUCT; to perform various tasks in the cloud), and any other component that communicates directly with the &PRODUCT; Management Server. You must configure the IP range for the system VMs to use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public. 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 &PRODUCT; UI to acquire these IPs to implement NAT between their guest network and the public network, as described in “Acquiring a New IP Address†in the Administration Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage. Traffic such as VM templates and snapshots, which is sent between the secondary storage VM and secondary storage servers. &PRODUCT; uses a separate Network Interface Controller (NIC) named storage NIC for storage network traffic. Use of a storage NIC that always operates on a high bandwidth network allows fast template and snapshot copying. You must configure the IP range to use for the storage network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These traffic types can each be on a separate physical network, or they can be combined with certain restrictions. When you use the Add Zone wizard in the UI to create a new zone, you are guided into making only valid choices." +msgstr "" + diff --git a/docs/pot/advanced-zone-physical-network-configuration.pot b/docs/pot/advanced-zone-physical-network-configuration.pot new file mode 100644 index 00000000000..ba06ced75ce --- /dev/null +++ b/docs/pot/advanced-zone-physical-network-configuration.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Advanced Zone Physical Network Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Within a zone that uses advanced networking, you need to tell the Management Server how the physical network is set up to carry different kinds of traffic in isolation." +msgstr "" + diff --git a/docs/pot/advanced-zone-public-ip-addresses.pot b/docs/pot/advanced-zone-public-ip-addresses.pot new file mode 100644 index 00000000000..54d3ef2933e --- /dev/null +++ b/docs/pot/advanced-zone-public-ip-addresses.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Advanced Zone Public IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When advanced networking is used, the administrator can create additional networks for use by the guests. These networks can span the zone and be available to all accounts, or they can be scoped to a single account, in which case only the named account may create guests that attach to these networks. The networks are defined by a VLAN ID, IP range, and gateway. The administrator may provision thousands of these networks if desired." +msgstr "" + diff --git a/docs/pot/alerts.pot b/docs/pot/alerts.pot new file mode 100644 index 00000000000..ea65bdc3ed6 --- /dev/null +++ b/docs/pot/alerts.pot @@ -0,0 +1,165 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Alerts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following is the list of alert type numbers. The current alerts can be found by calling listAlerts." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "MEMORY = 0" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "CPU = 1" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "STORAGE =2" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "STORAGE_ALLOCATED = 3" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "PUBLIC_IP = 4" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "PRIVATE_IP = 5" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "HOST = 6" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "USERVM = 7" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DOMAIN_ROUTER = 8" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "CONSOLE_PROXY = 9" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "ROUTING = 10// lost connection to default route (to the gateway)" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "STORAGE_MISC = 11 // lost connection to default route (to the gateway)" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "USAGE_SERVER = 12 // lost connection to default route (to the gateway)" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "MANAGMENT_NODE = 13 // lost connection to default route (to the gateway)" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DOMAIN_ROUTER_MIGRATE = 14" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "CONSOLE_PROXY_MIGRATE = 15" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "USERVM_MIGRATE = 16" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "VLAN = 17" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "SSVM = 18" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "USAGE_SERVER_RESULT = 19" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "STORAGE_DELETE = 20;" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "UPDATE_RESOURCE_COUNT = 21; //Generated when we fail to update the resource count" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "USAGE_SANITY_RESULT = 22;" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DIRECT_ATTACHED_PUBLIC_IP = 23;" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "LOCAL_STORAGE = 24;" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "RESOURCE_LIMIT_EXCEEDED = 25; //Generated when the resource limit exceeds the limit. Currently used for recurring snapshots only" +msgstr "" + diff --git a/docs/pot/allocators.pot b/docs/pot/allocators.pot new file mode 100644 index 00000000000..9394ee6806c --- /dev/null +++ b/docs/pot/allocators.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Allocators" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; enables administrators to write custom allocators that will choose the Host to place a new guest and the storage host from which to allocate guest virtual disk images." +msgstr "" + diff --git a/docs/pot/api-calls.pot b/docs/pot/api-calls.pot new file mode 100644 index 00000000000..b8e2c8fb6db --- /dev/null +++ b/docs/pot/api-calls.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Calling the &PRODUCT; API" +msgstr "" + diff --git a/docs/pot/api-overview.pot b/docs/pot/api-overview.pot new file mode 100644 index 00000000000..51a559d7ffb --- /dev/null +++ b/docs/pot/api-overview.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "&PRODUCT; API" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; API is a low level API that has been used to implement the &PRODUCT; web UIs. It is also a good basis for implementing other popular APIs such as EC2/S3 and emerging DMTF standards." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Many &PRODUCT; API calls are asynchronous. These will return a Job ID immediately when called. This Job ID can be used to query the status of the job later. Also, status calls on impacted resources will provide some indication of their state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The API has a REST-like query basis and returns results in XML or JSON." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "See the Developer’s Guide and the API Reference." +msgstr "" + diff --git a/docs/pot/api-reference.pot b/docs/pot/api-reference.pot new file mode 100644 index 00000000000..0a6a99ec4db --- /dev/null +++ b/docs/pot/api-reference.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "API Reference Documentation" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can find all the API reference documentation at the below site:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "http://incubator.apache.org/cloudstack/docs/api/" +msgstr "" + diff --git a/docs/pot/asynchronous-commands-example.pot b/docs/pot/asynchronous-commands-example.pot new file mode 100644 index 00000000000..92f8d322c09 --- /dev/null +++ b/docs/pot/asynchronous-commands-example.pot @@ -0,0 +1,166 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Example" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following shows an example of using an asynchronous command. Assume the API command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "command=deployVirtualMachine&zoneId=1&serviceOfferingId=1&diskOfferingId=1&templateId=1\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack will immediately return a job ID and any other additional data." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" <deployvirtualmachineresponse> \n" +" <jobid>1</jobid>\n" +" <id>100</id>\n" +" </deployvirtualmachineresponse>\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Using the job ID, you can periodically poll for the results by using the queryAsyncJobResult command." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "command=queryAsyncJobResult&jobId=1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Three possible results could come from this query." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Job is still pending:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" <queryasyncjobresult> \n" +" <jobid>1</jobid>\n" +" <jobstatus>0</jobstatus>\n" +" <jobprocstatus>1</jobprocstatus>\n" +" </queryasyncjobresult>\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Job has succeeded:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" <queryasyncjobresultresponse cloud-stack-version=\"3.0.1.6\">\n" +" <jobid>1</jobid>\n" +" <jobstatus>1</jobstatus>\n" +" <jobprocstatus>0</jobprocstatus>\n" +" <jobresultcode>0</jobresultcode>\n" +" <jobresulttype>object</jobresulttype>\n" +" <jobresult>\n" +" <virtualmachine>\n" +" <id>450</id>\n" +" <name>i-2-450-VM</name>\n" +" <displayname>i-2-450-VM</displayname>\n" +" <account>admin</account>\n" +" <domainid>1</domainid>\n" +" <domain>ROOT</domain>\n" +" <created>2011-03-10T18:20:25-0800</created>\n" +" <state>Running</state>\n" +" <haenable>false</haenable>\n" +" <zoneid>1</zoneid>\n" +" <zonename>San Jose 1</zonename>\n" +" <hostid>2</hostid>\n" +" <hostname>905-13.sjc.lab.vmops.com</hostname>\n" +" <templateid>1</templateid>\n" +" <templatename>CentOS 5.3 64bit LAMP</templatename>\n" +" <templatedisplaytext>CentOS 5.3 64bit LAMP</templatedisplaytext>\n" +" <passwordenabled>false</passwordenabled>\n" +" <serviceofferingid>1</serviceofferingid>\n" +" <serviceofferingname>Small Instance</serviceofferingname>\n" +" <cpunumber>1</cpunumber>\n" +" <cpuspeed>500</cpuspeed>\n" +" <memory>512</memory>\n" +" <guestosid>12</guestosid>\n" +" <rootdeviceid>0</rootdeviceid>\n" +" <rootdevicetype>NetworkFilesystem</rootdevicetype>\n" +" <nic>\n" +" <id>561</id>\n" +" <networkid>205</networkid>\n" +" <netmask>255.255.255.0</netmask>\n" +" <gateway>10.1.1.1</gateway>\n" +" <ipaddress>10.1.1.225</ipaddress>\n" +" <isolationuri>vlan://295</isolationuri>\n" +" <broadcasturi>vlan://295</broadcasturi>\n" +" <traffictype>Guest</traffictype>\n" +" <type>Virtual</type>\n" +" <isdefault>true</isdefault>\n" +" </nic>\n" +" <hypervisor>XenServer</hypervisor>\n" +" </virtualmachine>\n" +" </jobresult>\n" +" </queryasyncjobresultresponse>\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Job has failed:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" <queryasyncjobresult>\n" +" <jobid>1</jobid> \n" +" <jobstatus>2</jobstatus> \n" +" <jobprocstatus>0</jobprocstatus>\n" +" <jobresultcode>551</jobresultcode>\n" +" <jobresulttype>text</jobresulttype>\n" +" <jobresult>Unable to deploy virtual machine id = 100 due to not enough capacity</jobresult> \n" +" </queryasyncjobresult>\n" +" " +msgstr "" + diff --git a/docs/pot/asynchronous-commands.pot b/docs/pot/asynchronous-commands.pot new file mode 100644 index 00000000000..44e2aacc8b5 --- /dev/null +++ b/docs/pot/asynchronous-commands.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Asynchronous Commands" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asynchronous commands were introduced in &PRODUCT; 2.x. Commands are designated as asynchronous when they can potentially take a long period of time to complete such as creating a snapshot or disk volume. They differ from synchronous commands by the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "They are identified in the API Reference by an (A)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "They will immediately return a job ID to refer to the job that will be responsible in processing the command." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If executed as a \"create\" resource command, it will return the resource ID as well as the job ID." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can periodically check the status of the job by making a simple API call to the command, queryAsyncJobResult and passing in the job ID." +msgstr "" + diff --git a/docs/pot/attach-iso-to-vm.pot b/docs/pot/attach-iso-to-vm.pot new file mode 100644 index 00000000000..791bd167243 --- /dev/null +++ b/docs/pot/attach-iso-to-vm.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Attaching an ISO to a VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Instances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the virtual machine you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Attach ISO button iso.png: Depicts adding an iso image " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Attach ISO dialog box, select the desired ISO." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK" +msgstr "" + diff --git a/docs/pot/attaching-volume.pot b/docs/pot/attaching-volume.pot new file mode 100644 index 00000000000..37336587d1f --- /dev/null +++ b/docs/pot/attaching-volume.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Attaching a Volume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can attach a volume to a guest VM to provide extra disk storage. Attach a volume when you first create a new volume, when you are moving an existing volume from one VM to another, or after you have migrated a volume from one storage pool to another." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select View, choose Volumes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4. Click the volume name in the Volumes list, then click the Attach Disk button AttachDiskButton.png: button to attach a volume " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Instance popup, choose the VM to which you want to attach the volume. You will only see instances to which you are allowed to attach volumes; for example, a user will see only instances created by that user, but the administrator will have more choices." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the volume has been attached, you should be able to see it by clicking Instances, the instance name, and View Volumes." +msgstr "" + diff --git a/docs/pot/automatic-snapshot-creation-retention.pot b/docs/pot/automatic-snapshot-creation-retention.pot new file mode 100644 index 00000000000..a0443c4ad37 --- /dev/null +++ b/docs/pot/automatic-snapshot-creation-retention.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Automatic Snapshot Creation and Retention" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Supported for the following hypervisors: XenServer, VMware vSphere, and KVM)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Users can set up a recurring snapshot policy to automatically create multiple snapshots of a disk at regular intervals. Snapshots can be created on an hourly, daily, weekly, or monthly interval. One snapshot policy can be set up per disk volume. For example, a user can set up a daily snapshot at 02:30." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "With each snapshot schedule, users can also specify the number of scheduled snapshots to be retained. Older snapshots that exceed the retention limit are automatically deleted. This user-defined limit must be equal to or lower than the global limit set by the &PRODUCT; administrator. See . The limit applies only to those snapshots that are taken as part of an automatic recurring snapshot policy. Additional manual snapshots can be created and retained." +msgstr "" + diff --git a/docs/pot/autoscale.pot b/docs/pot/autoscale.pot new file mode 100644 index 00000000000..34c60c45482 --- /dev/null +++ b/docs/pot/autoscale.pot @@ -0,0 +1,270 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configuring AutoScale" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "AutoScaling allows you to scale your back-end services or application VMs up or down seamlessly and automatically according to the conditions you define. With AutoScaling enabled, you can ensure that the number of VMs you are using seamlessly scale up when demand increases, and automatically decreases when demand subsides. Thus it helps you save compute costs by terminating underused VMs automatically and launching new VMs when you need them, without the need for manual intervention." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NetScaler AutoScaling is designed to seamlessly launch or terminate VMs based on user-defined conditions. Conditions for triggering a scaleup or scaledown action can vary from a simple use case like monitoring the CPU usage of a server to a complex use case of monitoring a combination of server's responsiveness and its CPU usage. For example, you can configure AutoScaling to launch an additional VM whenever CPU usage exceeds 80 percent for 15 minutes, or to remove a VM whenever CPU usage is less than 20 percent for 30 minutes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; uses the NetScaler load balancer to monitor all aspects of a system's health and work in unison with &PRODUCT; to initiate scale-up or scale-down actions. The supported NetScaler version is 10.0." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Prerequisites" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before you configure an AutoScale rule, consider the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that the necessary template is prepared before configuring AutoScale. When a VM is deployed by using a template and when it comes up, the application should be up and running." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the application is not running, the NetScaler device considers the VM as ineffective and continues provisioning the VMs unconditionally until the resource limit is exhausted." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Deploy the templates you prepared. Ensure that the applications come up on the first boot and is ready to take the traffic. Observe the time requires to deploy the template. Consider this time when you specify the quiet time while configuring AutoScale." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The AutoScale feature supports the SNMP counters that can be used to define conditions for taking scale up or scale down actions. To monitor the SNMP-based counter, ensure that the SNMP agent is installed in the template used for creating the AutoScale VMs, and the SNMP operations work with the configured SNMP community and port by using standard SNMP managers. For example, see to configure SNMP on a RHEL machine." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that the endpointe.url parameter present in the Global Settings is set to the Management Server API URL. For example, http://10.102.102.22:8080/client/api. In a multi-node Management Server deployment, use the virtual IP address configured in the load balancer for the management server’s cluster. Additionally, ensure that the NetScaler device has access to this IP address to provide AutoScale support." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you update the endpointe.url, disable the AutoScale functionality of the load balancer rules in the system, then enable them back to reflect the changes. For more information see " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the API Key and Secret Key are regenerated for an AutoScale user, ensure that the AutoScale functionality of the load balancers that the user participates in are disabled and then enabled to reflect the configuration changes in the NetScaler." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In an advanced Zone, ensure that at least one VM should be present before configuring a load balancer rule with AutoScale. Having one VM in the network ensures that the network is in implemented state for configuring AutoScale." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Template: A template consists of a base OS image and application. A template is used to provision the new instance of an application on a scaleup action. When a VM is deployed from a template, the VM can start taking the traffic from the load balancer without any admin intervention. For example, if the VM is deployed for a Web service, it should have the Web server running, the database connected, and so on." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Compute offering: A predefined set of virtual hardware attributes, including CPU speed, number of CPUs, and RAM size, that the user can select when creating a new virtual machine instance. Choose one of the compute offerings to be used while provisioning a VM instance as part of scaleup action." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Min Instance: The minimum number of active VM instances that is assigned to a load balancing rule. The active VM instances are the application instances that are up and serving the traffic, and are being load balanced. This parameter ensures that a load balancing rule has at least the configured number of active VM instances are available to serve the traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If an application, such as SAP, running on a VM instance is down for some reason, the VM is then not counted as part of Min Instance parameter, and the AutoScale feature initiates a scaleup action if the number of active VM instances is below the configured value. Similarly, when an application instance comes up from its earlier down state, this application instance is counted as part of the active instance count and the AutoScale process initiates a scaledown action when the active instance count breaches the Max instance value." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Max Instance: Maximum number of active VM instances that should be assigned to a load balancing rule. This parameter defines the upper limit of active VM instances that can be assigned to a load balancing rule." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specifying a large value for the maximum instance parameter might result in provisioning large number of VM instances, which in turn leads to a single load balancing rule exhausting the VM instances limit specified at the account or domain level." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If an application, such as SAP, running on a VM instance is down for some reason, the VM is not counted as part of Max Instance parameter. So there may be scenarios where the number of VMs provisioned for a scaleup action might be more than the configured Max Instance value. Once the application instances in the VMs are up from an earlier down state, the AutoScale feature starts aligning to the configured Max Instance value." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify the following scale-up and scale-down policies:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Duration: The duration, in seconds, for which the conditions you specify must be true to trigger a scaleup action. The conditions defined should hold true for the entire duration you specify for an AutoScale action to be invoked." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Counter: The performance counters expose the state of the monitored instances. By default, &PRODUCT; offers four performance counters: Three SNMP counters and one NetScaler counter. The SNMP counters are Linux User CPU, Linux System CPU, and Linux CPU Idle. The NetScaler counter is ResponseTime. The root administrator can add additional counters into &PRODUCT; by using the &PRODUCT; API." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Operator: The following five relational operators are supported in AutoScale feature: Greater than, Less than, Less than or equal to, Greater than or equal to, and Equal to." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Threshold: Threshold value to be used for the counter. Once the counter defined above breaches the threshold value, the AutoScale feature initiates a scaleup or scaledown action." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add: Click Add to add the condition." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Additionally, if you want to configure the advanced settings, click Show advanced settings, and specify the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Polling interval: Frequency in which the conditions, combination of counter, operator and threshold, are to be evaluated before taking a scale up or down action. The default polling interval is 30 seconds." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Quiet Time: This is the cool down period after an AutoScale action is initiated. The time includes the time taken to complete provisioning a VM instance from its template and the time taken by an application to be ready to serve traffic. This quiet time allows the fleet to come up to a stable state before any action can take place. The default is 300 seconds." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Destroy VM Grace Period: The duration in seconds, after a scaledown action is initiated, to wait before the VM is destroyed as part of scaledown action. This is to ensure graceful close of any pending sessions or transactions being served by the VM marked for destroy. The default is 120 seconds." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Security Groups: Security groups provide a way to isolate traffic to the VM instances. A security group is a group of VMs that filter their incoming and outgoing traffic according to a set of rules, called ingress and egress rules. These rules filter network traffic according to the IP address that is attempting to communicate with the VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disk Offerings: A predefined set of disk size for primary data storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SNMP Community: The SNMP community string to be used by the NetScaler device to query the configured counter value from the provisioned VM instances. Default is public." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SNMP Port: The port number on which the SNMP agent that run on the provisioned VMs is listening. Default port is 161." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "User: This is the user that the NetScaler device use to invoke scaleup and scaledown API calls to the cloud. If no option is specified, the user who configures AutoScaling is applied. Specify another user name to override." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Apply: Click Apply to create the AutoScale configuration." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Disabling and Enabling an AutoScale Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you want to perform any maintenance operation on the AutoScale VM instances, disable the AutoScale configuration. When the AutoScale configuration is disabled, no scaleup or scaledown action is performed. You can use this downtime for the maintenance activities. To disable the AutoScale configuration, click the Disable AutoScale EnableDisable.png: button to enable or disable AutoScale. button." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The button toggles between enable and disable, depending on whether AutoScale is currently enabled or not. After the maintenance operations are done, you can enable the AutoScale configuration back. To enable, open the AutoScale configuration page again, then click the Enable AutoScale EnableDisable.png: button to enable or disable AutoScale. button." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Updating an AutoScale Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can update the various parameters and add or delete the conditions in a scaleup or scaledown rule. Before you update an AutoScale configuration, ensure that you disable the AutoScale load balancer rule by clicking the Disable AutoScale button." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After you modify the required AutoScale parameters, click Apply. To apply the new AutoScale policies, open the AutoScale configuration page again, then click the Enable AutoScale button." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Runtime Considerations" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "An administrator should not assign a VM to a load balancing rule which is configured for AutoScale." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before a VM provisioning is completed if NetScaler is shutdown or restarted, the provisioned VM cannot be a part of the load balancing rule though the intent was to assign it to a load balancing rule. To workaround, rename the AutoScale provisioned VMs based on the rule name or ID so at any point of time the VMs can be reconciled to its load balancing rule." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Making API calls outside the context of AutoScale, such as destroyVM, on an autoscaled VM leaves the load balancing configuration in an inconsistent state. Though VM is destroyed from the load balancer rule, NetScaler continues to show the VM as a service assigned to a rule." +msgstr "" + diff --git a/docs/pot/aws-api-examples.pot b/docs/pot/aws-api-examples.pot new file mode 100644 index 00000000000..be0b0369de6 --- /dev/null +++ b/docs/pot/aws-api-examples.pot @@ -0,0 +1,166 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Examples" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There are many tools available to interface with a AWS compatible API. In this section we provide a few examples that users of &PRODUCT; can build upon." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Boto Examples" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Boto is one of them. It is a Python package available at https://github.com/boto/boto. In this section we provide two examples of Python scripts that use Boto and have been tested with the &PRODUCT; AWS API Interface." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "First is an EC2 example. Replace the Access and Secret Keys with your own and update the endpoint." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "An EC2 Boto example" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "#!/usr/bin/env python\n" +"\n" +"import sys\n" +"import os\n" +"import boto\n" +"import boto.ec2\n" +"\n" +"region = boto.ec2.regioninfo.RegionInfo(name=\"ROOT\",endpoint=\"localhost\")\n" +"apikey='GwNnpUPrO6KgIdZu01z_ZhhZnKjtSdRwuYd4DvpzvFpyxGMvrzno2q05MB0ViBoFYtdqKd'\n" +"secretkey='t4eXLEYWw7chBhDlaKf38adCMSHx_wlds6JfSx3z9fSpSOm0AbP9Moj0oGIzy2LSC8iw'\n" +"\n" +"def main():\n" +" '''Establish connection to EC2 cloud'''\n" +" conn =boto.connect_ec2(aws_access_key_id=apikey,\n" +" aws_secret_access_key=secretkey,\n" +" is_secure=False,\n" +" region=region,\n" +" port=7080,\n" +" path=\"/awsapi\",\n" +" api_version=\"2010-11-15\")\n" +"\n" +" '''Get list of images that I own'''\n" +" images = conn.get_all_images()\n" +" print images\n" +" myimage = images[0]\n" +" '''Pick an instance type'''\n" +" vm_type='m1.small'\n" +" reservation = myimage.run(instance_type=vm_type,security_groups=['default'])\n" +"\n" +"if __name__ == '__main__':\n" +" main()\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Second is an S3 example. Replace the Access and Secret keys with your own, as well as the endpoint of the service. Be sure to also update the file paths to something that exists on your machine." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "An S3 Boto Example" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "#!/usr/bin/env python\n" +"\n" +"import sys\n" +"import os\n" +"from boto.s3.key import Key\n" +"from boto.s3.connection import S3Connection\n" +"from boto.s3.connection import OrdinaryCallingFormat\n" +"\n" +"apikey='ChOw-pwdcCFy6fpeyv6kUaR0NnhzmG3tE7HLN2z3OB_s-ogF5HjZtN4rnzKnq2UjtnHeg_yLA5gOw'\n" +"secretkey='IMY8R7CJQiSGFk4cHwfXXN3DUFXz07cCiU80eM3MCmfLs7kusgyOfm0g9qzXRXhoAPCH-IRxXc3w'\n" +"\n" +"cf=OrdinaryCallingFormat()\n" +"\n" +"def main(): \n" +" '''Establish connection to S3 service'''\n" +" conn =S3Connection(aws_access_key_id=apikey,aws_secret_access_key=secretkey, \\\n" +" is_secure=False, \\\n" +" host='localhost', \\\n" +" port=7080, \\\n" +" calling_format=cf, \\\n" +" path=\"/awsapi/rest/AmazonS3\")\n" +"\n" +" try:\n" +" bucket=conn.create_bucket('cloudstack')\n" +" k = Key(bucket)\n" +" k.key = 'test'\n" +" try:\n" +" k.set_contents_from_filename('/Users/runseb/Desktop/s3cs.py')\n" +" except:\n" +" print 'could not write file'\n" +" pass\n" +" except:\n" +" bucket = conn.get_bucket('cloudstack')\n" +" k = Key(bucket)\n" +" k.key = 'test'\n" +" try:\n" +" k.get_contents_to_filename('/Users/runseb/Desktop/foobar')\n" +" except:\n" +" print 'Could not get file'\n" +" pass\n" +"\n" +" try:\n" +" bucket1=conn.create_bucket('teststring')\n" +" k=Key(bucket1)\n" +" k.key('foobar')\n" +" k.set_contents_from_string('This is my silly test')\n" +" except:\n" +" bucket1=conn.get_bucket('teststring')\n" +" k = Key(bucket1)\n" +" k.key='foobar'\n" +" k.get_contents_as_string()\n" +" \n" +"if __name__ == '__main__':\n" +" main()\n" +"\n" +" " +msgstr "" + +#. Tag: title +#, no-c-format +msgid "JClouds Examples" +msgstr "" + diff --git a/docs/pot/aws-ec2-configuration.pot b/docs/pot/aws-ec2-configuration.pot new file mode 100644 index 00000000000..e49f076edaf --- /dev/null +++ b/docs/pot/aws-ec2-configuration.pot @@ -0,0 +1,153 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Enabling the EC2 and S3 Compatible Interface" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The software that provides AWS API compatibility is installed along with &PRODUCT;. You must enable the services and perform some setup steps prior to using it." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set the global configuration parameters for each service to true. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a set of &PRODUCT; service offerings with names that match the Amazon service offerings. You can do this through the &PRODUCT; UI as described in the Administration Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure you have included the Amazon default service offering, m1.small. As well as any EC2 instance types that you will use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you did not already do so when you set the configuration parameter in step 1, restart the Management Server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management restart" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following sections provides details to perform these steps" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Enabling the Services" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To enable the EC2 and S3 compatible services you need to set the configuration variables enable.ec2.api and enable.s3.api to true. You do not have to enable both at the same time. Enable the ones you need. This can be done via the &PRODUCT; GUI by going in Global Settings or via the API." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The snapshot below shows you how to use the GUI to enable these services" +msgstr "" + +#. Tag: para +#, no-c-format +msgid " Use the GUI to set the configuration variable to true " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Using the &PRODUCT; API, the easiest is to use the so-called integration port on which you can make unauthenticated calls. In Global Settings set the port to 8096 and subsequently call the updateConfiguration method. The following urls shows you how:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" http://localhost:8096/client/api?command=updateConfiguration&name=enable.ec2.api&value=true\n" +" http://localhost:8096/client/api?command=updateConfiguration&name=enable.ec2.api&value=true\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Once you have enabled the services, restart the server." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Creating EC2 Compatible Service Offerings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You will also need to define compute service offerings with names compatible with the Amazon EC2 instance types API names (e.g m1.small,m1.large). This can be done via the &PRODUCT; GUI. Go under Service Offerings select Compute offering and either create a new compute offering or modify an existing one, ensuring that the name matches an EC2 instance type API name. The snapshot below shows you how:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid " Use the GUI to set the name of a compute service offering to an EC2 instance type API name. " +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Modifying the AWS API Port" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) The AWS API listens for requests on port 7080. If you prefer AWS API to listen on another port, you can change it as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the files /etc/cloud/management/server.xml, /etc/cloud/management/server-nonssl.xml, and /etc/cloud/management/server-ssl.xml." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In each file, find the tag <Service name=\"Catalina7080\">. Under this tag, locate <Connector executor=\"tomcatThreadPool-internal\" port= ....<." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Change the port to whatever port you want to use, then save the files." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you re-install &PRODUCT;, you will have to re-enable the services and if need be update the port." +msgstr "" + diff --git a/docs/pot/aws-ec2-introduction.pot b/docs/pot/aws-ec2-introduction.pot new file mode 100644 index 00000000000..f6c87340dea --- /dev/null +++ b/docs/pot/aws-ec2-introduction.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Amazon Web Services Compatible Interface" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; can translate Amazon Web Services (AWS) API calls to native &PRODUCT; API calls so that users can continue using existing AWS-compatible tools. This translation service runs as a separate web application in the same tomcat server as the management server of &PRODUCT;, listening on a different port. The Amazon Web Services (AWS) compatible interface provides the EC2 SOAP and Query APIs as well as the S3 REST API." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This service was previously enabled by separate software called CloudBridge. It is now fully integrated with the &PRODUCT; management server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The compatible interface for the EC2 Query API and the S3 API are Work In Progress. The S3 compatible API offers a way to store data on the management server file system, it is not an implementation of the S3 backend." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Limitations" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Supported only in zones that use basic networking." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Available in fresh installations of &PRODUCT;. Not available through upgrade of previous versions." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Features such as Elastic IP (EIP) and Elastic Load Balacing (ELB) are only available in an infrastructure with a Citrix NetScaler device. Users accessing a Zone with a NetScaler device will need to use a NetScaler-enabled network offering (DefaultSharedNetscalerEIP and ELBNetworkOffering)." +msgstr "" + diff --git a/docs/pot/aws-ec2-requirements.pot b/docs/pot/aws-ec2-requirements.pot new file mode 100644 index 00000000000..27644e77be1 --- /dev/null +++ b/docs/pot/aws-ec2-requirements.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Supported API Version" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The EC2 interface complies with Amazon's WDSL version dated November 15, 2010, available at http://ec2.amazonaws.com/doc/2010-11-15/." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The interface is compatible with the EC2 command-line tools EC2 tools v. 1.3.6230, which can be downloaded at http://s3.amazonaws.com/ec2-downloads/ec2-api-tools-1.3-62308.zip." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Work is underway to support a more recent version of the EC2 API" +msgstr "" + diff --git a/docs/pot/aws-ec2-supported-commands.pot b/docs/pot/aws-ec2-supported-commands.pot new file mode 100644 index 00000000000..9ffd9f4b6fb --- /dev/null +++ b/docs/pot/aws-ec2-supported-commands.pot @@ -0,0 +1,665 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Supported AWS API Calls" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following Amazon EC2 commands are supported by &PRODUCT; when the AWS API compatible interface is enabled. For a few commands, there are differences between the &PRODUCT; and Amazon EC2 versions, and these differences are noted. The underlying SOAP call for each command is also given, for those who have built tools using those calls." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Elastic IP API mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "EC2 command" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "SOAP call" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "&PRODUCT; API call" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-allocate-address" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "AllocateAddress" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "associateIpAddress" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-associate-address" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "AssociateAddress" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "enableStaticNat" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-addresses" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DescribeAddresses" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "listPublicIpAddresses" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-diassociate-address" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DisassociateAddress" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "disableStaticNat" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-release-address" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ReleaseAddress" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "disassociateIpAddress" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Availability Zone API mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-availability-zones" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DescribeAvailabilityZones" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "listZones" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Images API mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-create-image" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "CreateImage" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "createTemplate" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-deregister" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DeregisterImage" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DeleteTemplate" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-images" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DescribeImages" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "listTemplates" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-register" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "RegisterImage" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "registerTemplate" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Image Attributes API mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-image-attribute" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DescribeImageAttribute" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "listTemplatePermissions" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-modify-image-attribute" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ModifyImageAttribute" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "updateTemplatePermissions" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-reset-image-attribute" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ResetImageAttribute" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Instances API mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-instances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DescribeInstances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "listVirtualMachines" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-run-instances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "RunInstances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "deployVirtualMachine" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-reboot-instances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "RebootInstances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "rebootVirtualMachine" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-start-instances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "StartInstances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "startVirtualMachine" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-stop-instances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "StopInstances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "stopVirtualMachine" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-terminate-instances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "TerminateInstances" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "destroyVirtualMachine" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Instance Attributes Mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-instance-attribute" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DescribeInstanceAttribute" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Keys Pairs Mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-add-keypair" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "CreateKeyPair" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "createSSHKeyPair" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-delete-keypair" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DeleteKeyPair" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "deleteSSHKeyPair" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-keypairs" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DescribeKeyPairs" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "listSSHKeyPairs" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-import-keypair" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ImportKeyPair" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "registerSSHKeyPair" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Passwords API Mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-get-password" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "GetPasswordData" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "getVMPassword" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Security Groups API Mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-authorize" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "AuthorizeSecurityGroupIngress" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "authorizeSecurityGroupIngress" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-add-group" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "CreateSecurityGroup" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "createSecurityGroup" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-delete-group" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DeleteSecurityGroup" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "deleteSecurityGroup" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-group" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DescribeSecurityGroups" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "listSecurityGroups" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-revoke" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "RevokeSecurityGroupIngress" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "revokeSecurityGroupIngress" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Snapshots API Mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-create-snapshot" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "CreateSnapshot" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "createSnapshot" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-delete-snapshot" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DeleteSnapshot" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "deleteSnapshot" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-snapshots" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DescribeSnapshots" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "listSnapshots" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Volumes API Mapping" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-attach-volume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "AttachVolume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "attachVolume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-create-volume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "CreateVolume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "createVolume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-delete-volume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DeleteVolume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "deleteVolume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-describe-volume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DescribeVolume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "listVolumes" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "ec2-detach-volume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "DetachVolume" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "detachVolume" +msgstr "" + diff --git a/docs/pot/aws-ec2-timeouts.pot b/docs/pot/aws-ec2-timeouts.pot new file mode 100644 index 00000000000..190ad8d82bc --- /dev/null +++ b/docs/pot/aws-ec2-timeouts.pot @@ -0,0 +1,80 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using Timeouts to Ensure AWS API Command Completion" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Amazon EC2 command-line tools have a default connection timeout. When used with &PRODUCT;, a longer timeout might be needed for some commands. If you find that commands are not completing due to timeouts, you can specify a custom timeouts. You can add the following optional command-line parameters to any &PRODUCT;-supported EC2 command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "--connection-timeout TIMEOUT" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "Specifies a connection timeout (in seconds). Example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "--connection-timeout 30" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "--request-timeout TIMEOUT" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "Specifies a request timeout (in seconds). Example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "--request-timeout 45" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "ec2-run-instances 2 –z us-test1 –n 1-3 --connection-timeout 120 --request-timeout 120" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The timeouts optional arguments are not specific to &PRODUCT;." +msgstr "" + diff --git a/docs/pot/aws-ec2-user-setup.pot b/docs/pot/aws-ec2-user-setup.pot new file mode 100644 index 00000000000..c1412920889 --- /dev/null +++ b/docs/pot/aws-ec2-user-setup.pot @@ -0,0 +1,141 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "AWS API User Setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In general, users need not be aware that they are using a translation service provided by &PRODUCT;. They only need to send AWS API calls to &PRODUCT;'s endpoint, and it will translate the calls to the native &PRODUCT; API. Users of the Amazon EC2 compatible interface will be able to keep their existing EC2 tools and scripts and use them with their &PRODUCT; deployment, by specifying the endpoint of the management server and using the proper user credentials. In order to do this, each user must perform the following configuration steps:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Generate user credentials." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Register with the service." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For convenience, set up environment variables for the EC2 SOAP command-line tools." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "AWS API User Registration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each user must perform a one-time registration. The user follows these steps:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Obtain the following by looking in the &PRODUCT; UI, using the API, or asking the cloud administrator:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; server's publicly available DNS name or IP address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The user account's Access key and Secret key" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Generate a private key and a self-signed X.509 certificate. The user substitutes their own desired storage location for /path/to/… below." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /path/to/private_key.pem -out /path/to/cert.pem" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Register the user X.509 certificate and Access/Secret keys with the AWS compatible service. If you have the source code of &PRODUCT; go to the awsapi-setup/setup directory and use the Python script cloudstack-aws-api-register. If you do not have the source then download the script using the following command." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "wget -O cloudstack-aws-api-register \"https://git-wip-us.apache.org/repos/asf?p=incubator-cloudstack.git;a=blob_plain;f=awsapi-setup/setup/cloudstack-aws-api-register;hb=HEAD\"\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Then execute it, using the parameter values that were obtained in step 1. An example is shown below." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ cloudstack-aws-api-register --apikey=User’s &PRODUCT; API key --secretkey=User’s &PRODUCT; Secret key --cert=/path/to/cert.pem --url=http://&PRODUCT;.server:7080/awsapi" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A user with an existing AWS certificate could choose to use the same certificate with &PRODUCT;, but note that the certificate would be uploaded to the &PRODUCT; management server database." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "AWS API Command-Line Tools Setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To use the EC2 command-line tools, the user must perform these steps:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure you have the right version of EC2 Tools. The supported version is available at http://s3.amazonaws.com/ec2-downloads/ec2-api-tools-1.3-62308.zip." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up the EC2 environment variables. This can be done every time you use the service or you can set them up in the proper shell profile. Replace the endpoint (i.e EC2_URL) with the proper address of your &PRODUCT; management server and port. In a bash shell do the following." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" $ export EC2_CERT=/path/to/cert.pem\n" +" $ export EC2_PRIVATE_KEY=/path/to/private_key.pem\n" +" $ export EC2_URL=http://localhost:7080/awsapi\n" +" $ export EC2_HOME=/path/to/EC2_tools_directory\n" +" " +msgstr "" + diff --git a/docs/pot/aws-interface-compatibility.pot b/docs/pot/aws-interface-compatibility.pot new file mode 100644 index 00000000000..8ed02a8270c --- /dev/null +++ b/docs/pot/aws-interface-compatibility.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Amazon Web Services Compatible Interface" +msgstr "" + diff --git a/docs/pot/basic-adv-networking.pot b/docs/pot/basic-adv-networking.pot new file mode 100644 index 00000000000..2e67f2c2d7b --- /dev/null +++ b/docs/pot/basic-adv-networking.pot @@ -0,0 +1,195 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Basic and Advanced Networking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides two styles of networking:." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Basic" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For AWS-style networking. Provides a single network where guest isolation can be provided through layer-3 means such as security groups (IP address source filtering)." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Advanced" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks, but requires more configuration steps than basic networking." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each zone has either basic or advanced networking. Once the choice of networking model for a zone has been made and configured in &PRODUCT;, it can not be changed. A zone is either basic or advanced for its entire lifetime." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following table compares the networking features in the two networking models." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Networking Feature" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Basic Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Advanced Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Number of networks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Single network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Multiple networks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Firewall type" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Physical" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Physical and Virtual" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Load balancer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Isolation type" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Layer 3" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Layer 2 and Layer 3" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPN support" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "No" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Yes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Port forwarding" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "1:1 NAT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Source NAT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Userdata" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network usage monitoring" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "sFlow / netFlow at physical router" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor and Virtual Router" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DNS and DHCP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The two types of networking may be in use in the same cloud. However, a given zone must use either Basic Networking or Advanced Networking." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Different types of network traffic can be segmented on the same physical network. Guest traffic can also be segmented by account. To isolate traffic, you can use separate VLANs. If you are using separate VLANs on a single physical network, make sure the VLAN tags are in separate numerical ranges." +msgstr "" + diff --git a/docs/pot/basic-zone-configuration.pot b/docs/pot/basic-zone-configuration.pot new file mode 100644 index 00000000000..ee76cf456f9 --- /dev/null +++ b/docs/pot/basic-zone-configuration.pot @@ -0,0 +1,360 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Basic Zone Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After you select Basic in the Add Zone wizard and click Next, you will be asked to enter the following details. Then click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. A name for the zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DNS 1 and 2. These are DNS servers for use by guest VMs in the zone. These DNS servers will be accessed via the public network you will add later. The public IP addresses for the zone must have a route to the DNS server named here." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Internal DNS 1 and Internal DNS 2. These are DNS servers for use by system VMs in the zone (these are VMs used by &PRODUCT; itself, such as virtual routers, console proxies, and Secondary Storage VMs.) These DNS servers will be accessed via the management traffic network interface of the System VMs. The private IP address you provide for the pods must have a route to the internal DNS server named here." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor. (Introduced in version 3.0.1) Choose the hypervisor for the first cluster in the zone. You can add clusters with different hypervisors later, after you finish adding the zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Offering. Your choice here determines what network services will be available on the network for guest VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DefaultSharedNetworkOfferingWithSGService" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you want to enable security groups for guest traffic isolation, choose this. (See Using Security Groups to Control Traffic to VMs.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DefaultSharedNetworkOffering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you do not need security groups, choose this." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DefaultSharedNetscalerEIPandELBNetworkOffering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have installed a Citrix NetScaler appliance as part of your zone network, and you will be using its Elastic IP and Elastic Load Balancing features, choose this. With the EIP and ELB features, a basic zone with security groups enabled can offer 1:1 static NAT and load balancing." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Domain. (Optional) If you want to assign a special domain name to the guest VM network, specify the DNS suffix." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public. A public zone is available to all users. A zone that is not public will be assigned to a particular domain. Only users in that domain will be allowed to create guest VMs in this zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose which traffic types will be carried by the physical network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The traffic types are management, public, guest, and storage traffic. For more information about the types, roll over the icons to display their tool tips, or see Basic Zone Network Traffic Types. This screen starts out with some traffic types already assigned. To add more, drag and drop traffic types onto the network. You can also change the network name if desired." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Introduced in version 3.0.1) Assign a network traffic label to each traffic type on the physical network. These labels must match the labels you have already defined on the hypervisor host. To assign each label, click the Edit button under the traffic type icon. A popup dialog appears where you can type the label, then click OK." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These traffic labels will be defined only for the hypervisor selected for the first cluster. For all other hypervisors, the labels can be configured after the zone is created." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(NetScaler only) If you chose the network offering for NetScaler, you have an additional screen to fill out. Provide the requested details to set up the NetScaler, then click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP address. The NSIP (NetScaler IP) address of the NetScaler device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Username/Password. The authentication credentials to access the device. &PRODUCT; uses these credentials to access the device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Type. NetScaler device type that is being added. It could be NetScaler VPX, NetScaler MPX, or NetScaler SDX. For a comparison of the types, see About Using a NetScaler Load Balancer." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public interface. Interface of NetScaler that is configured to be part of the public network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private interface. Interface of NetScaler that is configured to be part of the private network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Number of retries. Number of times to attempt a command on the device before considering the operation failed. Default is 2." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Capacity. Number of guest networks/accounts that will share this NetScaler device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Dedicated. When marked as dedicated, this device will be dedicated to a single account. When Dedicated is checked, the value in the Capacity field has no significance – implicitly, its value is 1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(NetScaler only) Configure the IP range for public traffic. The IPs in this range will be used for the static NAT capability which you enabled by selecting the network offering for NetScaler with EIP and ELB. Enter the following details, then click Add. If desired, you can repeat this step to add more IP ranges. When done, click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateway. The gateway in use for these IP addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Netmask. The netmask associated with this IP range." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN. The VLAN that will be used for public traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start IP/End IP. A range of IP addresses that are assumed to be accessible from the Internet and will be allocated for access to guest VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a new zone, &PRODUCT; adds the first pod for you. You can always add more pods later. For an overview of what a pod is, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the first pod, enter the following, then click Next:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Pod Name. A name for the pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reserved system gateway. The gateway for the hosts in that pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reserved system netmask. The network prefix that defines the pod's subnet. Use CIDR notation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start/End Reserved System IP. The IP range in the management network that &PRODUCT; uses to manage various system VMs, such as Secondary Storage VMs, Console Proxy VMs, and DHCP. For more information, see System Reserved IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure the network for guest traffic. Provide the following, then click Next:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest gateway. The gateway that the guests should use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest netmask. The netmask in use on the subnet the guests will use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest start IP/End IP. Enter the first and last IP addresses that define a range that &PRODUCT; can assign to guests." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We strongly recommend the use of multiple NICs. If multiple NICs are used, they may be in a different subnet." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If one NIC is used, these IPs should be in the same CIDR as the pod CIDR." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a new pod, &PRODUCT; adds the first cluster for you. You can always add more clusters later. For an overview of what a cluster is, see About Clusters." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the first cluster, enter the following, then click Next:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor. (Version 3.0.0 only; in 3.0.1, this field is read only) Choose the type of hypervisor software that all hosts in this cluster will run. If you choose VMware, additional fields appear so you can give information about a vSphere cluster. For vSphere servers, we recommend creating the cluster of hosts in vCenter and then adding the entire cluster to &PRODUCT;. See Add Cluster: vSphere." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Cluster name. Enter a name for the cluster. This can be text of your choosing and is not used by &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a new cluster, &PRODUCT; adds the first host for you. You can always add more hosts later. For an overview of what a host is, see About Hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you add a hypervisor host to &PRODUCT;, the host must not have any VMs already running." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before you can configure the host, you need to install the hypervisor software on the host. You will need to know which version of the hypervisor software version is supported by &PRODUCT; and what additional configuration is required to ensure the host will work with &PRODUCT;. To find these installation details, see:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Citrix XenServer Installation and Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMware vSphere Installation and Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM vSphere Installation and Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the first host, enter the following, then click Next:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host Name. The DNS name or IP address of the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Username. The username is root." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Password. This is the password for the user named above (from your XenServer or KVM install)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host Tags. (Optional) Any labels that you use to categorize hosts for ease of maintenance. For example, you can set this to the cloud's HA tag (set in the ha.tag global configuration parameter) if you want this host to be used only for VMs with the \"high availability\" feature enabled. For more information, see HA-Enabled Virtual Machines as well as HA for Hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a new cluster, &PRODUCT; adds the first primary storage server for you. You can always add more servers later. For an overview of what primary storage is, see About Primary Storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the first primary storage server, enter the following, then click Next:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. The name of the storage device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol. For XenServer, choose either NFS, iSCSI, or PreSetup. For KVM, choose NFS, SharedMountPoint,CLVM, or RBD. For vSphere choose either VMFS (iSCSI or FiberChannel) or NFS. The remaining fields in the screen vary depending on what you choose here." +msgstr "" + diff --git a/docs/pot/basic-zone-guest-ip-addresses.pot b/docs/pot/basic-zone-guest-ip-addresses.pot new file mode 100644 index 00000000000..c656eb525a5 --- /dev/null +++ b/docs/pot/basic-zone-guest-ip-addresses.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Basic Zone Guest IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When basic networking is used, &PRODUCT; will assign IP addresses in the CIDR of the pod to the guests in that pod. The administrator must add a Direct IP range on the pod for this purpose. These IPs are in the same VLAN as the hosts." +msgstr "" + diff --git a/docs/pot/basic-zone-network-traffic-types.pot b/docs/pot/basic-zone-network-traffic-types.pot new file mode 100644 index 00000000000..dab50e915e5 --- /dev/null +++ b/docs/pot/basic-zone-network-traffic-types.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Basic Zone Network Traffic Types" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When basic networking is used, there can be only one physical network in the zone. That physical network carries the following traffic types:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest. When end users run VMs, they generate guest traffic. The guest VMs communicate with each other over a network that can be referred to as the guest network. Each pod in a basic zone is a broadcast domain, and therefore each pod has a different IP range for the guest network. The administrator must configure the IP range for each pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Management. When &PRODUCT;’s internal resources communicate with each other, they generate management traffic. This includes communication between hosts, system VMs (VMs used by &PRODUCT; to perform various tasks in the cloud), and any other component that communicates directly with the &PRODUCT; Management Server. You must configure the IP range for the system VMs to use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We strongly recommend the use of separate NICs for management traffic and guest traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public. 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 &PRODUCT; UI to acquire these IPs to implement NAT between their guest network and the public network, as described in Acquiring a New IP Address." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage. Traffic such as VM templates and snapshots, which is sent between the secondary storage VM and secondary storage servers. &PRODUCT; uses a separate Network Interface Controller (NIC) named storage NIC for storage network traffic. Use of a storage NIC that always operates on a high bandwidth network allows fast template and snapshot copying. You must configure the IP range to use for the storage network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a basic network, configuring the physical network is fairly straightforward. In most cases, you only need to configure one guest network to carry traffic that is generated by guest VMs. If you use a NetScaler load balancer and enable its elastic IP and elastic load balancing (EIP and ELB) features, you must also configure a network to carry public traffic. &PRODUCT; takes care of presenting the necessary network configuration steps to you in the UI when you add a new zone." +msgstr "" + diff --git a/docs/pot/basic-zone-physical-network-configuration.pot b/docs/pot/basic-zone-physical-network-configuration.pot new file mode 100644 index 00000000000..a9d81520fa3 --- /dev/null +++ b/docs/pot/basic-zone-physical-network-configuration.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Basic Zone Physical Network Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a basic network, configuring the physical network is fairly straightforward. You only need to configure one guest network to carry traffic that is generated by guest VMs. When you first add a zone to &PRODUCT;, you set up the guest network through the Add Zone screens." +msgstr "" + diff --git a/docs/pot/best-practices-for-vms.pot b/docs/pot/best-practices-for-vms.pot new file mode 100644 index 00000000000..9e8ca118723 --- /dev/null +++ b/docs/pot/best-practices-for-vms.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Best Practices for Virtual Machines" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; administrator should monitor the total number of VM instances in each cluster, and disable allocation to the cluster if the total is approaching the maximum that the hypervisor can handle. Be sure to leave a safety margin to allow for the possibility of one or more hosts failing, which would increase the VM load on the other hosts as the VMs are automatically redeployed. Consult the documentation for your chosen hypervisor to find the maximum permitted number of VMs per host, then use &PRODUCT; global configuration settings to set this as the default limit. Monitor the VM activity in each cluster at all times. Keep the total number of VMs below a safe level that allows for the occasional host failure. For example, if there are N hosts in the cluster, and you want to allow for one host in the cluster to be down at any given time, the total number of VM instances you can permit in the cluster is at most (N-1) * (per-host-limit). Once a cluster reaches this number of VMs, use the &PRODUCT; UI to disable allocation of more VMs to the cluster." +msgstr "" + diff --git a/docs/pot/best-practices-primary-storage.pot b/docs/pot/best-practices-primary-storage.pot new file mode 100644 index 00000000000..6dd7ab2af01 --- /dev/null +++ b/docs/pot/best-practices-primary-storage.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Best Practices for Primary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The speed of primary storage will impact guest performance. If possible, choose smaller, higher RPM drives for primary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that nothing is stored on the server. Adding the server to &PRODUCT; will destroy any existing data" +msgstr "" + diff --git a/docs/pot/best-practices-secondary-storage.pot b/docs/pot/best-practices-secondary-storage.pot new file mode 100644 index 00000000000..43326cf0292 --- /dev/null +++ b/docs/pot/best-practices-secondary-storage.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Best Practices for Secondary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each Zone can have one or more secondary storage servers. Multiple secondary storage servers provide increased scalability to the system." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Secondary storage has a high read:write ratio and is expected to consist of larger drives with lower IOPS than primary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that nothing is stored on the server. Adding the server to &PRODUCT; will destroy any existing data." +msgstr "" + diff --git a/docs/pot/best-practices-templates.pot b/docs/pot/best-practices-templates.pot new file mode 100644 index 00000000000..4b822784dc1 --- /dev/null +++ b/docs/pot/best-practices-templates.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Best Practices for Templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you plan to use large templates (100 GB or larger), be sure you have a 10-gigabit network to support the large templates. A slower network can lead to timeouts and other errors when large templates are used." +msgstr "" + diff --git a/docs/pot/best-practices-virtual-router.pot b/docs/pot/best-practices-virtual-router.pot new file mode 100644 index 00000000000..d1cd63a5982 --- /dev/null +++ b/docs/pot/best-practices-virtual-router.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Best Practices for Virtual Routers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "WARNING: Restarting a virtual router from a hypervisor console deletes all the iptables rules. To work around this issue, stop the virtual router and start it from the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "WARNING: Do not use the destroyRouter API when only one router is available in the network, because restartNetwork API with the cleanup=false parameter can't recreate it later. If you want to destroy and recreate the single router available in the network, use the restartNetwork API with the cleanup=true parameter." +msgstr "" + diff --git a/docs/pot/build-deb.pot b/docs/pot/build-deb.pot new file mode 100644 index 00000000000..995b086af5b --- /dev/null +++ b/docs/pot/build-deb.pot @@ -0,0 +1,175 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Building DEB packages" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In addition to the bootstrap dependencies, you'll also need to install several other dependencies. Note that we recommend using Maven 3, which is not currently available in 12.04.1 LTS. So, you'll also need to add a PPA repository that includes Maven 3. After running the command add-apt-repository, you will be prompted to continue and a GPG key will be added." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "\n" +"$ sudo apt-get update\n" +"$ sudo apt-get install python-software-properties\n" +"$ sudo add-apt-repository ppa:natecarlson/maven3\n" +"$ sudo apt-get update\n" +"$ sudo apt-get install ant debhelper openjdk-6-jdk tomcat6 libws-commons-util-java genisoimage python-mysqldb libcommons-codec-java libcommons-httpclient-java liblog4j1.2-java maven3\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "While we have defined, and you have presumably already installed the bootstrap prerequisites, there are a number of build time prerequisites that need to be resolved. &PRODUCT; uses maven for dependency resolution. You can resolve the buildtime depdencies for CloudStack by running:" +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "$ mvn3 -P deps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now that we have resolved the dependencies we can move on to building &PRODUCT; and packaging them into DEBs by issuing the following command." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "\n" +"$ dpkg-buildpackage -uc -us\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This command will build 16 Debian packages. You should have all of the following:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"cloud-agent_4.0.0-incubating_amd64.deb\n" +"cloud-agent-deps_4.0.0-incubating_amd64.deb\n" +"cloud-agent-libs_4.0.0-incubating_amd64.deb\n" +"cloud-awsapi_4.0.0-incubating_amd64.deb\n" +"cloud-cli_4.0.0-incubating_amd64.deb\n" +"cloud-client_4.0.0-incubating_amd64.deb\n" +"cloud-client-ui_4.0.0-incubating_amd64.deb\n" +"cloud-core_4.0.0-incubating_amd64.deb\n" +"cloud-deps_4.0.0-incubating_amd64.deb\n" +"cloud-python_4.0.0-incubating_amd64.deb\n" +"cloud-scripts_4.0.0-incubating_amd64.deb\n" +"cloud-server_4.0.0-incubating_amd64.deb\n" +"cloud-setup_4.0.0-incubating_amd64.deb\n" +"cloud-system-iso_4.0.0-incubating_amd64.deb\n" +"cloud-usage_4.0.0-incubating_amd64.deb\n" +"cloud-utils_4.0.0-incubating_amd64.deb\n" +"" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Setting up an APT repo" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After you've created the packages, you'll want to copy them to a system where you can serve the packages over HTTP. You'll create a directory for the packages and then use dpkg-scanpackages to create Packages.gz, which holds information about the archive structure. Finally, you'll add the repository to your system(s) so you can install the packages using APT." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The first step is to make sure that you have the dpkg-dev package installed. This should have been installed when you pulled in the debhelper application previously, but if you're generating Packages.gz on a different system, be sure that it's installed there as well." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "$ sudo apt-get install dpkg-dev" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The next step is to copy the DEBs to the directory where they can be served over HTTP. We'll use /var/www/cloudstack/repo in the examples, but change the directory to whatever works for you." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "\n" +"sudo mkdir -p /var/www/cloudstack/repo/binary\n" +"sudo cp *.deb /var/www/cloudstack/repo/binary\n" +"sudo cd /var/www/cloudstack/repo/binary\n" +"sudo dpkg-scanpackages . /dev/null | tee Packages | gzip -9 > Packages.gz\n" +"" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Note: Override Files" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can safely ignore the warning about a missing override file." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now you should have all of the DEB packages and Packages.gz in the binary directory and available over HTTP. (You may want to use wget or curl to test this before moving on to the next step.)" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configuring your machines to use the APT repository" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now that we have created the repository, you need to configure your machine to make use of the APT repository. You can do this by adding a repository file under /etc/apt/sources.list.d. Use your preferred editor to create /etc/apt/sources.list.d/cloudstack.list with this line:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "deb http://server.url/cloudstack/repo binary ./" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now that you have the repository info in place, you'll want to run another update so that APT knows where to find the &PRODUCT; packages." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "$ sudo apt-get update" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can now move on to the instructions under Install on Ubuntu." +msgstr "" + diff --git a/docs/pot/build-rpm.pot b/docs/pot/build-rpm.pot new file mode 100644 index 00000000000..a514062a672 --- /dev/null +++ b/docs/pot/build-rpm.pot @@ -0,0 +1,111 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Building RPMs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "While we have defined, and you have presumably already installed the bootstrap prerequisites, there are a number of build time prerequisites that need to be resolved. &PRODUCT; uses maven for dependency resolution. You can resolve the buildtime depdencies for CloudStack by running the following command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ mvn -P deps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now that we have resolved the dependencies we can move on to building &PRODUCT; and packaging them into RPMs by issuing the following command." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ ./waf rpm" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Once this completes, you should find assembled RPMs in artifacts/rpmbuild/RPMS/x86_64" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Creating a yum repo" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "While RPMs is an ideal packaging format - it's most easily consumed from yum repositories over a network. We'll move into the directory with the newly created RPMs by issuing the following command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ cd artifacts/rpmbuild/RPMS/x86_64" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Next we'll issue a command to create the repository metadata by issuing the following command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ createrepo ./" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The files and directories within our current working directory can now be uploaded to a web server and serve as a yum repository" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configuring your systems to use your new yum repository" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now that your yum repository is populated with RPMs and metadata we need to configure our machines that need to install CloudStack. We will create a file at /etc/yum.repos.d/cloudstack.repo with the following content:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"[apache-cloudstack]\n" +"name=Apache CloudStack\n" +"baseurl=http://webserver.tld/path/to/repo\n" +"enabled=1\n" +"gpgcheck=0\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Completing this step will allow you to easily install CloudStack on a number of machines across the network." +msgstr "" + diff --git a/docs/pot/building-devcloud.pot b/docs/pot/building-devcloud.pot new file mode 100644 index 00000000000..ef4d81475d8 --- /dev/null +++ b/docs/pot/building-devcloud.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Building DevCloud" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The DevCloud appliance can be downloaded from the wiki at . It can also be built from scratch. Code is being developed to provide this alternative build. It is based on veewee, Vagrant and Puppet." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The goal is to automate the DevCloud build and make this automation capability available to all within the source release of &PRODUCT;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This is under heavy development. The code is located in the source tree under tools/devcloud" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A preliminary wiki page describes the build at https://cwiki.pache.org/CLOUDSTACK/building-devcloud.html" +msgstr "" + diff --git a/docs/pot/building-marvin.pot b/docs/pot/building-marvin.pot new file mode 100644 index 00000000000..500d792704d --- /dev/null +++ b/docs/pot/building-marvin.pot @@ -0,0 +1,91 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Building and Installing Marvin" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Marvin is built with Maven and is dependent on APIdoc. To build it do the following in the root tree of &PRODUCT;:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mvn -P developer -l :cloud-apidoc" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mvn -P developer -l :cloud-marvin" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If successfull the build will have created the cloudstackAPI Python package under tools/marvin/marvin/cloudstackAPI as well as a gziped Marvin package under tools/marvin dist. To install the Python Marvin module do the following in tools/marvin:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "sudo python ./setup.py install" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The dependencies will be downloaded the Python module installed and you should be able to use Marvin in Python. Check that you can import the module before starting to use it." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ python\n" +"Python 2.7.3 (default, Nov 17 2012, 19:54:34) \n" +"[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin\n" +"Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n" +">>> import marvin\n" +">>> from marvin.cloudstackAPI import *\n" +">>> " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You could also install it using pip or easy_install using the local distribution package in tools/marvin/dist :" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "pip install tools/marvin/dist/Marvin-0.1.0.tar.gz" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Or:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "easy_install tools/marvin/dist/Marvin-0.1.0.tar.gz" +msgstr "" + diff --git a/docs/pot/building-prerequisites.pot b/docs/pot/building-prerequisites.pot new file mode 100644 index 00000000000..8758528a926 --- /dev/null +++ b/docs/pot/building-prerequisites.pot @@ -0,0 +1,116 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Build Procedure Prerequisites" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In this section we will assume that you are using the Ubuntu Linux distribution with the Advanced Packaging Tool (APT). If you are using a different distribution or OS and a different packaging tool, adapt the following instructions to your environment. To build &PRODUCT; you will need:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "git, http://git-scm.com" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "sudo apt-get install git-core" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "maven, http://maven.apache.org" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "sudo apt-get install maven" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure that you installed maven 3" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ mvn --version\n" +"Apache Maven 3.0.4\n" +"Maven home: /usr/share/maven\n" +"Java version: 1.6.0_24, vendor: Sun Microsystems Inc.\n" +"Java home: /usr/lib/jvm/java-6-openjdk-amd64/jre\n" +"Default locale: en_US, platform encoding: UTF-8\n" +"OS name: \"linux\", version: \"3.2.0-33-generic\", arch: \"amd64\", family: \"unix\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "java" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "set the JAVA_HOME environment variable" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In addition, to deploy and run &PRODUCT; in a development environment you will need:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Mysql" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "sudo apt-get install mysql-server-5.5" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start the mysqld service and create a cloud user with cloud as a password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tomcat 6" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "sudo apt-get install tomcat6" +msgstr "" + diff --git a/docs/pot/building-with-maven-deploy.pot b/docs/pot/building-with-maven-deploy.pot new file mode 100644 index 00000000000..5efce88366d --- /dev/null +++ b/docs/pot/building-with-maven-deploy.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Deployment and Testing Steps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Deploying the &PRODUCT; code that you compiled is a two step process:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have not configured the database or modified its properties do:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mvn -P developer -pl developer -Ddeploydb" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Then you need to run the &PRODUCT; management server. To attach a debugger to it, do:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "export MAVEN_OPTS=\"-Xmx1024 -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n\"" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mvn -pl :cloud-client-ui jetty:run" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When dealing with the database, remember that you may wipe it entirely and lose any data center configuration that you may have set previously." +msgstr "" + diff --git a/docs/pot/building-with-maven-steps.pot b/docs/pot/building-with-maven-steps.pot new file mode 100644 index 00000000000..3e8bdb955f7 --- /dev/null +++ b/docs/pot/building-with-maven-steps.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Building Steps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; uses git for source version control, first make sure you have the source code by pulling it:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "git clone https://git-wip-us.apache.org/repos/asf/incubator-cloudstack.git" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Several Project Object Models (POM) are defined to deal with the various build targets of &PRODUCT;. Certain features require some packages that are not compatible with the Apache license and therefore need to be downloaded on your own. Check the wiki for additional information https://cwiki.apache.org/CLOUDSTACK/building-with-maven.html. In order to build all the open source targets of &PRODUCT; do:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mvn clean install" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The resulting jar files will be in the target directory of the subdirectory of the compiled module." +msgstr "" + diff --git a/docs/pot/building-with-maven.pot b/docs/pot/building-with-maven.pot new file mode 100644 index 00000000000..aaa0a27b0a5 --- /dev/null +++ b/docs/pot/building-with-maven.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using Maven to Build &PRODUCT;" +msgstr "" + diff --git a/docs/pot/castor-with-cs.pot b/docs/pot/castor-with-cs.pot new file mode 100644 index 00000000000..1637a6b3482 --- /dev/null +++ b/docs/pot/castor-with-cs.pot @@ -0,0 +1,123 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using the CAStor Back-end Storage with &PRODUCT;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section describes how to use a CAStor cluster as the back-end storage system for a &PRODUCT; S3 front-end. The CAStor back-end storage for &PRODUCT; extends the existing storage classes and allows the storage configuration attribute to point to a CAStor cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This feature makes use of the &PRODUCT; server's local disk to spool files before writing them to CAStor when handling the PUT operations. However, a file must be successfully written into the CAStor cluster prior to the return of a success code to the S3 client to ensure that the transaction outcome is correctly reported." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The S3 multipart file upload is not supported in this release. You are prompted with proper error message if a multipart upload is attempted." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure CAStor:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install &PRODUCT; 4.0.0-incubating by following the instructions given in the INSTALL.txt file." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can use the S3 storage system in &PRODUCT; without setting up and installing the compute components." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Enable the S3 API by setting \"enable.s3.api = true\" in the Global parameter section in the UI and register a user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information, see S3 API in &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the cloud-bridge.properties file and modify the \"storage.root\" parameter." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set \"storage.root\" to the key word \"castor\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify a CAStor tenant domain to which content is written. If the domain is not specified, the CAStor default domain, specified by the \"cluster\" parameter in CAStor's node.cfg file, will be used." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify a list of node IP addresses, or set \"zeroconf\" and the cluster name. When using a static IP list with a large cluster, it is not necessary to include every node, only a few is required to initialize the client software." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "storage.root=castor domain=cloudstack 10.1.1.51 10.1.1.52 10.1.1.53" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In this example, the configuration file directs &PRODUCT; to write the S3 files to CAStor instead of to a file system, where the CAStor domain name is cloudstack, and the CAStor node IP addresses are those listed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) The last value is a port number on which to communicate with the CAStor cluster. If not specified, the default is 80." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "#Static IP list with optional port\n" +"storage.root=castor domain=cloudstack 10.1.1.51 10.1.1.52 10.1.1.53 80\n" +"#Zeroconf locator for cluster named \"castor.example.com\"\n" +"storage.root=castor domain=cloudstack zeroconf=castor.example.com" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create the tenant domain within the CAStor storage cluster. If you omit this step before attempting to store content, you will get HTTP 412 errors in the awsapi.log." +msgstr "" + diff --git a/docs/pot/change-console-proxy-ssl-certificate-domain.pot b/docs/pot/change-console-proxy-ssl-certificate-domain.pot new file mode 100644 index 00000000000..cd1d121d03f --- /dev/null +++ b/docs/pot/change-console-proxy-ssl-certificate-domain.pot @@ -0,0 +1,120 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changing the Console Proxy SSL Certificate and Domain" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the administrator prefers, it is possible for the URL of the customer's console session to show a domain other than realhostip.com. The administrator can customize the displayed domain by selecting a different domain and uploading a new SSL certificate and private key. The domain must run a DNS service that is capable of resolving queries for addresses of the form aaa-bbb-ccc-ddd.your.domain to an IPv4 IP address in the form aaa.bbb.ccc.ddd, for example, 202.8.44.1. To change the console proxy domain, SSL certificate, and private key:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up dynamic name resolution or populate all possible DNS names in your public IP range into your existing DNS server with the format aaa-bbb-ccc-ddd.company.com -> aaa.bbb.ccc.ddd." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Generate the private key and certificate signing request (CSR). When you are using openssl to generate private/public key pairs and CSRs, for the private key that you are going to paste into the &PRODUCT; UI, be sure to convert it into PKCS#8 format." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Generate a new 2048-bit private key" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "openssl genrsa -des3 -out yourprivate.key 2048" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Generate a new certificate CSR" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "openssl req -new -key yourprivate.key -out yourcertificate.csr" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Head to the website of your favorite trusted Certificate Authority, purchase an SSL certificate, and submit the CSR. You should receive a valid certificate in return" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Convert your private key format into PKCS#8 encrypted format." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "openssl pkcs8 -topk8 -in yourprivate.key -out yourprivate.pkcs8.encryped.key" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Convert your PKCS#8 encrypted private key into the PKCS#8 format that is compliant with &PRODUCT;" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "openssl pkcs8 -in yourprivate.pkcs8.encrypted.key -out yourprivate.pkcs8.key" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Update SSL Certificate screen of the &PRODUCT; UI, paste the following" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Certificate from step 1(c)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private key from step 1(e)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The desired new domain name; for example, company.com" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This stops all currently running console proxy VMs, then restarts them with the new certificate and key. Users might notice a brief interruption in console availability" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server will generate URLs of the form \"aaa-bbb-ccc-ddd.company.com\" after this change is made. New console requests will be served with the new DNS domain name, certificate, and key" +msgstr "" + diff --git a/docs/pot/change-database-config.pot b/docs/pot/change-database-config.pot new file mode 100644 index 00000000000..f4f6eb056da --- /dev/null +++ b/docs/pot/change-database-config.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changing the Database Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; Management Server stores database configuration information (e.g., hostname, port, credentials) in the file /etc/cloud/management/db.properties. To effect a change, edit this file on each Management Server, then restart the Management Server." +msgstr "" + diff --git a/docs/pot/change-database-password.pot b/docs/pot/change-database-password.pot new file mode 100644 index 00000000000..19445d56675 --- /dev/null +++ b/docs/pot/change-database-password.pot @@ -0,0 +1,126 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changing the Database Password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You may need to change the password for the MySQL account used by CloudStack. If so, you'll need to change the password in MySQL, and then add the encrypted password to /etc/cloud/management/db.properties." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before changing the password, you'll need to stop CloudStack's management server and the usage engine if you've deployed that component." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "\n" +"# service cloud-management stop\n" +"# service cloud-usage stop\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Next, you'll update the password for the CloudStack user on the MySQL server." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "\n" +"# mysql -u root -p\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "At the MySQL shell, you'll change the password and flush privileges:" +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "\n" +"update mysql.user set password=PASSWORD(\"newpassword123\") where User='cloud';\n" +"flush privileges;\n" +"quit;\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The next step is to encrypt the password and copy the encrypted password to CloudStack's database configuration (/etc/cloud/management/db.properties)." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "\n" +"# java -classpath /usr/share/java/cloud-jasypt-1.8.jar \\\n" +"org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI encrypt.sh \\ \n" +"input=\"newpassword123\" password=\"`cat /etc/cloud/management/key`\" \\\n" +"verbose=false \n" +"\n" +"" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "File encryption type" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Note that this is for the file encryption type. If you're using the web encryption type then you'll use password=\"management_server_secret_key\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now, you'll update /etc/cloud/management/db.properties with the new ciphertext. Open /etc/cloud/management/db.properties in a text editor, and update these parameters:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"db.cloud.password=ENC(encrypted_password_from_above) \n" +"db.usage.password=ENC(encrypted_password_from_above) \n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After copying the new password over, you can now start CloudStack (and the usage engine, if necessary)." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "\n" +" # service cloud-management start\n" +" # service cloud-usage start\n" +" " +msgstr "" + diff --git a/docs/pot/change-host-password.pot b/docs/pot/change-host-password.pot new file mode 100644 index 00000000000..8623e8579b1 --- /dev/null +++ b/docs/pot/change-host-password.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changing Host Password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The password for a XenServer Node, KVM Node, or vSphere Node may be changed in the database. Note that all Nodes in a Cluster must have the same password." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To change a Node's password:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Identify all hosts in the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Change the password on all hosts in the cluster. Now the password for the host and the password known to &PRODUCT; will not match. Operations on the cluster will fail until the two passwords match." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Get the list of host IDs for the host in the cluster where you are changing the password. You will need to access the database to determine these host IDs. For each hostname \"h\" (or vSphere cluster) that you are changing the password for, execute:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mysql> select id from cloud.host where name like '%h%';" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This should return a single ID. Record the set of such IDs for these hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Update the passwords for the host in the database. In this example, we change the passwords for hosts with IDs 5, 10, and 12 to \"password\"." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mysql> update cloud.host set password='password' where id=5 or id=10 or id=12;" +msgstr "" + diff --git a/docs/pot/change-network-offering-on-guest-network.pot b/docs/pot/change-network-offering-on-guest-network.pot new file mode 100644 index 00000000000..1c2778bd8b2 --- /dev/null +++ b/docs/pot/change-network-offering-on-guest-network.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changing the Network Offering on a Guest Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A user or administrator can change the network offering that is associated with an existing guest network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are changing from a network offering that uses the &PRODUCT; virtual router to one that uses external devices as network service providers, you must first stop all the VMs on the network. See Stopping and Starting VMs. Then return here and continue to the next step" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the network you want to modify AttachDiskButton.png: button to attach a volume ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Network Offering, choose the new network offering, then click Apply." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A prompt appears asking whether you want to keep the existing CIDR. This is to let you know that if you change the network offering, the CIDR will be affected. Choose No to proceed with the change." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Wait for the update to complete. Don’t try to restart VMs until after the network change is complete." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you stopped any VMs in step 2, restart them." +msgstr "" + diff --git a/docs/pot/change-to-behavior-of-list-commands.pot b/docs/pot/change-to-behavior-of-list-commands.pot new file mode 100644 index 00000000000..4ecb6440471 --- /dev/null +++ b/docs/pot/change-to-behavior-of-list-commands.pot @@ -0,0 +1,170 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Change to Behavior of List Commands" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There was a major change in how our List* API commands work in CloudStack 3.0 compared to 2.2.x. The rules below apply only for managed resources – those that belong to an account, domain, or project. They are irrelevant for the List* commands displaying unmanaged (system) resources, such as hosts, clusters, and external network resources." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When no parameters are passed in to the call, the caller sees only resources owned by the caller (even when the caller is the administrator). Previously, the administrator saw everyone else's resources by default." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When accountName and domainId are passed in:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The caller sees the resources dedicated to the account specified." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the call is executed by a regular user, the user is authorized to specify only the user's own account and domainId." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the caller is a domain administrator, CloudStack performs an authorization check to see whether the caller is permitted to view resources for the given account and domainId." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When projectId is passed in, only resources belonging to that project are listed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When domainId is passed in, the call returns only resources belonging to the domain specified. To see the resources of subdomains, use the parameter isRecursive=true. Again, the regular user can see only resources owned by that user, the root administrator can list anything, and a domain administrator is authorized to see only resources of the administrator's own domain and subdomains." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To see all resources the caller is authorized to see, except for Project resources, use the parameter listAll=true." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To see all Project resources the caller is authorized to see, use the parameter projectId=-1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There is one API command that doesn't fall under the rules above completely: the listTemplates command. This command has its own flags defining the list rules:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listTemplates Flag" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "featured" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Returns templates that have been marked as featured and public." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "self" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Returns templates that have been registered or created by the calling user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "selfexecutable" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Same as self, but only returns templates that are ready to be deployed with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "sharedexecutable" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ready templates that have been granted to the calling user by another user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "executable" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Templates that are owned by the calling user, or public templates, that can be used to deploy a new VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "community" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Returns templates that have been marked as public but not featured." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "all" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Returns all templates (only usable by admins)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; UI on a general view will display all resources that the logged-in user is authorized to see, except for project resources. To see the project resources, select the project view." +msgstr "" + diff --git a/docs/pot/changed-apicommands-4-0.pot b/docs/pot/changed-apicommands-4-0.pot new file mode 100644 index 00000000000..7f0024f7824 --- /dev/null +++ b/docs/pot/changed-apicommands-4-0.pot @@ -0,0 +1,575 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changed API Commands in 4.0.0-incubating" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "API Commands" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "copyTemplate" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "prepareTemplate" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "registerTemplate" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateTemplate" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createProject" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "activateProject" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "suspendProject" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateProject" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listProjectAccounts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createVolume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "migrateVolume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "attachVolume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "detachVolume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "uploadVolume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createSecurityGroup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "registerIso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "copyIso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateIso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createIpForwardingRule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listIpForwardingRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createLoadBalancerRule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateLoadBalancerRule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createSnapshot" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The commands in this list have a single new response parameter, and no other changes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameter: tags(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Many other commands also have the new tags(*) parameter in addition to other changes; those commands are listed separately." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rebootVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "attachIso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "detachIso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listLoadBalancerRuleInstances" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "resetPasswordForVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "changeServiceForVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "recoverVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "migrateVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deployVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "assignVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "restoreVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "stopVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "destroyVirtualMachine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The commands in this list have two new response parameters, and no other changes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: keypair, tags(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSecurityGroups" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listFirewallRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listPortForwardingRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSnapshots" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listIsos" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listProjects" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listTemplates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listLoadBalancerRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The commands in this list have the following new parameters, and no other changes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameter: tags (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listF5LoadBalancerNetworks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetscalerLoadBalancerNetworks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSrxFirewallNetworks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateNetwork" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The commands in this list have three new response parameters, and no other changes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: canusefordeploy, vpcid, tags(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createZone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateZone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameter: localstorageenabled (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameter: localstorageenabled" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listZones" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rebootRouter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "changeServiceForRouter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startRouter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "destroyRouter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "stopRouter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: vpcid, nic(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateAccount" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "disableAccount" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listAccounts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "markDefaultZoneForAccount" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "enableAccount" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: vpcavailable, vpclimit, vpctotal" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listRouters" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: forvpc (optional), vpcid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetworkOfferings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: forvpc (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: forvpc" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVolumes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: details (optional), tags (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: tags(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addTrafficMonitor" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: excludezones (optional), includezones (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createNetwork" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: vpcid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listPublicIpAddresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: tags (optional), vpcid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: vpcid, tags(*)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetworks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: canusefordeploy (optional), forvpc (optional), tags (optional), vpcid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "restartNetwork" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "enableStaticNat" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameter: networkid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createDiskOffering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameter: storagetype (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameter: storagetype" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listDiskOfferings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateDiskOffering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createFirewallRule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Changed request parameters: ipaddressid (old version - optional, new version - required)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVirtualMachines" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New request parameters: isoid (optional), tags (optional), templateid (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateStorageNetworkIpRange" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "New response parameters: id, endip, gateway, netmask, networkid, podid, startip, vlan, zoneid" +msgstr "" + diff --git a/docs/pot/changing-root-password.pot b/docs/pot/changing-root-password.pot new file mode 100644 index 00000000000..996cbc2fe08 --- /dev/null +++ b/docs/pot/changing-root-password.pot @@ -0,0 +1,80 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changing the Root Password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "During installation and ongoing cloud administration, you will need to log in to the UI as the root administrator. The root administrator account manages the &PRODUCT; deployment, including physical infrastructure. The root administrator can modify configuration settings to change basic functionality, create or delete user accounts, and take many actions that should be performed only by an authorized person. When first installing &PRODUCT;, be sure to change the default password to a new, unique value." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Open your favorite Web browser and go to this URL. Substitute the IP address of your own Management Server:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://<management-server-ip-address>:8080/client" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the UI using the current root user ID and password. The default is admin, password." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Accounts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the admin account name." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click View Users." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the admin user name." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Change Password button. change-password.png: button to change a user's password " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Type the new password, and click OK." +msgstr "" + diff --git a/docs/pot/changing-secondary-storage-ip.pot b/docs/pot/changing-secondary-storage-ip.pot new file mode 100644 index 00000000000..c02be1a977d --- /dev/null +++ b/docs/pot/changing-secondary-storage-ip.pot @@ -0,0 +1,62 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Making API Requests" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can change the secondary storage IP address after it has been provisioned. After changing the IP address on the host, log in to your management server and execute the following commands. Replace HOSTID below with your own value, and change the URL to use the appropriate IP address and path for your server:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" # mysql -p\n" +" mysql> use cloud;\n" +" mysql> select id from host where type = 'SecondaryStorage';\n" +" mysql> update host_details set value = 'nfs://192.168.160.20/export/mike-ss1'\n" +" where host_id = HOSTID and name = 'orig.url';\n" +" mysql> update host set name = 'nfs://192.168.160.20/export/mike-ss1' where type\n" +" = 'SecondaryStorage' and id = #;\n" +" mysql> update host set url = 'nfs://192.168.160.20/export/mike-ss1' where type\n" +" = 'SecondaryStorage' and id = #;\n" +" mysql> update host set guid = 'nfs://192.168.160.20/export/mike-ss1' where type\n" +" = 'SecondaryStorage' and id = #;\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When copying and pasting a command, be sure the command has pasted as a single line before executing. Some document viewers may introduce unwanted line breaks in copied text." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Then log in to the cloud console UI and stop and start (not reboot) the Secondary Storage VM for that Zone." +msgstr "" + diff --git a/docs/pot/changing-secondary-storage-servers.pot b/docs/pot/changing-secondary-storage-servers.pot new file mode 100644 index 00000000000..2a17400909a --- /dev/null +++ b/docs/pot/changing-secondary-storage-servers.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changing Secondary Storage Servers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can change the secondary storage NFS mount. Perform the following steps to do so:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stop all running Management Servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Wait 30 minutes. This allows any writes to secondary storage to complete." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy all files from the old secondary storage mount to the new." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use the procedure above to change the IP address for secondary storage if required." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start the Management Server." +msgstr "" + diff --git a/docs/pot/changing-service-offering-for-vm.pot b/docs/pot/changing-service-offering-for-vm.pot new file mode 100644 index 00000000000..cc0232f39cb --- /dev/null +++ b/docs/pot/changing-service-offering-for-vm.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changing the Service Offering for a VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To upgrade or downgrade the level of compute resources available to a virtual machine, you can change the VM's compute offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Instances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the VM that you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Stop button to stop the VM StopButton.png: button to stop a VM " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Change Service button ChangeServiceButton.png: button to change the service of a VM . The Change service dialog box is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the offering you want." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + diff --git a/docs/pot/changing-vm-name-os-group.pot b/docs/pot/changing-vm-name-os-group.pot new file mode 100644 index 00000000000..cbf2c279e52 --- /dev/null +++ b/docs/pot/changing-vm-name-os-group.pot @@ -0,0 +1,90 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changing the VM Name, OS, or Group" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After a VM is created, you can modify the display name, operating system, and the group it belongs to." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To access a VM through the &PRODUCT; UI:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Instances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the VM that you want to modify." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Stop button to stop the VM StopButton.png: button to stop a VM " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Edit StopButton.png: button to edit the properties of a VM ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make the desired changes to the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Display name: Enter a new display name if you want to change the name of the VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OS Type: Select the desired operating system." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Group: Enter the group name for the VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Apply." +msgstr "" + diff --git a/docs/pot/choosing-a-deployment-architecture.pot b/docs/pot/choosing-a-deployment-architecture.pot new file mode 100644 index 00000000000..a42b765b542 --- /dev/null +++ b/docs/pot/choosing-a-deployment-architecture.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Choosing a Deployment Architecture" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The architecture used in a deployment will vary depending on the size and purpose of the deployment. This section contains examples of deployment architecture, including a small-scale deployment useful for test and trial deployments and a fully-redundant large-scale setup for production deployments." +msgstr "" + diff --git a/docs/pot/cisco3750-hardware.pot b/docs/pot/cisco3750-hardware.pot new file mode 100644 index 00000000000..f819da49919 --- /dev/null +++ b/docs/pot/cisco3750-hardware.pot @@ -0,0 +1,76 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Cisco 3750" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following steps show how a Cisco 3750 is configured for zone-level layer-3 switching. These steps assume VLAN 201 is used to route untagged private IPs for pod 1, and pod 1’s layer-2 switch is connected to GigabitEthernet1/0/1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Setting VTP mode to transparent allows us to utilize VLAN IDs above 1000. Since we only use VLANs up to 999, vtp transparent mode is not strictly required." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vtp mode transparent\n" +"vlan 200-999\n" +"exit" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure GigabitEthernet1/0/1." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "interface GigabitEthernet1/0/1\n" +"switchport trunk encapsulation dot1q\n" +"switchport mode trunk\n" +"switchport trunk native vlan 201\n" +"exit" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The statements configure GigabitEthernet1/0/1 as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN 201 is the native untagged VLAN for port GigabitEthernet1/0/1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Cisco passes all VLANs by default. As a result, all VLANs (300-999) are passed to all the pod-level layer-2 switches." +msgstr "" + diff --git a/docs/pot/cisco3750-layer2.pot b/docs/pot/cisco3750-layer2.pot new file mode 100644 index 00000000000..ad13cc66ea8 --- /dev/null +++ b/docs/pot/cisco3750-layer2.pot @@ -0,0 +1,66 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Cisco 3750" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following steps show how a Cisco 3750 is configured for pod-level layer-2 switching." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Setting VTP mode to transparent allows us to utilize VLAN IDs above 1000. Since we only use VLANs up to 999, vtp transparent mode is not strictly required." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vtp mode transparent\n" +"vlan 300-999\n" +"exit" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure all ports to dot1q and set 201 as the native VLAN." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "interface range GigabitEthernet 1/0/1-24\n" +"switchport trunk encapsulation dot1q\n" +"switchport mode trunk\n" +"switchport trunk native vlan 201\n" +"exit" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "By default, Cisco passes all VLANs. Cisco switches complain of the native VLAN IDs are different when 2 ports are connected together. That’s why you must specify VLAN 201 as the native VLAN on the layer-2 switch." +msgstr "" + diff --git a/docs/pot/citrix-xenserver-installation.pot b/docs/pot/citrix-xenserver-installation.pot new file mode 100644 index 00000000000..1a54c152f73 --- /dev/null +++ b/docs/pot/citrix-xenserver-installation.pot @@ -0,0 +1,1195 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Citrix XenServer Installation for &PRODUCT;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you want to use the Citrix XenServer hypervisor to run guest virtual machines, install XenServer 6.0 or XenServer 6.0.2 on the host(s) in your cloud. For an initial installation, follow the steps below. If you have previously installed XenServer and want to upgrade to another version, see ." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "System Requirements for XenServer Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The host must be certified as compatible with one of the following. See the Citrix Hardware Compatibility Guide: http://hcl.xensource.com" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer 5.6 SP2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer 6.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer 6.0.2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You must re-install Citrix XenServer if you are going to re-use a host from a previous install." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Must support HVM (Intel-VT or AMD-V enabled)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure all the hotfixes provided by the hypervisor vendor are applied. Track the release of hypervisor patches through your hypervisor vendor’s support channel, and apply patches as soon as possible after they are released. &PRODUCT; will not track or notify you of required hypervisor patches. It is essential that your hosts are completely up to date with the provided hypervisor patches. The hypervisor vendor is likely to refuse to support any system that is not up to date with patches." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All hosts within a cluster must be homogenous. The CPUs must be of the same type, count, and feature flags." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Must support HVM (Intel-VT or AMD-V enabled in BIOS)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "64-bit x86 CPU (more cores results in better performance)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hardware virtualization support required" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4 GB of memory" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "36 GB of local disk" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "At least 1 NIC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Statically allocated IP Address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you deploy &PRODUCT;, the hypervisor host must not have any VMs already running" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The lack of up-do-date hotfixes can lead to data corruption and lost VMs." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "XenServer Installation Steps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "From https://www.citrix.com/English/ss/downloads/, download the appropriate version of XenServer for your &PRODUCT; version (see ). Install it using the Citrix XenServer Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After installation, perform the following configuration steps, which are described in the next few sections:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Required" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Optional" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up SR if not using NFS, iSCSI, or local disk; see " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configure XenServer dom0 Memory" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure the XenServer dom0 settings to allocate more memory to dom0. This can enable XenServer to handle larger numbers of virtual machines. We recommend 2940 MB of RAM for XenServer dom0. For instructions on how to do this, see http://support.citrix.com/article/CTX126531. The article refers to XenServer 5.6, but the same information applies to XenServer 6.0." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Username and Password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All XenServers in a cluster must have the same username and password as configured in &PRODUCT;." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Time Synchronization" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The host must be set to use NTP. All hosts in a pod must have the same time." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install NTP." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# yum install ntp" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the NTP configuration file to point to your NTP server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# vi /etc/ntp.conf" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add one or more server lines in this file with the names of the NTP servers you want to use. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "server 0.xenserver.pool.ntp.org\n" +"server 1.xenserver.pool.ntp.org\n" +"server 2.xenserver.pool.ntp.org\n" +"server 3.xenserver.pool.ntp.org\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the NTP client." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service ntpd restart" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure NTP will start again upon reboot." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# chkconfig ntpd on" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Licensing" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Citrix XenServer Free version provides 30 days usage without a license. Following the 30 day trial, XenServer requires a free activation and license. You can choose to install a license now or skip this step. If you skip this step, you will need to install a license when you activate and license the XenServer." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Getting and Deploying a License" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you choose to install a license now you will need to use the XenCenter to activate and get a license." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In XenCenter, click Tools > License manager." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select your XenServer and select Activate Free XenServer." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Request a license." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can install the license with XenCenter or using the xe command line tool." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Install &PRODUCT; XenServer Support Package (CSP)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To enable security groups, elastic load balancing, and elastic IP on XenServer, download and install the &PRODUCT; XenServer Support Package (CSP). After installing XenServer, perform the following additional steps on each XenServer host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Download the CSP software onto the XenServer host from one of the following links:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For XenServer 6.0.2:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "http://download.cloud.com/releases/3.0.1/XS-6.0.2/xenserver-cloud-supp.tgz" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For XenServer 5.6 SP2:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "http://download.cloud.com/releases/2.2.0/xenserver-cloud-supp.tgz" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For XenServer 6.0:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "http://download.cloud.com/releases/3.0/xenserver-cloud-supp.tgz" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Extract the file:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# tar xf xenserver-cloud-supp.tgz" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following script:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe-install-supplemental-pack xenserver-cloud-supp.iso" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the XenServer host is part of a zone that uses basic networking, disable Open vSwitch (OVS):" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe-switch-network-backend bridge" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the host machine when prompted." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The XenServer host is now ready to be added to &PRODUCT;." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Primary Storage Setup for XenServer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; natively supports NFS, iSCSI and local storage. If you are using one of these storage types, there is no need to create the XenServer Storage Repository (\"SR\")." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If, however, you would like to use storage connected via some other technology, such as FiberChannel, you must set up the SR yourself. To do so, perform the following steps. If you have your hosts in a XenServer pool, perform the steps on the master node. If you are working with a single XenServer which is not part of a cluster, perform the steps on that XenServer." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Connect FiberChannel cable to all hosts in the cluster and to the FiberChannel storage host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Rescan the SCSI bus. Either use the following command or use XenCenter to perform an HBA rescan." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# scsi-rescan" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat step 2 on every host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Check to be sure you see the new SCSI disk." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# ls /dev/disk/by-id/scsi-360a98000503365344e6f6177615a516b -l" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The output should look like this, although the specific file name will be different (scsi-<scsiID>):" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "lrwxrwxrwx 1 root root 9 Mar 16 13:47\n" +"/dev/disk/by-id/scsi-360a98000503365344e6f6177615a516b -> ../../sdc\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat step 4 on every host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the storage server, run this command to get a unique ID for the new SR." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# uuidgen" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The output should look like this, although the specific ID will be different:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "e6849e96-86c3-4f2c-8fcc-350cc711be3d" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create the FiberChannel SR. In name-label, use the unique ID you just generated." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# xe sr-create type=lvmohba shared=true\n" +"device-config:SCSIid=360a98000503365344e6f6177615a516b\n" +"name-label=\"e6849e96-86c3-4f2c-8fcc-350cc711be3d\"\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This command returns a unique ID for the SR, like the following example (your ID will be different):" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "7a143820-e893-6c6a-236e-472da6ee66bf" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To create a human-readable description for the SR, use the following command. In uuid, use the SR ID returned by the previous command. In name-description, set whatever friendly text you prefer." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe sr-param-set uuid=7a143820-e893-6c6a-236e-472da6ee66bf name-description=\"Fiber Channel storage repository\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make note of the values you will need when you add this storage to &PRODUCT; later (see ). In the Add Primary Storage dialog, in Protocol, you will choose PreSetup. In SR Name-Label, you will enter the name-label you set earlier (in this example, e6849e96-86c3-4f2c-8fcc-350cc711be3d)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) If you want to enable multipath I/O on a FiberChannel SAN, refer to the documentation provided by the SAN vendor." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "iSCSI Multipath Setup for XenServer (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When setting up the storage repository on a Citrix XenServer, you can enable multipath I/O, which uses redundant physical components to provide greater reliability in the connection between the server and the SAN. To enable multipathing, use a SAN solution that is supported for Citrix servers and follow the procedures in Citrix documentation. The following links provide a starting point:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "http://support.citrix.com/article/CTX118791" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "http://support.citrix.com/article/CTX125403" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can also ask your SAN vendor for advice about setting up your Citrix repository for multipathing." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make note of the values you will need when you add this storage to the &PRODUCT; later (see ). In the Add Primary Storage dialog, in Protocol, you will choose PreSetup. In SR Name-Label, you will enter the same name used to create the SR." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you encounter difficulty, address the support team for the SAN provided by your vendor. If they are not able to solve your issue, see Contacting Support." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Physical Networking Setup for XenServer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Once XenServer has been installed, you may need to do some additional network configuration. At this point in the installation, you should have a plan for what NICs the host will have and what traffic each NIC will carry. The NICs should be cabled as necessary to implement your plan." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you plan on using NIC bonding, the NICs on all hosts in the cluster must be cabled exactly the same. For example, if eth0 is in the private bond on one host in a cluster, then eth0 must be in the private bond on all hosts in the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IP address assigned for the management network interface must be static. It can be set on the host itself or obtained via static DHCP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; configures network traffic of various types to use different NICs or bonds on the XenServer host. You can control this process and provide input to the Management Server through the use of XenServer network name labels. The name labels are placed on physical interfaces or bonds and configured in &PRODUCT;. In some simple cases the name labels are not required." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configuring Public Network with a Dedicated NIC for XenServer (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; supports the use of a second NIC (or bonded pair of NICs, described in ) for the public network. If bonding is not used, the public network can be on any NIC and can be on different NICs on the hosts in a cluster. For example, the public network can be on eth0 on node A and eth1 on node B. However, the XenServer name-label for the public network must be identical across all hosts. The following examples set the network label to \"cloud-public\". After the management server is installed and running you must configure it with the name of the chosen network label (e.g. \"cloud-public\"); this is discussed in ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are using two NICs bonded together to create a public network, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are using a single dedicated NIC to provide public network access, follow this procedure on each new host that is added to &PRODUCT; before adding the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run xe network-list and find the public network. This is usually attached to the NIC that is public. Once you find the network make note of its UUID. Call this <UUID-Public>." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following command." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe network-param-set name-label=cloud-public uuid=<UUID-Public>" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configuring Multiple Guest Networks for XenServer (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; supports the use of multiple guest networks with the XenServer hypervisor. Each network is assigned a name-label in XenServer. For example, you might have two networks with the labels \"cloud-guest\" and \"cloud-guest2\". After the management server is installed and running, you must add the networks and use these labels so that &PRODUCT; is aware of the networks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Follow this procedure on each new host before adding the host to &PRODUCT;:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run xe network-list and find one of the guest networks. Once you find the network make note of its UUID. Call this <UUID-Guest>." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following command, substituting your own name-label and uuid values." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe network-param-set name-label=<cloud-guestN> uuid=<UUID-Guest>" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat these steps for each additional guest network, using a different name-label and uuid each time." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Separate Storage Network for XenServer (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can optionally set up a separate storage network. This should be done first on the host, before implementing the bonding steps below. This can be done using one or two available NICs. With two NICs bonding may be done as above. It is the administrator's responsibility to set up a separate storage network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Give the storage network a different name-label than what will be given for other networks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the separate storage network to work correctly, it must be the only interface that can ping the primary storage device's IP address. For example, if eth0 is the management network NIC, ping -I eth0 <primary storage device IP> must fail. In all deployments, secondary storage devices must be pingable from the management network NIC or bond. If a secondary storage device has been placed on the storage network, it must also be pingable via the storage network NIC or bond on the hosts as well." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can set up two separate storage networks as well. For example, if you intend to implement iSCSI multipath, dedicate two non-bonded NICs to multipath. Each of the two networks needs a unique name-label." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If no bonding is done, the administrator must set up and name-label the separate storage network on all hosts (masters and slaves)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Here is an example to set up eth5 to access a storage network on 172.16.0.0/24." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# xe pif-list host-name-label='hostname' device=eth5\n" +"uuid(RO): ab0d3dd4-5744-8fae-9693-a022c7a3471d\n" +"device ( RO): eth5\n" +"#xe pif-reconfigure-ip DNS=172.16.3.3 gateway=172.16.0.1 IP=172.16.0.55 mode=static netmask=255.255.255.0 uuid=ab0d3dd4-5744-8fae-9693-a022c7a3471d" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "NIC Bonding for XenServer (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer supports Source Level Balancing (SLB) NIC bonding. Two NICs can be bonded together to carry public, private, and guest traffic, or some combination of these. Separate storage networks are also possible. Here are some example supported configurations:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "2 NICs on private, 2 NICs on public, 2 NICs on storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "2 NICs on private, 1 NIC on public, storage uses management network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "2 NICs on private, 2 NICs on public, storage uses management network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "1 NIC for private, public, and storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All NIC bonding is optional." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer expects all nodes in a cluster will have the same network cabling and same bonds implemented. In an installation the master will be the first host that was added to the cluster and the slave hosts will be all subsequent hosts added to the cluster. The bonds present on the master set the expectation for hosts added to the cluster later. The procedure to set up bonds on the master and slaves are different, and are described below. There are several important implications of this:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You must set bonds on the first host added to a cluster. Then you must use xe commands as below to establish the same bonds in the second and subsequent hosts added to a cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Slave hosts in a cluster must be cabled exactly the same as the master. For example, if eth0 is in the private bond on the master, it must be in the management network for added slave hosts." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Management Network Bonding" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The administrator must bond the management network NICs prior to adding the host to &PRODUCT;." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Creating a Private Bond on the First Host in the Cluster" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use the following steps to create a bond in XenServer. These steps should be run on only the first host in a cluster. This example creates the cloud-private network with two physical NICs (eth0 and eth1) bonded into it." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Find the physical NICs that you want to bond together." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe pif-list host-name-label='hostname' device=eth0\n" +"# xe pif-list host-name-label='hostname' device=eth1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These command shows the eth0 and eth1 NICs and their UUIDs. Substitute the ethX devices of your choice. Call the UUID's returned by the above command slave1-UUID and slave2-UUID." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a new network for the bond. For example, a new network with name \"cloud-private\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This label is important. &PRODUCT; looks for a network by a name you configure. You must use the same name-label for all hosts in the cloud for the management network." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe network-create name-label=cloud-private\n" +"# xe bond-create network-uuid=[uuid of cloud-private created above]\n" +"pif-uuids=[slave1-uuid],[slave2-uuid]" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now you have a bonded pair that can be recognized by &PRODUCT; as the management network." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Public Network Bonding" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Bonding can be implemented on a separate, public network. The administrator is responsible for creating a bond for the public network if that network will be bonded and will be separate from the management network." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Creating a Public Bond on the First Host in the Cluster" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These steps should be run on only the first host in a cluster. This example creates the cloud-public network with two physical NICs (eth2 and eth3) bonded into it." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "#xe pif-list host-name-label='hostname' device=eth2\n" +"# xe pif-list host-name-label='hostname' device=eth3" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These command shows the eth2 and eth3 NICs and their UUIDs. Substitute the ethX devices of your choice. Call the UUID's returned by the above command slave1-UUID and slave2-UUID." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a new network for the bond. For example, a new network with name \"cloud-public\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This label is important. &PRODUCT; looks for a network by a name you configure. You must use the same name-label for all hosts in the cloud for the public network." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe network-create name-label=cloud-public\n" +"# xe bond-create network-uuid=[uuid of cloud-public created above]\n" +"pif-uuids=[slave1-uuid],[slave2-uuid]" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now you have a bonded pair that can be recognized by &PRODUCT; as the public network." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Adding More Hosts to the Cluster" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "With the bonds (if any) established on the master, you should add additional, slave hosts. Run the following command for all additional hosts to be added to the cluster. This will cause the host to join the master in a single XenServer pool." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe pool-join master-address=[master IP] master-username=root\n" +"master-password=[your password]" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Complete the Bonding Setup Across the Cluster" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "With all hosts added to the pool, run the cloud-setup-bond script. This script will complete the configuration and set up of the bonds across all hosts in the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy the script from the Management Server in /usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/cloud-setup-bonding.sh to the master host and ensure it is executable." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the script:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# ./cloud-setup-bonding.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now the bonds are set up and configured properly across the cluster." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Upgrading XenServer Versions" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section tells how to upgrade XenServer software on &PRODUCT; hosts. The actual upgrade is described in XenServer documentation, but there are some additional steps you must perform before and after the upgrade." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure the hardware is certified compatible with the new version of XenServer." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To upgrade XenServer:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Upgrade the database. On the Management Server node:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Back up the database:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# mysqldump --user=root --databases cloud > cloud.backup.sql\n" +"# mysqldump --user=root --databases cloud_usage > cloud_usage.backup.sql" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You might need to change the OS type settings for VMs running on the upgraded hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you upgraded from XenServer 5.6 GA to XenServer 5.6 SP2, change any VMs that have the OS type CentOS 5.5 (32-bit), Oracle Enterprise Linux 5.5 (32-bit), or Red Hat Enterprise Linux 5.5 (32-bit) to Other Linux (32-bit). Change any VMs that have the 64-bit versions of these same OS types to Other Linux (64-bit)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you upgraded from XenServer 5.6 SP2 to XenServer 6.0.2, change any VMs that have the OS type CentOS 5.6 (32-bit), CentOS 5.7 (32-bit), Oracle Enterprise Linux 5.6 (32-bit), Oracle Enterprise Linux 5.7 (32-bit), Red Hat Enterprise Linux 5.6 (32-bit) , or Red Hat Enterprise Linux 5.7 (32-bit) to Other Linux (32-bit). Change any VMs that have the 64-bit versions of these same OS types to Other Linux (64-bit)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you upgraded from XenServer 5.6 to XenServer 6.0.2, do all of the above." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Server and Usage Server. You only need to do this once for all clusters." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management start\n" +"# service cloud-usage start" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disconnect the XenServer cluster from &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as root." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Navigate to the XenServer cluster, and click Actions – Unmanage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Watch the cluster status until it shows Unmanaged." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to one of the hosts in the cluster, and run this command to clean up the VLAN:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# . /opt/xensource/bin/cloud-clean-vlan.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Still logged in to the host, run the upgrade preparation script:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# /opt/xensource/bin/cloud-prepare-upgrade.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Troubleshooting: If you see the error \"can't eject CD,\" log in to the VM and umount the CD, then run the script again." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Upgrade the XenServer software on all hosts in the cluster. Upgrade the master first." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Live migrate all VMs on this host to other hosts. See the instructions for live migration in the Administrator's Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Troubleshooting: You might see the following error when you migrate a VM:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "[root@xenserver-qa-2-49-4 ~]# xe vm-migrate live=true host=xenserver-qa-2-49-5 vm=i-2-8-VM\n" +"You attempted an operation on a VM which requires PV drivers to be installed but the drivers were not detected.\n" +"vm: b6cf79c8-02ee-050b-922f-49583d9f1a14 (i-2-8-VM)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To solve this issue, run the following:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# /opt/xensource/bin/make_migratable.sh b6cf79c8-02ee-050b-922f-49583d9f1a14" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reboot the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Upgrade to the newer version of XenServer. Use the steps in XenServer documentation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After the upgrade is complete, copy the following files from the management server to this host, in the directory locations shown below:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy this Management Server file..." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "...to this location on the XenServer host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/xenserver60/NFSSR.py" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/sm/NFSSR.py" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/setupxenserver.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/setupxenserver.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/make_migratable.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/make_migratable.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/cloud-clean-vlan.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "/opt/xensource/bin/cloud-clean-vlan.sh" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# /opt/xensource/bin/setupxenserver.sh" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Troubleshooting: If you see the following error message, you can safely ignore it." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mv: cannot stat `/etc/cron.daily/logrotate': No such file or directory" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Plug in the storage repositories (physical block devices) to the XenServer host:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# for pbd in `xe pbd-list currently-attached=false| grep ^uuid | awk '{print $NF}'`; do xe pbd-plug uuid=$pbd ; done" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Note: If you add a host to this XenServer pool, you need to migrate all VMs on this host to other hosts, and eject this host from XenServer pool." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat these steps to upgrade every host in the cluster to the same version of XenServer." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following command on one host in the XenServer cluster to clean up the host tags:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# for host in $(xe host-list | grep ^uuid | awk '{print $NF}') ; do xe host-param-clear uuid=$host param-name=tags; done;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When copying and pasting a command, be sure the command has pasted as a single line before executing. Some document viewers may introduce unwanted line breaks in copied text." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reconnect the XenServer cluster to &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Navigate to the XenServer cluster, and click Actions – Manage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Watch the status to see that all the hosts come up." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After all hosts are up, run the following on one host in the cluster:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# /opt/xensource/bin/cloud-clean-vlan.sh" +msgstr "" + diff --git a/docs/pot/cloud-infrastructure-concepts.pot b/docs/pot/cloud-infrastructure-concepts.pot new file mode 100644 index 00000000000..8fdb0f850de --- /dev/null +++ b/docs/pot/cloud-infrastructure-concepts.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Cloud Infrastructure Concepts" +msgstr "" + diff --git a/docs/pot/cloud-infrastructure-overview.pot b/docs/pot/cloud-infrastructure-overview.pot new file mode 100644 index 00000000000..61f33864915 --- /dev/null +++ b/docs/pot/cloud-infrastructure-overview.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Cloud Infrastructure Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server manages one or more zones (typically, datacenters) containing host computers where guest virtual machines will run. The cloud infrastructure is organized as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zone: Typically, a zone is equivalent to a single datacenter. A zone consists of one or more pods and secondary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Pod: A pod is usually one rack of hardware that includes a layer-2 switch and one or more clusters." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Cluster: A cluster consists of one or more hosts and primary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host: A single compute node within a cluster. The hosts are where the actual cloud services run in the form of guest virtual machines." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Primary storage is associated with a cluster, and it stores the disk volumes for all the VMs running on hosts in that cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Secondary storage is associated with a zone, and it stores templates, ISO images, and disk volume snapshots." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "More Information" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information, see documentation on cloud infrastructure concepts." +msgstr "" + diff --git a/docs/pot/cloudstack-api.pot b/docs/pot/cloudstack-api.pot new file mode 100644 index 00000000000..762ea4a4e0b --- /dev/null +++ b/docs/pot/cloudstack-api.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "&PRODUCT; API" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; API is a low level API that has been used to implement the &PRODUCT; web UIs. It is also a good basis for implementing other popular APIs such as EC2/S3 and emerging DMTF standards." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Many &PRODUCT; API calls are asynchronous. These will return a Job ID immediately when called. This Job ID can be used to query the status of the job later. Also, status calls on impacted resources will provide some indication of their state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The API has a REST-like query basis and returns results in XML or JSON." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "See the Developer’s Guide and the API Reference." +msgstr "" + diff --git a/docs/pot/cloudstack.pot b/docs/pot/cloudstack.pot new file mode 100644 index 00000000000..2ebfd4eaa4b --- /dev/null +++ b/docs/pot/cloudstack.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "&PRODUCT; Complete Documentation" +msgstr "" + +#. Tag: productname +#, no-c-format +msgid "Apache CloudStack" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Complete documentation for &PRODUCT;." +msgstr "" + diff --git a/docs/pot/cluster-add.pot b/docs/pot/cluster-add.pot new file mode 100644 index 00000000000..f7601417591 --- /dev/null +++ b/docs/pot/cluster-add.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Cluster" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You need to tell &PRODUCT; about the hosts that it will manage. Hosts exist inside clusters, so before you begin adding hosts to the cloud, you must add at least one cluster." +msgstr "" + diff --git a/docs/pot/compatibility-matrix.pot b/docs/pot/compatibility-matrix.pot new file mode 100644 index 00000000000..0b03bdddde0 --- /dev/null +++ b/docs/pot/compatibility-matrix.pot @@ -0,0 +1,115 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Compatibility Matrix" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack 2.1.x" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack 2.2.x" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack 3.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack 3.0.1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack 3.0.2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack 3.0.3" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer 5.6" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Yes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "No" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer 5.6 FP1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer 5.6 SP2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer 6.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer 6.0.2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer 6.1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM (RHEL 6.0 or 6.1)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMware (vSphere and vCenter, both version 4.1)" +msgstr "" + diff --git a/docs/pot/compute-disk-service-offerings.pot b/docs/pot/compute-disk-service-offerings.pot new file mode 100644 index 00000000000..93a78d389d2 --- /dev/null +++ b/docs/pot/compute-disk-service-offerings.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Compute and Disk Service Offerings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A service offering is a set of virtual hardware features such as CPU core count and speed, memory, and disk size. The &PRODUCT; administrator can set up various offerings, and then end users choose from the available offerings when they create a new VM. A service offering includes the following elements:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CPU, memory, and network resource guarantees" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How resources are metered" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How the resource usage is charged" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How often the charges are generated" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example, one service offering might allow users to create a virtual machine instance that is equivalent to a 1 GHz Intel® Coreâ„¢ 2 CPU, with 1 GB memory at $0.20/hour, with network traffic metered at $0.10/GB. Based on the user’s selected offering, &PRODUCT; emits usage records that can be integrated with billing systems. &PRODUCT; separates service offerings into compute offerings and disk offerings. The computing service offering specifies:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest CPU" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest RAM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest Networking type (virtual or direct)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tags on the root disk" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The disk offering specifies:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disk size (optional). An offering without a disk size will allow users to pick their own" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tags on the data disk" +msgstr "" + diff --git a/docs/pot/concepts.pot b/docs/pot/concepts.pot new file mode 100644 index 00000000000..ed6f2ab0c78 --- /dev/null +++ b/docs/pot/concepts.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Concepts" +msgstr "" + diff --git a/docs/pot/configure-acl.pot b/docs/pot/configure-acl.pot new file mode 100644 index 00000000000..64e5c96acf0 --- /dev/null +++ b/docs/pot/configure-acl.pot @@ -0,0 +1,165 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configuring Access Control List" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Define Network Access Control List (ACL) on the VPC virtual router to control incoming (ingress) and outgoing (egress) traffic between the VPC tiers, and the tiers and Internet. By default, all incoming and outgoing traffic to the guest networks is blocked. To open the ports, you must create a new network ACL. The network ACLs can be created for the tiers only if the NetworkACL service is supported." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Settings icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following options are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network ACLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select Network ACLs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Network ACLs page is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Network ACLs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To add an ACL rule, fill in the following fields to specify what kind of network traffic is allowed in this tier." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CIDR: The CIDR acts as the Source CIDR for the Ingress rules, and Destination CIDR for the Egress rules. To accept traffic only from or to the IP addresses within a particular address block, enter a CIDR or a comma-separated list of CIDRs. The CIDR is the base IP address of the incoming traffic. For example, 192.168.0.0/22. To allow all CIDRs, set to 0.0.0.0/0." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol: The networking protocol that sources use to send traffic to the tier. The TCP and UDP protocols are typically used for data exchange and end-user communications. The ICMP protocol is typically used to send error messages or network monitoring data." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start Port, End Port (TCP, UDP only): A range of listening ports that are the destination for the incoming traffic. If you are opening a single port, use the same number in both fields." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select Tier: Select the tier for which you want to add this ACL rule." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ICMP Type, ICMP Code (ICMP only): The type of message and error code that will be sent." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Traffic Type: Select the traffic type you want to apply." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Egress: To add an egress rule, select Egress from the Traffic type drop-down box and click Add. This specifies what type of traffic is allowed to be sent out of VM instances in this tier. If no egress rules are specified, all traffic from the tier is allowed out at the VPC virtual router. Once egress rules are specified, only the traffic specified in egress rules and the responses to any traffic that has been allowed in through an ingress rule are allowed out. No egress rule is required for the VMs in a tier to communicate with each other." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ingress: To add an ingress rule, select Ingress from the Traffic type drop-down box and click Add. This specifies what network traffic is allowed into the VM instances in this tier. If no ingress rules are specified, then no traffic will be allowed in, except for responses to any traffic that has been allowed out through an egress rule." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "By default, all incoming and outgoing traffic to the guest networks is blocked. To open the ports, create a new network ACL." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add. The ACL rule is added." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To view the list of ACL rules you have added, click the desired tier from the Network ACLs page, then select the Network ACL tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can edit the tags assigned to the ACL rules and delete the ACL rules you have created. Click the appropriate button in the Actions column." +msgstr "" + diff --git a/docs/pot/configure-guest-traffic-in-advanced-zone.pot b/docs/pot/configure-guest-traffic-in-advanced-zone.pot new file mode 100644 index 00000000000..eedfdcb1a92 --- /dev/null +++ b/docs/pot/configure-guest-traffic-in-advanced-zone.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configure Guest Traffic in an Advanced Zone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These steps assume you have already logged in to the &PRODUCT; UI. To configure the base guest network:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Infrastructure. On Zones, click View More, then click the zone to which you want to add a network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Network tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add guest network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Add guest network window is displayed:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the following information:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. The name of the network. This will be user-visible" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Display Text: The description of the network. This will be user-visible" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zone: The zone in which you are configuring the guest network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network offering: If the administrator has configured multiple network offerings, select the one you want to use for this network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest Gateway: The gateway that the guests should use" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest Netmask: The netmask in use on the subnet the guests will use" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + diff --git a/docs/pot/configure-package-repository.pot b/docs/pot/configure-package-repository.pot new file mode 100644 index 00000000000..e91535826a5 --- /dev/null +++ b/docs/pot/configure-package-repository.pot @@ -0,0 +1,131 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configure package repository" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; is only distributed from source from the official mirrors. However, members of the CloudStack community may build convenience binaries so that users can install Apache CloudStack without needing to build from source." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you didn't follow the steps to build your own packages from source in the sections for or you may find pre-built DEB and RPM packages for your convience linked from the downloads page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These repositories contain both the Management Server and KVM Hypervisor packages." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "DEB package repository" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can add a DEB package repository to your apt sources with the following commands. Please note that only packages for Ubuntu 12.04 LTS (precise) are being built at this time." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use your preferred editor and open (or create) /etc/apt/sources.list.d/cloudstack.list. Add the community provided repository to the file:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "deb http://cloudstack.apt-get.eu/ubuntu precise 4.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We now have to add the public key to the trusted keys." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ wget -O - http://cloudstack.apt-get.eu/release.asc|apt-key add -" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now update your local apt cache." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ apt-get update" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Your DEB package repository should now be configured and ready for use." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "RPM package repository" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There is a RPM package repository for &PRODUCT; so you can easily install on RHEL based platforms." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you're using an RPM-based system, you'll want to add the Yum repository so that you can install &PRODUCT; with Yum." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Yum repository information is found under /etc/yum.repos.d. You'll see several .repo files in this directory, each one denoting a specific repository." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To add the &PRODUCT; repository, create /etc/yum.repos.d/cloudstack.repo and insert the following information." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"[cloudstack]\n" +"name=cloudstack\n" +"baseurl=http://cloudstack.apt-get.eu/rhel/4.0/\n" +"enabled=1\n" +"gpgcheck=0\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now you should be able to install CloudStack using Yum." +msgstr "" + diff --git a/docs/pot/configure-public-traffic-in-an-advanced-zone.pot b/docs/pot/configure-public-traffic-in-an-advanced-zone.pot new file mode 100644 index 00000000000..e69b5f4be9e --- /dev/null +++ b/docs/pot/configure-public-traffic-in-an-advanced-zone.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configure Public Traffic in an Advanced Zone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a zone that uses advanced networking, you need to configure at least one range of IP addresses for Internet traffic." +msgstr "" + diff --git a/docs/pot/configure-snmp-rhel.pot b/docs/pot/configure-snmp-rhel.pot new file mode 100644 index 00000000000..d614a53aad7 --- /dev/null +++ b/docs/pot/configure-snmp-rhel.pot @@ -0,0 +1,143 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:57\n" +"PO-Revision-Date: 2013-02-02T20:11:57\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configuring SNMP Community String on a RHEL Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The SNMP Community string is similar to a user id or password that provides access to a network device, such as router. This string is sent along with all SNMP requests. If the community string is correct, the device responds with the requested information. If the community string is incorrect, the device discards the request and does not respond." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The NetScaler device uses SNMP to communicate with the VMs. You must install SNMP and configure SNMP Community string for a secure communication between the NetScaler device and the RHEL machine." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that you installed SNMP on RedHat. If not, run the following command:" +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "yum install net-snmp-utils" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the /etc/snmp/snmpd.conf file to allow the SNMP polling from the NetScaler device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Map the community name into a security name (local and mynetwork, depending on where the request is coming from):" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use a strong password instead of public when you edit the following table." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "# sec.name source community\n" +"com2sec local localhost public\n" +"com2sec mynetwork 0.0.0.0 public" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Setting to 0.0.0.0 allows all IPs to poll the NetScaler server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Map the security names into group names:" +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "# group.name sec.model sec.name\n" +"group MyRWGroup v1 local\n" +"group MyRWGroup v2c local\n" +"group MyROGroup v1 mynetwork\n" +"group MyROGroup v2c mynetwork" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a view to allow the groups to have the permission to:" +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "incl/excl subtree mask view all included .1 " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Grant access with different write permissions to the two groups to the view you created." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "# context sec.model sec.level prefix read write notif\n" +" access MyROGroup \"\" any noauth exact all none none\n" +" access MyRWGroup \"\" any noauth exact all all all " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Unblock SNMP in iptables." +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "iptables -A INPUT -p udp --dport 161 -j ACCEPT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start the SNMP service:" +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "service snmpd start" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that the SNMP service is started automatically during the system startup:" +msgstr "" + +#. Tag: screen +#, no-c-format +msgid "chkconfig snmpd on" +msgstr "" + diff --git a/docs/pot/configure-usage-server.pot b/docs/pot/configure-usage-server.pot new file mode 100644 index 00000000000..deadcad6a3a --- /dev/null +++ b/docs/pot/configure-usage-server.pot @@ -0,0 +1,230 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configuring the Usage Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the usage server:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure the Usage Server has been installed. This requires extra steps beyond just installing the &PRODUCT; software. See Installing the Usage Server (Optional) in the Advanced Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Global Settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Search, type usage. Find the configuration parameter that controls the behavior you want to set. See the table below for a description of the available parameters." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Actions, click the Edit icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Type the desired value and click the Save icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Server (as usual with any global configuration change) and also the Usage Server:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management restart\n" +"# service cloud-usage restart \n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following table shows the global configuration settings that control the behavior of the Usage Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Parameter Name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "enable.usage.server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Whether the Usage Server is active." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage.aggregation.timezone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Time zone of usage records. Set this if the usage records and daily job execution are in different time zones. For example, with the following settings, the usage job will run at PST 00:15 and generate usage records for the 24 hours from 00:00:00 GMT to 23:59:59 GMT:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "usage.stats.job.exec.time = 00:15 \n" +"usage.execution.timezone = PST\n" +"usage.aggregation.timezone = GMT\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Valid values for the time zone are specified in " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Default: GMT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage.execution.timezone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The time zone of usage.stats.job.exec.time. Valid values for the time zone are specified in " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Default: The time zone of the management server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage.sanity.check.interval" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The number of days between sanity checks. Set this in order to periodically search for records with erroneous data before issuing customer invoices. For example, this checks for VM usage records created after the VM was destroyed, and similar checks for templates, volumes, and so on. It also checks for usage times longer than the aggregation range. If any issue is found, the alert ALERT_TYPE_USAGE_SANITY_RESULT = 21 is sent." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage.stats.job.aggregation.range" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The time period in minutes between Usage Server processing jobs. For example, if you set it to 1440, the Usage Server will run once per day. If you set it to 600, it will run every ten hours. In general, when a Usage Server job runs, it processes all events generated since usage was last run." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There is special handling for the case of 1440 (once per day). In this case the Usage Server does not necessarily process all records since Usage was last run. &PRODUCT; assumes that you require processing once per day for the previous, complete day’s records. For example, if the current day is October 7, then it is assumed you would like to process records for October 6, from midnight to midnight. &PRODUCT; assumes this \"midnight to midnight\" is relative to the usage.execution.timezone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Default: 1440" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage.stats.job.exec.time" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The time when the Usage Server processing will start. It is specified in 24-hour format (HH:MM) in the time zone of the server, which should be GMT. For example, to start the Usage job at 10:30 GMT, enter \"10:30\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If usage.stats.job.aggregation.range is also set, and its value is not 1440, then its value will be added to usage.stats.job.exec.time to get the time to run the Usage Server job again. This is repeated until 24 hours have elapsed, and the next day's processing begins again at usage.stats.job.exec.time." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Default: 00:15." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example, suppose that your server is in GMT, your user population is predominantly in the East Coast of the United States, and you would like to process usage records every night at 2 AM local (EST) time. Choose these settings:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "enable.usage.server = true" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage.execution.timezone = America/New_York" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage.stats.job.exec.time = 07:00. This will run the Usage job at 2:00 AM EST. Note that this will shift by an hour as the East Coast of the U.S. enters and exits Daylight Savings Time." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage.stats.job.aggregation.range = 1440" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "With this configuration, the Usage job will run every night at 2 AM EST and will process records for the previous day’s midnight-midnight as defined by the EST (America/New_York) time zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Because the special value 1440 has been used for usage.stats.job.aggregation.range, the Usage Server will ignore the data between midnight and 2 AM. That data will be included in the next day's run" +msgstr "" + diff --git a/docs/pot/configure-virtual-router.pot b/docs/pot/configure-virtual-router.pot new file mode 100644 index 00000000000..616d8e0669c --- /dev/null +++ b/docs/pot/configure-virtual-router.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configuring the Virtual Router" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can set the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP range" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Supported network services" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Default domain name for the network serviced by the virtual router" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateway IP address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How often &PRODUCT; fetches network usage statistics from &PRODUCT; virtual routers. If you want to collect traffic metering data from the virtual router, set the global configuration parameter router.stats.interval. If you are not using the virtual router to gather network usage statistics, set it to 0." +msgstr "" + diff --git a/docs/pot/configure-vpc.pot b/docs/pot/configure-vpc.pot new file mode 100644 index 00000000000..13d1bd7242e --- /dev/null +++ b/docs/pot/configure-vpc.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configuring a Virtual Private Cloud" +msgstr "" + diff --git a/docs/pot/configure-vpn.pot b/docs/pot/configure-vpn.pot new file mode 100644 index 00000000000..9d4e798860f --- /dev/null +++ b/docs/pot/configure-vpn.pot @@ -0,0 +1,105 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configuring VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To set up VPN for the cloud:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Global Settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set the following global configuration parameters." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "remote.access.vpn.client.ip.range – The range of IP addressess to be allocated to remote access VPN clients. The first IP in the range is used by the VPN server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "remote.access.vpn.psk.length – Length of the IPSec key." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "remote.access.vpn.user.limit – Maximum number of VPN users per account." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To enable VPN for a particular network:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in as a user or administrator to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the network you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click View IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click one of the displayed IP address names." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Enable VPN button AttachDiskButton.png: button to attach a volume ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IPsec key is displayed in a popup window." +msgstr "" + diff --git a/docs/pot/configure-xenserver-dom0-memory.pot b/docs/pot/configure-xenserver-dom0-memory.pot new file mode 100644 index 00000000000..33e6b06166a --- /dev/null +++ b/docs/pot/configure-xenserver-dom0-memory.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configure XenServer dom0 Memory" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure the XenServer dom0 settings to allocate more memory to dom0. This can enable XenServer to handle larger numbers of virtual machines. We recommend 2940 MB of RAM for XenServer dom0. For instructions on how to do this, see Citrix Knowledgebase Article.The article refers to XenServer 5.6, but the same information applies to XenServer 6" +msgstr "" + diff --git a/docs/pot/configuring-projects.pot b/docs/pot/configuring-projects.pot new file mode 100644 index 00000000000..46b2193e05d --- /dev/null +++ b/docs/pot/configuring-projects.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configuring Projects" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before &PRODUCT; users start using projects, the &PRODUCT; administrator must set up various systems to support them, including membership invitations, limits on project resources, and controls on who can create projects." +msgstr "" + diff --git a/docs/pot/console-proxy.pot b/docs/pot/console-proxy.pot new file mode 100644 index 00000000000..6117a8680db --- /dev/null +++ b/docs/pot/console-proxy.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Console Proxy" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Console Proxy is a type of System Virtual Machine that has a role in presenting a console view via the web UI. It connects the user’s browser to the VNC port made available via the hypervisor for the console of the guest. Both the administrator and end user web UIs offer a console connection." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Clicking on a console icon brings up a new window. The AJAX code downloaded into that window refers to the public IP address of a console proxy VM. There is exactly one public IP address allocated per console proxy VM. The AJAX application connects to this IP. The console proxy then proxies the connection to the VNC port for the requested VM on the Host hosting the guest. ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The hypervisors will have many ports assigned to VNC usage so that multiple VNC sessions can occur simultaneously." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There is never any traffic to the guest virtual IP, and there is no need to enable VNC within the guest." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The console proxy VM will periodically report its active session count to the Management Server. The default reporting interval is five seconds. This can be changed through standard Management Server configuration with the parameter consoleproxy.loadscan.interval." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Assignment of guest VM to console proxy is determined by first determining if the guest VM has a previous session associated with a console proxy. If it does, the Management Server will assign the guest VM to the target Console Proxy VM regardless of the load on the proxy VM. Failing that, the first available running Console Proxy VM that has the capacity to handle new sessions is used." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Console proxies can be restarted by administrators but this will interrupt existing console sessions for users." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The console viewing functionality uses a dynamic DNS service under the domain name realhostip.com to assist in providing SSL security to console sessions. The console proxy is assigned a public IP address. In order to avoid browser warnings for mismatched SSL certificates, the URL for the new console window is set to the form of https://aaa-bbb-ccc-ddd.realhostip.com. Customers will see this URL during console session creation. &PRODUCT; includes the realhostip.com SSL certificate in the console proxy VM. Of course, &PRODUCT; cannot know about DNS A records for our customers' public IPs prior to shipping the software. &PRODUCT; therefore runs a dynamic DNS server that is authoritative for the realhostip.com domain. It maps the aaa-bbb-ccc-ddd part of the DNS name to the IP address aaa.bbb.ccc.ddd on lookups. This allows the browser to correctly connect to the console proxy's public IP, where it then expects and receives a SSL certificate for realhostip.com, and SSL is set up without browser warnings." +msgstr "" + diff --git a/docs/pot/convert-hyperv-vm-to-template.pot b/docs/pot/convert-hyperv-vm-to-template.pot new file mode 100644 index 00000000000..c4f6f380160 --- /dev/null +++ b/docs/pot/convert-hyperv-vm-to-template.pot @@ -0,0 +1,170 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Converting a Hyper-V VM to a Template" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To convert a Hyper-V VM to a XenServer-compatible &PRODUCT; template, you will need a standalone XenServer host with an attached NFS VHD SR. Use whatever XenServer version you are using with &PRODUCT;, but use XenCenter 5.6 FP1 or SP2 (it is backwards compatible to 5.6). Additionally, it may help to have an attached NFS ISO SR." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For Linux VMs, you may need to do some preparation in Hyper-V before trying to get the VM to work in XenServer. Clone the VM and work on the clone if you still want to use the VM in Hyper-V. Uninstall Hyper-V Integration Components and check for any references to device names in /etc/fstab:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "From the linux_ic/drivers/dist directory, run make uninstall (where \"linux_ic\" is the path to the copied Hyper-V Integration Components files)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restore the original initrd from backup in /boot/ (the backup is named *.backup0)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Remove the \"hdX=noprobe\" entries from /boot/grub/menu.lst." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Check /etc/fstab for any partitions mounted by device name. Change those entries (if any) to mount by LABEL or UUID (get that information with the \"blkid\" command).." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The next step is make sure the VM is not running in Hyper-V, then get the VHD into XenServer. There are two options for doing this." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Option one:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Import the VHD using XenCenter. In XenCenter, go to Tools>Virtual Appliance Tools>Disk Image Import." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the VHD, then click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name the VM, choose the NFS VHD SR under Storage, enable \"Run Operating System Fixups\" and choose the NFS ISO SR." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Next, then Finish. A VM should be created." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Option two" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run XenConvert, under From choose VHD, under To choose XenServer. Click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Input the XenServer host info, then click Next." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name the VM, then click Next, then Convert. A VM should be created" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Once you have a VM created from the Hyper-V VHD, prepare it using the following steps:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Boot the VM, uninstall Hyper-V Integration Services, and reboot." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install XenServer Tools, then reboot." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare the VM as desired. For example, run sysprep on Windows VMs. See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Either option above will create a VM in HVM mode. This is fine for Windows VMs, but Linux VMs may not perform optimally. Converting a Linux VM to PV mode will require additional steps and will vary by distribution." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Shut down the VM and copy the VHD from the NFS storage to a web server; for example, mount the NFS share on the web server and copy it, or from the XenServer host use sftp or scp to upload it to the web server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In &PRODUCT;, create a new template using the following values:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL. Give the URL for the VHD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OS Type. Use the appropriate OS. For PV mode on CentOS, choose Other PV (32-bit) or Other PV (64-bit). This choice is available only for XenServer." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor. XenServer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Format. VHD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The template will be created, and you can create instances from it." +msgstr "" + diff --git a/docs/pot/create-bare-metal-template.pot b/docs/pot/create-bare-metal-template.pot new file mode 100644 index 00000000000..09ee1bcbecd --- /dev/null +++ b/docs/pot/create-bare-metal-template.pot @@ -0,0 +1,110 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a Bare Metal Template" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Beta feature. Untested in &PRODUCT; 3.0.3. Provided without guarantee of performance." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before you can create a bare metal template, you must have performed several other installation and setup steps to create a bare metal cluster and environment. See Bare Metal Installation in the Installation Guide. It is assumed you already have a directory named \"win7_64bit\" on your CIFS server, containing the image for the bare metal instance. This directory and image are set up as part of the Bare Metal Installation procedure." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Create Template." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the dialog box, enter the following values." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. Short name for the template." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Display Text. Description of the template." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL. The directory name which contains image file on your CIFS server. For example, win7_64bit." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zone. All Zones." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OS Type. Select the OS type of the ISO image. Choose other if the OS Type of the ISO is not listed or if the ISO is not bootable." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor. BareMetal." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Format. BareMetal." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Password Enabled. No." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public. No." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Featured. Choose Yes if you would like this template to be more prominent for users to select. Only administrators may make templates featured." +msgstr "" + diff --git a/docs/pot/create-new-projects.pot b/docs/pot/create-new-projects.pot new file mode 100644 index 00000000000..de1b6300a5e --- /dev/null +++ b/docs/pot/create-new-projects.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a New Project" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; administrators and domain administrators can create projects. If the global configuration parameter allow.user.create.projects is set to true, end users can also create projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in as administrator to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select view, click Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click New Project." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Give the project a name and description for display to users, then click Create Project." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A screen appears where you can immediately add more members to the project. This is optional. Click Next when you are ready to move on." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Save." +msgstr "" + diff --git a/docs/pot/create-template-from-existing-vm.pot b/docs/pot/create-template-from-existing-vm.pot new file mode 100644 index 00000000000..fbb0012970a --- /dev/null +++ b/docs/pot/create-template-from-existing-vm.pot @@ -0,0 +1,105 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a Template from an Existing Virtual Machine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Once you have at least one VM set up in the way you want, you can use it as the prototype for other VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create and start a virtual machine using any of the techniques given in ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make any desired configuration changes on the running VM, then click Stop." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Wait for the VM to stop. When the status shows Stopped, go to the next step." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Create Template and provide the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name and Display Text. These will be shown in the UI, so choose something descriptive." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OS Type. This helps &PRODUCT; and the hypervisor perform certain operations and make assumptions that improve the performance of the guest. Select one of the following." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the operating system of the stopped VM is listed, choose it." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the OS type of the stopped VM is not listed, choose Other." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you want to boot from this template in PV mode, choose Other PV (32-bit) or Other PV (64-bit). This choice is available only for XenServere:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Note: Generally you should not choose an older version of the OS than the version in the image. For example, choosing CentOS 5.4 to support a CentOS 6.2 image will in general not work. In those cases you should choose Other." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public. Choose Yes to make this template accessible to all users of this &PRODUCT; installation. The template will appear in the Community Templates list. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Password Enabled. Choose Yes if your template has the &PRODUCT; password change script installed. See Adding Password Management to Your Templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The new template will be visible in the Templates section when the template creation process has been completed. The template is then available when creating a new VM" +msgstr "" + diff --git a/docs/pot/create-template-from-snapshot.pot b/docs/pot/create-template-from-snapshot.pot new file mode 100644 index 00000000000..1e53985d5ba --- /dev/null +++ b/docs/pot/create-template-from-snapshot.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a Template from a Snapshot" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you do not want to stop the VM in order to use the Create Template menu item (as described in ), you can create a template directly from any snapshot through the &PRODUCT; UI." +msgstr "" + diff --git a/docs/pot/create-templates-overview.pot b/docs/pot/create-templates-overview.pot new file mode 100644 index 00000000000..fe715ee402c --- /dev/null +++ b/docs/pot/create-templates-overview.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating Templates: Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; ships with a default template for the CentOS operating system. There are a variety of ways to add more templates. Administrators and end users can add templates. The typical sequence of events is:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Launch a VM instance that has the operating system you want. Make any other desired configuration changes to the VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stop the VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Convert the volume into a template." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There are other ways to add templates to &PRODUCT;. For example, you can take a snapshot of the VM's volume and create a template from the snapshot, or import a VHD from another system into &PRODUCT;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The various techniques for creating templates are described in the next few sections." +msgstr "" + diff --git a/docs/pot/create-vpn-connection-vpc.pot b/docs/pot/create-vpn-connection-vpc.pot new file mode 100644 index 00000000000..7f9e3a98a7d --- /dev/null +++ b/docs/pot/create-vpn-connection-vpc.pot @@ -0,0 +1,160 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a VPN Connection" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you create for the account are listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC to which you want to deploy the VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VPC page is displayed where all the tiers you created are listed in a diagram." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Settings icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following options are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network ASLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select Site-to-Site VPN." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Site-to-Site VPN page is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "From the Select View drop-down, ensure that VPN Connection is selected." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Create VPN Connection." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Create VPN Connection dialog is displayed:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the desired customer gateway, then click OK to confirm." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Within a few moments, the VPN Connection is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following information on the VPN connection is displayed:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateway" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "State" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IPSec Preshared Key" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IKE Policy" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ESP Policy" +msgstr "" + diff --git a/docs/pot/create-vpn-customer-gateway.pot b/docs/pot/create-vpn-customer-gateway.pot new file mode 100644 index 00000000000..69990a2a48d --- /dev/null +++ b/docs/pot/create-vpn-customer-gateway.pot @@ -0,0 +1,180 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating and Updating a VPN Customer Gateway" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A VPN customer gateway can be connected to only one VPN gateway at a time." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To add a VPN Customer Gateway:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPN Customer Gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add site-to-site VPN." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the following information:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: A unique name for the VPN customer gateway you create." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateway: The IP address for the remote gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CIDR list: The guest CIDR list of the remote subnets. Enter a CIDR or a comma-separated list of CIDRs. Ensure that a guest CIDR list is not overlapped with the VPC’s CIDR, or another guest CIDR. The CIDR must be RFC1918-compliant." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IPsec Preshared Key: Preshared keying is a method where the endpoints of the VPN share a secret key. This key value is used to authenticate the customer gateway and the VPC VPN gateway to each other." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IKE peers (VPN end points) authenticate each other by computing and sending a keyed hash of data that includes the Preshared key. If the receiving peer is able to create the same hash independently by using its Preshared key, it knows that both peers must share the same secret, thus authenticating the customer gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IKE Encryption: The Internet Key Exchange (IKE) policy for phase-1. The supported encryption algorithms are AES128, AES192, AES256, and 3DES. Authentication is accomplished through the Preshared Keys." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The phase-1 is the first phase in the IKE process. In this initial negotiation phase, the two VPN endpoints agree on the methods to be used to provide security for the underlying IP traffic. The phase-1 authenticates the two VPN gateways to each other, by confirming that the remote gateway has a matching Preshared Key." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IKE Hash: The IKE hash for phase-1. The supported hash algorithms are SHA1 and MD5." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IKE DH: A public-key cryptography protocol which allows two parties to establish a shared secret over an insecure communications channel. The 1536-bit Diffie-Hellman group is used within IKE to establish session keys. The supported options are None, Group-5 (1536-bit) and Group-2 (1024-bit)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ESP Encryption: Encapsulating Security Payload (ESP) algorithm within phase-2. The supported encryption algorithms are AES128, AES192, AES256, and 3DES." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The phase-2 is the second phase in the IKE process. The purpose of IKE phase-2 is to negotiate IPSec security associations (SA) to set up the IPSec tunnel. In phase-2, new keying material is extracted from the Diffie-Hellman key exchange in phase-1, to provide session keys to use in protecting the VPN data flow." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ESP Hash: Encapsulating Security Payload (ESP) hash for phase-2. Supported hash algorithms are SHA1 and MD5." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Perfect Forward Secrecy: Perfect Forward Secrecy (or PFS) is the property that ensures that a session key derived from a set of long-term public and private keys will not be compromised. This property enforces a new Diffie-Hellman key exchange. It provides the keying material that has greater key material life and thereby greater resistance to cryptographic attacks. The available options are None, Group-5 (1536-bit) and Group-2 (1024-bit). The security of the key exchanges increase as the DH groups grow larger, as does the time of the exchanges." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When PFS is turned on, for every negotiation of a new phase-2 SA the two gateways must generate a new set of phase-1 keys. This adds an extra layer of protection that PFS adds, which ensures if the phase-2 SA’s have expired, the keys used for new phase-2 SA’s have not been generated from the current phase-1 keying material." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IKE Lifetime (seconds): The phase-1 lifetime of the security association in seconds. Default is 86400 seconds (1 day). Whenever the time expires, a new phase-1 exchange is performed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ESP Lifetime (seconds): The phase-2 lifetime of the security association in seconds. Default is 3600 seconds (1 hour). Whenever the value is exceeded, a re-key is initiated to provide a new IPsec encryption and authentication session keys." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Dead Peer Detection: A method to detect an unavailable Internet Key Exchange (IKE) peer. Select this option if you want the virtual router to query the liveliness of its IKE peer at regular intervals. It’s recommended to have the same configuration of DPD on both side of VPN connection." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Updating and Removing a VPN Customer Gateway" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can update a customer gateway either with no VPN connection, or related VPN connection is in error state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the VPN customer gateway you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To modify the required parameters, click the Edit VPN Customer Gateway button edit.png: button to edit a VPN customer gateway " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To remove the VPN customer gateway, click the Delete VPN Customer Gateway button delete.png: button to remove a VPN customer gateway " +msgstr "" + diff --git a/docs/pot/create-vpn-gateway-for-vpc.pot b/docs/pot/create-vpn-gateway-for-vpc.pot new file mode 100644 index 00000000000..de02f8d4b2f --- /dev/null +++ b/docs/pot/create-vpn-gateway-for-vpc.pot @@ -0,0 +1,130 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a VPN gateway for the VPC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC to which you want to deploy the VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VPC page is displayed where all the tiers you created are listed in a diagram." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Settings icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following options are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network ACLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select Site-to-Site VPN." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are creating the VPN gateway for the first time, selecting Site-to-Site VPN prompts you to create a VPN gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the confirmation dialog, click Yes to confirm." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Within a few moments, the VPN gateway is created. You will be prompted to view the details of the VPN gateway you have created. Click Yes to confirm." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following details are displayed in the VPN Gateway page:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Domain" +msgstr "" + diff --git a/docs/pot/create-vr-network-offering.pot b/docs/pot/create-vr-network-offering.pot new file mode 100644 index 00000000000..0c3a0e1ac77 --- /dev/null +++ b/docs/pot/create-vr-network-offering.pot @@ -0,0 +1,140 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating and Changing a Virtual Router Network Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To create the network offering in association with a virtual router system service offering:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "First, create a system service offering, for example: VRsystemofferingHA." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information on creating a system service offering, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "From the Select Offering drop-down, choose Network Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Network Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the dialog, make the following choices:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. Any desired name for the network offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description. A short description of the offering that can be displayed to users." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Rate. Allowed data transfer rate in MB per second." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Traffic Type. The type of network traffic that will be carried on the network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest Type. Choose whether the guest network is isolated or shared. For a description of these terms, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify VLAN. (Isolated guest networks only) Indicate whether a VLAN should be specified when this offering is used." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Supported Services. Select one or more of the possible network services. For some services, you must also choose the service provider; for example, if you select Load Balancer, you can choose the &PRODUCT; virtual router or any other load balancers that have been configured in the cloud. Depending on which services you choose, additional fields may appear in the rest of the dialog box. For more information, see " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "System Offering. Choose the system service offering that you want virtual routers to use in this network. In this case, the default “System Offering For Software Router†and the custom “VRsystemofferingHA†are available and displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK and the network offering is created." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To change the network offering of a guest network to the virtual router service offering:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select Network from the left navigation pane." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the guest network that you want to offer this network service to." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Edit button." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "From the Network Offering drop-down, select the virtual router network offering you have just created." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + diff --git a/docs/pot/create-windows-template.pot b/docs/pot/create-windows-template.pot new file mode 100644 index 00000000000..64b3ae89f14 --- /dev/null +++ b/docs/pot/create-windows-template.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a Windows Template" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Windows templates must be prepared with Sysprep before they can be provisioned on multiple machines. Sysprep allows you to create a generic Windows template and avoid any possible SID conflicts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(XenServer) Windows VMs running on XenServer require PV drivers, which may be provided in the template or added after the VM is created. The PV drivers are necessary for essential management functions such as mounting additional volumes and ISO images, live migration, and graceful shutdown." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "An overview of the procedure is as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Upload your Windows ISO." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information, see " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a VM Instance with this ISO." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information, see " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Follow the steps in Sysprep for Windows Server 2008 R2 (below) or Sysprep for Windows Server 2003 R2, depending on your version of Windows Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The preparation steps are complete. Now you can actually create the template as described in Creating the Windows Template." +msgstr "" + diff --git a/docs/pot/creating-compute-offerings.pot b/docs/pot/creating-compute-offerings.pot new file mode 100644 index 00000000000..92051fd6379 --- /dev/null +++ b/docs/pot/creating-compute-offerings.pot @@ -0,0 +1,125 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a New Compute Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To create a new compute offering:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in with admin privileges to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Service Offerings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select Offering, choose Compute Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Compute Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the dialog, make the following choices:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name: Any desired name for the service offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description: A short description of the offering that can be displayed to users" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage type: The type of disk that should be allocated. Local allocates from storage attached directly to the host where the system VM is running. Shared allocates from storage accessible via NFS." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# of CPU cores: The number of cores which should be allocated to a system VM with this offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CPU (in MHz): The CPU speed of the cores that the system VM is allocated. For example, “2000†would provide for a 2 GHz clock." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Memory (in MB): The amount of memory in megabytes that the system VM should be allocated. For example, “2048†would provide for a 2 GB RAM allocation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Rate: Allowed data transfer rate in MB per second." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Offer HA: If yes, the administrator can choose to have the system VM be monitored and as highly available as possible." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage Tags: The tags that should be associated with the primary storage used by the system VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host Tags: (Optional) Any tags that you use to organize your hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CPU cap: Whether to limit the level of CPU usage even if spare capacity is available." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public: Indicate whether the service offering should be available all domains or only some domains. Choose Yes to make it available to all domains. Choose No to limit the scope to a subdomain; &PRODUCT; will then prompt for the subdomain's name." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add." +msgstr "" + diff --git a/docs/pot/creating-disk-offerings.pot b/docs/pot/creating-disk-offerings.pot new file mode 100644 index 00000000000..c4aa06933dc --- /dev/null +++ b/docs/pot/creating-disk-offerings.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a New Disk Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To create a system service offering:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in with admin privileges to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Service Offerings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select Offering, choose Disk Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Disk Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the dialog, make the following choices:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. Any desired name for the system offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description. A short description of the offering that can be displayed to users" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Custom Disk Size. If checked, the user can set their own disk size. If not checked, the root administrator must define a value in Disk Size." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disk Size. Appears only if Custom Disk Size is not selected. Define the volume size in GB." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional)Storage Tags. The tags that should be associated with the primary storage for this disk. Tags are a comma separated list of attributes of the storage. For example \"ssd,blue\". Tags are also added on Primary Storage. &PRODUCT; matches tags on a disk offering to tags on the storage. If a tag is present on a disk offering that tag (or tags) must also be present on Primary Storage for the volume to be provisioned. If no such primary storage exists, allocation from the disk offering will fail.." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public. Indicate whether the service offering should be available all domains or only some domains. Choose Yes to make it available to all domains. Choose No to limit the scope to a subdomain; &PRODUCT; will then prompt for the subdomain's name." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add." +msgstr "" + diff --git a/docs/pot/creating-network-offerings.pot b/docs/pot/creating-network-offerings.pot new file mode 100644 index 00000000000..c1183db966a --- /dev/null +++ b/docs/pot/creating-network-offerings.pot @@ -0,0 +1,225 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a New Network Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To create a network offering:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in with admin privileges to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Service Offerings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select Offering, choose Network Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Network Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the dialog, make the following choices:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. Any desired name for the network offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description. A short description of the offering that can be displayed to users" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Rate. Allowed data transfer rate in MB per second" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Traffic Type. The type of network traffic that will be carried on the network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest Type. Choose whether the guest network is isolated or shared. For a description of these terms, see " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify VLAN. (Isolated guest networks only) Indicate whether a VLAN should be specified when this offering is used" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Supported Services. Select one or more of the possible network services. For some services, you must also choose the service provider; for example, if you select Load Balancer, you can choose the &PRODUCT; virtual router or any other load balancers that have been configured in the cloud. Depending on which services you choose, additional fields may appear in the rest of the dialog box." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Based on the guest network type selected, you can see the following supported services:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Supported Services" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Isolated" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Shared" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DHCP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Supported" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DNS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Load Balancer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you select Load Balancer, you can choose the &PRODUCT; virtual router or any other load balancers that have been configured in the cloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Source NAT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you select Source NAT, you can choose the &PRODUCT; virtual router or any other Source NAT providers that have been configured in the cloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Static NAT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you select Static NAT, you can choose the &PRODUCT; virtual router or any other Static NAT providers that have been configured in the cloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Port Forwarding" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you select Port Forwarding, you can choose the &PRODUCT; virtual router or any other Port Forwarding providers that have been configured in the cloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Not Supported" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "User Data" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Security Groups" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "System Offering. If the service provider for any of the services selected in Supported Services is a virtual router, the System Offering field appears. Choose the system service offering that you want virtual routers to use in this network. For example, if you selected Load Balancer in Supported Services and selected a virtual router to provide load balancing, the System Offering field appears so you can choose between the &PRODUCT; default system service offering and any custom system service offerings that have been defined by the &PRODUCT; root administrator. For more information, see System Service Offerings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Redundant router capability. (v3.0.3 and greater) Available only when Virtual Router is selected as the Source NAT provider. Select this option if you want to use two virtual routers in the network for uninterrupted connection: one operating as the master virtual router and the other as the backup. The master virtual router receives requests from and sends responses to the user’s VM. The backup virtual router is activated only when the master is down. After the failover, the backup becomes the master virtual router. &PRODUCT; deploys the routers on different hosts to ensure reliability if one host is down." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Conserve mode. Indicate whether to use conserve mode. In this mode, network resources are allocated only when the first virtual machine starts in the network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tags. Network tag to specify which physical network to use" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add." +msgstr "" + diff --git a/docs/pot/creating-new-volumes.pot b/docs/pot/creating-new-volumes.pot new file mode 100644 index 00000000000..bf5d94dab4f --- /dev/null +++ b/docs/pot/creating-new-volumes.pot @@ -0,0 +1,80 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a New Volume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can add more data disk volumes to a guest VM at any time, up to the limits of your storage capacity. Both &PRODUCT; administrators and users can add volumes to VM instances. When you create a new volume, it is stored as an entity in &PRODUCT;, but the actual storage resources are not allocated on the physical storage device until you attach the volume. This optimization allows the &PRODUCT; to provision the volume nearest to the guest that will use it when the first attachment is made." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select View, choose Volumes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To create a new volume, click Add Volume, provide the following details, and click OK." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. Give the volume a unique name so you can find it later." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Availability Zone. Where do you want the storage to reside? This should be close to the VM that will use the volume." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disk Offering. Choose the characteristics of the storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The new volume appears in the list of volumes with the state “Allocated.†The volume data is stored in &PRODUCT;, but the volume is not yet ready for use" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To start using the volume, continue to Attaching a Volume" +msgstr "" + diff --git a/docs/pot/creating-system-service-offerings.pot b/docs/pot/creating-system-service-offerings.pot new file mode 100644 index 00000000000..914376f0f5f --- /dev/null +++ b/docs/pot/creating-system-service-offerings.pot @@ -0,0 +1,130 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating a New System Service Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To create a system service offering:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in with admin privileges to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Service Offerings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select Offering, choose System Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add System Service Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the dialog, make the following choices:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. Any desired name for the system offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description. A short description of the offering that can be displayed to users" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "System VM Type. Select the type of system virtual machine that this offering is intended to support." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage type. The type of disk that should be allocated. Local allocates from storage attached directly to the host where the system VM is running. Shared allocates from storage accessible via NFS." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "# of CPU cores. The number of cores which should be allocated to a system VM with this offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CPU (in MHz). The CPU speed of the cores that the system VM is allocated. For example, \"2000\" would provide for a 2 GHz clock." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Memory (in MB). The amount of memory in megabytes that the system VM should be allocated. For example, \"2048\" would provide for a 2 GB RAM allocation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Rate. Allowed data transfer rate in MB per second." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Offer HA. If yes, the administrator can choose to have the system VM be monitored and as highly available as possible." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage Tags. The tags that should be associated with the primary storage used by the system VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host Tags. (Optional) Any tags that you use to organize your hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CPU cap. Whether to limit the level of CPU usage even if spare capacity is available." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public. Indicate whether the service offering should be available all domains or only some domains. Choose Yes to make it available to all domains. Choose No to limit the scope to a subdomain; &PRODUCT; will then prompt for the subdomain's name." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add." +msgstr "" + diff --git a/docs/pot/creating-vms.pot b/docs/pot/creating-vms.pot new file mode 100644 index 00000000000..c6b7f456d65 --- /dev/null +++ b/docs/pot/creating-vms.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Creating VMs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Virtual machines are usually created from a template. Users can also create blank virtual machines. A blank virtual machine is a virtual machine without an OS template. Users can attach an ISO file and install the OS from the CD/DVD-ROM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To create a VM from a template:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Instances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Instance." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select a template, then follow the steps in the wizard. (For more information about how the templates came to be in this list, see Working with Templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure that the hardware you have allows starting the selected service offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Submit and your VM will be created and started." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For security reason, the internal name of the VM is visible only to the root admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Starting with v3.0.3, you can create a VM without starting it. You can determine whether the VM needs to be started as part of the VM deployment. A new request parameter, startVM, is introduced in the deployVm API to support this feature. For more information, see the Developer's Guide" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To create a VM from an ISO:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(XenServer) Windows VMs running on XenServer require PV drivers, which may be provided in the template or added after the VM is created. The PV drivers are necessary for essential management functions such as mounting additional volumes and ISO images, live migration, and graceful shutdown." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select ISO Boot, and follow the steps in the wizard." +msgstr "" + diff --git a/docs/pot/customizing-dns.pot b/docs/pot/customizing-dns.pot new file mode 100644 index 00000000000..75d56931a9c --- /dev/null +++ b/docs/pot/customizing-dns.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Customizing the Network Domain Name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The root administrator can optionally assign a custom DNS suffix at the level of a network, account, domain, zone, or entire &PRODUCT; installation, and a domain administrator can do so within their own domain. To specify a custom domain name and put it into effect, follow these steps." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set the DNS suffix at the desired scope" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "At the network level, the DNS suffix can be assigned through the UI when creating a new network, as described in or with the updateNetwork command in the &PRODUCT; API." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "At the account, domain, or zone level, the DNS suffix can be assigned with the appropriate &PRODUCT; API commands: createAccount, editAccount, createDomain, editDomain, createZone, or editZone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "At the global level, use the configuration parameter guest.domain.suffix. You can also use the &PRODUCT; API command updateConfiguration. After modifying this global configuration, restart the Management Server to put the new setting into effect." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To make the new DNS suffix take effect for an existing network, call the &PRODUCT; API command updateNetwork. This step is not necessary when the DNS suffix was specified while creating a new network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The source of the network domain that is used depends on the following rules." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For all networks, if a network domain is specified as part of a network's own configuration, that value is used." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For an account-specific network, the network domain specified for the account is used. If none is specified, the system looks for a value in the domain, zone, and global configuration, in that order." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For a domain-specific network, the network domain specified for the domain is used. If none is specified, the system looks for a value in the zone and global configuration, in that order." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For a zone-specific network, the network domain specified for the zone is used. If none is specified, the system looks for a value in the global configuration." +msgstr "" + diff --git a/docs/pot/database-replication.pot b/docs/pot/database-replication.pot new file mode 100644 index 00000000000..6efcacf0b5b --- /dev/null +++ b/docs/pot/database-replication.pot @@ -0,0 +1,254 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Database Replication (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; supports database replication from one MySQL node to another. This is achieved using standard MySQL replication. You may want to do this as insurance against MySQL server or storage loss. MySQL replication is implemented using a master/slave model. The master is the node that the Management Servers are configured to use. The slave is a standby node that receives all write operations from the master and applies them to a local, redundant copy of the database. The following steps are a guide to implementing MySQL replication." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Creating a replica is not a backup solution. You should develop a backup procedure for the MySQL data that is distinct from replication." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that this is a fresh install with no data in the master." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit my.cnf on the master and add the following in the [mysqld] section below datadir." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"log_bin=mysql-bin\n" +"server_id=1\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The server_id must be unique with respect to other servers. The recommended way to achieve this is to give the master an ID of 1 and each slave a sequential number greater than 1, so that the servers are numbered 1, 2, 3, etc." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the MySQL service:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# service mysqld restart\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a replication account on the master and give it privileges. We will use the \"cloud-repl\" user with the password \"password\". This assumes that master and slave run on the 172.16.1.0/24 network." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# mysql -u root\n" +"mysql> create user 'cloud-repl'@'172.16.1.%' identified by 'password';\n" +"mysql> grant replication slave on *.* TO 'cloud-repl'@'172.16.1.%';\n" +"mysql> flush privileges;\n" +"mysql> flush tables with read lock;\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Leave the current MySQL session running." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a new shell start a second MySQL session." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Retrieve the current position of the database." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# mysql -u root\n" +"mysql> show master status;\n" +"+------------------+----------+--------------+------------------+\n" +"| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |\n" +"+------------------+----------+--------------+------------------+\n" +"| mysql-bin.000001 | 412 | | |\n" +"+------------------+----------+--------------+------------------+\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Note the file and the position that are returned by your instance." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Exit from this session." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Complete the master setup. Returning to your first session on the master, release the locks and exit MySQL." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"mysql> unlock tables;\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install and configure the slave. On the slave server, run the following commands." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# yum install mysql-server\n" +"# chkconfig mysqld on\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit my.cnf and add the following lines in the [mysqld] section below datadir." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"server_id=2\n" +"innodb_rollback_on_timeout=1\n" +"innodb_lock_wait_timeout=600\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart MySQL." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Instruct the slave to connect to and replicate from the master. Replace the IP address, password, log file, and position with the values you have used in the previous steps." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"mysql> change master to\n" +" -> master_host='172.16.1.217',\n" +" -> master_user='cloud-repl',\n" +" -> master_password='password',\n" +" -> master_log_file='mysql-bin.000001',\n" +" -> master_log_pos=412;\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Then start replication on the slave." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"mysql> start slave;\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Optionally, open port 3306 on the slave as was done on the master earlier." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This is not required for replication to work. But if you choose not to do this, you will need to do it when failover to the replica occurs." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Failover" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This will provide for a replicated database that can be used to implement manual failover for the Management Servers. &PRODUCT; failover from one MySQL instance to another is performed by the administrator. In the event of a database failure you should:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stop the Management Servers (via service cloud-management stop)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Change the replica's configuration to be a master and restart it." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that the replica's port 3306 is open to the Management Servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make a change so that the Management Server uses the new database. The simplest process here is to put the IP address of the new database server into each Management Server's /etc/cloud/management/db.properties." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Servers:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# service cloud-management start\n" +" " +msgstr "" + diff --git a/docs/pot/dates-in-usage-record.pot b/docs/pot/dates-in-usage-record.pot new file mode 100644 index 00000000000..5ad955581c2 --- /dev/null +++ b/docs/pot/dates-in-usage-record.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Dates in the Usage Record" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Usage records include a start date and an end date. These dates define the period of time for which the raw usage number was calculated. If daily aggregation is used, the start date is midnight on the day in question and the end date is 23:59:59 on the day in question (with one exception; see below). A virtual machine could have been deployed at noon on that day, stopped at 6pm on that day, then started up again at 11pm. When usage is calculated on that day, there will be 7 hours of running VM usage (usage type 1) and 12 hours of allocated VM usage (usage type 2). If the same virtual machine runs for the entire next day, there will 24 hours of both running VM usage (type 1) and allocated VM usage (type 2)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Note: The start date is not the time a virtual machine was started, and the end date is not the time when a virtual machine was stopped. The start and end dates give the time range within which usage was calculated." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For network usage, the start date and end date again define the range in which the number of bytes transferred was calculated. If a user downloads 10 MB and uploads 1 MB in one day, there will be two records, one showing the 10 megabytes received and one showing the 1 megabyte sent." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There is one case where the start date and end date do not correspond to midnight and 11:59:59pm when daily aggregation is used. This occurs only for network usage records. When the usage server has more than one day's worth of unprocessed data, the old data will be included in the aggregation period. The start date in the usage record will show the date and time of the earliest event. For other types of usage, such as IP addresses and VMs, the old unprocessed data is not included in daily aggregation." +msgstr "" + diff --git a/docs/pot/dedicated-ha-hosts.pot b/docs/pot/dedicated-ha-hosts.pot new file mode 100644 index 00000000000..131d48a7627 --- /dev/null +++ b/docs/pot/dedicated-ha-hosts.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Dedicated HA Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(v3.0.3 and greater) One or more hosts can be designated for use only by HA-enabled VMs that are restarting due to a host failure. Setting up a pool of such dedicated HA hosts as the recovery destination for all HA-enabled VMs is useful to:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make it easier to determine which VMs have been restarted as part of the &PRODUCT; high-availability function. If a VM is running on a dedicated HA host, then it must be an HA-enabled VM whose original host failed. (With one exception: It is possible for an administrator to manually migrate any VM to a dedicated HA host.)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Keep HA-enabled VMs from restarting on hosts which may be reserved for other purposes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The dedicated HA option is set through a special host tag when the host is created. To allow the administrator to dedicate hosts to only HA-enabled VMs, set the global configuration variable ha.tag to the desired tag (for example, \"ha_host\"), and restart the Management Server. Enter the value in the Host Tags field when adding the host(s) that you want to dedicate to HA-enabled VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you set ha.tag, be sure to actually use that tag on at least one host in your cloud. If the tag specified in ha.tag is not set for any host in the cloud, the HA-enabled VMs will fail to restart after a crash." +msgstr "" + diff --git a/docs/pot/default-account-resource-limit.pot b/docs/pot/default-account-resource-limit.pot new file mode 100644 index 00000000000..a74111d206c --- /dev/null +++ b/docs/pot/default-account-resource-limit.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Default Account Resource Limits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can limit resource use by accounts. The default limits are set using global configuration parameters, and they affect all accounts within a cloud. The relevant parameters are those beginning with max.account (max.account.snapshots, etc.).." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To override a default limit for a particular account, set a per-account resource limit." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation tree, click Accounts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the account you want to modify. The current limits are displayed. A value of -1 shows that there is no limit in place" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Edit button editbutton.png: edits the settings. " +msgstr "" + diff --git a/docs/pot/default-template.pot b/docs/pot/default-template.pot new file mode 100644 index 00000000000..63b08f4c818 --- /dev/null +++ b/docs/pot/default-template.pot @@ -0,0 +1,79 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "The Default Template" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; includes a CentOS template. This template is downloaded by the Secondary Storage VM after the primary and secondary storage are configured. You can use this template in your production deployment or you can delete it and use custom templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The root password for the default template is \"password\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A default template is provided for each of XenServer, KVM, and vSphere. The templates that are downloaded depend on the hypervisor type that is available in your cloud. Each template is approximately 2.5 GB physical size." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The default template includes the standard iptables rules, which will block most access to the template excluding ssh." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# iptables --list\n" +"Chain INPUT (policy ACCEPT)\n" +"target prot opt source destination\n" +"RH-Firewall-1-INPUT all -- anywhere anywhere\n" +"\n" +"Chain FORWARD (policy ACCEPT)\n" +"target prot opt source destination\n" +"RH-Firewall-1-INPUT all -- anywhere anywhere\n" +"\n" +"Chain OUTPUT (policy ACCEPT)\n" +"target prot opt source destination\n" +"\n" +"Chain RH-Firewall-1-INPUT (2 references)\n" +"target prot opt source destination\n" +"ACCEPT all -- anywhere anywhere\n" +"ACCEPT icmp -- anywhere anywhere icmp any\n" +"ACCEPT esp -- anywhere anywhere\n" +"ACCEPT ah -- anywhere anywhere\n" +"ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns\n" +"ACCEPT udp -- anywhere anywhere udp dpt:ipp\n" +"ACCEPT tcp -- anywhere anywhere tcp dpt:ipp\n" +"ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED\n" +"ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh\n" +"REJECT all -- anywhere anywhere reject-with icmp-host-\n" +"" +msgstr "" + diff --git a/docs/pot/delete-reset-vpn.pot b/docs/pot/delete-reset-vpn.pot new file mode 100644 index 00000000000..54b2143fe13 --- /dev/null +++ b/docs/pot/delete-reset-vpn.pot @@ -0,0 +1,130 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Restarting and Removing a VPN Connection" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC to which you want to deploy the VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VPC page is displayed where all the tiers you created are listed in a diagram." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Settings icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following options are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network ASLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select Site-to-Site VPN." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Site-to-Site VPN page is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "From the Select View drop-down, ensure that VPN Connection is selected." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPN connections you created are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the VPN connection you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Details tab is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To remove a VPN connection, click the Delete VPN connection button remove-vpn.png: button to remove a VPN connection " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To restart a VPN connection, click the Reset VPN connection button present in the Details tab. reset-vpn.png: button to reset a VPN connection " +msgstr "" + diff --git a/docs/pot/delete-templates.pot b/docs/pot/delete-templates.pot new file mode 100644 index 00000000000..d1cf15f1e92 --- /dev/null +++ b/docs/pot/delete-templates.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Deleting Templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Templates may be deleted. In general, when a template spans multiple Zones, only the copy that is selected for deletion will be deleted; the same template in other Zones will not be deleted. The provided CentOS template is an exception to this. If the provided CentOS template is deleted, it will be deleted from all Zones." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When templates are deleted, the VMs instantiated from them will continue to run. However, new VMs cannot be created based on the deleted template." +msgstr "" + diff --git a/docs/pot/deleting-vms.pot b/docs/pot/deleting-vms.pot new file mode 100644 index 00000000000..236b460ad19 --- /dev/null +++ b/docs/pot/deleting-vms.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Deleting VMs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Users can delete their own virtual machines. A running virtual machine will be abruptly stopped before it is deleted. Administrators can delete any virtual machines." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To delete a virtual machine:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Instances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the VM that you want to delete." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Destroy Instance button Destroyinstance.png: button to destroy an instance " +msgstr "" + diff --git a/docs/pot/dell62xx-hardware.pot b/docs/pot/dell62xx-hardware.pot new file mode 100644 index 00000000000..b55f4d1271e --- /dev/null +++ b/docs/pot/dell62xx-hardware.pot @@ -0,0 +1,82 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Dell 62xx" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following steps show how a Dell 62xx is configured for zone-level layer-3 switching. These steps assume VLAN 201 is used to route untagged private IPs for pod 1, and pod 1’s layer-2 switch is connected to Ethernet port 1/g1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Dell 62xx Series switch supports up to 1024 VLANs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure all the VLANs in the database." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vlan database\n" +"vlan 200-999\n" +"exit" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure Ethernet port 1/g1." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "interface ethernet 1/g1\n" +"switchport mode general\n" +"switchport general pvid 201\n" +"switchport general allowed vlan add 201 untagged\n" +"switchport general allowed vlan add 300-999 tagged\n" +"exit" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The statements configure Ethernet port 1/g1 as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN 201 is the native untagged VLAN for port 1/g1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All VLANs (300-999) are passed to all the pod-level layer-2 switches." +msgstr "" + diff --git a/docs/pot/dell62xx-layer2.pot b/docs/pot/dell62xx-layer2.pot new file mode 100644 index 00000000000..a0b588c003f --- /dev/null +++ b/docs/pot/dell62xx-layer2.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Dell 62xx" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following steps show how a Dell 62xx is configured for pod-level layer-2 switching." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure all the VLANs in the database." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vlan database\n" +"vlan 300-999\n" +"exit" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN 201 is used to route untagged private IP addresses for pod 1, and pod 1 is connected to this layer-2 switch." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "interface range ethernet all\n" +"switchport mode general\n" +"switchport general allowed vlan add 300-999 tagged\n" +"exit" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The statements configure all Ethernet ports to function as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All ports are configured the same way." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All VLANs (300-999) are passed through all the ports of the layer-2 switch." +msgstr "" + diff --git a/docs/pot/deployment-architecture-overview.pot b/docs/pot/deployment-architecture-overview.pot new file mode 100644 index 00000000000..3ce4056de44 --- /dev/null +++ b/docs/pot/deployment-architecture-overview.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Deployment Architecture Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A &PRODUCT; installation consists of two parts: the Management Server and the cloud infrastructure that it manages. When you set up and manage a &PRODUCT; cloud, you provision resources such as hosts, storage devices, and IP addresses into the Management Server, and the Management Server manages those resources." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The minimum production installation consists of one machine running the &PRODUCT; Management Server and another machine to act as the cloud infrastructure (in this case, a very simple infrastructure consisting of one host running hypervisor software). In its smallest deployment, a single machine can act as both the Management Server and the hypervisor host (using the KVM hypervisor)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A more full-featured installation consists of a highly-available multi-node Management Server installation and up to tens of thousands of hosts using any of several advanced networking setups. For information about deployment options, see Choosing a Deployment Architecture." +msgstr "" + diff --git a/docs/pot/detach-move-volumes.pot b/docs/pot/detach-move-volumes.pot new file mode 100644 index 00000000000..405ce9bfc74 --- /dev/null +++ b/docs/pot/detach-move-volumes.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Attaching a Volume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This procedure is different from moving disk volumes from one storage pool to another. See VM Storage Migration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A volume can be detached from a guest VM and attached to another guest. Both &PRODUCT; administrators and users can detach volumes from VMs and move them to other VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the two VMs are in different clusters, and the volume is large, it may take several minutes for the volume to be moved to the new VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Storage, and choose Volumes in Select View. Alternatively, if you know which VM the volume is attached to, you can click Instances, click the VM name, and click View Volumes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the volume you want to detach, then click the Detach Disk button DetachDiskButton.png: button to detach a volume " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To move the volume to another VM, follow the steps in Attaching a Volume ." +msgstr "" + diff --git a/docs/pot/devcloud-usage-mode.pot b/docs/pot/devcloud-usage-mode.pot new file mode 100644 index 00000000000..50a687b6174 --- /dev/null +++ b/docs/pot/devcloud-usage-mode.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "DevCloud Usage Mode" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DevCloud can be used in several different ways:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Full sandbox. Where &PRODUCT; is run within the DevCloud instance started in Virtual Box." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In this mode, the &PRODUCT; management server runs within the instance and nested virtualization allows instantiation of tiny VMs within DevCloud itself. &PRODUCT; code modifications are done within DevCloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following diagram shows the architecture of the SandBox mode." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A deployment environment. Where &PRODUCT; code is developed in the localhost of the developer and the resulting build is deployed within DevCloud" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This mode was used in the testing procedure of &PRODUCT; 4.0.0 incubating release. See the following screencast to see how: http://vimeo.com/54621457" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A host-only mode. Where DevCloud is used only as a host. &PRODUCT; management server is run in the localhost of the developer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This mode makes use of a host-only interface defined in the Virtual Box preferences. Check the following screencast to see how: http://vimeo.com/54610161" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following schematic shows the architecture of the Host-Only mode." +msgstr "" + diff --git a/docs/pot/devcloud.pot b/docs/pot/devcloud.pot new file mode 100644 index 00000000000..7d9f6f94a12 --- /dev/null +++ b/docs/pot/devcloud.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "DevCloud" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DevCloud is the &PRODUCT; sandbox. It is provided as a Virtual Box appliance. It is meant to be used as a development environment to easily test new &PRODUCT; development. It has also been used for training and &PRODUCT; demos since it provides a Cloud in a box." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DevCloud is provided as a convenience by community members. It is not an official &PRODUCT; release artifact." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; source code however, contains tools to build your own DevCloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DevCloud is under development and should be considered a Work In Progress (WIP), the wiki is the most up to date documentation:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + diff --git a/docs/pot/developer-getting-started.pot b/docs/pot/developer-getting-started.pot new file mode 100644 index 00000000000..b0c3703a124 --- /dev/null +++ b/docs/pot/developer-getting-started.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Getting Started" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To get started using the &PRODUCT; API, you should have the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL of the &PRODUCT; server you wish to integrate with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Both the API Key and Secret Key for an account. This should have been generated by the administrator of the cloud instance and given to you." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Familiarity with HTTP GET/POST and query strings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Knowledge of either XML or JSON." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Knowledge of a programming language that can generate HTTP requests; for example, Java or PHP." +msgstr "" + diff --git a/docs/pot/developer-introduction.pot b/docs/pot/developer-introduction.pot new file mode 100644 index 00000000000..5ce4fe3872c --- /dev/null +++ b/docs/pot/developer-introduction.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Introduction to the &PRODUCT; API" +msgstr "" + diff --git a/docs/pot/disable-enable-zones-pods-clusters.pot b/docs/pot/disable-enable-zones-pods-clusters.pot new file mode 100644 index 00000000000..064346f09fe --- /dev/null +++ b/docs/pot/disable-enable-zones-pods-clusters.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Disabling and Enabling Zones, Pods, and Clusters" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can enable or disable a zone, pod, or cluster without permanently removing it from the cloud. This is useful for maintenance or when there are problems that make a portion of the cloud infrastructure unreliable. No new allocations will be made to a disabled zone, pod, or cluster until its state is returned to Enabled. When a zone, pod, or cluster is first added to the cloud, it is Disabled by default." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To disable and enable a zone, pod, or cluster:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as administrator" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Infrastructure." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Zones, click View More." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are disabling or enabling a zone, find the name of the zone in the list, and click the Enable/Disable button. enable-disable.png: button to enable or disable zone, pod, or cluster. " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are disabling or enabling a pod or cluster, click the name of the zone that contains the pod or cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Compute tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Pods or Clusters node of the diagram, click View All." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the pod or cluster name in the list." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Enable/Disable button. " +msgstr "" + diff --git a/docs/pot/disk-volume-usage-record-format.pot b/docs/pot/disk-volume-usage-record-format.pot new file mode 100644 index 00000000000..67e4dff727b --- /dev/null +++ b/docs/pot/disk-volume-usage-record-format.pot @@ -0,0 +1,105 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Disk Volume Usage Record Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For disk volumes, the following fields exist in a usage record." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "account – name of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "accountid – ID of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "domainid – ID of the domain in which this account resides" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "zoneid – Zone where the usage occurred" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "description – A string describing what the usage record is tracking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage – String representation of the usage, including the units of usage (e.g. 'Hrs' for hours)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usagetype – A number representing the usage type (see Usage Types)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rawusage – A number representing the actual usage in hours" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usageid – The volume ID" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "offeringid – The ID of the disk offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "type – Hypervisor" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "templateid – ROOT template ID" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "size – The amount of storage allocated" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startdate, enddate – The range of time for which the usage is aggregated; see Dates in the Usage Record" +msgstr "" + diff --git a/docs/pot/dns-dhcp.pot b/docs/pot/dns-dhcp.pot new file mode 100644 index 00000000000..ef86c0ed7d8 --- /dev/null +++ b/docs/pot/dns-dhcp.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "DNS and DHCP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Virtual Router provides DNS and DHCP services to the guests. It proxies DNS requests to the DNS server configured on the Availability Zone." +msgstr "" + diff --git a/docs/pot/domains.pot b/docs/pot/domains.pot new file mode 100644 index 00000000000..9278a41978c --- /dev/null +++ b/docs/pot/domains.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Domains" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the LDAP server requires SSL, you need to enable it in the ldapConfig command by setting the parameters ssl, truststore, and truststorepass. Before enabling SSL for ldapConfig, you need to get the certificate which the LDAP server is using and add it to a trusted keystore. You will need to know the path to the keystore and the password." +msgstr "" + diff --git a/docs/pot/enable-disable-static-nat-vpc.pot b/docs/pot/enable-disable-static-nat-vpc.pot new file mode 100644 index 00000000000..a45a1354d0a --- /dev/null +++ b/docs/pot/enable-disable-static-nat-vpc.pot @@ -0,0 +1,135 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Enabling or Disabling Static NAT on a VPC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A static NAT rule maps a public IP address to the private IP address of a VM in a VPC to allow Internet traffic to it. This section tells how to enable or disable static NAT for a particular IP address in a VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If port forwarding rules are already in effect for an IP address, you cannot enable static NAT to that IP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If a guest VM is part of more than one network, static NAT rules will function only if they are defined on the default network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC to which you want to deploy the VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VPC page is displayed where all the tiers you created are listed in a diagram." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Settings icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following options are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network ACLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IP Addresses page is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the IP you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Details tab,click the Static NAT button. enable-disable.png: button to enable Statid NAT. The button toggles between Enable and Disable, depending on whether static NAT is currently enabled for the IP address." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are enabling static NAT, a dialog appears as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the tier and the destination VM, then click Apply." +msgstr "" + diff --git a/docs/pot/enable-disable-static-nat.pot b/docs/pot/enable-disable-static-nat.pot new file mode 100644 index 00000000000..1b4bab178e3 --- /dev/null +++ b/docs/pot/enable-disable-static-nat.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Enabling or Disabling Static NAT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If port forwarding rules are already in effect for an IP address, you cannot enable static NAT to that IP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If a guest VM is part of more than one network, static NAT rules will function only if they are defined on the default network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the network where you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click View IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the IP address you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Static NAT button. ReleaseIPButton.png: button to release an IP The button toggles between Enable and Disable, depending on whether static NAT is currently enabled for the IP address." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are enabling static NAT, a dialog appears where you can choose the destination VM and click Apply" +msgstr "" + diff --git a/docs/pot/enable-security-groups.pot b/docs/pot/enable-security-groups.pot new file mode 100644 index 00000000000..4af60756ebd --- /dev/null +++ b/docs/pot/enable-security-groups.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Enabling Security Groups" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In order for security groups to function in a zone, the security groups feature must first be enabled for the zone. The administrator can do this when creating a new zone, by selecting a network offering that includes security groups. The procedure is described in Basic Zone Configuration in the Advanced Installation Guide." +msgstr "" + diff --git a/docs/pot/enabling-api-call-expiration.pot b/docs/pot/enabling-api-call-expiration.pot new file mode 100644 index 00000000000..d21abe2d156 --- /dev/null +++ b/docs/pot/enabling-api-call-expiration.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Enabling API Call Expiration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can set an expiry timestamp on API calls to prevent replay attacks over non-secure channels, such as HTTP. The server tracks the expiry timestamp you have specified and rejects all the subsequent API requests that come in after this validity period." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To enable this feature, add the following parameters to the API request:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "signatureVersion=3: If the signatureVersion parameter is missing or is not equal to 3, the expires parameter is ignored in the API request." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "expires=YYYY-MM-DDThh:mm:ssZ: Specifies the date and time at which the signature included in the request is expired. The timestamp is expressed in the YYYY-MM-DDThh:mm:ssZ format, as specified in the ISO 8601 standard." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "expires=2011-10-10T12:00:00+0530" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A sample API request with expiration is given below:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://<IPAddress>:8080/client/api?command=listZones&signatureVersion=3&expires=2011-10-10T12:00:00+0530&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXq-jB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D" +msgstr "" + diff --git a/docs/pot/enabling-port-8096.pot b/docs/pot/enabling-port-8096.pot new file mode 100644 index 00000000000..21836fe010d --- /dev/null +++ b/docs/pot/enabling-port-8096.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Enabling Port 8096" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Port 8096, which allows API calls without authentication, is closed and disabled by default on any fresh 3.0.1 installations. You can enable 8096 (or another port) for this purpose as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that the first Management Server is installed and running." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set the global configuration parameter integration.api.port to the desired port." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the Management Server host machine, create an iptables rule allowing access to that port." +msgstr "" + diff --git a/docs/pot/end-user-ui-overview.pot b/docs/pot/end-user-ui-overview.pot new file mode 100644 index 00000000000..9e0e5684fed --- /dev/null +++ b/docs/pot/end-user-ui-overview.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "End User's UI Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; UI helps users of cloud infrastructure to view and use their cloud resources, including virtual machines, templates and ISOs, data volumes and snapshots, guest networks, and IP addresses. If the user is a member or administrator of one or more &PRODUCT; projects, the UI can provide a project-oriented view." +msgstr "" + diff --git a/docs/pot/error-handling.pot b/docs/pot/error-handling.pot new file mode 100644 index 00000000000..d96cbdaa4ae --- /dev/null +++ b/docs/pot/error-handling.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Error Handling" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If an error occurs while processing an API request, the appropriate response in the format specified is returned. Each error response consists of an error code and an error text describing what possibly can go wrong. For an example error response, see page 12." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "An HTTP error code of 401 is always returned if API request was rejected due to bad signatures, missing API Keys, or the user simply did not have the permissions to execute the command." +msgstr "" + diff --git a/docs/pot/event-log-queries.pot b/docs/pot/event-log-queries.pot new file mode 100644 index 00000000000..b6ecf6cc703 --- /dev/null +++ b/docs/pot/event-log-queries.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Event Log Queries" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Database logs can be queried from the user interface. The list of events captured by the system includes:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Virtual machine creation, deletion, and on-going management operations" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Virtual router creation, deletion, and on-going management operations" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Template creation and deletion" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network/load balancer rules creation and deletion" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage volume creation and deletion" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "User login and logout" +msgstr "" + diff --git a/docs/pot/event-types.pot b/docs/pot/event-types.pot new file mode 100644 index 00000000000..fc06fb73878 --- /dev/null +++ b/docs/pot/event-types.pot @@ -0,0 +1,575 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Event Types" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VM.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE.EXTRACT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SG.REVOKE.INGRESS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VM.DESTROY" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE.UPLOAD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "HOST.RECONNECT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VM.START" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE.CLEANUP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "MAINT.CANCEL" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VM.STOP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VOLUME.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "MAINT.CANCEL.PS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VM.REBOOT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VOLUME.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "MAINT.PREPARE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VM.UPGRADE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VOLUME.ATTACH" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "MAINT.PREPARE.PS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VM.RESETPASSWORD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VOLUME.DETACH" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPN.REMOTE.ACCESS.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ROUTER.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VOLUME.UPLOAD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPN.USER.ADD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ROUTER.DESTROY" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SERVICEOFFERING.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPN.USER.REMOVE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ROUTER.START" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SERVICEOFFERING.UPDATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NETWORK.RESTART" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ROUTER.STOP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SERVICEOFFERING.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "UPLOAD.CUSTOM.CERTIFICATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ROUTER.REBOOT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DOMAIN.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ROUTER.HA" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DOMAIN.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "STATICNAT.DISABLE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "PROXY.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DOMAIN.UPDATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SSVM.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "PROXY.DESTROY" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SNAPSHOT.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SSVM.DESTROY" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "PROXY.START" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SNAPSHOT.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SSVM.START" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "PROXY.STOP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SNAPSHOTPOLICY.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SSVM.STOP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "PROXY.REBOOT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SNAPSHOTPOLICY.UPDATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SSVM.REBOOT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "PROXY.HA" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SNAPSHOTPOLICY.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SSVM.H" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VNC.CONNECT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VNC.DISCONNECT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NET.IPASSIGN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NET.IPRELEASE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NET.RULEADD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NET.RULEDELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NET.RULEMODIFY" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NETWORK.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NETWORK.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "LB.ASSIGN.TO.RULE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "LB.REMOVE.FROM.RULE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "LB.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "LB.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "LB.UPDATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "USER.LOGIN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "USER.LOGOUT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "USER.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "USER.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "USER.UPDATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "USER.DISABLE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE.UPDATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE.COPY" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE.DOWNLOAD.START" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE.DOWNLOAD.SUCCESS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE.DOWNLOAD.FAILED" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISO.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISO.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISO.COPY" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISO.ATTACH" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISO.DETACH" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISO.EXTRACT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISO.UPLOAD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SERVICE.OFFERING.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SERVICE.OFFERING.EDIT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SERVICE.OFFERING.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DISK.OFFERING.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DISK.OFFERING.EDIT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DISK.OFFERING.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NETWORK.OFFERING.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NETWORK.OFFERING.EDIT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NETWORK.OFFERING.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "POD.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "POD.EDIT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "POD.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ZONE.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ZONE.EDIT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ZONE.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN.IP.RANGE.CREATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN.IP.RANGE.DELETE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CONFIGURATION.VALUE.EDIT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SG.AUTH.INGRESS" +msgstr "" + diff --git a/docs/pot/events-log.pot b/docs/pot/events-log.pot new file mode 100644 index 00000000000..bdfb9c23ea9 --- /dev/null +++ b/docs/pot/events-log.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Event Logs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There are two types of events logged in the &PRODUCT; Event Log. Standard events log the success or failure of an event and can be used to identify jobs or processes that have failed. There are also long running job events. Events for asynchronous jobs log when a job is scheduled, when it starts, and when it completes. Other long running synchronous jobs log when a job starts, and when it completes. Long running synchronous and asynchronous event logs can be used to gain more information on the status of a pending job or can be used to identify a job that is hanging or has not started. The following sections provide more information on these events.." +msgstr "" + diff --git a/docs/pot/events.pot b/docs/pot/events.pot new file mode 100644 index 00000000000..24a646eec0f --- /dev/null +++ b/docs/pot/events.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Events" +msgstr "" + diff --git a/docs/pot/example-LDAP-configuration-commands.pot b/docs/pot/example-LDAP-configuration-commands.pot new file mode 100644 index 00000000000..693bf19fabd --- /dev/null +++ b/docs/pot/example-LDAP-configuration-commands.pot @@ -0,0 +1,82 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Example LDAP Configuration Commands" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To understand the examples in this section, you need to know the basic concepts behind calling the &PRODUCT; API, which are explained in the Developer’s Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following shows an example invocation of ldapConfig with an ApacheDS LDAP server" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://127.0.0.1:8080/client/api?command=ldapConfig&hostname=127.0.0.1&searchbase=ou%3Dtesting%2Co%3Dproject&queryfilter=%28%26%28uid%3D%25u%29%29&binddn=cn%3DJohn+Singh%2Cou%3Dtesting%2Co%project&bindpass=secret&port=10389&ssl=true&truststore=C%3A%2Fcompany%2Finfo%2Ftrusted.ks&truststorepass=secret&response=json&apiKey=YourAPIKey&signature=YourSignatureHash" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The command must be URL-encoded. Here is the same example without the URL encoding:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://127.0.0.1:8080/client/api?command=ldapConfig\n" +"&hostname=127.0.0.1\n" +"&searchbase=ou=testing,o=project\n" +"&queryfilter=(&(%uid=%u))\n" +"&binddn=cn=John+Singh,ou=testing,o=project\n" +"&bindpass=secret\n" +"&port=10389\n" +"&ssl=true\n" +"&truststore=C:/company/info/trusted.ks\n" +"&truststorepass=secret\n" +"&response=json\n" +"&apiKey=YourAPIKey&signature=YourSignatureHash\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following shows a similar command for Active Directory. Here, the search base is the testing group within a company, and the users are matched up based on email address." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://10.147.29.101:8080/client/api?command=ldapConfig&hostname=10.147.28.250&searchbase=OU%3Dtesting%2CDC%3Dcompany&queryfilter=%28%26%28mail%3D%25e%29%29 &binddn=CN%3DAdministrator%2COU%3Dtesting%2CDC%3Dcompany&bindpass=1111_aaaa&port=389&response=json&apiKey=YourAPIKey&signature=YourSignatureHash" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The next few sections explain some of the concepts you will need to know when filling out the ldapConfig parameters." +msgstr "" + diff --git a/docs/pot/example-response-from-listUsageRecords.pot b/docs/pot/example-response-from-listUsageRecords.pot new file mode 100644 index 00000000000..50b39f40a6e --- /dev/null +++ b/docs/pot/example-response-from-listUsageRecords.pot @@ -0,0 +1,64 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Example response from listUsageRecords" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All &PRODUCT; API requests are submitted in the form of a HTTP GET/POST with an associated command and any parameters. A request is composed of the following whether in HTTP or HTTPS:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" <listusagerecordsresponse>\n" +" <count>1816</count>\n" +" <usagerecord>\n" +" <account>user5</account>\n" +" <accountid>10004</accountid>\n" +" <domainid>1</domainid>\n" +" <zoneid>1</zoneid>\n" +" <description>i-3-4-WC running time (ServiceOffering: 1) (Template: 3)</description>\n" +" <usage>2.95288 Hrs</usage>\n" +" <usagetype>1</usagetype>\n" +" <rawusage>2.95288</rawusage>\n" +" <virtualmachineid>4</virtualmachineid>\n" +" <name>i-3-4-WC</name>\n" +" <offeringid>1</offeringid>\n" +" <templateid>3</templateid>\n" +" <usageid>245554</usageid>\n" +" <type>XenServer</type>\n" +" <startdate>2009-09-15T00:00:00-0700</startdate>\n" +" <enddate>2009-09-18T16:14:26-0700</enddate>\n" +" </usagerecord>\n" +"\n" +" … (1,815 more usage records)\n" +" </listusagerecordsresponse>\n" +" " +msgstr "" + diff --git a/docs/pot/export-template.pot b/docs/pot/export-template.pot new file mode 100644 index 00000000000..8316f4bb966 --- /dev/null +++ b/docs/pot/export-template.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Exporting Templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "End users and Administrators may export templates from the &PRODUCT;. Navigate to the template in the UI and choose the Download function from the Actions menu." +msgstr "" + diff --git a/docs/pot/external-firewalls-and-load-balancers.pot b/docs/pot/external-firewalls-and-load-balancers.pot new file mode 100644 index 00000000000..8c628710e11 --- /dev/null +++ b/docs/pot/external-firewalls-and-load-balancers.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "External Firewalls and Load Balancers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; is capable of replacing its Virtual Router with an external Juniper SRX device and an optional external NetScaler or F5 load balancer for gateway and load balancing services. In this case, the VMs use the SRX as their gateway." +msgstr "" + diff --git a/docs/pot/external-fw-topology-req.pot b/docs/pot/external-fw-topology-req.pot new file mode 100644 index 00000000000..f218b10e870 --- /dev/null +++ b/docs/pot/external-fw-topology-req.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "External Firewall Topology Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When external firewall integration is in place, the public IP VLAN must still be trunked to the Hosts. This is required to support the Secondary Storage VM and Console Proxy VM." +msgstr "" + diff --git a/docs/pot/external-guest-firewall-integration.pot b/docs/pot/external-guest-firewall-integration.pot new file mode 100644 index 00000000000..5d7c7d19eaa --- /dev/null +++ b/docs/pot/external-guest-firewall-integration.pot @@ -0,0 +1,251 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "External Guest Firewall Integration for Juniper SRX (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Available only for guests using advanced networking." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides for direct management of the Juniper SRX series of firewalls. This enables &PRODUCT; to establish static NAT mappings from public IPs to guest VMs, and to use the Juniper device in place of the virtual router for firewall services. You can have one or more Juniper SRX per zone. This feature is optional. If Juniper integration is not provisioned, &PRODUCT; will use the virtual router for these services." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Juniper SRX can optionally be used in conjunction with an external load balancer. External Network elements can be deployed in a side-by-side or inline configuration." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; requires the Juniper to be configured as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Supported SRX software version is 10.3 or higher." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install your SRX appliance according to the vendor's instructions." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Connect one interface to the management network and one interface to the public network. Alternatively, you can connect the same interface to both networks and a use a VLAN for the public network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure \"vlan-tagging\" is enabled on the private interface." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Record the public and private interface names. If you used a VLAN for the public interface, add a \".[VLAN TAG]\" after the interface name. For example, if you are using ge-0/0/3 for your public interface and VLAN tag 301, your public interface name would be \"ge-0/0/3.301\". Your private interface name should always be untagged because the &PRODUCT; software automatically creates tagged logical interfaces." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a public security zone and a private security zone. By default, these will already exist and will be called \"untrust\" and \"trust\". Add the public interface to the public zone and the private interface to the private zone. Note down the security zone names." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure there is a security policy from the private zone to the public zone that allows all traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Note the username and password of the account you want the &PRODUCT; software to log in to when it is programming rules." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure the \"ssh\" and \"xnm-clear-text\" system services are enabled." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If traffic metering is desired:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "a. Create an incoming firewall filter and an outgoing firewall filter. These filters should be the same names as your public security zone name and private security zone name respectively. The filters should be set to be \"interface-specific\". For example, here is the configuration where the public zone is \"untrust\" and the private zone is \"trust\":" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "root@cloud-srx# show firewall\n" +"filter trust {\n" +" interface-specific;\n" +"}\n" +"filter untrust {\n" +" interface-specific;\n" +"}" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add the firewall filters to your public interface. For example, a sample configuration output (for public interface ge-0/0/3.0, public security zone untrust, and private security zone trust) is:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "ge-0/0/3 {\n" +" unit 0 {\n" +" family inet {\n" +" filter {\n" +" input untrust;\n" +" output trust;\n" +" }\n" +" address 172.25.0.252/16;\n" +" }\n" +" }\n" +"}" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure all VLANs are brought to the private interface of the SRX." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After the &PRODUCT; Management Server is installed, log in to the &PRODUCT; UI as administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Infrastructure." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Zones, click View More." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the zone you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Network tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Network Service Providers node of the diagram, click Configure. (You might have to scroll down to see this.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click SRX." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Add New SRX button (+) and provide the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Address: The IP address of the SRX." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Username: The user name of the account on the SRX that &PRODUCT; should use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Password: The password of the account." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public Interface. The name of the public interface on the SRX. For example, ge-0/0/2. A \".x\" at the end of the interface indicates the VLAN that is in use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private Interface: The name of the private interface on the SRX. For example, ge-0/0/1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Usage Interface: (Optional) Typically, the public interface is used to meter traffic. If you want to use a different interface, specify its name here" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Number of Retries: The number of times to attempt a command on the SRX before failing. The default value is 2." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Timeout (seconds): The time to wait for a command on the SRX before considering it failed. Default is 300 seconds." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public Network: The name of the public network on the SRX. For example, trust." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private Network: The name of the private network on the SRX. For example, untrust." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Capacity: The number of networks the device can handle" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Dedicated: When marked as dedicated, this device will be dedicated to a single account. When Dedicated is checked, the value in the Capacity field has no significance implicitly, its value is 1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Global Settings. Set the parameter external.network.stats.interval to indicate how often you want &PRODUCT; to fetch network usage statistics from the Juniper SRX. If you are not using the SRX to gather network usage statistics, set to 0." +msgstr "" + diff --git a/docs/pot/external-guest-lb-integration.pot b/docs/pot/external-guest-lb-integration.pot new file mode 100644 index 00000000000..e1939dbf142 --- /dev/null +++ b/docs/pot/external-guest-lb-integration.pot @@ -0,0 +1,155 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "External Guest Load Balancer Integration (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; can optionally use a Citrix NetScaler or BigIP F5 load balancer to provide load balancing services to guests. If this is not enabled, &PRODUCT; will use the software load balancer in the virtual router." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To install and enable an external load balancer for &PRODUCT; management:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up the appliance according to the vendor's directions." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Connect it to the networks carrying public traffic and management traffic (these could be the same network)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Record the IP address, username, password, public interface name, and private interface name. The interface names will be something like \"1.1\" or \"1.2\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure that the VLANs are trunked to the management network interface." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After the &PRODUCT; Management Server is installed, log in as administrator to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Infrastructure." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Zones, click View More." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the zone you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Network tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Network Service Providers node of the diagram, click Configure. (You might have to scroll down to see this.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click NetScaler or F5." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Add button (+) and provide the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For NetScaler:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Address: The IP address of the SRX." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Username/Password: The authentication credentials to access the device. &PRODUCT; uses these credentials to access the device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Type: The type of device that is being added. It could be F5 Big Ip Load Balancer, NetScaler VPX, NetScaler MPX, or NetScaler SDX. For a comparison of the NetScaler types, see the &PRODUCT; Administration Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public interface: Interface of device that is configured to be part of the public network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private interface: Interface of device that is configured to be part of the private network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Number of retries. Number of times to attempt a command on the device before considering the operation failed. Default is 2." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Capacity: The number of networks the device can handle." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Dedicated: When marked as dedicated, this device will be dedicated to a single account. When Dedicated is checked, the value in the Capacity field has no significance implicitly, its value is 1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The installation and provisioning of the external load balancer is finished. You can proceed to add VMs and NAT or load balancing rules." +msgstr "" + diff --git a/docs/pot/extracting-source.pot b/docs/pot/extracting-source.pot new file mode 100644 index 00000000000..eb739a6dd0a --- /dev/null +++ b/docs/pot/extracting-source.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Extracting source" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Extracting the &PRODUCT; release is relatively simple and can be done with a single command as follows:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ tar -jxvf apache-cloudstack-4.0.0-incubating-src.tar.bz2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can now move into the directory:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ cd ./apache-cloudstack-4.0.0-incubating-src" +msgstr "" + diff --git a/docs/pot/feature-overview.pot b/docs/pot/feature-overview.pot new file mode 100644 index 00000000000..3f50f9f969b --- /dev/null +++ b/docs/pot/feature-overview.pot @@ -0,0 +1,100 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "What Can &PRODUCT; Do?" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Multiple Hypervisor Support" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; works with a variety of hypervisors, and a single cloud deployment can contain multiple hypervisor implementations. The current release of &PRODUCT; supports pre-packaged enterprise solutions like Citrix XenServer and VMware vSphere, as well as KVM or Xen running on Ubuntu or CentOS." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Massively Scalable Infrastructure Management" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; can manage tens of thousands of servers installed in multiple geographically distributed datacenters. The centralized management server scales linearly, eliminating the need for intermediate cluster-level management servers. No single component failure can cause cloud-wide outage. Periodic maintenance of the management server can be performed without affecting the functioning of virtual machines running in the cloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Automatic Configuration Management" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; automatically configures each guest virtual machine’s networking and storage settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; internally manages a pool of virtual appliances to support the cloud itself. These appliances offer services such as firewalling, routing, DHCP, VPN access, console proxy, storage access, and storage replication. The extensive use of virtual appliances simplifies the installation, configuration, and ongoing management of a cloud deployment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Graphical User Interface" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; offers an administrator's Web interface, used for provisioning and managing the cloud, as well as an end-user's Web interface, used for running VMs and managing VM templates. The UI can be customized to reflect the desired service provider or enterprise look and feel." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "API and Extensibility" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides an API that gives programmatic access to all the management features available in the UI. The API is maintained and documented. This API enables the creation of command line tools and new user interfaces to suit particular needs. See the Developer’s Guide and API Reference, both available at Apache CloudStack Guides and Apache CloudStack API Reference respectively." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; pluggable allocation architecture allows the creation of new types of allocators for the selection of storage and Hosts. See the Allocator Implementation Guide (http://docs.cloudstack.org/CloudStack_Documentation/Allocator_Implementation_Guide)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "High Availability" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; has a number of features to increase the availability of the system. The Management Server itself may be deployed in a multi-node installation where the servers are load balanced. MySQL may be configured to use replication to provide for a manual failover in the event of database loss. For the hosts, &PRODUCT; supports NIC bonding and the use of separate networks for storage as well as iSCSI Multipath." +msgstr "" + diff --git a/docs/pot/firewall-rules.pot b/docs/pot/firewall-rules.pot new file mode 100644 index 00000000000..6c661014436 --- /dev/null +++ b/docs/pot/firewall-rules.pot @@ -0,0 +1,105 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Firewall Rules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "By default, all incoming traffic to the public IP address is rejected by the firewall. To allow external traffic, you can open firewall ports by specifying firewall rules. You can optionally specify one or more CIDRs to filter the source IPs. This is useful when you want to allow only incoming requests from certain IP addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You cannot use firewall rules to open ports for an elastic IP address. When elastic IP is used, outside access is instead controlled through the use of security groups. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Firewall rules can be created using the Firewall tab in the Management Server UI. This tab is not displayed by default when &PRODUCT; is installed. To display the Firewall tab, the &PRODUCT; administrator must set the global configuration parameter firewall.rule.ui.enabled to \"true.\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To create a firewall rule:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the network where you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click View IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the IP address you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configuration tab and fill in the following values." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Source CIDR. (Optional) To accept only traffic from IP addresses within a particular address block, enter a CIDR or a comma-separated list of CIDRs. Example: 192.168.0.0/22. Leave empty to allow all CIDRs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol. The communication protocol in use on the opened port(s)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start Port and End Port. The port(s) you want to open on the firewall. If you are opening a single port, use the same number in both fields" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ICMP Type and ICMP Code. Used only if Protocol is set to ICMP. Provide the type and code required by the ICMP protocol to fill out the ICMP header. Refer to ICMP documentation for more details if you are not sure what to enter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add" +msgstr "" + diff --git a/docs/pot/first_ms_node_install.pot b/docs/pot/first_ms_node_install.pot new file mode 100644 index 00000000000..6ecb5b7f0cb --- /dev/null +++ b/docs/pot/first_ms_node_install.pot @@ -0,0 +1,64 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Install the First Management Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure you have configured your machine according to or as appropriate for your platform." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install the &PRODUCT; management server packages by issuing one of the following commands as appropriate:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# yum install cloud-client" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# apt-get install cloud-client" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(RPM-based distributions) When the installation is finished, run the following commands to start essential services:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service rpcbind start\n" +"# service nfs start\n" +"# chkconfig nfs on\n" +"# chkconfig rpcbind on\n" +" " +msgstr "" + diff --git a/docs/pot/generic-firewall-provisions.pot b/docs/pot/generic-firewall-provisions.pot new file mode 100644 index 00000000000..0f1d0a3d7d4 --- /dev/null +++ b/docs/pot/generic-firewall-provisions.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Generic Firewall Provisions" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The hardware firewall is required to serve two purposes:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protect the Management Servers. NAT and port forwarding should be configured to direct traffic from the public Internet to the Management Servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Route management network traffic between multiple zones. Site-to-site VPN should be configured between multiple zones." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To achieve the above purposes you must set up fixed configurations for the firewall. Firewall rules and policies need not change as users are provisioned into the cloud. Any brand of hardware firewall that supports NAT and site-to-site VPN can be used." +msgstr "" + diff --git a/docs/pot/getting-release.pot b/docs/pot/getting-release.pot new file mode 100644 index 00000000000..c2505e554b5 --- /dev/null +++ b/docs/pot/getting-release.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Getting the release" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can download the latest &PRODUCT; release from the Apache CloudStack project download page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You'll notice several links under the 'Latest release' section." +msgstr "" + +#. Tag: para +#, no-c-format +msgid " apache-cloudstack-4.0.0-incubating-src.tar.bz2 - This is the link to the release itself." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "PGP - This is a detached cryptographic signature that can be used to help verify the authenticity of the release." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "MD5 - An MD5 hash of the release to aid in verify the validity of the release download." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SHA512 - A SHA512 hash of the release to aid in verify the validity of the release download." +msgstr "" + diff --git a/docs/pot/global-config.pot b/docs/pot/global-config.pot new file mode 100644 index 00000000000..2b6b3015df7 --- /dev/null +++ b/docs/pot/global-config.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting Global Configuration Parameters" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides parameters that you can set to control many aspects of the cloud. When &PRODUCT; is first installed, and periodically thereafter, you might need to modify these settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the UI as administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Global Settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select View, choose one of the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Global Settings. This displays a list of the parameters with brief descriptions and current values." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor Capabilities. This displays a list of hypervisor versions with the maximum number of guests supported for each." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use the search box to narrow down the list to those you are interested in." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Edit icon to modify a value. If you are viewing Hypervisor Capabilities, you must click the name of the hypervisor first to display the editing screen." +msgstr "" + diff --git a/docs/pot/globally-configured-limits.pot b/docs/pot/globally-configured-limits.pot new file mode 100644 index 00000000000..390e8ab4926 --- /dev/null +++ b/docs/pot/globally-configured-limits.pot @@ -0,0 +1,175 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Globally Configured Limits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a zone, the guest virtual network has a 24 bit CIDR by default. This limits the guest virtual network to 254 running instances. It can be adjusted as needed, but this must be done before any instances are created in the zone. For example, 10.1.1.0/22 would provide for ~1000 addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following table lists limits set in the Global Configuration:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Parameter Name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Definition" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.account.public.ips" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Number of public IP addresses that can be owned by an account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.account.snapshots" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Number of snapshots that can exist for an account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.account.templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Number of templates that can exist for an account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.account.user.vms" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Number of virtual machine instances that can exist for an account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.account.volumes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Number of disk volumes that can exist for an account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.template.iso.size" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum size for a downloaded template or ISO in GB" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.volume.size.gb" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum size for a volume in GB" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "network.throttling.rate" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Default data transfer rate in megabits per second allowed per user (supported on XenServer)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "snapshot.max.hourly" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum recurring hourly snapshots to be retained for a volume. If the limit is reached, early snapshots from the start of the hour are deleted so that newer ones can be saved. This limit does not apply to manual snapshots. If set to 0, recurring hourly snapshots can not be scheduled" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "snapshot.max.daily" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum recurring daily snapshots to be retained for a volume. If the limit is reached, snapshots from the start of the day are deleted so that newer ones can be saved. This limit does not apply to manual snapshots. If set to 0, recurring daily snapshots can not be scheduled" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "snapshot.max.weekly" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum recurring weekly snapshots to be retained for a volume. If the limit is reached, snapshots from the beginning of the week are deleted so that newer ones can be saved. This limit does not apply to manual snapshots. If set to 0, recurring weekly snapshots can not be scheduled" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "snapshot.max.monthly" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum recurring monthly snapshots to be retained for a volume. If the limit is reached, snapshots from the beginning of the month are deleted so that newer ones can be saved. This limit does not apply to manual snapshots. If set to 0, recurring monthly snapshots can not be scheduled." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To modify global configuration parameters, use the global configuration screen in the &PRODUCT; UI. See Setting Global Configuration Parameters" +msgstr "" + diff --git a/docs/pot/guest-ip-ranges.pot b/docs/pot/guest-ip-ranges.pot new file mode 100644 index 00000000000..f193ca7df63 --- /dev/null +++ b/docs/pot/guest-ip-ranges.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Guest IP Ranges" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IP ranges for guest network traffic are set on a per-account basis by the user. This allows the users to configure their network in a fashion that will enable VPN linking between their guest network and their clients." +msgstr "" + diff --git a/docs/pot/guest-network.pot b/docs/pot/guest-network.pot new file mode 100644 index 00000000000..9f79450d7ca --- /dev/null +++ b/docs/pot/guest-network.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Guest Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a &PRODUCT; cloud, guest VMs can communicate with each other using shared infrastructure with the security and user perception that the guests have a private LAN." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; virtual router is the main component providing networking features for guest traffic." +msgstr "" + diff --git a/docs/pot/guest-nw-usage-with-traffic-sentinel.pot b/docs/pot/guest-nw-usage-with-traffic-sentinel.pot new file mode 100644 index 00000000000..baafd5d447e --- /dev/null +++ b/docs/pot/guest-nw-usage-with-traffic-sentinel.pot @@ -0,0 +1,90 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Guest Network Usage Integration for Traffic Sentinel" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To collect usage data for a guest network, &PRODUCT; needs to pull the data from an external network statistics collector installed on the network. Metering statistics for guest networks are available through &PRODUCT;’s integration with inMon Traffic Sentinel." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Traffic Sentinel is a network traffic usage data collection package. &PRODUCT; can feed statistics from Traffic Sentinel into its own usage records, providing a basis for billing users of cloud infrastructure. Traffic Sentinel uses the traffic monitoring protocol sFlow. Routers and switches generate sFlow records and provide them for collection by Traffic Sentinel, then &PRODUCT; queries the Traffic Sentinel database to obtain this information" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To construct the query, &PRODUCT; determines what guest IPs were in use during the current query interval. This includes both newly assigned IPs and IPs that were assigned in a previous time period and continued to be in use. &PRODUCT; queries Traffic Sentinel for network statistics that apply to these IPs during the time period they remained allocated in &PRODUCT;. The returned data is correlated with the customer account that owned each IP and the timestamps when IPs were assigned and released in order to create billable metering records in &PRODUCT;. When the Usage Server runs, it collects this data." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To set up the integration between &PRODUCT; and Traffic Sentinel:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On your network infrastructure, install Traffic Sentinel and configure it to gather traffic data. For installation and configuration steps, see inMon documentation at Traffic Sentinel Documentation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Traffic Sentinel UI, configure Traffic Sentinel to accept script querying from guest users. &PRODUCT; will be the guest user performing the remote queries to gather network usage for one or more IP addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click File > Users > Access Control > Reports Query, then select Guest from the drop-down list." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On &PRODUCT;, add the Traffic Sentinel host by calling the &PRODUCT; API command addTrafficMonitor. Pass in the URL of the Traffic Sentinel as protocol + host + port (optional); for example, http://10.147.28.100:8080. For the addTrafficMonitor command syntax, see the API Reference at API Documentation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For information about how to call the &PRODUCT; API, see the Developer’s Guide at CloudStack API Developer's Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select Configuration from the Global Settings page, and set the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "direct.network.stats.interval: How often you want &PRODUCT; to query Traffic Sentinel." +msgstr "" + diff --git a/docs/pot/guest-traffic.pot b/docs/pot/guest-traffic.pot new file mode 100644 index 00000000000..2da57bf537d --- /dev/null +++ b/docs/pot/guest-traffic.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Guest Traffic" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A network can carry guest traffic only between VMs within one zone. Virtual machines in different zones cannot communicate with each other using their IP addresses; they must communicate with each other by routing through a public IP address." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server automatically creates a virtual router for each network. A virtual router is a special virtual machine that runs on the hosts. Each virtual router has three network interfaces. Its eth0 interface serves as the gateway for the guest traffic and has the IP address of 10.1.1.1. Its eth1 interface is used by the system to configure the virtual router. Its eth2 interface is assigned a public IP address for public traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The virtual router provides DHCP and will automatically assign an IP address for each guest VM within the IP range assigned for the network. The user can manually reconfigure guest VMs to assume different IP addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Source NAT is automatically configured in the virtual router to forward outbound traffic for all guest VMs" +msgstr "" + diff --git a/docs/pot/ha-enabled-vm.pot b/docs/pot/ha-enabled-vm.pot new file mode 100644 index 00000000000..b91f9d1c648 --- /dev/null +++ b/docs/pot/ha-enabled-vm.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "HA-Enabled Virtual Machines" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The user can specify a virtual machine as HA-enabled. By default, all virtual router VMs and Elastic Load Balancing VMs are automatically configured as HA-enabled. When an HA-enabled VM crashes, &PRODUCT; detects the crash and restarts the VM automatically within the same Availability Zone. HA is never performed across different Availability Zones. &PRODUCT; has a conservative policy towards restarting VMs and ensures that there will never be two instances of the same VM running at the same time. The Management Server attempts to start the VM on another Host in the same cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "HA features work with iSCSI or NFS primary storage. HA with local storage is not supported." +msgstr "" + diff --git a/docs/pot/ha-for-hosts.pot b/docs/pot/ha-for-hosts.pot new file mode 100644 index 00000000000..c95851645d3 --- /dev/null +++ b/docs/pot/ha-for-hosts.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "HA for Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The user can specify a virtual machine as HA-enabled. By default, all virtual router VMs and Elastic Load Balancing VMs are automatically configured as HA-enabled. When an HA-enabled VM crashes, &PRODUCT; detects the crash and restarts the VM automatically within the same Availability Zone. HA is never performed across different Availability Zones. &PRODUCT; has a conservative policy towards restarting VMs and ensures that there will never be two instances of the same VM running at the same time. The Management Server attempts to start the VM on another Host in the same cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "HA features work with iSCSI or NFS primary storage. HA with local storage is not supported." +msgstr "" + diff --git a/docs/pot/ha-management-server.pot b/docs/pot/ha-management-server.pot new file mode 100644 index 00000000000..62404d8e665 --- /dev/null +++ b/docs/pot/ha-management-server.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "HA for Management Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; Management Server should be deployed in a multi-node configuration such that it is not susceptible to individual server failures. The Management Server itself (as distinct from the MySQL database) is stateless and may be placed behind a load balancer." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Normal operation of Hosts is not impacted by an outage of all Management Serves. All guest VMs will continue to work." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the Management Server is down, no new VMs can be created, and the end user and admin UI, API, dynamic load distribution, and HA will cease to work." +msgstr "" + diff --git a/docs/pot/hardware-config-eg.pot b/docs/pot/hardware-config-eg.pot new file mode 100644 index 00000000000..b42f0df2429 --- /dev/null +++ b/docs/pot/hardware-config-eg.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Example Hardware Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section contains an example configuration of specific switch models for zone-level layer-3 switching. It assumes VLAN management protocols, such as VTP or GVRP, have been disabled. The example scripts must be changed appropriately if you choose to use VTP or GVRP." +msgstr "" + diff --git a/docs/pot/hardware-firewall.pot b/docs/pot/hardware-firewall.pot new file mode 100644 index 00000000000..ba3d5f1622b --- /dev/null +++ b/docs/pot/hardware-firewall.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Hardware Firewall" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All deployments should have a firewall protecting the management server; see Generic Firewall Provisions. Optionally, some deployments may also have a Juniper SRX firewall that will be the default gateway for the guest networks; see ." +msgstr "" + diff --git a/docs/pot/host-add-vsphere.pot b/docs/pot/host-add-vsphere.pot new file mode 100644 index 00000000000..4798035d2c3 --- /dev/null +++ b/docs/pot/host-add-vsphere.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Host (vSphere)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For vSphere servers, we recommend creating the cluster of hosts in vCenter and then adding the entire cluster to &PRODUCT;. See Add Cluster: vSphere." +msgstr "" + diff --git a/docs/pot/host-add-xenserver-kvm-ovm.pot b/docs/pot/host-add-xenserver-kvm-ovm.pot new file mode 100644 index 00000000000..7b984e46043 --- /dev/null +++ b/docs/pot/host-add-xenserver-kvm-ovm.pot @@ -0,0 +1,210 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Host (XenServer or KVM)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer and KVM hosts can be added to a cluster at any time." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Requirements for XenServer and KVM Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure the hypervisor host does not have any VMs already running before you add it to &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configuration requirements:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each cluster must contain only hosts with the identical hypervisor." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For XenServer, do not put more than 8 hosts in a cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For KVM, do not put more than 16 hosts in a cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For hardware requirements, see the installation section for your hypervisor in the &PRODUCT; Installation Guide." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "XenServer Host Additional Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If network bonding is in use, the administrator must cable the new host identically to other hosts in the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For all additional hosts to be added to the cluster, run the following command. This will cause the host to join the master in a XenServer pool." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# xe pool-join master-address=[master IP] master-username=root master-password=[your password]" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When copying and pasting a command, be sure the command has pasted as a single line before executing. Some document viewers may introduce unwanted line breaks in copied text." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "With all hosts added to the XenServer pool, run the cloud-setup-bond script. This script will complete the configuration and setup of the bonds on the new hosts in the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy the script from the Management Server in /usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver/cloud-setup-bonding.sh to the master host and ensure it is executable." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the script:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# ./cloud-setup-bonding.sh" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "KVM Host Additional Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If shared mountpoint storage is in use, the administrator should ensure that the new host has all the same mountpoints (with storage mounted) as the other hosts in the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure the new host has the same network configuration (guest, private, and public network) as other hosts in the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are using OpenVswitch bridges edit the file agent.properties on the KVM host and set the parameter network.bridge.type to openvswitch before adding the host to &PRODUCT;" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Adding a XenServer or KVM Host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have not already done so, install the hypervisor software on the host. You will need to know which version of the hypervisor software version is supported by &PRODUCT; and what additional configuration is required to ensure the host will work with &PRODUCT;. To find these installation details, see the appropriate section for your hypervisor in the &PRODUCT; Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Infrastructure. In Zones, click View More, then click the zone in which you want to add the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Compute tab. In the Clusters node, click View All." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the cluster where you want to add the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click View Hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the following information." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host Name. The DNS name or IP address of the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Username. Usually root." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Password. This is the password for the user from your XenServer or KVM install)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host Tags (Optional). Any labels that you use to categorize hosts for ease of maintenance. For example, you can set to the cloud's HA tag (set in the ha.tag global configuration parameter) if you want this host to be used only for VMs with the \"high availability\" feature enabled. For more information, see HA-Enabled Virtual Machines as well as HA for Hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There may be a slight delay while the host is provisioned. It should automatically display in the UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat for additional hosts." +msgstr "" + diff --git a/docs/pot/host-add.pot b/docs/pot/host-add.pot new file mode 100644 index 00000000000..c52ebaa7d4b --- /dev/null +++ b/docs/pot/host-add.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before adding a host to the &PRODUCT; configuration, you must first install your chosen hypervisor on the host. &PRODUCT; can manage hosts running VMs under a variety of hypervisors." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; Installation Guide provides instructions on how to install each supported hypervisor and configure it for use with &PRODUCT;. See the appropriate section in the Installation Guide for information about which version of your chosen hypervisor is supported, as well as crucial additional steps to configure the hypervisor hosts for use with &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure you have performed the additional &PRODUCT;-specific configuration steps described in the hypervisor installation section for your particular hypervisor." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now add the hypervisor host to &PRODUCT;. The technique to use varies depending on the hypervisor." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + diff --git a/docs/pot/host-allocation.pot b/docs/pot/host-allocation.pot new file mode 100644 index 00000000000..cb6bee69c35 --- /dev/null +++ b/docs/pot/host-allocation.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Host Allocation" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The system automatically picks the most appropriate host to run each virtual machine. End users may specify the zone in which the virtual machine will be created. End users do not have control over which host will run the virtual machine instance." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; administrators can specify that certain hosts should have a preference for particular types of guest instances. For example, an administrator could state that a host should have a preference to run Windows guests. The default host allocator will attempt to place guests of that OS type on such hosts first. If no such host is available, the allocator will place the instance wherever there is sufficient physical capacity." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Both vertical and horizontal allocation is allowed. Vertical allocation consumes all the resources of a given host before allocating any guests on a second host. This reduces power consumption in the cloud. Horizontal allocation places a guest on each host in a round-robin fashion. This may yield better performance to the guests in some cases. &PRODUCT; also allows an element of CPU over-provisioning as configured by the administrator. Over-provisioning allows the administrator to commit more CPU cycles to the allocated guests than are actually available from the hardware." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; also provides a pluggable interface for adding new allocators. These custom allocators can provide any policy the administrator desires." +msgstr "" + diff --git a/docs/pot/hypervisor-host-install-agent.pot b/docs/pot/hypervisor-host-install-agent.pot new file mode 100644 index 00000000000..2c314d761e1 --- /dev/null +++ b/docs/pot/hypervisor-host-install-agent.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Install and configure the Agent" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To manage KVM instances on the host &PRODUCT; uses a Agent. This Agent communicates with the Management server and controls all the instances on the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "First we start by installing the agent:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In RHEL or CentOS:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ yum install cloud-agent" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Ubuntu:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ apt-get install cloud-agent" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The host is now ready to be added to a cluster. This is covered in a later section, see . It is recommended that you continue to read the documentation before adding the host!" +msgstr "" + diff --git a/docs/pot/hypervisor-host-install-finish.pot b/docs/pot/hypervisor-host-install-finish.pot new file mode 100644 index 00000000000..ae14351d5a8 --- /dev/null +++ b/docs/pot/hypervisor-host-install-finish.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Add the host to CloudStack" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The host is now ready to be added to a cluster. This is covered in a later section, see . It is recommended that you continue to read the documentation before adding the host!" +msgstr "" + diff --git a/docs/pot/hypervisor-host-install-firewall.pot b/docs/pot/hypervisor-host-install-firewall.pot new file mode 100644 index 00000000000..fb7a56cc6d7 --- /dev/null +++ b/docs/pot/hypervisor-host-install-firewall.pot @@ -0,0 +1,160 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configuring the firewall" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The hypervisor needs to be able to communicate with other hypervisors and the management server needs to be able to reach the hypervisor." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In order to do so we have to open the following TCP ports (if you are using a firewall):" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "22 (SSH)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "1798" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "16509 (libvirt)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "5900 - 6100 (VNC consoles)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "49152 - 49216 (libvirt live migration)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "It depends on the firewall you are using how to open these ports. Below you'll find examples how to open these ports in RHEL/CentOS and Ubuntu." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Open ports in RHEL/CentOS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "RHEL and CentOS use iptables for firewalling the system, you can open extra ports by executing the following iptable commands:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ iptables -I INPUT -p tcp -m tcp --dport 22 -j ACCEPT" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ iptables -I INPUT -p tcp -m tcp --dport 1798 -j ACCEPT" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ iptables -I INPUT -p tcp -m tcp --dport 16509 -j ACCEPT" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ iptables -I INPUT -p tcp -m tcp --dport 5900:6100 -j ACCEPT" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ iptables -I INPUT -p tcp -m tcp --dport 49152:49216 -j ACCEPT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These iptable settings are not persistent accross reboots, we have to save them first." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ iptables-save > /etc/sysconfig/iptables" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Open ports in Ubuntu" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The default firewall under Ubuntu is UFW (Uncomplicated FireWall), which is a Python wrapper around iptables." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To open the required ports, execute the following commands:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ ufw allow proto tcp from any to any port 22" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ ufw allow proto tcp from any to any port 1798" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ ufw allow proto tcp from any to any port 16509" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ ufw allow proto tcp from any to any port 5900:6100" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ ufw allow proto tcp from any to any port 49152:49216" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "By default UFW is not enabled on Ubuntu. Executing these commands with the firewall disabled does not enable the firewall." +msgstr "" + diff --git a/docs/pot/hypervisor-host-install-libvirt.pot b/docs/pot/hypervisor-host-install-libvirt.pot new file mode 100644 index 00000000000..f7eeed99085 --- /dev/null +++ b/docs/pot/hypervisor-host-install-libvirt.pot @@ -0,0 +1,140 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Install and Configure libvirt" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; uses libvirt for managing virtual machines. Therefore it is vital that libvirt is configured correctly. Libvirt is a dependency of cloud-agent and should already be installed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In order to have live migration working libvirt has to listen for unsecured TCP connections. We also need to turn off libvirts attempt to use Multicast DNS advertising. Both of these settings are in /etc/libvirt/libvirtd.conf" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set the following paramaters:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "listen_tls = 0" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "listen_tcp = 1" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "tcp_port = 16059" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "auth_tcp = \"none\"" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mdns_adv = 0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Turning on \"listen_tcp\" in libvirtd.conf is not enough, we have to change the parameters as well:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On RHEL or CentOS modify /etc/sysconfig/libvirtd:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Uncomment the following line:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "#LIBVIRTD_ARGS=\"--listen\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu: modify /etc/init/libvirt-bin.conf" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Change the following line (at the end of the file):" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "exec /usr/sbin/libvirtd -d" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "to (just add -l)" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "exec /usr/sbin/libvirtd -d -l" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart libvirt" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In RHEL or CentOS:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ service libvirtd restart" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Ubuntu:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ service libvirt-bin restart" +msgstr "" + diff --git a/docs/pot/hypervisor-host-install-network-openvswitch.pot b/docs/pot/hypervisor-host-install-network-openvswitch.pot new file mode 100644 index 00000000000..ab01e23a156 --- /dev/null +++ b/docs/pot/hypervisor-host-install-network-openvswitch.pot @@ -0,0 +1,263 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configure the network using OpenVswitch" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This is a very important section, please make sure you read this thoroughly." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In order to forward traffic to your instances you will need at least two bridges: public and private." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "By default these bridges are called cloudbr0 and cloudbr1, but you do have to make sure they are available on each hypervisor." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The most important factor is that you keep the configuration consistent on all your hypervisors." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Preparing" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To make sure that the native bridge module will not interfere with openvswitch the bridge module should be added to the blacklist. See the modprobe documentation for your distribution on where to find the blacklist. Make sure the module is not loaded either by rebooting or executing rmmod bridge before executing next steps." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The network configurations below depend on the ifup-ovs and ifdown-ovs scripts which are part of the openvswitch installation. They should be installed in /etc/sysconfig/network-scripts/" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Network example" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There are many ways to configure your network. In the Basic networking mode you should have two (V)LAN's, one for your private network and one for the public network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We assume that the hypervisor has one NIC (eth0) with three tagged VLAN's:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN 100 for management of the hypervisor" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN 200 for public network of the instances (cloudbr0)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN 300 for private network of the instances (cloudbr1)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On VLAN 100 we give the Hypervisor the IP-Address 192.168.42.11/24 with the gateway 192.168.42.1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Hypervisor and Management server don't have to be in the same subnet!" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configuring the network bridges" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "It depends on the distribution you are using how to configure these, below you'll find examples for RHEL/CentOS." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The goal is to have three bridges called 'mgmt0', 'cloudbr0' and 'cloudbr1' after this section. This should be used as a guideline only. The exact configuration will depend on your network layout." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configure OpenVswitch" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The network interfaces using OpenVswitch are created using the ovs-vsctl command. This command will configure the interfaces and persist them to the OpenVswitch database." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "First we create a main bridge connected to the eth0 interface. Next we create three fake bridges, each connected to a specific vlan tag." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# ovs-vsctl add-br cloudbr\n" +"# ovs-vsctl add-port cloudbr eth0 \n" +"# ovs-vsctl set port cloudbr trunks=100,200,300\n" +"# ovs-vsctl add-br mgmt0 cloudbr 100\n" +"# ovs-vsctl add-br cloudbr0 cloudbr 200\n" +"# ovs-vsctl add-br cloudbr1 cloudbr 300" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configure in RHEL or CentOS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The required packages were installed when openvswitch and libvirt were installed, we can proceed to configuring the network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "First we configure eth0" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-eth0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure it looks similair to:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=eth0\n" +"HWADDR=00:04:xx:xx:xx:xx\n" +"ONBOOT=yes\n" +"HOTPLUG=no\n" +"BOOTPROTO=none\n" +"TYPE=Ethernet" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We have to configure the base bridge with the trunk." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-cloudbr" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=cloudbr\n" +"ONBOOT=yes\n" +"HOTPLUG=no\n" +"BOOTPROTO=none\n" +"DEVICETYPE=ovs\n" +"TYPE=OVSBridge" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We now have to configure the three VLAN bridges:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-mgmt0" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=mgmt0\n" +"ONBOOT=yes\n" +"HOTPLUG=no\n" +"BOOTPROTO=static\n" +"DEVICETYPE=ovs\n" +"TYPE=OVSBridge\n" +"IPADDR=192.168.42.11\n" +"GATEWAY=192.168.42.1\n" +"NETMASK=255.255.255.0" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-cloudbr0" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=cloudbr0\n" +"ONBOOT=yes\n" +"HOTPLUG=no\n" +"BOOTPROTO=none\n" +"DEVICETYPE=ovs\n" +"TYPE=OVSBridge" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-cloudbr1" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=cloudbr1\n" +"ONBOOT=yes\n" +"HOTPLUG=no\n" +"BOOTPROTO=none\n" +"TYPE=OVSBridge\n" +"DEVICETYPE=ovs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "With this configuration you should be able to restart the network, although a reboot is recommended to see if everything works properly." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure you have an alternative way like IPMI or ILO to reach the machine in case you made a configuration error and the network stops functioning!" +msgstr "" + diff --git a/docs/pot/hypervisor-host-install-network.pot b/docs/pot/hypervisor-host-install-network.pot new file mode 100644 index 00000000000..f46ef2ee8c6 --- /dev/null +++ b/docs/pot/hypervisor-host-install-network.pot @@ -0,0 +1,313 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configure the network bridges" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This is a very important section, please make sure you read this thoroughly." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section details how to configure bridges using the native implementation in Linux. Please refer to the next section if you intend to use OpenVswitch" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In order to forward traffic to your instances you will need at least two bridges: public and private." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "By default these bridges are called cloudbr0 and cloudbr1, but you do have to make sure they are available on each hypervisor." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The most important factor is that you keep the configuration consistent on all your hypervisors." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Network example" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There are many ways to configure your network. In the Basic networking mode you should have two (V)LAN's, one for your private network and one for the public network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We assume that the hypervisor has one NIC (eth0) with three tagged VLAN's:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN 100 for management of the hypervisor" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN 200 for public network of the instances (cloudbr0)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN 300 for private network of the instances (cloudbr1)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On VLAN 100 we give the Hypervisor the IP-Address 192.168.42.11/24 with the gateway 192.168.42.1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Hypervisor and Management server don't have to be in the same subnet!" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configuring the network bridges" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "It depends on the distribution you are using how to configure these, below you'll find examples for RHEL/CentOS and Ubuntu." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The goal is to have two bridges called 'cloudbr0' and 'cloudbr1' after this section. This should be used as a guideline only. The exact configuration will depend on your network layout." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configure in RHEL or CentOS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The required packages were installed when libvirt was installed, we can proceed to configuring the network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "First we configure eth0" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-eth0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure it looks similair to:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=eth0\n" +"HWADDR=00:04:xx:xx:xx:xx\n" +"ONBOOT=yes\n" +"HOTPLUG=no\n" +"BOOTPROTO=none\n" +"TYPE=Ethernet" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We now have to configure the three VLAN interfaces:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-eth0.100" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=eth0.100\n" +"HWADDR=00:04:xx:xx:xx:xx\n" +"ONBOOT=yes\n" +"HOTPLUG=no\n" +"BOOTPROTO=none\n" +"TYPE=Ethernet\n" +"VLAN=yes\n" +"IPADDR=192.168.42.11\n" +"GATEWAY=192.168.42.1\n" +"NETMASK=255.255.255.0" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-eth0.200" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=eth0.200\n" +"HWADDR=00:04:xx:xx:xx:xx\n" +"ONBOOT=yes\n" +"HOTPLUG=no\n" +"BOOTPROTO=none\n" +"TYPE=Ethernet\n" +"VLAN=yes\n" +"BRIDGE=cloudbr0" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-eth0.300" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=eth0.300\n" +"HWADDR=00:04:xx:xx:xx:xx\n" +"ONBOOT=yes\n" +"HOTPLUG=no\n" +"BOOTPROTO=none\n" +"TYPE=Ethernet\n" +"VLAN=yes\n" +"BRIDGE=cloudbr1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now we have the VLAN interfaces configured we can add the bridges on top of them." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-cloudbr0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now we just configure it is a plain bridge without an IP-Adress" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=cloudbr0\n" +"TYPE=Bridge\n" +"ONBOOT=yes\n" +"BOOTPROTO=none\n" +"IPV6INIT=no\n" +"IPV6_AUTOCONF=no\n" +"DELAY=5\n" +"STP=yes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We do the same for cloudbr1" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/sysconfig/network-scripts/ifcfg-cloudbr1" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "DEVICE=cloudbr1\n" +"TYPE=Bridge\n" +"ONBOOT=yes\n" +"BOOTPROTO=none\n" +"IPV6INIT=no\n" +"IPV6_AUTOCONF=no\n" +"DELAY=5\n" +"STP=yes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "With this configuration you should be able to restart the network, although a reboot is recommended to see if everything works properly." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure you have an alternative way like IPMI or ILO to reach the machine in case you made a configuration error and the network stops functioning!" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configure in Ubuntu" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the required packages were installed when you installed libvirt, so we only have to configure the network." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/network/interfaces" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Modify the interfaces file to look like this:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "auto lo\n" +"iface lo inet loopback\n" +"\n" +"# The primary network interface\n" +"auto eth0.100\n" +"iface eth0.100 inet static\n" +" address 192.168.42.11\n" +" netmask 255.255.255.240\n" +" gateway 192.168.42.1\n" +" dns-nameservers 8.8.8.8 8.8.4.4\n" +" dns-domain lab.example.org\n" +"\n" +"# Public network\n" +"auto cloudbr0\n" +"iface cloudbr0 inet manual\n" +" bridge_ports eth0.200\n" +" bridge_fd 5\n" +" bridge_stp off\n" +" bridge_maxwait 1\n" +"\n" +"# Private network\n" +"auto cloudbr1\n" +"iface cloudbr1 inet manual\n" +" bridge_ports eth0.300\n" +" bridge_fd 5\n" +" bridge_stp off\n" +" bridge_maxwait 1" +msgstr "" + diff --git a/docs/pot/hypervisor-host-install-overview.pot b/docs/pot/hypervisor-host-install-overview.pot new file mode 100644 index 00000000000..f9eb4b77c3b --- /dev/null +++ b/docs/pot/hypervisor-host-install-overview.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "KVM Installation Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you want to use the Linux Kernel Virtual Machine (KVM) hypervisor to run guest virtual machines, install KVM on the host(s) in your cloud. The material in this section doesn't duplicate KVM installation docs. It provides the &PRODUCT;-specific steps that are needed to prepare a KVM host to work with &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before continuing, make sure that you have applied the latest updates to your host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "It is NOT recommended to run services on this host not controlled by &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The procedure for installing a KVM Hypervisor Host is:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare the Operating System" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install and configure libvirt" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure Security Policies (AppArmor and SELinux)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install and configure the Agent" +msgstr "" + diff --git a/docs/pot/hypervisor-host-install-prepare-os.pot b/docs/pot/hypervisor-host-install-prepare-os.pot new file mode 100644 index 00000000000..eb37323d048 --- /dev/null +++ b/docs/pot/hypervisor-host-install-prepare-os.pot @@ -0,0 +1,105 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Prepare the Operating System" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The OS of the Host must be prepared to host the &PRODUCT; Agent and run KVM instances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to your OS as root." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Check for a fully qualified hostname." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ hostname --fqdn" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This should return a fully qualified hostname such as \"kvm1.lab.example.org\". If it does not, edit /etc/hosts so that it does." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure that the machine can reach the Internet." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ ping www.cloudstack.org" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Turn on NTP for time synchronization." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NTP is required to synchronize the clocks of the servers in your cloud. Unsynchronized clocks can cause unexpected problems." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install NTP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On RHEL or CentOS:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ yum install ntp" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ apt-get install openntpd" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat all of these steps on every hypervisor host." +msgstr "" + diff --git a/docs/pot/hypervisor-host-install-security-policies.pot b/docs/pot/hypervisor-host-install-security-policies.pot new file mode 100644 index 00000000000..e13fd5fa308 --- /dev/null +++ b/docs/pot/hypervisor-host-install-security-policies.pot @@ -0,0 +1,145 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configure the Security Policies" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; does various things which can be blocked by security mechanisms like AppArmor and SELinux. These have to be disabled to ensure the Agent has all the required permissions." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure SELinux (RHEL and CentOS)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Check to see whether SELinux is installed on your machine. If not, you can skip this section." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In RHEL or CentOS, SELinux is installed and enabled by default. You can verify this with:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ rpm -qa | grep selinux" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set the SELINUX variable in /etc/selinux/config to \"permissive\". This ensures that the permissive setting will be maintained after a system reboot." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In RHEL or CentOS:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "vi /etc/selinux/config" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Change the following line" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "SELINUX=enforcing" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "to this" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "SELINUX=permissive" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Then set SELinux to permissive starting immediately, without requiring a system reboot." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ setenforce permissive" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure Apparmor (Ubuntu)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Check to see whether AppArmor is installed on your machine. If not, you can skip this section." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Ubuntu AppArmor is installed and enabled by default. You can verify this with:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ dpkg --list 'apparmor'" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disable the AppArmor profiles for libvirt" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ ln -s /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper /etc/apparmor.d/disable/" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ apparmor_parser -R /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper" +msgstr "" + diff --git a/docs/pot/hypervisor-installation.pot b/docs/pot/hypervisor-installation.pot new file mode 100644 index 00000000000..d8d76998189 --- /dev/null +++ b/docs/pot/hypervisor-installation.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Hypervisor Installation" +msgstr "" + diff --git a/docs/pot/hypervisor-kvm-install-flow.pot b/docs/pot/hypervisor-kvm-install-flow.pot new file mode 100644 index 00000000000..88595e47498 --- /dev/null +++ b/docs/pot/hypervisor-kvm-install-flow.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "KVM Hypervisor Host Installation" +msgstr "" + diff --git a/docs/pot/hypervisor-kvm-requirements.pot b/docs/pot/hypervisor-kvm-requirements.pot new file mode 100644 index 00000000000..10e56f616fa --- /dev/null +++ b/docs/pot/hypervisor-kvm-requirements.pot @@ -0,0 +1,115 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "System Requirements for KVM Hypervisor Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM is included with a variety of Linux-based operating systems. Although you are not required to run these distributions, the following are recommended:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CentOS / RHEL: 6.3" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ubuntu: 12.04(.1)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The main requirement for KVM hypervisors is the libvirt and Qemu version. No matter what Linux distribution you are using, make sure the following requirements are met:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "libvirt: 0.9.4 or higher" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Qemu/KVM: 1.0 or higher" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The default bridge in &PRODUCT; is the Linux native bridge implementation (bridge module). &PRODUCT; includes an option to work with OpenVswitch, the requirements are listed below" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "libvirt: 0.9.11 or higher" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "openvswitch: 1.7.1 or higher" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In addition, the following hardware requirements apply:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Within a single cluster, the hosts must be of the same distribution version." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All hosts within a cluster must be homogenous. The CPUs must be of the same type, count, and feature flags." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Must support HVM (Intel-VT or AMD-V enabled)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "64-bit x86 CPU (more cores results in better performance)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4 GB of memory" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "At least 1 NIC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you deploy &PRODUCT;, the hypervisor host must not have any VMs already running" +msgstr "" + diff --git a/docs/pot/hypervisor-support-for-primarystorage.pot b/docs/pot/hypervisor-support-for-primarystorage.pot new file mode 100644 index 00000000000..89d19323c7f --- /dev/null +++ b/docs/pot/hypervisor-support-for-primarystorage.pot @@ -0,0 +1,155 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Hypervisor Support for Primary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following table shows storage options and parameters for different hypervisors." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMware vSphere" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Citrix XenServer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Format for Disks, Templates, and Snapshots" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMDK" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VHD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "QCOW2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "iSCSI support" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMFS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Clustered LVM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Yes, via Shared Mountpoint" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fiber Channel support" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Yes, via Existing SR" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NFS support" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Y" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Local storage support" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage over-provisioning" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NFS and iSCSI" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NFS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer uses a clustered LVM system to store VM images on iSCSI and Fiber Channel volumes and does not support over-provisioning in the hypervisor. The storage server itself, however, can support thin-provisioning. As a result the &PRODUCT; can still support storage over-provisioning by running on thin-provisioned storage volumes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM supports \"Shared Mountpoint\" storage. A shared mountpoint is a file system path local to each server in a given cluster. The path must be the same across all Hosts in the cluster, for example /mnt/primary1. This shared mountpoint is assumed to be a clustered filesystem such as OCFS2. In this case the &PRODUCT; does not attempt to mount or unmount the storage as is done with NFS. The &PRODUCT; requires that the administrator insure that the storage is available" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "With NFS storage, &PRODUCT; manages the overprovisioning. In this case the global configuration parameter storage.overprovisioning.factor controls the degree of overprovisioning. This is independent of hypervisor type." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Local storage is an option for primary storage for vSphere, XenServer, and KVM. When the local disk option is enabled, a local disk storage pool is automatically created on each host. To use local storage for the System Virtual Machines (such as the Virtual Router), set system.vm.use.local.storage to true in global configuration." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; supports multiple primary storage pools in a Cluster. For example, you could provision 2 NFS servers in primary storage. Or you could provision 1 iSCSI LUN initially and then add a second iSCSI LUN when the first approaches capacity." +msgstr "" + diff --git a/docs/pot/import-ami.pot b/docs/pot/import-ami.pot new file mode 100644 index 00000000000..84225fb4f2e --- /dev/null +++ b/docs/pot/import-ami.pot @@ -0,0 +1,270 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Importing Amazon Machine Images" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following procedures describe how to import an Amazon Machine Image (AMI) into &PRODUCT; when using the XenServer hypervisor." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Assume you have an AMI file and this file is called CentOS_6.2_x64. Assume further that you are working on a CentOS host. If the AMI is a Fedora image, you need to be working on a Fedora host initially." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You need to have a XenServer host with a file-based storage repository (either a local ext3 SR or an NFS SR) to convert to a VHD once the image file has been customized on the Centos/Fedora host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When copying and pasting a command, be sure the command has pasted as a single line before executing. Some document viewers may introduce unwanted line breaks in copied text." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up loopback on image file:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# mkdir -p /mnt/loop/centos62\n" +"# mount -o loop CentOS_6.2_x64 /mnt/loop/centos54\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install the kernel-xen package into the image. This downloads the PV kernel and ramdisk to the image." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# yum -c /mnt/loop/centos54/etc/yum.conf --installroot=/mnt/loop/centos62/ -y install kernel-xen" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a grub entry in /boot/grub/grub.conf." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# mkdir -p /mnt/loop/centos62/boot/grub\n" +"# touch /mnt/loop/centos62/boot/grub/grub.conf\n" +"# echo \"\" > /mnt/loop/centos62/boot/grub/grub.conf\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Determine the name of the PV kernel that has been installed into the image." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# cd /mnt/loop/centos62\n" +"# ls lib/modules/\n" +"2.6.16.33-xenU 2.6.16-xenU 2.6.18-164.15.1.el5xen 2.6.18-164.6.1.el5.centos.plus 2.6.18-xenU-ec2-v1.0 2.6.21.7-2.fc8xen 2.6.31-302-ec2\n" +"# ls boot/initrd*\n" +"boot/initrd-2.6.18-164.6.1.el5.centos.plus.img boot/initrd-2.6.18-164.15.1.el5xen.img\n" +"# ls boot/vmlinuz*\n" +"boot/vmlinuz-2.6.18-164.15.1.el5xen boot/vmlinuz-2.6.18-164.6.1.el5.centos.plus boot/vmlinuz-2.6.18-xenU-ec2-v1.0 boot/vmlinuz-2.6.21-2952.fc8xen\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Xen kernels/ramdisk always end with \"xen\". For the kernel version you choose, there has to be an entry for that version under lib/modules, there has to be an initrd and vmlinuz corresponding to that. Above, the only kernel that satisfies this condition is 2.6.18-164.15.1.el5xen." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Based on your findings, create an entry in the grub.conf file. Below is an example entry." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "default=0\n" +"timeout=5\n" +"hiddenmenu\n" +"title CentOS (2.6.18-164.15.1.el5xen)\n" +" root (hd0,0)\n" +" kernel /boot/vmlinuz-2.6.18-164.15.1.el5xen ro root=/dev/xvda \n" +" initrd /boot/initrd-2.6.18-164.15.1.el5xen.img\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit etc/fstab, changing “sda1†to “xvda†and changing “sdb†to “xvdbâ€." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# cat etc/fstab\n" +"/dev/xvda / ext3 defaults 1 1\n" +"/dev/xvdb /mnt ext3 defaults 0 0\n" +"none /dev/pts devpts gid=5,mode=620 0 0\n" +"none /proc proc defaults 0 0\n" +"none /sys sysfs defaults 0 0\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Enable login via the console. The default console device in a XenServer system is xvc0. Ensure that etc/inittab and etc/securetty have the following lines respectively:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# grep xvc0 etc/inittab \n" +"co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav\n" +"# grep xvc0 etc/securetty \n" +"xvc0\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure the ramdisk supports PV disk and PV network. Customize this for the kernel version you have determined above." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# chroot /mnt/loop/centos54\n" +"# cd /boot/\n" +"# mv initrd-2.6.18-164.15.1.el5xen.img initrd-2.6.18-164.15.1.el5xen.img.bak\n" +"# mkinitrd -f /boot/initrd-2.6.18-164.15.1.el5xen.img --with=xennet --preload=xenblk --omit-scsi-modules 2.6.18-164.15.1.el5xen\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Change the password." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# passwd\n" +"Changing password for user root.\n" +"New UNIX password: \n" +"Retype new UNIX password: \n" +"passwd: all authentication tokens updated successfully.\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Exit out of chroot." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# exit" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Check etc/ssh/sshd_config for lines allowing ssh login using a password." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# egrep \"PermitRootLogin|PasswordAuthentication\" /mnt/loop/centos54/etc/ssh/sshd_config \n" +"PermitRootLogin yes\n" +"PasswordAuthentication yes\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you need the template to be enabled to reset passwords from the &PRODUCT; UI or API, install the password change script into the image at this point. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Unmount and delete loopback mount." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# umount /mnt/loop/centos54\n" +"# losetup -d /dev/loop0\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy the image file to your XenServer host's file-based storage repository. In the example below, the Xenserver is \"xenhost\". This XenServer has an NFS repository whose uuid is a9c5b8c8-536b-a193-a6dc-51af3e5ff799." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# scp CentOS_6.2_x64 xenhost:/var/run/sr-mount/a9c5b8c8-536b-a193-a6dc-51af3e5ff799/" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the Xenserver and create a VDI the same size as the image." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "[root@xenhost ~]# cd /var/run/sr-mount/a9c5b8c8-536b-a193-a6dc-51af3e5ff799\n" +"[root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# ls -lh CentOS_6.2_x64\n" +"-rw-r--r-- 1 root root 10G Mar 16 16:49 CentOS_6.2_x64\n" +"[root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# xe vdi-create virtual-size=10GiB sr-uuid=a9c5b8c8-536b-a193-a6dc-51af3e5ff799 type=user name-label=\"Centos 6.2 x86_64\"\n" +"cad7317c-258b-4ef7-b207-cdf0283a7923\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Import the image file into the VDI. This may take 10–20 minutes." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "[root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# xe vdi-import filename=CentOS_6.2_x64 uuid=cad7317c-258b-4ef7-b207-cdf0283a7923" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Locate a the VHD file. This is the file with the VDI’s UUID as its name. Compress it and upload it to your web server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "[root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# bzip2 -c cad7317c-258b-4ef7-b207-cdf0283a7923.vhd > CentOS_6.2_x64.vhd.bz2\n" +"[root@xenhost a9c5b8c8-536b-a193-a6dc-51af3e5ff799]# scp CentOS_6.2_x64.vhd.bz2 webserver:/var/www/html/templates/\n" +"" +msgstr "" + diff --git a/docs/pot/increase-management-server-max-memory.pot b/docs/pot/increase-management-server-max-memory.pot new file mode 100644 index 00000000000..77e2d58622b --- /dev/null +++ b/docs/pot/increase-management-server-max-memory.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Increase Management Server Maximum Memory" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the Management Server is subject to high demand, the default maximum JVM memory allocation can be insufficient. To increase the memory:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the Tomcat configuration file:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "/etc/cloud/management/tomcat6.conf" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Change the command-line parameter -XmxNNNm to a higher value of N." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example, if the current value is -Xmx128m, change it to -Xmx1024m or higher." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To put the new setting into effect, restart the Management Server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management restart" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information about memory issues, see \"FAQ: Memory\" at Tomcat Wiki." +msgstr "" + diff --git a/docs/pot/incremental-snapshots-backup.pot b/docs/pot/incremental-snapshots-backup.pot new file mode 100644 index 00000000000..8bf7ddbbecb --- /dev/null +++ b/docs/pot/incremental-snapshots-backup.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Incremental Snapshots and Backup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Snapshots are created on primary storage where a disk resides. After a snapshot is created, it is immediately backed up to secondary storage and removed from primary storage for optimal utilization of space on primary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; does incremental backups for some hypervisors. When incremental backups are supported, every N backup is a full backup." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMware vSphere" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Citrix XenServer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Support incremental backup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "N" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Y" +msgstr "" + diff --git a/docs/pot/initial-setup-of-external-firewalls-loadbalancers.pot b/docs/pot/initial-setup-of-external-firewalls-loadbalancers.pot new file mode 100644 index 00000000000..1534cbafb58 --- /dev/null +++ b/docs/pot/initial-setup-of-external-firewalls-loadbalancers.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Initial Setup of External Firewalls and Load Balancers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the first VM is created for a new account, &PRODUCT; programs the external firewall and load balancer to work with the VM. The following objects are created on the firewall:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new logical interface to connect to the account's private VLAN. The interface IP is always the first IP of the account's private subnet (e.g. 10.1.1.1)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A source NAT rule that forwards all outgoing traffic from the account's private VLAN to the public Internet, using the account's public IP address as the source address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A firewall filter counter that measures the number of bytes of outgoing traffic for the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following objects are created on the load balancer:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new VLAN that matches the account's provisioned Zone VLAN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A self IP for the VLAN. This is always the second IP of the account's private subnet (e.g. 10.1.1.2)." +msgstr "" + diff --git a/docs/pot/initialize-and-test.pot b/docs/pot/initialize-and-test.pot new file mode 100644 index 00000000000..f6a88b9184f --- /dev/null +++ b/docs/pot/initialize-and-test.pot @@ -0,0 +1,100 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Initialize and Test" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After everything is configured, &PRODUCT; will perform its initialization. This can take 30 minutes or more, depending on the speed of your network. When the initialization has completed successfully, the administrator's Dashboard should be displayed in the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Verify that the system is ready. In the left navigation bar, select Templates. Click on the CentOS 5.5 (64bit) no Gui (KVM) template. Check to be sure that the status is \"Download Complete.\" Do not proceed to the next step until this status is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Go to the Instances tab, and filter by My Instances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Instance and follow the steps in the wizard." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the zone you just added." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the template selection, choose the template to use in the VM. If this is a fresh installation, likely only the provided CentOS template is available." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select a service offering. Be sure that the hardware you have allows starting the selected service offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In data disk offering, if desired, add another data disk. This is a second volume that will be available to but not mounted in the guest. For example, in Linux on XenServer you will see /dev/xvdb in the guest after rebooting the VM. A reboot is not required if you have a PV-enabled OS kernel in use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In default network, choose the primary network for the guest. In a trial installation, you would have only one option here." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Optionally give your VM a name and a group. Use any descriptive text you would like." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Launch VM. Your VM will be created and started. It might take some time to download the template and complete the VM startup. You can watch the VM’s progress in the Instances screen." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To use the VM, click the View Console button. ConsoleButton.png: button to launch a console " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Congratulations! You have successfully completed a &PRODUCT; Installation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you decide to grow your deployment, you can add more hosts, primary storage, zones, pods, and clusters." +msgstr "" + diff --git a/docs/pot/install-usage-server.pot b/docs/pot/install-usage-server.pot new file mode 100644 index 00000000000..7a82178ddfb --- /dev/null +++ b/docs/pot/install-usage-server.pot @@ -0,0 +1,106 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Installing the Usage Server (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can optionally install the Usage Server once the Management Server is configured properly. The Usage Server takes data from the events in the system and enables usage-based billing for accounts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When multiple Management Servers are present, the Usage Server may be installed on any number of them. The Usage Servers will coordinate usage processing. A site that is concerned about availability should install Usage Servers on at least two Management Servers." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Requirements for Installing the Usage Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server must be running when the Usage Server is installed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Usage Server must be installed on the same server as a Management Server." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Steps to Install the Usage Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run ./install.sh." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# ./install.sh\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You should see a few messages as the installer prepares, followed by a list of choices." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose \"S\" to install the Usage Server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" > S\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Once installed, start the Usage Server with the following command." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# service cloud-usage start\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Administration Guide discusses further configuration of the Usage Server." +msgstr "" + diff --git a/docs/pot/installation-complete.pot b/docs/pot/installation-complete.pot new file mode 100644 index 00000000000..a2a7eb2a4ac --- /dev/null +++ b/docs/pot/installation-complete.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Installation Complete! Next Steps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Congratulations! You have now installed &PRODUCT; Management Server and the database it uses to persist system data." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "What should you do next?" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Even without adding any cloud infrastructure, you can run the UI to get a feel for what's offered and how you will interact with &PRODUCT; on an ongoing basis. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you're ready, add the cloud infrastructure and try running some virtual machines on it, so you can watch how &PRODUCT; manages the infrastructure. See ." +msgstr "" + diff --git a/docs/pot/installation-steps-overview.pot b/docs/pot/installation-steps-overview.pot new file mode 100644 index 00000000000..43c22e135b1 --- /dev/null +++ b/docs/pot/installation-steps-overview.pot @@ -0,0 +1,110 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Overview of Installation Steps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For anything more than a simple trial installation, you will need guidance for a variety of configuration choices. It is strongly recommended that you read the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choosing a Deployment Architecture" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choosing a Hypervisor: Supported Features" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage Setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Best Practices" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure you have the required hardware ready. See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install the Management Server (choose single-node or multi-node). See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the UI. See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add a zone. Includes the first pod, cluster, and host. See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more pods (optional). See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more clusters (optional). See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more hosts (optional). See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more primary storage (optional). See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more secondary storage (optional). See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Try using the cloud. See " +msgstr "" + diff --git a/docs/pot/installation.pot b/docs/pot/installation.pot new file mode 100644 index 00000000000..1d572b02855 --- /dev/null +++ b/docs/pot/installation.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Installation" +msgstr "" + diff --git a/docs/pot/installation_steps_overview.pot b/docs/pot/installation_steps_overview.pot new file mode 100644 index 00000000000..c3a7186e4b1 --- /dev/null +++ b/docs/pot/installation_steps_overview.pot @@ -0,0 +1,135 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Overview of Installation Steps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For anything more than a simple trial installation, you will need guidance for a variety of configuration choices. It is strongly recommended that you read the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choosing a Deployment Architecture" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choosing a Hypervisor: Supported Features" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage Setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Best Practices" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure you have the required hardware ready" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) Fill out the preparation checklists" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install the &PRODUCT; software" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install the Management Server (choose single-node or multi-node)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the UI" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provision your cloud infrastructure" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add a zone. Includes the first pod, cluster, and host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more pods" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more clusters" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more primary storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more secondary storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Try using the cloud" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Initialization and testing" +msgstr "" + diff --git a/docs/pot/inter-vlan-routing.pot b/docs/pot/inter-vlan-routing.pot new file mode 100644 index 00000000000..d65e88e4832 --- /dev/null +++ b/docs/pot/inter-vlan-routing.pot @@ -0,0 +1,120 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Inter-VLAN Routing" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Inter-VLAN Routing is the capability to route network traffic between VLANs. This feature enables you to build Virtual Private Clouds (VPC), an isolated segment of your cloud, that can hold multi-tier applications. These tiers are deployed on different VLANs that can communicate with each other. You provision VLANs to the tiers your create, and VMs can be deployed on different tiers. The VLANs are connected to a virtual router, which facilitates communication between the VMs. In effect, you can segment VMs by means of VLANs into different networks that can host multi-tier applications, such as Web, Application, or Database. Such segmentation by means of VLANs logically separate application VMs for higher security and lower broadcasts, while remaining physically connected to the same device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This feature is supported on XenServer and VMware hypervisors." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The major advantages are:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The administrator can deploy a set of VLANs and allow users to deploy VMs on these VLANs. A guest VLAN is randomly alloted to an account from a pre-specified set of guest VLANs. All the VMs of a certain tier of an account reside on the guest VLAN allotted to that account." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A VLAN allocated for an account cannot be shared between multiple accounts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The administrator can allow users create their own VPC and deploy the application. In this scenario, the VMs that belong to the account are deployed on the VLANs allotted to that account." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Both administrators and users can create multiple VPCs. The guest network NIC is plugged to the VPC virtual router when the first VM is deployed in a tier." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The administrator can create the following gateways to send to or receive traffic from the VMs:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPN Gateway: For more information, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public Gateway: The public gateway for a VPC is added to the virtual router when the virtual router is created for VPC. The public gateway is not exposed to the end users. You are not allowed to list it, nor allowed to create any static routes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private Gateway: For more information, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Both administrators and users can create various possible destinations-gateway combinations. However, only one gateway of each type can be used in a deployment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLANs and Public Gateway: For example, an application is deployed in the cloud, and the Web application VMs communicate with the Internet." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLANs, VPN Gateway, and Public Gateway: For example, an application is deployed in the cloud; the Web application VMs communicate with the Internet; and the database VMs communicate with the on-premise devices." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The administrator can define Access Control List (ACL) on the virtual router to filter the traffic among the VLANs or between the Internet and a VLAN. You can define ACL based on CIDR, port range, protocol, type code (if ICMP protocol is selected) and Ingress/Egress type." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following figure shows the possible deployment scenarios of a Inter-VLAN setup:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To set up a multi-tier Inter-VLAN deployment, see ." +msgstr "" + diff --git a/docs/pot/introduction.pot b/docs/pot/introduction.pot new file mode 100644 index 00000000000..d5ae7911e6a --- /dev/null +++ b/docs/pot/introduction.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Introduction" +msgstr "" + diff --git a/docs/pot/ip-forwarding-firewalling.pot b/docs/pot/ip-forwarding-firewalling.pot new file mode 100644 index 00000000000..d4aeefa0de3 --- /dev/null +++ b/docs/pot/ip-forwarding-firewalling.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "IP Forwarding and Firewalling" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "By default, all incoming traffic to the public IP address is rejected. All outgoing traffic from the guests is translated via NAT to the public IP address and is allowed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To allow incoming traffic, users may set up firewall rules and/or port forwarding rules. For example, you can use a firewall rule to open a range of ports on the public IP address, such as 33 through 44. Then use port forwarding rules to direct traffic from individual ports within that range to specific ports on user VMs. For example, one port forwarding rule could route incoming traffic on the public IP's port 33 to port 100 on one user VM's private IP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the steps to implement these rules, see Firewall Rules and Port Forwarding." +msgstr "" + diff --git a/docs/pot/ip-load-balancing.pot b/docs/pot/ip-load-balancing.pot new file mode 100644 index 00000000000..ef46d00aebb --- /dev/null +++ b/docs/pot/ip-load-balancing.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "IP Load Balancing" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The user may choose to associate the same public IP for multiple guests. &PRODUCT; implements a TCP-level load balancer with the following policies." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Round-robin" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Least connection" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Source IP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This is similar to port forwarding but the destination may be multiple IP addresses." +msgstr "" + diff --git a/docs/pot/ipaddress-usage-record-format.pot b/docs/pot/ipaddress-usage-record-format.pot new file mode 100644 index 00000000000..99a0044ccd0 --- /dev/null +++ b/docs/pot/ipaddress-usage-record-format.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "IP Address Usage Record Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For IP address usage the following fields exist in a usage record." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "account - name of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "accountid - ID of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "domainid - ID of the domain in which this account resides" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "zoneid - Zone where the usage occurred" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "description - A string describing what the usage record is tracking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage - String representation of the usage, including the units of usage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usagetype - A number representing the usage type (see Usage Types)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rawusage - A number representing the actual usage in hours" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usageid - IP address ID" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startdate, enddate - The range of time for which the usage is aggregated; see Dates in the Usage Record" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "issourcenat - Whether source NAT is enabled for the IP address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "iselastic - True if the IP address is elastic." +msgstr "" + diff --git a/docs/pot/isolated-networks.pot b/docs/pot/isolated-networks.pot new file mode 100644 index 00000000000..0e550ba64ca --- /dev/null +++ b/docs/pot/isolated-networks.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Isolated Networks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "An isolated network can be accessed only by virtual machines of a single account. Isolated networks have the following properties." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Resources such as VLAN are allocated and garbage collected dynamically" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There is one network offering for the entire network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The network offering can be upgraded or downgraded but it is for the entire network" +msgstr "" + diff --git a/docs/pot/job-status.pot b/docs/pot/job-status.pot new file mode 100644 index 00000000000..8e27d84b25f --- /dev/null +++ b/docs/pot/job-status.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Job Status" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The key to using an asynchronous command is the job ID that is returned immediately once the command has been executed. With the job ID, you can periodically check the job status by making calls to queryAsyncJobResult command. The command will return three possible job status integer values:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "0 - Job is still in progress. Continue to periodically poll for any status changes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "1 - Job has successfully completed. The job will return any successful response values associated with command that was originally executed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "2 - Job has failed to complete. Please check the \"jobresultcode\" tag for failure reason code and \"jobresult\" for the failure reason." +msgstr "" + diff --git a/docs/pot/kvm-topology-req.pot b/docs/pot/kvm-topology-req.pot new file mode 100644 index 00000000000..6b675244863 --- /dev/null +++ b/docs/pot/kvm-topology-req.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "KVM Topology Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Servers communicate with KVM hosts on port 22 (ssh)." +msgstr "" + diff --git a/docs/pot/large_scale_redundant_setup.pot b/docs/pot/large_scale_redundant_setup.pot new file mode 100644 index 00000000000..ccfbde45a8b --- /dev/null +++ b/docs/pot/large_scale_redundant_setup.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Large-Scale Redundant Setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This diagram illustrates the network architecture of a large-scale &PRODUCT; deployment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A layer-3 switching layer is at the core of the data center. A router redundancy protocol like VRRP should be deployed. Typically high-end core switches also include firewall modules. Separate firewall appliances may also be used if the layer-3 switch does not have integrated firewall capabilities. The firewalls are configured in NAT mode. The firewalls provide the following functions:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Forwards HTTP requests and API calls from the Internet to the Management Server. The Management Server resides on the management network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the cloud spans multiple zones, the firewalls should enable site-to-site VPN such that servers in different zones can directly reach each other." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A layer-2 access switch layer is established for each pod. Multiple switches can be stacked to increase port count. In either case, redundant pairs of layer-2 switches should be deployed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server cluster (including front-end load balancers, Management Server nodes, and the MySQL database) is connected to the management network through a pair of load balancers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Secondary storage servers are connected to the management network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each pod contains storage and computing servers. Each storage and computing server should have redundant NICs connected to separate layer-2 access switches." +msgstr "" + diff --git a/docs/pot/layer2-switch.pot b/docs/pot/layer2-switch.pot new file mode 100644 index 00000000000..8eab8f7e015 --- /dev/null +++ b/docs/pot/layer2-switch.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Layer-2 Switch" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The layer-2 switch is the access switching layer inside the pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "It should trunk all VLANs into every computing host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "It should switch traffic for the management network containing computing and storage hosts. The layer-3 switch will serve as the gateway for the management network." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Example Configurations" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section contains example configurations for specific switch models for pod-level layer-2 switching. It assumes VLAN management protocols such as VTP or GVRP have been disabled. The scripts must be changed appropriately if you choose to use VTP or GVRP." +msgstr "" + diff --git a/docs/pot/lb-policy-pfwd-rule-usage-record-format.pot b/docs/pot/lb-policy-pfwd-rule-usage-record-format.pot new file mode 100644 index 00000000000..4fe042f3201 --- /dev/null +++ b/docs/pot/lb-policy-pfwd-rule-usage-record-format.pot @@ -0,0 +1,80 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Load Balancer Policy or Port Forwarding Rule Usage Record Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "account - name of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "accountid - ID of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "domainid - ID of the domain in which this account resides" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "zoneid - Zone where the usage occurred" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "description - A string describing what the usage record is tracking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage - String representation of the usage, including the units of usage (e.g. 'Hrs' for hours)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usagetype - A number representing the usage type (see Usage Types)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rawusage - A number representing the actual usage in hours" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usageid - ID of the load balancer policy or port forwarding rule" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startdate, enddate - The range of time for which the usage is aggregated; see Dates in the Usage Record" +msgstr "" + diff --git a/docs/pot/linux-installation.pot b/docs/pot/linux-installation.pot new file mode 100644 index 00000000000..495d96b97b6 --- /dev/null +++ b/docs/pot/linux-installation.pot @@ -0,0 +1,101 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Linux OS Installation" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use the following steps to begin the Linux OS installation:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Download the script file cloud-set-guest-password:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Linux: " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Windows: " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy this file to /etc/init.d." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On some Linux distributions, copy the file to /etc/rc.d/init.d." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following command to make the script executable:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "chmod +x /etc/init.d/cloud-set-guest-password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Depending on the Linux distribution, continue with the appropriate step." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Fedora, CentOS/RHEL, and Debian, run:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "chkconfig --add cloud-set-guest-password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu with VMware tools, link the script file to the /etc/network/if-up and /etc/network/if-down folders, and run the script:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "#ln -s /etc/init.d/cloud-set-guest-password /etc/network/if-up/cloud-set-guest-password\n" +" #ln -s /etc/init.d/cloud-set-guest-password /etc/network/if-down/cloud-set-guest-password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are using Ubuntu 11.04, start by creating a directory called /var/lib/dhcp3 on your Ubuntu machine (works around a known issue with this version of Ubuntu). On all Ubuntu versions: Run “sudo update-rc.d cloud-set-guest-password defaults 98â€. To test, run \"mkpasswd\" and check that it is generating a new password. If the “mkpasswd†command does not exist, run \"sudo apt-get install whois\" (or sudo apt-get install mkpasswd, depending on your Ubuntu version) and repeat." +msgstr "" + diff --git a/docs/pot/load-balancer-rules.pot b/docs/pot/load-balancer-rules.pot new file mode 100644 index 00000000000..ac3cd64404b --- /dev/null +++ b/docs/pot/load-balancer-rules.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Load Balancer Rules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A &PRODUCT; user or administrator may create load balancing rules that balance traffic received at a public IP to one or more VMs. A user creates a rule, specifies an algorithm, and assigns the rule to a set of VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you create load balancing rules while using a network service offering that includes an external load balancer device such as NetScaler, and later change the network service offering to one that uses the &PRODUCT; virtual router, you must create a firewall rule on the virtual router for each of your existing load balancing rules so that they continue to function." +msgstr "" + diff --git a/docs/pot/log-in-root-admin.pot b/docs/pot/log-in-root-admin.pot new file mode 100644 index 00000000000..08484eb3c05 --- /dev/null +++ b/docs/pot/log-in-root-admin.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Logging In as the Root Administrator" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After the Management Server software is installed and running, you can run the &PRODUCT; user interface. This UI is there to help you provision, view, and manage your cloud infrastructure." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Open your favorite Web browser and go to this URL. Substitute the IP address of your own Management Server:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://<management-server-ip-address>:8080/client" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After logging into a fresh Management Server installation, a guided tour splash screen appears. On later visits, you’ll be taken directly into the Dashboard." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you see the first-time splash screen, choose one of the following." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Continue with basic setup. Choose this if you're just trying &PRODUCT;, and you want a guided walkthrough of the simplest possible configuration so that you can get started right away. We'll help you set up a cloud with the following features: a single machine that runs &PRODUCT; software and uses NFS to provide storage; a single machine running VMs under the XenServer or KVM hypervisor; and a shared public network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The prompts in this guided tour should give you all the information you need, but if you want just a bit more detail, you can follow along in the Trial Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "I have used &PRODUCT; before. Choose this if you have already gone through a design phase and planned a more sophisticated deployment, or you are ready to start scaling up a trial cloud that you set up earlier with the basic setup screens. In the Administrator UI, you can start using the more powerful features of &PRODUCT;, such as advanced VLAN networking, high availability, additional network elements such as load balancers and firewalls, and support for multiple hypervisors including Citrix XenServer, KVM, and VMware vSphere." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The root administrator Dashboard appears." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You should set a new root administrator password. If you chose basic setup, you’ll be prompted to create a new password right away. If you chose experienced user, use the steps in ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You are logging in as the root administrator. This account manages the &PRODUCT; deployment, including physical infrastructure. The root administrator can modify configuration settings to change basic functionality, create or delete user accounts, and take many actions that should be performed only by an authorized person. Please change the default password to a new, unique password." +msgstr "" + diff --git a/docs/pot/log-in.pot b/docs/pot/log-in.pot new file mode 100644 index 00000000000..2faf14b1738 --- /dev/null +++ b/docs/pot/log-in.pot @@ -0,0 +1,90 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Log In to the UI" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides a web-based UI that can be used by both administrators and end users. The appropriate version of the UI is displayed depending on the credentials used to log in. The UI is available in popular browsers including IE7, IE8, IE9, Firefox 3.5+, Firefox 4, Safari 4, and Safari 5. The URL is: (substitute your own management server IP address)" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://<management-server-ip-address>:8080/client" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On a fresh Management Server installation, a guided tour splash screen appears. On later visits, you’ll see a login screen where you specify the following to proceed to your Dashboard:" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Username" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The user ID of your account. The default username is admin." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The password associated with the user ID. The password for the default username is password." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Domain" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are a root user, leave this field blank." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are a user in the sub-domains, enter the full path to the domain, excluding the root domain." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example, suppose multiple levels are created under the root domain, such as Comp1/hr. The users in the Comp1 domain should enter Comp1 in the Domain field, whereas the users in the Comp1/sales domain should enter Comp1/sales." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more guidance about the choices that appear when you log in to this UI, see Logging In as the Root Administrator." +msgstr "" + diff --git a/docs/pot/long-running-job-events.pot b/docs/pot/long-running-job-events.pot new file mode 100644 index 00000000000..ecb39473a44 --- /dev/null +++ b/docs/pot/long-running-job-events.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Long Running Job Events" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The events log records three types of standard events." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "INFO. This event is generated when an operation has been successfully performed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "WARN. This event is generated in the following circumstances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a network is disconnected while monitoring a template download." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a template download is abandoned." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When an issue on the storage server causes the volumes to fail over to the mirror storage server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ERROR. This event is generated when an operation has not been successfully performed" +msgstr "" + diff --git a/docs/pot/maintain-hypervisors-on-hosts.pot b/docs/pot/maintain-hypervisors-on-hosts.pot new file mode 100644 index 00000000000..5acc8771d40 --- /dev/null +++ b/docs/pot/maintain-hypervisors-on-hosts.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Maintaining Hypervisors on Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When running hypervisor software on hosts, be sure all the hotfixes provided by the hypervisor vendor are applied. Track the release of hypervisor patches through your hypervisor vendor’s support channel, and apply patches as soon as possible after they are released. &PRODUCT; will not track or notify you of required hypervisor patches. It is essential that your hosts are completely up to date with the provided hypervisor patches. The hypervisor vendor is likely to refuse to support any system that is not up to date with patches." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The lack of up-do-date hotfixes can lead to data corruption and lost VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(XenServer) For more information, see Highly Recommended Hotfixes for XenServer in the &PRODUCT; Knowledge Base" +msgstr "" + diff --git a/docs/pot/maintenance-mode-for-primary-storage.pot b/docs/pot/maintenance-mode-for-primary-storage.pot new file mode 100644 index 00000000000..85363ce5713 --- /dev/null +++ b/docs/pot/maintenance-mode-for-primary-storage.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Maintenance Mode for Primary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Primary storage may be placed into maintenance mode. This is useful, for example, to replace faulty RAM in a storage device. Maintenance mode for a storage device will first stop any new guests from being provisioned on the storage device. Then it will stop all guests that have any volume on that storage device. When all such guests are stopped the storage device is in maintenance mode and may be shut down. When the storage device is online again you may cancel maintenance mode for the device. The &PRODUCT; will bring the device back online and attempt to start all guests that were running at the time of the entry into maintenance mode." +msgstr "" + diff --git a/docs/pot/making-api-request.pot b/docs/pot/making-api-request.pot new file mode 100644 index 00000000000..a3faea0b69a --- /dev/null +++ b/docs/pot/making-api-request.pot @@ -0,0 +1,105 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Making API Requests" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All &PRODUCT; API requests are submitted in the form of a HTTP GET/POST with an associated command and any parameters. A request is composed of the following whether in HTTP or HTTPS:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; API URL: This is the web services API entry point(for example, http://www.cloud.com:8080/client/api)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Command: The web services command you wish to execute, such as start a virtual machine or create a disk volume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Parameters: Any additional required or optional parameters for the command" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A sample API GET request looks like the following:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://localhost:8080/client/api?command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXq-jB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Or in a more readable format:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"1. http://localhost:8080/client/api\n" +"2. ?command=deployVirtualMachine\n" +"3. &serviceOfferingId=1\n" +"4. &diskOfferingId=1\n" +"5. &templateId=2\n" +"6. &zoneId=4\n" +"7. &apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXqjB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ\n" +"8. &signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The first line is the &PRODUCT; API URL. This is the Cloud instance you wish to interact with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The second line refers to the command you wish to execute. In our example, we are attempting to deploy a fresh new virtual machine. It is preceded by a (?) to separate itself from the &PRODUCT; API URL." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Lines 3-6 are the parameters for this given command. To see the command and its request parameters, please refer to the appropriate section in the &PRODUCT; API documentation. Each parameter field-value pair (field=value) is preceded by an ampersand character (&)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Line 7 is the user API Key that uniquely identifies the account. See Signing API Requests on page 7." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Line 8 is the signature hash created to authenticate the user account executing the API command. See Signing API Requests on page 7." +msgstr "" + diff --git a/docs/pot/manage-cloud.pot b/docs/pot/manage-cloud.pot new file mode 100644 index 00000000000..a263fef34c9 --- /dev/null +++ b/docs/pot/manage-cloud.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Managing the Cloud" +msgstr "" + diff --git a/docs/pot/management-server-install-client.pot b/docs/pot/management-server-install-client.pot new file mode 100644 index 00000000000..e663f7f213a --- /dev/null +++ b/docs/pot/management-server-install-client.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Install the Management Server on the First Host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The first step in installation, whether you are installing the Management Server on one host or many, is to install the software on a single node." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are planning to install the Management Server on multiple nodes for high availability, do not proceed to the additional nodes yet. That step will come later." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; Management server can be installed using either RPM or DEB packages. These packages will depend on everything you need to run the Management server." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Downloading vhd-util" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This procedure is required only for installations where XenServer is installed on the hypervisor hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before setting up the Management Server, download vhd-util from vhd-util." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the Management Server is RHEL or CentOS, copy vhd-util to /usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the Management Server is Ubuntu, copy vhd-util to /usr/lib/cloud/common/scripts/vm/hypervisor/xenserver/vhd-util." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Install on CentOS/RHEL" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We start by installing the required packages:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "yum install cloud-client" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Install on Ubuntu" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "apt-get install cloud-client" +msgstr "" + diff --git a/docs/pot/management-server-install-complete.pot b/docs/pot/management-server-install-complete.pot new file mode 100644 index 00000000000..a171be6f1d6 --- /dev/null +++ b/docs/pot/management-server-install-complete.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Installation Complete! Next Steps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Congratulations! You have now installed &PRODUCT; Management Server and the database it uses to persist system data." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "What should you do next?" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Even without adding any cloud infrastructure, you can run the UI to get a feel for what's offered and how you will interact with &PRODUCT; on an ongoing basis. See Log In to the UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you're ready, add the cloud infrastructure and try running some virtual machines on it, so you can watch how &PRODUCT; manages the infrastructure. See Provision Your Cloud Infrastructure." +msgstr "" + diff --git a/docs/pot/management-server-install-db-external.pot b/docs/pot/management-server-install-db-external.pot new file mode 100644 index 00000000000..7b0f6474c56 --- /dev/null +++ b/docs/pot/management-server-install-db-external.pot @@ -0,0 +1,219 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Install the Database on a Separate Node" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section describes how to install MySQL on a standalone machine, separate from the Management Server. This technique is intended for a deployment that includes several Management Server nodes. If you have a single-node Management Server deployment, you will typically use the same node for MySQL. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The management server doesn't require a specific distribution for the MySQL node. You can use a distribution or Operating System of your choice. Using the same distribution as the management server is recommended, but not required. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install MySQL from the package repository from your distribution:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On RHEL or CentOS:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "yum install mysql-server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "apt-get install mysql-server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the MySQL configuration (/etc/my.cnf or /etc/mysql/my.cnf, depending on your OS) and insert the following lines in the [mysqld] section. You can put these lines below the datadir line. The max_connections parameter should be set to 350 multiplied by the number of Management Servers you are deploying. This example assumes two Management Servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu, you can also create /etc/mysql/conf.d/cloudstack.cnf file and add these directives there. Don't forget to add [mysqld] on the first line of the file." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "innodb_rollback_on_timeout=1\n" +"innodb_lock_wait_timeout=600\n" +"max_connections=700\n" +"log-bin=mysql-bin\n" +"binlog-format = 'ROW'\n" +"bind-address = 0.0.0.0" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start or restart MySQL to put the new configuration into effect." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On RHEL/CentOS, MySQL doesn't automatically start after installation. Start it manually." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "service mysqld start" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu, restart MySQL." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "service mysqld restart" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(CentOS and RHEL only; not required on Ubuntu)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On RHEL and CentOS, MySQL does not set a root password by default. It is very strongly recommended that you set a root password as a security precaution." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following command to secure your installation. You can answer \"Y\" to all questions except \"Disallow root login remotely?\". Remote root login is required to set up the databases." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mysql_secure_installation" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If a firewall is present on the system, open TCP port 3306 so external MySQL connections can be established." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu, UFW is the default firewall. Open the port with this command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "ufw allow mysql" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On RHEL/CentOS:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the /etc/sysconfig/iptables file and add the following line at the beginning of the INPUT chain." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "-A INPUT -p tcp --dport 3306 -j ACCEPT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now reload the iptables rules." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "service iptables restart" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Return to the root shell on your first Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up the database. The following command creates the cloud user on the database." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In dbpassword, specify the password to be assigned to the cloud user. You can choose to provide no password." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In deploy-as, specify the username and password of the user deploying the database. In the following command, it is assumed the root user is deploying the database and creating the cloud user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) For encryption_type, use file or web to indicate the technique used to pass in the database encryption password. Default: file. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) For management_server_key, substitute the default key that is used to encrypt confidential parameters in the &PRODUCT; properties file. Default: password. It is highly recommended that you replace this with a more secure value. See About Password and Key Encryption." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) For database_key, substitute the default key that is used to encrypt confidential parameters in the &PRODUCT; database. Default: password. It is highly recommended that you replace this with a more secure value. See ." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "cloud-setup-databases cloud:<dbpassword>@<ip address mysql server> \\\n" +"--deploy-as=root:<password> \\\n" +"-e <encryption_type> \\\n" +"-m <management_server_key> \\\n" +"-k <database_key>" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When this script is finished, you should see a message like “Successfully initialized the database.â€" +msgstr "" + diff --git a/docs/pot/management-server-install-db-local.pot b/docs/pot/management-server-install-db-local.pot new file mode 100644 index 00000000000..36af4d0ff0e --- /dev/null +++ b/docs/pot/management-server-install-db-local.pot @@ -0,0 +1,198 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Install the Database on the Management Server Node" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section describes how to install MySQL on the same machine with the Management Server. This technique is intended for a simple deployment that has a single Management Server node. If you have a multi-node Management Server deployment, you will typically use a separate node for MySQL. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install MySQL from the package repository from your distribution:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On RHEL or CentOS:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "yum install mysql-server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "apt-get install mysql-server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the MySQL configuration (/etc/my.cnf or /etc/mysql/my.cnf, depending on your OS) and insert the following lines in the [mysqld] section. You can put these lines below the datadir line. The max_connections parameter should be set to 350 multiplied by the number of Management Servers you are deploying. This example assumes one Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu, you can also create a file /etc/mysql/conf.d/cloudstack.cnf and add these directives there. Don't forget to add [mysqld] on the first line of the file." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "innodb_rollback_on_timeout=1\n" +"innodb_lock_wait_timeout=600\n" +"max_connections=350\n" +"log-bin=mysql-bin\n" +"binlog-format = 'ROW'" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start or restart MySQL to put the new configuration into effect." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On RHEL/CentOS, MySQL doesn't automatically start after installation. Start it manually." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "service mysqld start" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu, restart MySQL." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "service mysqld restart" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(CentOS and RHEL only; not required on Ubuntu)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On RHEL and CentOS, MySQL does not set a root password by default. It is very strongly recommended that you set a root password as a security precaution." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following command to secure your installation. You can answer \"Y\" to all questions." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mysql_secure_installation" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up the database. The following command creates the \"cloud\" user on the database." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In dbpassword, specify the password to be assigned to the \"cloud\" user. You can choose to provide no password although that is not recommended." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In deploy-as, specify the username and password of the user deploying the database. In the following command, it is assumed the root user is deploying the database and creating the \"cloud\" user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) For encryption_type, use file or web to indicate the technique used to pass in the database encryption password. Default: file. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) For management_server_key, substitute the default key that is used to encrypt confidential parameters in the &PRODUCT; properties file. Default: password. It is highly recommended that you replace this with a more secure value. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) For database_key, substitute the default key that is used to encrypt confidential parameters in the &PRODUCT; database. Default: password. It is highly recommended that you replace this with a more secure value. See ." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "cloud-setup-databases cloud:<dbpassword>@localhost \\\n" +"--deploy-as=root:<password> \\\n" +"-e <encryption_type> \\\n" +"-m <management_server_key> \\\n" +"-k <database_key>" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When this script is finished, you should see a message like “Successfully initialized the database.â€" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are running the KVM hypervisor on the same machine with the Management Server, edit /etc/sudoers and add the following line:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "Defaults:cloud !requiretty" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This type of single-machine setup is recommended only for a trial installation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now that the database is set up, you can finish configuring the OS for the Management Server. This command will set up iptables, sudoers, and start the Management Server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# cloud-setup-management" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You should see the message “&PRODUCT; Management Server setup is done.â€" +msgstr "" + diff --git a/docs/pot/management-server-install-db.pot b/docs/pot/management-server-install-db.pot new file mode 100644 index 00000000000..cca61e42ac4 --- /dev/null +++ b/docs/pot/management-server-install-db.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Install the database server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; management server uses a MySQL database server to store its data. When you are installing the management server on a single node, you can install the MySQL server locally. For an installation that has multiple management server nodes, we assume the MySQL database also runs on a separate node." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; has been tested with MySQL 5.1 and 5.5. These versions are included in RHEL/CentOS and Ubuntu." +msgstr "" + diff --git a/docs/pot/management-server-install-flow.pot b/docs/pot/management-server-install-flow.pot new file mode 100644 index 00000000000..43c2a0cc68e --- /dev/null +++ b/docs/pot/management-server-install-flow.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Management Server Installation" +msgstr "" + diff --git a/docs/pot/management-server-install-multi-node.pot b/docs/pot/management-server-install-multi-node.pot new file mode 100644 index 00000000000..22d80b6f21d --- /dev/null +++ b/docs/pot/management-server-install-multi-node.pot @@ -0,0 +1,110 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Prepare and Start Additional Management Servers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For your second and subsequent Management Servers, you will install the Management Server software, connect it to the database, and set up the OS for the Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Perform the steps in and or as appropriate." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This step is required only for installations where XenServer is installed on the hypervisor hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Download vhd-util from vhd-util" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the Management Server is RHEL or CentOS, copy vhd-util to /usr/lib64/cloud/common/scripts/vm/hypervisor/xenserver." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the Management Server is Ubuntu, copy vhd-util to /usr/lib/cloud/common/scripts/vm/hypervisor/xenserver/vhd-util." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that necessary services are started and set to start on boot." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service rpcbind start\n" +"# service nfs start\n" +"# chkconfig nfs on\n" +"# chkconfig rpcbind on\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure the database client. Note the absence of the --deploy-as argument in this case. (For more details about the arguments to this command, see .)" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# cloud-setup-databases cloud:dbpassword@dbhost -e encryption_type -m management_server_key -k database_key\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure the OS and start the Management Server:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# cloud-setup-management" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server on this node should now be running." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat these steps on each additional Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure to configure a load balancer for the Management Servers. See Management Server Load Balancing." +msgstr "" + diff --git a/docs/pot/management-server-install-nfs-shares.pot b/docs/pot/management-server-install-nfs-shares.pot new file mode 100644 index 00000000000..b269c4955e7 --- /dev/null +++ b/docs/pot/management-server-install-nfs-shares.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:58\n" +"PO-Revision-Date: 2013-02-02T20:11:58\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Prepare NFS Shares" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; needs a place to keep primary and secondary storage (see Cloud Infrastructure Overview). Both of these can be NFS shares. This section tells how to set up the NFS shares before adding the storage to &PRODUCT;." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Alternative Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NFS is not the only option for primary or secondary storage. For example, you may use a Ceph RDB cluster, GlusterFS, iSCSI, and otthers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The requirements for primary and secondary storage are described in:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A production installation typically uses a separate NFS server. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can also use the Management Server node as the NFS server. This is more typical of a trial installation, but is technically possible in a larger deployment. See ." +msgstr "" + diff --git a/docs/pot/management-server-install-overview.pot b/docs/pot/management-server-install-overview.pot new file mode 100644 index 00000000000..5eb76440894 --- /dev/null +++ b/docs/pot/management-server-install-overview.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Management Server Installation Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section describes installing the Management Server. There are two slightly different installation flows, depending on how many Management Server nodes will be in your cloud:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A single Management Server node, with MySQL on the same node." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Multiple Management Server nodes, with MySQL on a node separate from the Management Servers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In either case, each machine must meet the system requirements described in System Requirements." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the sake of security, be sure the public Internet can not access port 8096 or port 8250 on the Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The procedure for installing the Management Server is:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare the Operating System" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(XenServer only) Download and install vhd-util." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install the First Management Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install and Configure the MySQL database" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare NFS Shares" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare and Start Additional Management Servers (optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare the System VM Template" +msgstr "" + diff --git a/docs/pot/management-server-install-prepare-os.pot b/docs/pot/management-server-install-prepare-os.pot new file mode 100644 index 00000000000..e8360ff6800 --- /dev/null +++ b/docs/pot/management-server-install-prepare-os.pot @@ -0,0 +1,105 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Prepare the Operating System" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The OS must be prepared to host the Management Server using the following steps. These steps must be performed on each Management Server node." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to your OS as root." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Check for a fully qualified hostname." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "hostname --fqdn" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This should return a fully qualified hostname such as \"managament1.lab.example.org\". If it does not, edit /etc/hosts so that it does." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure that the machine can reach the Internet." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "ping www.cloudstack.org" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Turn on NTP for time synchronization." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NTP is required to synchronize the clocks of the servers in your cloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install NTP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On RHEL or CentOS:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "yum install ntp" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "apt-get install openntpd" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat all of these steps on every host where the Management Server will be installed." +msgstr "" + diff --git a/docs/pot/management-server-install-systemvm.pot b/docs/pot/management-server-install-systemvm.pot new file mode 100644 index 00000000000..d6d238c049b --- /dev/null +++ b/docs/pot/management-server-install-systemvm.pot @@ -0,0 +1,111 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Prepare the System VM Template" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Secondary storage must be seeded with a template that is used for &PRODUCT; system VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When copying and pasting a command, be sure the command has pasted as a single line before executing. Some document viewers may introduce unwanted line breaks in copied text." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the Management Server, run one or more of the following cloud-install-sys-tmplt commands to retrieve and decompress the system VM template. Run the command for each hypervisor type that you expect end users to run in this Zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If your secondary storage mount point is not named /mnt/secondary, substitute your own mount point name." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you set the &PRODUCT; database encryption type to \"web\" when you set up the database, you must now add the parameter -s <management-server-secret-key>. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This process will require approximately 5 GB of free space on the local file system and up to 30 minutes each time it runs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For XenServer:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# /usr/lib64/cloud/common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.vhd.bz2 -h xenserver -s <optional-management-server-secret-key> -F" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For vSphere:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# /usr/lib64/cloud/common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloud.com/templates/burbank/burbank-systemvm-08012012.ova -h vmware -s <optional-management-server-secret-key> -F" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For KVM:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# /usr/lib64/cloud/common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2 -h kvm -s <optional-management-server-secret-key> -F" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are using a separate NFS server, perform this step. If you are using the Management Server as the NFS server, you MUST NOT perform this step." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the script has finished, unmount secondary storage and remove the created directory." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# umount /mnt/secondary\n" +"# rmdir /mnt/secondary" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat these steps for each secondary storage server." +msgstr "" + diff --git a/docs/pot/management-server-lb.pot b/docs/pot/management-server-lb.pot new file mode 100644 index 00000000000..df9ded46302 --- /dev/null +++ b/docs/pot/management-server-lb.pot @@ -0,0 +1,105 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting Zone VLAN and Running VM Maximums" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; can use a load balancer to provide a virtual IP for multiple Management Servers. The administrator is responsible for creating the load balancer rules for the Management Servers. The application requires persistence or stickiness across multiple sessions. The following chart lists the ports that should be load balanced and whether or not persistence is required." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Even if persistence is not required, enabling it is permitted." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Source Port" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Destination Port" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Persistence Required?" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "80 or 443" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "8080 (or 20400 with AJP)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "HTTP (or AJP)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Yes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "8250" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TCP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "8096" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "HTTP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "No" +msgstr "" + diff --git a/docs/pot/management-server-overview.pot b/docs/pot/management-server-overview.pot new file mode 100644 index 00000000000..0f79f5e856a --- /dev/null +++ b/docs/pot/management-server-overview.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Management Server Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server is the &PRODUCT; software that manages cloud resources. By interacting with the Management Server through its UI or API, you can configure and manage your cloud infrastructure." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server runs on a dedicated server or VM. It controls allocation of virtual machines to hosts and assigns storage and IP addresses to the virtual machine instances. The Management Server runs in a Tomcat container and requires a MySQL database for persistence." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The machine must meet the system requirements described in System Requirements." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provides the web user interface for the administrator and a reference user interface for end users." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provides the APIs for &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Manages the assignment of guest VMs to particular hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Manages the assignment of public and private IP addresses to particular accounts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Manages the allocation of storage to guests as virtual disks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Manages snapshots, templates, and ISO images, possibly replicating them across data centers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provides a single point of configuration for the cloud." +msgstr "" + diff --git a/docs/pot/manual-live-migration.pot b/docs/pot/manual-live-migration.pot new file mode 100644 index 00000000000..80043620c32 --- /dev/null +++ b/docs/pot/manual-live-migration.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Moving VMs Between Hosts (Manual Live Migration)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; administrator can move a running VM from one host to another without interrupting service to users or going into maintenance mode. This is called manual live migration, and can be done under the following conditions:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The root administrator is logged in. Domain admins and users can not perform manual live migration of VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VM is running. Stopped VMs can not be live migrated." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The destination host must be in the same cluster as the original host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VM must not be using local disk storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The destination host must have enough available capacity. If not, the VM will remain in the \"migrating\" state until memory becomes available." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To manually live migrate a virtual machine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Instances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose the VM that you want to migrate." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Migrate Instance button Migrateinstance.png: button to migrate an instance " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "From the list of hosts, choose the one to which you want to move the VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + diff --git a/docs/pot/marvin.pot b/docs/pot/marvin.pot new file mode 100644 index 00000000000..f693be5c0a0 --- /dev/null +++ b/docs/pot/marvin.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Marvin" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Marvin is the &PRODUCT; automation framework. It originated as a tool for integration testing but is now also used to build DevCloud as well as to provide a Python &PRODUCT; API binding." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Marvin's complete documenation is on the wiki at https://cwiki.apache.org/CLOUDSTACK/testing-with-python.html" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The source code is located at tools/marvin" +msgstr "" + diff --git a/docs/pot/max-result-page-returned.pot b/docs/pot/max-result-page-returned.pot new file mode 100644 index 00000000000..031e59f2916 --- /dev/null +++ b/docs/pot/max-result-page-returned.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Maximum Result Pages Returned" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For each cloud, there is a default upper limit on the number of results that any API command will return in a single page. This is to help prevent overloading the cloud servers and prevent DOS attacks. For example, if the page size limit is 500 and a command returns 10,000 results, the command will return 20 pages." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The default page size limit can be different for each cloud. It is set in the global configuration parameter default.page.size. If your cloud has many users with lots of VMs, you might need to increase the value of this parameter. At the same time, be careful not to set it so high that your site can be taken down by an enormous return from an API call. For more information about how to set global configuration parameters, see \"Describe Your Deployment\" in the Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To decrease the page size limit for an individual API command, override the global setting with the page and pagesize parameters, which are available in any list* command (listCapabilities, listDiskOfferings, etc.)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Both parameters must be specified together." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The value of the pagesize parameter must be smaller than the value of default.page.size. That is, you can not increase the number of possible items in a result page, only decrease it." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For syntax information on the list* commands, see the API Reference." +msgstr "" + diff --git a/docs/pot/migrate-datadisk-volume-new-storage-pool.pot b/docs/pot/migrate-datadisk-volume-new-storage-pool.pot new file mode 100644 index 00000000000..d9e2f9716b9 --- /dev/null +++ b/docs/pot/migrate-datadisk-volume-new-storage-pool.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Migrating a Data Disk Volume to a New Storage Pool" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Detach the data disk from the VM. See Detaching and Moving Volumes (but skip the “reattach†step at the end. You will do that after migrating to new storage)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Call the &PRODUCT; API command migrateVolume and pass in the volume ID and the ID of any storage pool in the zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Watch for the volume status to change to Migrating, then back to Ready." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Attach the volume to any desired VM running in the same cluster as the new storage server. See Attaching a Volume " +msgstr "" + diff --git a/docs/pot/migrate-vm-rootvolume-volume-new-storage-pool.pot b/docs/pot/migrate-vm-rootvolume-volume-new-storage-pool.pot new file mode 100644 index 00000000000..7da0f8d0751 --- /dev/null +++ b/docs/pot/migrate-vm-rootvolume-volume-new-storage-pool.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Migrating a VM Root Volume to a New Storage Pool" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When migrating the root disk volume, the VM must first be stopped, and users can not access the VM. After migration is complete, the VM can be restarted." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as a user or admin." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Detach the data disk from the VM. See Detaching and Moving Volumes (but skip the “reattach†step at the end. You will do that after migrating to new storage)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stop the VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Call the &PRODUCT; API command migrateVirtualMachine with the ID of the VM to migrate and the IDs of a destination host and destination storage pool in the same zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Watch for the VM status to change to Migrating, then back to Stopped." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the VM." +msgstr "" + diff --git a/docs/pot/minimum-system-requirements.pot b/docs/pot/minimum-system-requirements.pot new file mode 100644 index 00000000000..c7862b4b6e1 --- /dev/null +++ b/docs/pot/minimum-system-requirements.pot @@ -0,0 +1,150 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Minimum System Requirements" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Management Server, Database, and Storage System Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The machines that will run the Management Server and MySQL database must meet the following requirements. The same machines can also be used to provide primary and secondary storage, such as via localdisk or NFS. The Management Server may be placed on a virtual machine." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Operating system:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Preferred: CentOS/RHEL 6.3+ or Ubuntu 12.04(.1)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "64-bit x86 CPU (more cores results in better performance)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4 GB of memory" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "50 GB of local disk (When running secondary storage on the management server 500GB is recommended)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "At least 1 NIC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Statically allocated IP address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fully qualified domain name as returned by the hostname command" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Host/Hypervisor System Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The host is where the cloud services run in the form of guest virtual machines. Each host is one machine that meets the following requirements:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Must support HVM (Intel-VT or AMD-V enabled)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hardware virtualization support required" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "36 GB of local disk" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If DHCP is used for hosts, ensure that no conflict occurs between DHCP server used for these hosts and the DHCP router created by &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Latest hotfixes applied to hypervisor software" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you deploy &PRODUCT;, the hypervisor host must not have any VMs already running" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All hosts within a cluster must be homogenous. The CPUs must be of the same type, count, and feature flags." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hosts have additional requirements depending on the hypervisor. See the requirements listed at the top of the Installation section for your chosen hypervisor:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure you fulfill the additional hypervisor requirements and installation steps provided in this Guide. Hypervisor hosts must be properly prepared to work with CloudStack. For example, the requirements for XenServer are listed under Citrix XenServer Installation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + diff --git a/docs/pot/modify-delete-service-offerings.pot b/docs/pot/modify-delete-service-offerings.pot new file mode 100644 index 00000000000..02835318331 --- /dev/null +++ b/docs/pot/modify-delete-service-offerings.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Modifying or Deleting a Service Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Service offerings cannot be changed once created. This applies to both compute offerings and disk offerings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A service offering can be deleted. If it is no longer in use, it is deleted immediately and permanently. If the service offering is still in use, it will remain in the database until all the virtual machines referencing it have been deleted. After deletion by the administrator, a service offering will not be available to end users that are creating new instances." +msgstr "" + diff --git a/docs/pot/multi_node_management_server.pot b/docs/pot/multi_node_management_server.pot new file mode 100644 index 00000000000..edada3cbebe --- /dev/null +++ b/docs/pot/multi_node_management_server.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Multi-Node Management Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; Management Server is deployed on one or more front-end servers connected to a single MySQL database. Optionally a pair of hardware load balancers distributes requests from the web. A backup management server set may be deployed using MySQL replication at a remote site to add DR capabilities." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The administrator must decide the following." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Whether or not load balancers will be used." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "How many Management Servers will be deployed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Whether MySQL replication will be deployed to enable disaster recovery." +msgstr "" + diff --git a/docs/pot/multi_node_overview.pot b/docs/pot/multi_node_overview.pot new file mode 100644 index 00000000000..c67e8a79233 --- /dev/null +++ b/docs/pot/multi_node_overview.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Management Server Multi-Node Installation Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section describes installing multiple Management Servers and installing MySQL on a node separate from the Management Servers. The machines must meet the system requirements described in System Requirements." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the sake of security, be sure the public Internet can not access port 8096 or port 8250 on the Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The procedure for a multi-node installation is:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare the Operating System" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install the First Management Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install and Configure the Database" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare NFS Shares" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare and Start Additional Management Servers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare the System VM Template" +msgstr "" + diff --git a/docs/pot/multi_site_deployment.pot b/docs/pot/multi_site_deployment.pot new file mode 100644 index 00000000000..822c64a19ea --- /dev/null +++ b/docs/pot/multi_site_deployment.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Multi-Site Deployment" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; platform scales well into multiple sites through the use of zones. The following diagram shows an example of a multi-site deployment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Data Center 1 houses the primary Management Server as well as zone 1. The MySQL database is replicated in real time to the secondary Management Server installation in Data Center 2." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This diagram illustrates a setup with a separate storage network. Each server has four NICs, two connected to pod-level network switches and two connected to storage network switches." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There are two ways to configure the storage network:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Bonded NIC and redundant switches can be deployed for NFS. In NFS deployments, redundant switches and bonded NICs still result in one network (one CIDR block+ default gateway address)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "iSCSI can take advantage of two separate storage networks (two CIDR blocks each with its own default gateway). Multipath iSCSI client can failover and load balance between separate storage networks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This diagram illustrates the differences between NIC bonding and Multipath I/O (MPIO). NIC bonding configuration involves only one network. MPIO involves two separate networks." +msgstr "" + diff --git a/docs/pot/multiple-system-vm-vmware.pot b/docs/pot/multiple-system-vm-vmware.pot new file mode 100644 index 00000000000..1ef8e4357fa --- /dev/null +++ b/docs/pot/multiple-system-vm-vmware.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Multiple System VM Support for VMware" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Every &PRODUCT; zone has single System VM for template processing tasks such as downloading templates, uploading templates, and uploading ISOs. In a zone where VMware is being used, additional System VMs can be launched to process VMware-specific tasks such as taking snapshots and creating private templates. The &PRODUCT; management server launches additional System VMs for VMware-specific tasks as the load increases. The management server monitors and weights all commands sent to these System VMs and performs dynamic load balancing and scaling-up of more System VMs." +msgstr "" + diff --git a/docs/pot/network-offering-usage-record-format.pot b/docs/pot/network-offering-usage-record-format.pot new file mode 100644 index 00000000000..b50371eb7ef --- /dev/null +++ b/docs/pot/network-offering-usage-record-format.pot @@ -0,0 +1,90 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Network Offering Usage Record Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "account – name of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "accountid – ID of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "domainid – ID of the domain in which this account resides" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "zoneid – Zone where the usage occurred" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "description – A string describing what the usage record is tracking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage – String representation of the usage, including the units of usage (e.g. 'Hrs' for hours)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usagetype – A number representing the usage type (see Usage Types)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rawusage – A number representing the actual usage in hours" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usageid – ID of the network offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "offeringid – Network offering ID" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "virtualMachineId – The ID of the virtual machine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startdate, enddate – The range of time for which the usage is aggregated; see Dates in the Usage Record" +msgstr "" + diff --git a/docs/pot/network-offerings.pot b/docs/pot/network-offerings.pot new file mode 100644 index 00000000000..5493e2bdcbe --- /dev/null +++ b/docs/pot/network-offerings.pot @@ -0,0 +1,115 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Network Offerings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the most up-to-date list of supported network services, see the &PRODUCT; UI or call listNetworkServices." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A network offering is a named set of network services, such as:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DHCP" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "DNS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Source NAT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Static NAT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Port Forwarding" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Load Balancing" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Firewall" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Optional) Name one of several available providers to use for a given service, such as Juniper for the firewall" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) Network tag to specify which physical network to use" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When creating a new VM, the user chooses one of the available network offerings, and that determines which network services the VM can use." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; administrator can create any number of custom network offerings, in addition to the default network offerings provided by &PRODUCT;. By creating multiple custom network offerings, you can set up your cloud to offer different classes of service on a single multi-tenant physical network. For example, while the underlying physical wiring may be the same for two tenants, tenant A may only need simple firewall protection for their website, while tenant B may be running a web server farm and require a scalable firewall solution, load balancing solution, and alternate networks for accessing the database backend." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you create load balancing rules while using a network service offering that includes an external load balancer device such as NetScaler, and later change the network service offering to one that uses the &PRODUCT; virtual router, you must create a firewall rule on the virtual router for each of your existing load balancing rules so that they continue to function." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When creating a new virtual network, the &PRODUCT; administrator chooses which network offering to enable for that network. Each virtual network is associated with one network offering. A virtual network can be upgraded or downgraded by changing its associated network offering. If you do this, be sure to reprogram the physical network to match." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; also has internal network offerings for use by &PRODUCT; system VMs. These network offerings are not visible to users but can be modified by administrators." +msgstr "" + diff --git a/docs/pot/network-rate.pot b/docs/pot/network-rate.pot new file mode 100644 index 00000000000..ca9784b9c0d --- /dev/null +++ b/docs/pot/network-rate.pot @@ -0,0 +1,195 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Network Throttling" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network throttling is the process of controlling the network access and bandwidth usage based on certain rules. &PRODUCT; controls this behaviour of the guest networks in the cloud by using the network rate parameter. This parameter is defined as the default data transfer rate in Mbps (Megabits Per Second) allowed in a guest network. It defines the upper limits for network utilization. If the current utilization is below the allowed upper limits, access is granted, else revoked." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can throttle the network bandwidth either to control the usage above a certain limit for some accounts, or to control network congestion in a large cloud environment. The network rate for your cloud can be configured on the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Service Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Global parameter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If network rate is set to NULL in service offering, the value provided in the vm.network.throttling.rate global parameter is applied. If the value is set to NULL for network offering, the value provided in the network.throttling.rate global parameter is considered." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the default public, storage, and management networks, network rate is set to 0. This implies that the public, storage, and management networks will have unlimited bandwidth by default. For default guest networks, network rate is set to NULL. In this case, network rate is defaulted to the global parameter value." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following table gives you an overview of how network rate is applied on different types of networks in &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Networks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Rate Is Taken from" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest network of Virtual Router" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Guest Network Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public network of Virtual Router" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage network of Secondary Storage VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "System Network Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Management network of Secondary Storage VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage network of Console Proxy VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Management network of Console Proxy VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage network of Virtual Router" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Management network of Virtual Router" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public network of Secondary Storage VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public network of Console Proxy VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Default network of a guest VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Compute Offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Additional networks of a guest VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Corresponding Network Offerings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A guest VM must have a default network, and can also have many additional networks. Depending on various parameters, such as the host and virtual switch used, you can observe a difference in the network rate in your cloud. For example, on a VMware host the actual network rate varies based on where they are configured (compute offering, network offering, or both); the network type (shared or isolated); and traffic direction (ingress or egress)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The network rate set for a network offering used by a particular network in &PRODUCT; is used for the traffic shaping policy of a port group, for example: port group A, for that network: a particular subnet or VLAN on the actual network. The virtual routers for that network connects to the port group A, and by default instances in that network connects to this port group. However, if an instance is deployed with a compute offering with the network rate set, and if this rate is used for the traffic shaping policy of another port group for the network, for example port group B, then instances using this compute offering are connected to the port group B, instead of connecting to port group A." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The traffic shaping policy on standard port groups in VMware only applies to the egress traffic, and the net effect depends on the type of network used in &PRODUCT;. In shared networks, ingress traffic is unlimited for &PRODUCT;, and egress traffic is limited to the rate that applies to the port group used by the instance if any. If the compute offering has a network rate configured, this rate applies to the egress traffic, otherwise the network rate set for the network offering applies. For isolated networks, the network rate set for the network offering, if any, effectively applies to the ingress traffic. This is mainly because the network rate set for the network offering applies to the egress traffic from the virtual router to the instance. The egress traffic is limited by the rate that applies to the port group used by the instance if any, similar to shared networks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network rate of network offering = 10 Mbps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network rate of compute offering = 200 Mbps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In shared networks, ingress traffic will not be limited for &PRODUCT;, while egress traffic will be limited to 200 Mbps. In an isolated network, ingress traffic will be limited to 10 Mbps and egress to 200 Mbps." +msgstr "" + diff --git a/docs/pot/network-service-providers.pot b/docs/pot/network-service-providers.pot new file mode 100644 index 00000000000..7bdf8d7998a --- /dev/null +++ b/docs/pot/network-service-providers.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Network Service Providers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the most up-to-date list of supported network service providers, see the &PRODUCT; UI or call listNetworkServiceProviders." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A service provider (also called a network element) is hardware or virtual appliance that makes a network service possible; for example, a firewall appliance can be installed in the cloud to provide firewall service. On a single network, multiple providers can provide the same network service. For example, a firewall service may be provided by Cisco or Juniper devices in the same physical network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can have multiple instances of the same service provider in a network (say, more than one Juniper SRX device)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If different providers are set up to provide the same service on the network, the administrator can create network offerings so users can specify which network service provider they prefer (along with the other choices offered in network offerings). Otherwise, &PRODUCT; will choose which provider to use whenever the service is called for." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Supported Network Service Providers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; ships with an internal list of the supported service providers, and you can choose from this list when creating a network offering." +msgstr "" + diff --git a/docs/pot/network-setup.pot b/docs/pot/network-setup.pot new file mode 100644 index 00000000000..37153fb6de9 --- /dev/null +++ b/docs/pot/network-setup.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Network Setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Achieving the correct networking setup is crucial to a successful &PRODUCT; installation. This section contains information to help you make decisions and follow the right procedures to get your network set up correctly." +msgstr "" + diff --git a/docs/pot/network-usage-record-format.pot b/docs/pot/network-usage-record-format.pot new file mode 100644 index 00000000000..75d6481534d --- /dev/null +++ b/docs/pot/network-usage-record-format.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Network Usage Record Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For network usage (bytes sent/received), the following fields exist in a usage record." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "account – name of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "accountid – ID of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "domainid – ID of the domain in which this account resides" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "zoneid – Zone where the usage occurred" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "description – A string describing what the usage record is tracking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usagetype – A number representing the usage type (see Usage Types)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rawusage – A number representing the actual usage in hours" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usageid – Device ID (virtual router ID or external device ID)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "type – Device type (domain router, external load balancer, etc.)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startdate, enddate – The range of time for which the usage is aggregated; see Dates in the Usage Record" +msgstr "" + diff --git a/docs/pot/networking-in-a-pod.pot b/docs/pot/networking-in-a-pod.pot new file mode 100644 index 00000000000..3cbf807cfe0 --- /dev/null +++ b/docs/pot/networking-in-a-pod.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Networking in a Pod" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Figure 2 illustrates network setup within a single pod. The hosts are connected to a pod-level switch. At a minimum, the hosts should have one physical uplink to each switch. Bonded NICs are supported as well. The pod-level switch is a pair of redundant gigabit switches with 10 G uplinks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Servers are connected as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage devices are connected to only the network that carries management traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hosts are connected to networks for both management traffic and public traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hosts are also connected to one or more networks carrying guest traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "We recommend the use of multiple physical Ethernet cards to implement each network interface as well as redundant switch fabric in order to maximize throughput and improve reliability." +msgstr "" + diff --git a/docs/pot/networking-in-a-zone.pot b/docs/pot/networking-in-a-zone.pot new file mode 100644 index 00000000000..99481c81b27 --- /dev/null +++ b/docs/pot/networking-in-a-zone.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Networking in a Zone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Figure 3 illustrates the network setup within a single zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A firewall for management traffic operates in the NAT mode. The network typically is assigned IP addresses in the 192.168.0.0/16 Class B private address space. Each pod is assigned IP addresses in the 192.168.*.0/24 Class C private address space." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each zone has its own set of public IP addresses. Public IP addresses from different zones do not overlap." +msgstr "" + diff --git a/docs/pot/networking-overview.pot b/docs/pot/networking-overview.pot new file mode 100644 index 00000000000..24c56a960a2 --- /dev/null +++ b/docs/pot/networking-overview.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Networking Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; offers two types of networking scenario:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Basic. For AWS-style networking. Provides a single network where guest isolation can be provided through layer-3 means such as security groups (IP address source filtering)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Advanced. For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more details, see Network Setup." +msgstr "" + diff --git a/docs/pot/networking_overview.pot b/docs/pot/networking_overview.pot new file mode 100644 index 00000000000..aedc7ae3867 --- /dev/null +++ b/docs/pot/networking_overview.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Networking Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack offers two types of networking scenario:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Basic. For AWS-style networking. Provides a single network where guest isolation can be provided through layer-3 means such as security groups (IP address source filtering)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Advanced. For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more details, see Network Setup." +msgstr "" + diff --git a/docs/pot/networks-for-users-overview.pot b/docs/pot/networks-for-users-overview.pot new file mode 100644 index 00000000000..62eed8c41b4 --- /dev/null +++ b/docs/pot/networks-for-users-overview.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Overview of Setting Up Networking for Users" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "People using cloud infrastructure have a variety of needs and preferences when it comes to the networking services provided by the cloud. As a &PRODUCT; administrator, you can do the following things to set up networking for your users:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up physical networks in zones" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up several different providers for the same service on a single physical network (for example, both Cisco and Juniper firewalls)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Bundle different types of network services into network offerings, so users can choose the desired network services for any given virtual machine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add new network offerings as time goes on so end users can upgrade to a better class of service on their network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide more ways for a network to be accessed by a user, such as through a project of which the user is a member" +msgstr "" + diff --git a/docs/pot/networks.pot b/docs/pot/networks.pot new file mode 100644 index 00000000000..6f08ba2d5d7 --- /dev/null +++ b/docs/pot/networks.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Managing Networks and Traffic" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a &PRODUCT;, guest VMs can communicate with each other using shared infrastructure with the security and user perception that the guests have a private LAN. The &PRODUCT; virtual router is the main component providing networking features for guest traffic." +msgstr "" + diff --git a/docs/pot/nfs-shares-on-management-server.pot b/docs/pot/nfs-shares-on-management-server.pot new file mode 100644 index 00000000000..bec36a1ee5e --- /dev/null +++ b/docs/pot/nfs-shares-on-management-server.pot @@ -0,0 +1,240 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using the Management Server as the NFS Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section tells how to set up NFS shares for primary and secondary storage on the same node with the Management Server. This is more typical of a trial installation, but is technically possible in a larger deployment. It is assumed that you will have less than 16TB of storage on the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The exact commands for the following steps may vary depending on your operating system version." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Ubuntu/Debian systems, you'll need to install the nfs-kernel-server package:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"$ sudo apt-get install nfs-kernel-server\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the Management Server host, create two directories that you will use for primary and secondary storage. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# mkdir -p /export/primary\n" +"# mkdir -p /export/secondary\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the new directories as NFS exports, edit /etc/exports. Export the NFS share(s) with rw,async,no_root_squash. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# vi /etc/exports" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Insert the following line." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "/export *(rw,async,no_root_squash)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Export the /export directory." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# exportfs -a" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the /etc/sysconfig/nfs file." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# vi /etc/sysconfig/nfs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Uncomment the following lines:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"LOCKD_TCPPORT=32803\n" +"LOCKD_UDPPORT=32769\n" +"MOUNTD_PORT=892\n" +"RQUOTAD_PORT=875\n" +"STATD_PORT=662\n" +"STATD_OUTGOING_PORT=2020\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the /etc/sysconfig/iptables file." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# vi /etc/sysconfig/iptables" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add the following lines at the beginning of the INPUT chain where <NETWORK> is the network that you'll be using:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p udp --dport 111 -j ACCEPT\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p tcp --dport 111 -j ACCEPT\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p tcp --dport 2049 -j ACCEPT\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p tcp --dport 32803 -j ACCEPT\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p udp --dport 32769 -j ACCEPT\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p tcp --dport 892 -j ACCEPT\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p udp --dport 892 -j ACCEPT\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p tcp --dport 875 -j ACCEPT\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p udp --dport 875 -j ACCEPT\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p tcp --dport 662 -j ACCEPT\n" +"-A INPUT -s <NETWORK> -m state --state NEW -p udp --dport 662 -j ACCEPT \n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following commands:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# service iptables restart\n" +"# service iptables save\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If NFS v4 communication is used between client and server, add your domain to /etc/idmapd.conf on both the hypervisor host and Management Server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# vi /etc/idmapd.conf" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Remove the character # from the beginning of the Domain line in idmapd.conf and replace the value in the file with your own domain. In the example below, the domain is company.com." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "Domain = company.com" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reboot the Management Server host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Two NFS shares called /export/primary and /export/secondary are now set up." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "It is recommended that you test to be sure the previous steps have been successful." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the hypervisor host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure NFS and rpcbind are running. The commands might be different depending on your OS. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# service rpcbind start\n" +"# service nfs start\n" +"# chkconfig nfs on\n" +"# chkconfig rpcbind on\n" +"# reboot \n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log back in to the hypervisor host and try to mount the /export directories. For example (substitute your own management server name):" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# mkdir /primarymount\n" +"# mount -t nfs <management-server-name>:/export/primary /primarymount\n" +"# umount /primarymount\n" +"# mkdir /secondarymount\n" +"# mount -t nfs <management-server-name>:/export/secondary /secondarymount\n" +"# umount /secondarymount \n" +" " +msgstr "" + diff --git a/docs/pot/nfs-shares-on-separate-server.pot b/docs/pot/nfs-shares-on-separate-server.pot new file mode 100644 index 00000000000..6dc037a9813 --- /dev/null +++ b/docs/pot/nfs-shares-on-separate-server.pot @@ -0,0 +1,108 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using a Separate NFS Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section tells how to set up NFS shares for secondary and (optionally) primary storage on an NFS server running on a separate node from the Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The exact commands for the following steps may vary depending on your operating system version." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(KVM only) Ensure that no volume is already mounted at your NFS mount point." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the storage server, create an NFS share for secondary storage and, if you are using NFS for primary storage as well, create a second NFS share. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"# mkdir -p /export/primary\n" +"# mkdir -p /export/secondary\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To configure the new directories as NFS exports, edit /etc/exports. Export the NFS share(s) with rw,async,no_root_squash. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# vi /etc/exports" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Insert the following line." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "/export *(rw,async,no_root_squash)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Export the /export directory." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# exportfs -a" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the management server, create a mount point for secondary storage. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# mkdir -p /mnt/secondary" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Mount the secondary storage on your Management Server. Replace the example NFS server name and NFS share paths below with your own." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# mount -t nfs nfsservername:/nfs/share/secondary /mnt/secondary" +msgstr "" + diff --git a/docs/pot/offerings.pot b/docs/pot/offerings.pot new file mode 100644 index 00000000000..7f22cbed35d --- /dev/null +++ b/docs/pot/offerings.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Service Offerings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In this chapter we discuss compute, disk, and system service offerings. Network offerings are discussed in the section on setting up networking for users." +msgstr "" + diff --git a/docs/pot/ongoing-config-of-external-firewalls-lb.pot b/docs/pot/ongoing-config-of-external-firewalls-lb.pot new file mode 100644 index 00000000000..1976fc00f76 --- /dev/null +++ b/docs/pot/ongoing-config-of-external-firewalls-lb.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Ongoing Configuration of External Firewalls and Load Balancers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Additional user actions (e.g. setting a port forward) will cause further programming of the firewall and load balancer. A user may request additional public IP addresses and forward traffic received at these IPs to specific VMs. This is accomplished by enabling static NAT for a public IP address, assigning the IP to a VM, and specifying a set of protocols and port ranges to open. When a static NAT rule is created, &PRODUCT; programs the zone's external firewall with the following objects:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A static NAT rule that maps the public IP address to the private IP address of a VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A security policy that allows traffic within the set of protocols and port ranges that are specified." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A firewall filter counter that measures the number of bytes of incoming traffic to the public IP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The number of incoming and outgoing bytes through source NAT, static NAT, and load balancing rules is measured and saved on each external element. This data is collected on a regular basis and stored in the &PRODUCT; database." +msgstr "" + diff --git a/docs/pot/over-provisioning-service-offering-limits.pot b/docs/pot/over-provisioning-service-offering-limits.pot new file mode 100644 index 00000000000..1be8e13a1af --- /dev/null +++ b/docs/pot/over-provisioning-service-offering-limits.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Over-Provisioning and Service Offering Limits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; performs CPU over-provisioning based on an over-provisioning ratio configured by the administrator. This is defined by the cpu.overprovisioning.factor global configuration variable." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; performs CPU over-provisioning based on an over-provisioning ratio configured by the administrator. This is defined by the cpu.overprovisioning.factor global configuration variable" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Service offerings limits (e.g. 1 GHz, 1 core) are strictly enforced for core count. For example, a guest with a service offering of one core will have only one core available to it regardless of other activity on the Host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Service offering limits for gigahertz are enforced only in the presence of contention for CPU resources. For example, suppose that a guest was created with a service offering of 1 GHz on a Host that has 2 GHz cores, and that guest is the only guest running on the Host. The guest will have the full 2 GHz available to it. When multiple guests are attempting to use the CPU a weighting factor is used to schedule CPU resources. The weight is based on the clock speed in the service offering. Guests receive a CPU allocation that is proportionate to the GHz in the service offering. For example, a guest created from a 2 GHz service offering will receive twice the CPU allocation as a guest created from a 1 GHz service offering. &PRODUCT; does not perform memory over-provisioning." +msgstr "" + diff --git a/docs/pot/ovm-install.pot b/docs/pot/ovm-install.pot new file mode 100644 index 00000000000..aba639b633c --- /dev/null +++ b/docs/pot/ovm-install.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Installing OVM for &PRODUCT;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TODO" +msgstr "" + diff --git a/docs/pot/ovm-requirements.pot b/docs/pot/ovm-requirements.pot new file mode 100644 index 00000000000..263f46ebf38 --- /dev/null +++ b/docs/pot/ovm-requirements.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "System Requirements for OVM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TODO" +msgstr "" + diff --git a/docs/pot/per-domain-limits.pot b/docs/pot/per-domain-limits.pot new file mode 100644 index 00000000000..4ac3828d230 --- /dev/null +++ b/docs/pot/per-domain-limits.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Per-Domain Limits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; allows the configuration of limits on a domain basis. With a domain limit in place, all users still have their account limits. They are additionally limited, as a group, to not exceed the resource limits set on their domain. Domain limits aggregate the usage of all accounts in the domain as well as all accounts in all subdomains of that domain. Limits set at the root domain level apply to the sum of resource usage by the accounts in all domains and sub-domains below that root domain." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To set a domain limit:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation tree, click Domains." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the domain you want to modify. The current domain limits are displayed. A value of -1 shows that there is no limit in place." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Edit button editbutton.png: edits the settings. " +msgstr "" + diff --git a/docs/pot/performance-monitoring.pot b/docs/pot/performance-monitoring.pot new file mode 100644 index 00000000000..b5afcfb7012 --- /dev/null +++ b/docs/pot/performance-monitoring.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Performance Monitoring" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host and guest performance monitoring is available to end users and administrators. This allows the user to monitor their utilization of resources and determine when it is appropriate to choose a more powerful service offering or larger disk." +msgstr "" + diff --git a/docs/pot/physical-network-configuration-settings.pot b/docs/pot/physical-network-configuration-settings.pot new file mode 100644 index 00000000000..204f7f2ad68 --- /dev/null +++ b/docs/pot/physical-network-configuration-settings.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configurable Characteristics of Physical Networks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides configuration settings you can use to set up a physical network in a zone, including:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "What type of network traffic it carries (guest, public, management, storage)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLANs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Unique name that the hypervisor can use to find that particular network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Enabled or disabled. When a network is first set up, it is disabled – not in use yet. The administrator sets the physical network to enabled, and it begins to be used. The administrator can later disable the network again, which prevents any new virtual networks from being created on that physical network; the existing network traffic continues even though the state is disabled." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Speed" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tags, so network offerings can be matched to physical networks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Isolation method" +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-about.pot b/docs/pot/plugin-niciranvp-about.pot new file mode 100644 index 00000000000..fb39acbc17d --- /dev/null +++ b/docs/pot/plugin-niciranvp-about.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "The Nicira NVP Plugin" +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-devicemanagement.pot b/docs/pot/plugin-niciranvp-devicemanagement.pot new file mode 100644 index 00000000000..34bcc0ebf58 --- /dev/null +++ b/docs/pot/plugin-niciranvp-devicemanagement.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Device-management" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In CloudStack 4.0.x each Nicira NVP setup is considered a \"device\" that can be added and removed from a physical network. To complete the configuration of the Nicira NVP plugin a device needs to be added to the physical network using the \"addNiciraNVPDevice\" API call. The plugin is now enabled on the physical network and any guest networks created on that network will be provisioned using the Nicra NVP Controller." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The plugin introduces a set of new API calls to manage the devices, see below or refer to the API reference." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addNiciraNvpDevice" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "physicalnetworkid: the UUID of the physical network on which the device is configured" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "hostname: the IP address of the NVP controller" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "username: the username for access to the NVP API" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "password: the password for access to the NVP API" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "transportzoneuuid: the UUID of the transportzone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "deleteNiciraNVPDevice" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "nvpdeviceid: the UUID of the device" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNiciraNVPDevices" +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-features.pot b/docs/pot/plugin-niciranvp-features.pot new file mode 100644 index 00000000000..0c4154bfbb8 --- /dev/null +++ b/docs/pot/plugin-niciranvp-features.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Features of the Nicira NVP Plugin" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In CloudStack release 4.0.0-incubating this plugin supports the Connectivity service. This service is responsible for creating Layer 2 networks supporting the networks created by Guests. In other words when an tennant creates a new network, instead of the traditional VLAN a logical network will be created by sending the appropriate calls to the Nicira NVP Controller." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The plugin has been tested with Nicira NVP versions 2.1.0, 2.2.0 and 2.2.1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In CloudStack 4.0.0-incubating only the XenServer hypervisor is supported for use in combination with Nicira NVP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In CloudStack 4.1.0-incubating both KVM and XenServer hypervisors are supported." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In CloudStack 4.0.0-incubating the UI components for this plugin are not complete, configuration is done by sending commands to the API." +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-guide.pot b/docs/pot/plugin-niciranvp-guide.pot new file mode 100644 index 00000000000..665e4ff217f --- /dev/null +++ b/docs/pot/plugin-niciranvp-guide.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Plugin Guide for the Nicira NVP Plugin" +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-introduction.pot b/docs/pot/plugin-niciranvp-introduction.pot new file mode 100644 index 00000000000..2f50cf01fa6 --- /dev/null +++ b/docs/pot/plugin-niciranvp-introduction.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Introduction to the Nicira NVP Plugin" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Nicira NVP plugin allows CloudStack to use the Nicira solution for virtualized network as a provider for CloudStack networks and services." +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-preparations.pot b/docs/pot/plugin-niciranvp-preparations.pot new file mode 100644 index 00000000000..c3bdbaea3fd --- /dev/null +++ b/docs/pot/plugin-niciranvp-preparations.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Prerequisites" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before enabling the Nicira NVP plugin the NVP Controller needs to be configured. Please review the NVP User Guide on how to do that." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack needs to have at least one physical network with the isolation method set to \"STT\". This network should be enabled for the Guest traffic type." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Guest traffic type should be configured with the traffic label that matches the name of the Integration Bridge on the hypervisor. See the Nicira NVP User Guide for more details on how to set this up in XenServer or KVM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure you have the following information ready:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IP address of the NVP Controller" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The username to access the API" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The password to access the API" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The UUID of the Transport Zone that contains the hypervisors in this Zone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The UUID of the Physical Network that will used for the Guest networks" +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-provider.pot b/docs/pot/plugin-niciranvp-provider.pot new file mode 100644 index 00000000000..1f1b1e914e1 --- /dev/null +++ b/docs/pot/plugin-niciranvp-provider.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Enabling the service provider" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To allow CloudStack to use the Nicira NVP Plugin the network service provider needs to be enabled on the physical network. The following sequence of API calls will enable the network service provider" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "addNetworkServiceProvider" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "name = \"NiciraNvp\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "physicalnetworkid = <the uuid of the physical network>" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "updateNetworkServiceProvider" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "id = <the provider uuid returned by the previous call>" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "state = \"Enabled\"" +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-revisions.pot b/docs/pot/plugin-niciranvp-revisions.pot new file mode 100644 index 00000000000..ea63a27dca9 --- /dev/null +++ b/docs/pot/plugin-niciranvp-revisions.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Revision History" +msgstr "" + +#. Tag: firstname +#, no-c-format +msgid "Hugo" +msgstr "" + +#. Tag: surname +#, no-c-format +msgid "Trippaers" +msgstr "" + +#. Tag: member +#, no-c-format +msgid "Documentation created for 4.0.0-incubating version of the NVP Plugin" +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-tables.pot b/docs/pot/plugin-niciranvp-tables.pot new file mode 100644 index 00000000000..5e1570f9984 --- /dev/null +++ b/docs/pot/plugin-niciranvp-tables.pot @@ -0,0 +1,90 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Database tables" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following tables are added to the cloud database for the Nicira NVP Plugin" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "nicira_nvp_nic_map, contains a mapping from nic to logical switch port" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "id" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "logicalswitch, uuid of the logical switch this port is connected to" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "logicalswitchport, uuid of the logical switch port for this nic" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "nic, the CloudStack uuid for this nic, reference to the nics table" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "external_nicira_nvp_devices, contains all configured devices" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "uuid" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "physical_network_id, the physical network this device is configured on" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "provider_name, set to \"NiciraNvp\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "device_name, display name for this device" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "host_id, reference to the host table with the device configuration" +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-troubleshooting.pot b/docs/pot/plugin-niciranvp-troubleshooting.pot new file mode 100644 index 00000000000..45cdc9aa099 --- /dev/null +++ b/docs/pot/plugin-niciranvp-troubleshooting.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Troubleshooting the Nicira NVP Plugin" +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-ui.pot b/docs/pot/plugin-niciranvp-ui.pot new file mode 100644 index 00000000000..80d69bd636c --- /dev/null +++ b/docs/pot/plugin-niciranvp-ui.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Configuring the Nicira NVP plugin from the UI" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In CloudStack 4.1.0-incubating the Nicira NVP plugin and its resources can be configured in the infrastructure tab of the UI. Navigate to the physical network with STT isolation and configure the network elements. The NiciraNvp is listed here." +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-usage.pot b/docs/pot/plugin-niciranvp-usage.pot new file mode 100644 index 00000000000..165ea6d7413 --- /dev/null +++ b/docs/pot/plugin-niciranvp-usage.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using the Nicira NVP Plugin" +msgstr "" + diff --git a/docs/pot/plugin-niciranvp-uuidreferences.pot b/docs/pot/plugin-niciranvp-uuidreferences.pot new file mode 100644 index 00000000000..8cbf4774251 --- /dev/null +++ b/docs/pot/plugin-niciranvp-uuidreferences.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "UUID References" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The plugin maintains several references in the CloudStack database to items created on the NVP Controller." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Every guest network this is created will have its broadcast type set to Lswitch and if the network is in state \"Implemented\", the broadcast URI will have the UUID of the Logical Switch that was created for this network on the NVP Controller." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Nics that are connected to one of the Logical Switches will have their Logical Switch Port UUID listed in the nicira_nvp_nic_map table" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All devices created on the NVP Controller will have a tag set to domain-account of the owner of the network, this string can be used to search for items in the NVP Controller." +msgstr "" + diff --git a/docs/pot/pod-add.pot b/docs/pot/pod-add.pot new file mode 100644 index 00000000000..857b5a1360d --- /dev/null +++ b/docs/pot/pod-add.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Pod" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you created a new zone, &PRODUCT; adds the first pod for you. You can add more pods at any time using the procedure in this section." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Infrastructure. In Zones, click View More, then click the zone to which you want to add a pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Compute and Storage tab. In the Pods node of the diagram, click View All." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Enter the following details in the dialog." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. The name of the pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateway. The gateway for the hosts in that pod." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Netmask. The network prefix that defines the pod's subnet. Use CIDR notation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start/End Reserved System IP. The IP range in the management network that &PRODUCT; uses to manage various system VMs, such as Secondary Storage VMs, Console Proxy VMs, and DHCP. For more information, see System Reserved IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + diff --git a/docs/pot/port-forwarding.pot b/docs/pot/port-forwarding.pot new file mode 100644 index 00000000000..47f16ff90dc --- /dev/null +++ b/docs/pot/port-forwarding.pot @@ -0,0 +1,115 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Port Forwarding" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A port forward service is a set of port forwarding rules that define a policy. A port forward service is then applied to one or more guest VMs. The guest VM then has its inbound network access managed according to the policy defined by the port forwarding service. You can optionally specify one or more CIDRs to filter the source IPs. This is useful when you want to allow only incoming requests from certain IP addresses to be forwarded." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A guest VM can be in any number of port forward services. Port forward services can be defined but have no members. If a guest VM is part of more than one network, port forwarding rules will function only if they are defined on the default network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You cannot use port forwarding to open ports for an elastic IP address. When elastic IP is used, outside access is instead controlled through the use of security groups. See Security Groups." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To set up port forwarding:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have not already done so, add a public IP address range to a zone in &PRODUCT;. See Adding a Zone and Pod in the Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add one or more VM instances to &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the guest network where the VMs are running." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose an existing IP address or acquire a new IP address. (See Acquiring a New IP Address on page 73.) Click the name of the IP address in the list." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configuration tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Port Forwarding node of the diagram, click View All." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Fill in the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public Port. The port to which public traffic will be addressed on the IP address you acquired in the previous step." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private Port. The port on which the instance is listening for forwarded public traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol. The communication protocol in use between the two ports." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add." +msgstr "" + diff --git a/docs/pot/prepare-system-vm-template.pot b/docs/pot/prepare-system-vm-template.pot new file mode 100644 index 00000000000..6429e4ee078 --- /dev/null +++ b/docs/pot/prepare-system-vm-template.pot @@ -0,0 +1,116 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Prepare the System VM Template" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Secondary storage must be seeded with a template that is used for &PRODUCT; system VMs. Citrix provides you with the necessary binary package of the system VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When copying and pasting a command, be sure the command has pasted as a single line before executing. Some document viewers may introduce unwanted line breaks in copied text." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the Management Server, run one or more of the following cloud-install-sys-tmplt commands to retrieve and decompress the system VM template. Run the command for each hypervisor type that you expect end users to run in this Zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If your secondary storage mount point is not named /mnt/secondary, substitute your own mount point name." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you set the &PRODUCT; database encryption type to \"web\" when you set up the database, you must now add the parameter -s <management-server-secret-key>. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This process will require approximately 5 GB of free space on the local file system and up to 30 minutes each time it runs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For XenServer:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# /usr/lib64/cloud/common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.vhd.bz2 -h xenserver -s <optional-management-server-secret-key> -F" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For vSphere:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# /usr/lib64/cloud/common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.ova -h vmware -s <optional-management-server-secret-key> -F" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For KVM:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# /usr/lib64/cloud/common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2 -h kvm -s <optional-management-server-secret-key> -F" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are using a separate NFS server, perform this step." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Do not perform this step if you are using the Management Server as the NFS server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the script has finished, unmount secondary storage and remove the created directory." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# umount /mnt/secondary\n" +"# rmdir /mnt/secondary" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat these steps for each secondary storage server." +msgstr "" + diff --git a/docs/pot/primary-storage-add.pot b/docs/pot/primary-storage-add.pot new file mode 100644 index 00000000000..c414a11103a --- /dev/null +++ b/docs/pot/primary-storage-add.pot @@ -0,0 +1,190 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Add Primary Storage" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "System Requirements for Primary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hardware requirements:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Any standards-compliant iSCSI or NFS server that is supported by the underlying hypervisor." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The storage server should be a machine with a large number of disks. The disks should ideally be managed by a hardware RAID controller." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Minimum required capacity depends on your needs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When setting up primary storage, follow these restrictions:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Primary storage cannot be added until a host has been added to the cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you do not provision shared primary storage, you must set the global configuration parameter system.vm.local.storage.required to true, or else you will not be able to start VMs." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Adding Primary Stroage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you create a new zone, the first primary storage is added as part of that procedure. You can add primary storage servers at any time, such as when adding a new cluster or adding more servers to an existing cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure there is nothing stored on the server. Adding the server to &PRODUCT; will destroy any existing data." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI (see )." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Infrastructure. In Zones, click View More, then click the zone in which you want to add the primary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Compute tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Primary Storage node of the diagram, click View All." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Primary Storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the following information in the dialog. The information required varies depending on your choice in Protocol." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Pod. The pod for the storage device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Cluster. The cluster for the storage device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name. The name of the storage device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Protocol. For XenServer, choose either NFS, iSCSI, or PreSetup. For KVM, choose NFS or SharedMountPoint. For vSphere choose either VMFS (iSCSI or FiberChannel) or NFS." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Server (for NFS, iSCSI, or PreSetup). The IP address or DNS name of the storage device." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Server (for VMFS). The IP address or DNS name of the vCenter server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Path (for NFS). In NFS this is the exported path from the server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Path (for VMFS). In vSphere this is a combination of the datacenter name and the datastore name. The format is \"/\" datacenter name \"/\" datastore name. For example, \"/cloud.dc.VM/cluster1datastore\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Path (for SharedMountPoint). With KVM this is the path on each host that is where this primary storage is mounted. For example, \"/mnt/primary\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SR Name-Label (for PreSetup). Enter the name-label of the SR that has been set up outside &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Target IQN (for iSCSI). In iSCSI this is the IQN of the target. For example, iqn.1986-03.com.sun:02:01ec9bb549-1271378984." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Lun # (for iSCSI). In iSCSI this is the LUN number. For example, 3." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tags (optional). The comma-separated list of tags for this storage device. It should be an equivalent set or superset of the tags on your disk offerings.." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The tag sets on primary storage across clusters in a Zone must be identical. For example, if cluster A provides primary storage that has tags T1 and T2, all other clusters in the Zone must also provide primary storage that has tags T1 and T2." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK." +msgstr "" + diff --git a/docs/pot/primary-storage-outage-and-data-loss.pot b/docs/pot/primary-storage-outage-and-data-loss.pot new file mode 100644 index 00000000000..4801afdf6e4 --- /dev/null +++ b/docs/pot/primary-storage-outage-and-data-loss.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Primary Storage Outage and Data Loss" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a primary storage outage occurs the hypervisor immediately stops all VMs stored on that storage device. Guests that are marked for HA will be restarted as soon as practical when the primary storage comes back on line. With NFS, the hypervisor may allow the virtual machines to continue running depending on the nature of the issue. For example, an NFS hang will cause the guest VMs to be suspended until storage connectivity is restored.Primary storage is not designed to be backed up. Individual volumes in primary storage can be backed up using snapshots." +msgstr "" + diff --git a/docs/pot/primary-storage.pot b/docs/pot/primary-storage.pot new file mode 100644 index 00000000000..5fb36b3022d --- /dev/null +++ b/docs/pot/primary-storage.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Primary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section gives concepts and technical details about &PRODUCT; primary storage. For information about how to install and configure primary storage through the &PRODUCT; UI, see the Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + diff --git a/docs/pot/private-public-template.pot b/docs/pot/private-public-template.pot new file mode 100644 index 00000000000..b982f60f491 --- /dev/null +++ b/docs/pot/private-public-template.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Private and Public Templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a user creates a template, it can be designated private or public." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private templates are only available to the user who created them. By default, an uploaded template is private." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a user marks a template as “public,†the template becomes available to all users in all accounts in the user's domain, as well as users in any other domains that have access to the Zone where the template is stored. This depends on whether the Zone, in turn, was defined as private or public. A private Zone is assigned to a single domain, and a public Zone is accessible to any domain. If a public template is created in a private Zone, it is available only to users in the domain assigned to that Zone. If a public template is created in a public Zone, it is available to all users in all domains." +msgstr "" + diff --git a/docs/pot/projects-overview.pot b/docs/pot/projects-overview.pot new file mode 100644 index 00000000000..e5fd8f122c8 --- /dev/null +++ b/docs/pot/projects-overview.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Overview of Projects" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Projects are used to organize people and resources. &PRODUCT; users within a single domain can group themselves into project teams so they can collaborate and share virtual resources such as VMs, snapshots, templates, data disks, and IP addresses. &PRODUCT; tracks resource usage per project as well as per user, so the usage can be billed to either a user account or a project. For example, a private cloud within a software company might have all members of the QA department assigned to one project, so the company can track the resources used in testing while the project members can more easily isolate their efforts from other users of the same cloud" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can configure &PRODUCT; to allow any user to create a new project, or you can restrict that ability to just &PRODUCT; administrators. Once you have created a project, you become that project’s administrator, and you can add others within your domain to the project. &PRODUCT; can be set up either so that you can add people directly to a project, or so that you have to send an invitation which the recipient must accept. Project members can view and manage all virtual resources created by anyone in the project (for example, share VMs). A user can be a member of any number of projects and can switch views in the &PRODUCT; UI to show only project-related information, such as project VMs, fellow project members, project-related alerts, and so on." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The project administrator can pass on the role to another project member. The project administrator can also add more members, remove members from the project, set new resource limits (as long as they are below the global defaults set by the &PRODUCT; administrator), and delete the project. When the administrator removes a member from the project, resources created by that user, such as VM instances, remain with the project. This brings us to the subject of resource ownership and which resources can be used by a project." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Resources created within a project are owned by the project, not by any particular &PRODUCT; account, and they can be used only within the project. A user who belongs to one or more projects can still create resources outside of those projects, and those resources belong to the user’s account; they will not be counted against the project’s usage or resource limits. You can create project-level networks to isolate traffic within the project and provide network services such as port forwarding, load balancing, VPN, and static NAT. A project can also make use of certain types of resources from outside the project, if those resources are shared. For example, a shared network or public template is available to any project in the domain. A project can get access to a private template if the template’s owner will grant permission. A project can use any service offering or disk offering available in its domain; however, you can not create private service and disk offerings at the project level.." +msgstr "" + diff --git a/docs/pot/projects.pot b/docs/pot/projects.pot new file mode 100644 index 00000000000..2b6939a713f --- /dev/null +++ b/docs/pot/projects.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using Projects to Organize Users and Resources" +msgstr "" + diff --git a/docs/pot/provisioning-auth-api.pot b/docs/pot/provisioning-auth-api.pot new file mode 100644 index 00000000000..671e64173f0 --- /dev/null +++ b/docs/pot/provisioning-auth-api.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Provisioning and Authentication API" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; expects that a customer will have their own user provisioning infrastructure. It provides APIs to integrate with these existing systems where the systems call out to &PRODUCT; to add/remove users.." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; supports pluggable authenticators. By default, &PRODUCT; assumes it is provisioned with the user’s password, and as a result authentication is done locally. However, external authentication is possible as well. For example, see Using an LDAP Server for User Authentication." +msgstr "" + diff --git a/docs/pot/provisioning-steps-overview.pot b/docs/pot/provisioning-steps-overview.pot new file mode 100644 index 00000000000..8d2873aefee --- /dev/null +++ b/docs/pot/provisioning-steps-overview.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Overview of Provisioning Steps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After the Management Server is installed and running, you can add the compute resources for it to manage. For an overview of how a &PRODUCT; cloud infrastructure is organized, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To provision the cloud infrastructure, or to scale it up at any time, follow these procedures:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Change the root password. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add a zone. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more pods (optional). See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more clusters (optional). See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add more hosts (optional). See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add primary storage. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Add secondary storage. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Initialize and test the new cloud. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you have finished these steps, you will have a deployment with the following basic structure:" +msgstr "" + diff --git a/docs/pot/provisioning-steps.pot b/docs/pot/provisioning-steps.pot new file mode 100644 index 00000000000..cb3d44c369f --- /dev/null +++ b/docs/pot/provisioning-steps.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Steps to Provisioning Your Cloud Infrastructure" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section tells how to add zones, pods, clusters, hosts, storage, and networks to your cloud. If you are unfamiliar with these entities, please begin by looking through ." +msgstr "" + diff --git a/docs/pot/query-filter.pot b/docs/pot/query-filter.pot new file mode 100644 index 00000000000..ff221b07aa6 --- /dev/null +++ b/docs/pot/query-filter.pot @@ -0,0 +1,115 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Query Filter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The query filter is used to find a mapped user in the external LDAP server. The query filter should uniquely map the &PRODUCT; user to LDAP user for a meaningful authentication. For more information about query filter syntax, consult the documentation for your LDAP server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; query filter wildcards are:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Query Filter Wildcard" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "%u" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "User name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "%e" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Email address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "%n" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "First and last name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following examples assume you are using Active Directory, and refer to user attributes from the Active Directory schema." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the &PRODUCT; user name is the same as the LDAP user ID:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "(uid=%u)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the &PRODUCT; user name is the LDAP display name:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "(displayName=%u)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To find a user by email address:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "(mail=%e)" +msgstr "" + diff --git a/docs/pot/re-install-hosts.pot b/docs/pot/re-install-hosts.pot new file mode 100644 index 00000000000..5f21c743b86 --- /dev/null +++ b/docs/pot/re-install-hosts.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Re-Installing Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can re-install a host after placing it in maintenance mode and then removing it. If a host is down and cannot be placed in maintenance mode, it should still be removed before the re-install." +msgstr "" + diff --git a/docs/pot/release-ip-address.pot b/docs/pot/release-ip-address.pot new file mode 100644 index 00000000000..3f70c4d19a7 --- /dev/null +++ b/docs/pot/release-ip-address.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Releasing an IP Address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the network where you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click View IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the IP address you want to release." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Release IP button ReleaseIPButton.png: button to release an IP ." +msgstr "" + diff --git a/docs/pot/release-ip-for-vpc.pot b/docs/pot/release-ip-for-vpc.pot new file mode 100644 index 00000000000..49d743a4ea4 --- /dev/null +++ b/docs/pot/release-ip-for-vpc.pot @@ -0,0 +1,115 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Releasing an IP Address Alloted to a VPC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IP address is a limited resource. If you no longer need a particular IP, you can disassociate it from its VPC and return it to the pool of available addresses. An IP address can be released from its tier, only when all the networking ( port forwarding, load balancing, or StaticNAT ) rules are removed for this IP address. The released IP address will still belongs to the same VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC whose IP you want to release." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The VPC page is displayed where all the tiers you created are listed in a diagram." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Settings icon." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following options are displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network ACLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The IP Addresses page is displayed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the IP you want to release." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Details tab, click the Release IP button release-ip-icon.png: button to release an IP. " +msgstr "" + diff --git a/docs/pot/remove-member-from-project.pot b/docs/pot/remove-member-from-project.pot new file mode 100644 index 00000000000..9933fe45ea4 --- /dev/null +++ b/docs/pot/remove-member-from-project.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Removing a Member From a Project" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a member is removed from a project, the member’s resources continue to be owned by the project. The former project member cannot create any new resources within the project or use any of the project’s existing resources." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A member of a project can be removed by the project administrator, the domain administrator of the domain the project belongs to or of its parent domain, or the &PRODUCT; root administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select View, choose Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the project." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Accounts tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the member." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Delete button. deletebutton.png: Removes a member " +msgstr "" + diff --git a/docs/pot/remove-tier.pot b/docs/pot/remove-tier.pot new file mode 100644 index 00000000000..ac674250681 --- /dev/null +++ b/docs/pot/remove-tier.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Removing Tiers" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can remove a tier from a VPC. A removed tier cannot be revoked. When a tier is removed, only the resources of the tier are expunged. All the network rules (port forwarding, load balancing and staticNAT) and the IP addresses associated to the tier are removed. The IP address still be belonging to the same VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPC that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure button of the VPC for which you want to set up tiers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Configure VPC page is displayed. Locate the tier you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Remove VPC button:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Wait for some time for the tier to be removed." +msgstr "" + diff --git a/docs/pot/remove-vpc.pot b/docs/pot/remove-vpc.pot new file mode 100644 index 00000000000..5627b1eacb5 --- /dev/null +++ b/docs/pot/remove-vpc.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Editing, Restarting, and Removing a Virtual Private Cloud" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that all the tiers are removed before you remove a VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or end user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Select view, select VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the VPCs that you have created for the account is listed in the page." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the VPC you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To remove, click the Remove VPC button remove-vpc.png: button to remove a VPC " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can edit the name and description of a VPC. To do that, select the VPC, then click the Edit button. edit-icon.png: button to edit a VPC " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To restart a VPC, select the VPC, then click the Restart button. restart-vpc.png: button to restart a VPC " +msgstr "" + diff --git a/docs/pot/removed-API-commands.pot b/docs/pot/removed-API-commands.pot new file mode 100644 index 00000000000..3a068c23b83 --- /dev/null +++ b/docs/pot/removed-API-commands.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Removed API commands" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "createConfiguration (Adds configuration value)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "configureSimulator (Configures simulator)" +msgstr "" + diff --git a/docs/pot/removing-hosts.pot b/docs/pot/removing-hosts.pot new file mode 100644 index 00000000000..335eeef81db --- /dev/null +++ b/docs/pot/removing-hosts.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Removing Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hosts can be removed from the cloud as needed. The procedure to remove a host depends on the hypervisor type." +msgstr "" + diff --git a/docs/pot/removing-vsphere-hosts.pot b/docs/pot/removing-vsphere-hosts.pot new file mode 100644 index 00000000000..02db0a5e4da --- /dev/null +++ b/docs/pot/removing-vsphere-hosts.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Removing vSphere Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To remove this type of host, first place it in maintenance mode, as described in . Then use &PRODUCT; to remove the host. &PRODUCT; will not direct commands to a host that has been removed using &PRODUCT;. However, the host may still exist in the vCenter cluster." +msgstr "" + diff --git a/docs/pot/removing-xenserver-kvm-hosts.pot b/docs/pot/removing-xenserver-kvm-hosts.pot new file mode 100644 index 00000000000..fa092ae4683 --- /dev/null +++ b/docs/pot/removing-xenserver-kvm-hosts.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Removing XenServer and KVM Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A node cannot be removed from a cluster until it has been placed in maintenance mode. This will ensure that all of the VMs on it have been migrated to other Hosts. To remove a Host from the cloud:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Place the node in maintenance mode." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For KVM, stop the cloud-agent service." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use the UI option to remove the node." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Then you may power down the Host, re-use its IP address, re-install it, etc" +msgstr "" + diff --git a/docs/pot/requirements-templates.pot b/docs/pot/requirements-templates.pot new file mode 100644 index 00000000000..5d1a8e7ae5f --- /dev/null +++ b/docs/pot/requirements-templates.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Requirements for Templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For XenServer, install PV drivers / Xen tools on each template that you create. This will enable live migration and clean guest shutdown." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For vSphere, install VMware Tools on each template that you create. This will enable console view to work properly." +msgstr "" + diff --git a/docs/pot/resizing-volumes.pot b/docs/pot/resizing-volumes.pot new file mode 100644 index 00000000000..457d1bace2a --- /dev/null +++ b/docs/pot/resizing-volumes.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Resizing Volumes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; does not provide the ability to resize root disks or data disks; the disk size is fixed based on the template used to create the VM. However, the tool VHD Resizer), while not officially supported by Cloud.com or Citrix, might provide a workaround. To increase disk size with VHD Resizer:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Get the VHD from the secondary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Import it into VHD Resizer." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Resize the VHD." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Upload the new VHD." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a new VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Take a snapshot, then create a new template from that snapshot." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information, see How to Resize a Provisioning Server 5 Virtual Disk at the Citrix Knowledge Center" +msgstr "" + diff --git a/docs/pot/response-formats.pot b/docs/pot/response-formats.pot new file mode 100644 index 00000000000..706fcc811e1 --- /dev/null +++ b/docs/pot/response-formats.pot @@ -0,0 +1,79 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Response Formats: XML and JSON" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CloudStack supports two formats as the response to an API call. The default response is XML. If you would like the response to be in JSON, add &response=json to the Command String." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Sample XML Response:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" <listipaddressesresponse> \n" +" <allocatedipaddress>\n" +" <ipaddress>192.168.10.141</ipaddress> \n" +" <allocated>2009-09-18T13:16:10-0700</allocated> \n" +" <zoneid>4</zoneid> \n" +" <zonename>WC</zonename> \n" +" <issourcenat>true</issourcenat> \n" +" </allocatedipaddress>\n" +" </listipaddressesresponse>\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Sample JSON Response:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" { \"listipaddressesresponse\" : \n" +" { \"allocatedipaddress\" :\n" +" [ \n" +" { \n" +" \"ipaddress\" : \"192.168.10.141\", \n" +" \"allocated\" : \"2009-09-18T13:16:10-0700\",\n" +" \"zoneid\" : \"4\", \n" +" \"zonename\" : \"WC\", \n" +" \"issourcenat\" : \"true\" \n" +" } \n" +" ]\n" +" } \n" +" } \n" +" " +msgstr "" + diff --git a/docs/pot/responses.pot b/docs/pot/responses.pot new file mode 100644 index 00000000000..629746bffc4 --- /dev/null +++ b/docs/pot/responses.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Responses" +msgstr "" + diff --git a/docs/pot/roles.pot b/docs/pot/roles.pot new file mode 100644 index 00000000000..9dba537d770 --- /dev/null +++ b/docs/pot/roles.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Roles" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; API supports three access roles:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Root Admin. Access to all features of the cloud, including both virtual and physical resource management." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Domain Admin. Access to only the virtual resources of the clouds that belong to the administrator’s domain." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "User. Access to only the features that allow management of the user’s virtual instances, storage, and network." +msgstr "" + diff --git a/docs/pot/root-admin-ui-overview.pot b/docs/pot/root-admin-ui-overview.pot new file mode 100644 index 00000000000..5f0df53fee7 --- /dev/null +++ b/docs/pot/root-admin-ui-overview.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Root Administrator's UI Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; UI helps the &PRODUCT; administrator provision, view, and manage the cloud infrastructure, domains, user accounts, projects, and configuration settings. The first time you start the UI after a fresh Management Server installation, you can choose to follow a guided tour to provision your cloud infrastructure. On subsequent logins, the dashboard of the logged-in user appears. The various links in this screen and the navigation bar on the left provide access to a variety of administrative functions. The root administrator can also use the UI to perform all the same tasks that are present in the end-user’s UI." +msgstr "" + diff --git a/docs/pot/runtime-allocation-virtual-network-resources.pot b/docs/pot/runtime-allocation-virtual-network-resources.pot new file mode 100644 index 00000000000..df343402c43 --- /dev/null +++ b/docs/pot/runtime-allocation-virtual-network-resources.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Runtime Allocation of Virtual Network Resources" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you define a new virtual network, all your settings for that network are stored in &PRODUCT;. The actual network resources are activated only when the first virtual machine starts in the network. When all virtual machines have left the virtual network, the network resources are garbage collected so they can be allocated again. This helps to conserve network resources.." +msgstr "" + diff --git a/docs/pot/runtime-behavior-of-primary-storage.pot b/docs/pot/runtime-behavior-of-primary-storage.pot new file mode 100644 index 00000000000..1862b3f892b --- /dev/null +++ b/docs/pot/runtime-behavior-of-primary-storage.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Runtime Behavior of Primary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Root volumes are created automatically when a virtual machine is created. Root volumes are deleted when the VM is destroyed. Data volumes can be created and dynamically attached to VMs. Data volumes are not deleted when VMs are destroyed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Administrators should monitor the capacity of primary storage devices and add additional primary storage as needed. See the Advanced Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Administrators add primary storage to the system by creating a &PRODUCT; storage pool. Each storage pool is associated with a cluster." +msgstr "" + diff --git a/docs/pot/runtime-internal-comm-req.pot b/docs/pot/runtime-internal-comm-req.pot new file mode 100644 index 00000000000..78738beeec4 --- /dev/null +++ b/docs/pot/runtime-internal-comm-req.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Runtime Internal Communications Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Servers communicate with each other to coordinate tasks. This communication uses TCP on ports 8250 and 9090." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The console proxy VMs connect to all hosts in the zone over the management traffic network. Therefore the management traffic network of any given pod in the zone must have connectivity to the management traffic network of all other pods in the zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The secondary storage VMs and console proxy VMs connect to the Management Server on port 8250. If you are using multiple Management Servers, the load balanced IP address of the Management Servers on port 8250 must be reachable." +msgstr "" + diff --git a/docs/pot/scheduled-maintenance-maintenance-mode-hosts.pot b/docs/pot/scheduled-maintenance-maintenance-mode-hosts.pot new file mode 100644 index 00000000000..f83df48da7c --- /dev/null +++ b/docs/pot/scheduled-maintenance-maintenance-mode-hosts.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Scheduled Maintenance and Maintenance Mode for Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can place a host into maintenance mode. When maintenance mode is activated, the host becomes unavailable to receive new guest VMs, and the guest VMs already running on the host are seamlessly migrated to another host not in maintenance mode. This migration uses live migration technology and does not interrupt the execution of the guest." +msgstr "" + diff --git a/docs/pot/search-base.pot b/docs/pot/search-base.pot new file mode 100644 index 00000000000..99efd746d56 --- /dev/null +++ b/docs/pot/search-base.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Search Base" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "An LDAP query is relative to a given node of the LDAP directory tree, called the search base. The search base is the distinguished name (DN) of a level of the directory tree below which all users can be found. The users can be in the immediate base directory or in some subdirectory. The search base may be equivalent to the organization, group, or domain name. The syntax for writing a DN varies depending on which LDAP server you are using. A full discussion of distinguished names is outside the scope of our documentation. The following table shows some examples of search bases to find users in the testing department.." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "LDAP Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Example Search Base DN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ApacheDS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ou=testing,o=project" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Active Directory" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OU=testing, DC=company" +msgstr "" + diff --git a/docs/pot/search-user-bind-dn.pot b/docs/pot/search-user-bind-dn.pot new file mode 100644 index 00000000000..5cb326c9f03 --- /dev/null +++ b/docs/pot/search-user-bind-dn.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Search User Bind DN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The bind DN is the user on the external LDAP server permitted to search the LDAP directory within the defined search base. When the DN is returned, the DN and passed password are used to authenticate the &PRODUCT; user with an LDAP bind. A full discussion of bind DNs is outside the scope of our documentation. The following table shows some examples of bind DNs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "LDAP Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Example Bind DN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ApacheDS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "cn=Administrator,dc=testing,ou=project,ou=org" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Active Directory" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CN=Administrator, OU=testing, DC=company, DC=com" +msgstr "" + diff --git a/docs/pot/secondary-storage-add.pot b/docs/pot/secondary-storage-add.pot new file mode 100644 index 00000000000..419cb15e5c5 --- /dev/null +++ b/docs/pot/secondary-storage-add.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Add Secondary Storage" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "System Requirements for Secondary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NFS storage appliance or Linux NFS server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) OpenStack Object Storage (Swift) (see http://swift.openstack.org)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "100GB minimum capacity" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A secondary storage device must be located in the same zone as the guest VMs it serves." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each Secondary Storage server must be available to all hosts in the zone." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Adding Secondary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When you create a new zone, the first secondary storage is added as part of that procedure. You can add secondary storage servers at any time to add more servers to an existing zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure there is nothing stored on the server. Adding the server to &PRODUCT; will destroy any existing data." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are going to use Swift for cloud-wide secondary storage, you must add the Swift storage to &PRODUCT; before you add the local zone secondary storage servers. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To prepare for local zone secondary storage, you should have created and mounted an NFS share during Management Server installation. See .See Preparing NFS Shares in the Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure you prepared the system VM template during Management Server installation. See .See Prepare the System VM Template in the Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now that the secondary storage server for per-zone storage is prepared, add it to &PRODUCT;. Secondary storage is added as part of the procedure for adding a new zone. See ." +msgstr "" + diff --git a/docs/pot/secondary-storage-outage-and-data-loss.pot b/docs/pot/secondary-storage-outage-and-data-loss.pot new file mode 100644 index 00000000000..bc00e1c560b --- /dev/null +++ b/docs/pot/secondary-storage-outage-and-data-loss.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Secondary Storage Outage and Data Loss" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For a Zone that has only one secondary storage server, a secondary storage outage will have feature level impact to the system but will not impact running guest VMs. It may become impossible to create a VM with the selected template for a user. A user may also not be able to save snapshots or examine/restore saved snapshots. These features will automatically be available when the secondary storage comes back online." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Secondary storage data loss will impact recently added user data including templates, snapshots, and ISO images. Secondary storage should be backed up periodically. Multiple secondary storage servers can be provisioned within each zone to increase the scalability of the system." +msgstr "" + diff --git a/docs/pot/secondary-storage-vm.pot b/docs/pot/secondary-storage-vm.pot new file mode 100644 index 00000000000..8f9354a9350 --- /dev/null +++ b/docs/pot/secondary-storage-vm.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Secondary Storage VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In addition to the hosts, &PRODUCT;’s Secondary Storage VM mounts and writes to secondary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Submissions to secondary storage go through the Secondary Storage VM. The Secondary Storage VM can retrieve templates and ISO images from URLs using a variety of protocols." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The secondary storage VM provides a background task that takes care of a variety of secondary storage activities: downloading a new template to a Zone, copying templates between Zones, and snapshot backups." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The administrator can log in to the secondary storage VM if needed." +msgstr "" + diff --git a/docs/pot/secondary-storage.pot b/docs/pot/secondary-storage.pot new file mode 100644 index 00000000000..3139de6a919 --- /dev/null +++ b/docs/pot/secondary-storage.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Secondary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section gives concepts and technical details about &PRODUCT; secondary storage. For information about how to install and configure secondary storage through the &PRODUCT; UI, see the Advanced Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + diff --git a/docs/pot/security-groups.pot b/docs/pot/security-groups.pot new file mode 100644 index 00000000000..c7c8480d9eb --- /dev/null +++ b/docs/pot/security-groups.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Security Groups" +msgstr "" + diff --git a/docs/pot/security-req.pot b/docs/pot/security-req.pot new file mode 100644 index 00000000000..373e3ba840c --- /dev/null +++ b/docs/pot/security-req.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Security Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The public Internet must not be able to access port 8096 or port 8250 on the Management Server." +msgstr "" + diff --git a/docs/pot/send-projects-membership-invitation.pot b/docs/pot/send-projects-membership-invitation.pot new file mode 100644 index 00000000000..f77e51f2d17 --- /dev/null +++ b/docs/pot/send-projects-membership-invitation.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Sending Project Membership Invitations" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use these steps to add a new member to a project if the invitations feature is enabled in the cloud as described in . If the invitations feature is not turned on, use the procedure in Adding Project Members From the UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select View, choose Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the project you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Invitations tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Add by, select one of the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Account – The invitation will appear in the user’s Invitations tab in the Project View. See Using the Project View." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Email – The invitation will be sent to the user’s email address. Each emailed invitation includes a unique code called a token which the recipient will provide back to &PRODUCT; when accepting the invitation. Email invitations will work only if the global parameters related to the SMTP server have been set. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Type the user name or email address of the new member you want to add, and click Invite. Type the &PRODUCT; user name if you chose Account in the previous step. If you chose Email, type the email address. You can invite only people who have an account in this cloud within the same domain as the project. However, you can send the invitation to any email address." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To view and manage the invitations you have sent, return to this tab. When an invitation is accepted, the new member will appear in the project’s Accounts tab." +msgstr "" + diff --git a/docs/pot/separate_storage_network.pot b/docs/pot/separate_storage_network.pot new file mode 100644 index 00000000000..421246003b0 --- /dev/null +++ b/docs/pot/separate_storage_network.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Separate Storage Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the large-scale redundant setup described in the previous section, storage traffic can overload the management network. A separate storage network is optional for deployments. Storage protocols such as iSCSI are sensitive to network delays. A separate storage network ensures guest network traffic contention does not impact storage performance." +msgstr "" + diff --git a/docs/pot/service-offerings.pot b/docs/pot/service-offerings.pot new file mode 100644 index 00000000000..59d9de44e72 --- /dev/null +++ b/docs/pot/service-offerings.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Service Offerings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter Maintenance Mode" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer and Maintenance Mode" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter Maintenance Mode" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer and Maintenance Mode" +msgstr "" + diff --git a/docs/pot/set-database-buffer-pool-size.pot b/docs/pot/set-database-buffer-pool-size.pot new file mode 100644 index 00000000000..c29786c53e9 --- /dev/null +++ b/docs/pot/set-database-buffer-pool-size.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Set Database Buffer Pool Size" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "It is important to provide enough memory space for the MySQL database to cache data and indexes:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Edit the Tomcat configuration file:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "/etc/my.cnf" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Insert the following line in the [mysqld] section, below the datadir line. Use a value that is appropriate for your situation. We recommend setting the buffer pool at 40% of RAM if MySQL is on the same server as the management server or 70% of RAM if MySQL has a dedicated server. The following example assumes a dedicated server with 1024M of RAM." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "innodb_buffer_pool_size=700M" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the MySQL service." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service mysqld restart" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information about the buffer pool, see \"The InnoDB Buffer Pool\" at MySQL Reference Manual." +msgstr "" + diff --git a/docs/pot/set-global-project-resource-limits.pot b/docs/pot/set-global-project-resource-limits.pot new file mode 100644 index 00000000000..ece55dbe370 --- /dev/null +++ b/docs/pot/set-global-project-resource-limits.pot @@ -0,0 +1,110 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting the Global Project Resource Limits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in as administrator to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Global Settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the search box, type max.projects and click the search button." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the search results, you will see the parameters you can use to set per-project maximum resource amounts that apply to all projects in the cloud. No project can have more resources, but an individual project can have lower limits. Click the edit button to set each parameter. editbutton.png: Edits parameters " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.project.public.ips" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum number of public IP addresses that can be owned by any project in the cloud. See About Public IP Addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.project.snapshots" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum number of snapshots that can be owned by any project in the cloud. See Working with Snapshots." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.project.templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum number of templates that can be owned by any project in the cloud. See Working with Templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.project.uservms" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum number of guest virtual machines that can be owned by any project in the cloud. See Working With Virtual Machines." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "max.project.volumes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum number of data volumes that can be owned by any project in the cloud. See Working with Volumes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management restart" +msgstr "" + diff --git a/docs/pot/set-monitor-total-vm-limits-per-host.pot b/docs/pot/set-monitor-total-vm-limits-per-host.pot new file mode 100644 index 00000000000..50fe4321303 --- /dev/null +++ b/docs/pot/set-monitor-total-vm-limits-per-host.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Set and Monitor Total VM Limits per Host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; administrator should monitor the total number of VM instances in each cluster, and disable allocation to the cluster if the total is approaching the maximum that the hypervisor can handle. Be sure to leave a safety margin to allow for the possibility of one or more hosts failing, which would increase the VM load on the other hosts as the VMs are automatically redeployed. Consult the documentation for your chosen hypervisor to find the maximum permitted number of VMs per host, then use &PRODUCT; global configuration settings to set this as the default limit. Monitor the VM activity in each cluster at all times. Keep the total number of VMs below a safe level that allows for the occasional host failure. For example, if there are N hosts in the cluster, and you want to allow for one host in the cluster to be down at any given time, the total number of VM instances you can permit in the cluster is at most (N-1) * (per-host-limit). Once a cluster reaches this number of VMs, use the &PRODUCT; UI to disable allocation of more VMs to the cluster." +msgstr "" + diff --git a/docs/pot/set-per-project-resource-limits.pot b/docs/pot/set-per-project-resource-limits.pot new file mode 100644 index 00000000000..b791974010c --- /dev/null +++ b/docs/pot/set-per-project-resource-limits.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting Per-Project Resource Limits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; root administrator or the domain administrator of the domain where the project resides can set new resource limits for an individual project. The project owner can set resource limits only if the owner is also a domain or root administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The new limits must be below the global default limits set by the &PRODUCT; administrator (as described in ). If the project already owns more of a given type of resource than the new maximum, the resources are not affected; however, the project can not add any new resources of that type until the total drops below the new limit." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in as administrator to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select View, choose Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the project you want to work with." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Resources tab. This tab lists the current maximum amount that the project is allowed to own for each type of resource." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Type new values for one or more resources." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Apply." +msgstr "" + diff --git a/docs/pot/set-projects-creator-permissions.pot b/docs/pot/set-projects-creator-permissions.pot new file mode 100644 index 00000000000..230e3651f9f --- /dev/null +++ b/docs/pot/set-projects-creator-permissions.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting Project Creator Permissions" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can configure &PRODUCT; to allow any user to create a new project, or you can restrict that ability to just &PRODUCT; administrators." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in as administrator to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Global Settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the search box, type allow.user.create.projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the edit button to set the parameter. editbutton.png: Edits parameters " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "allow.user.create.projects" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set to true to allow end users to create projects. Set to false if you want only the &PRODUCT; root administrator and domain administrators to create projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management restart" +msgstr "" + diff --git a/docs/pot/set-resource-limits-for-projects.pot b/docs/pot/set-resource-limits-for-projects.pot new file mode 100644 index 00000000000..e833c546456 --- /dev/null +++ b/docs/pot/set-resource-limits-for-projects.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting Resource Limits for Projects" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; administrator can set global default limits to control the amount of resources that can be owned by each project in the cloud. This serves to prevent uncontrolled usage of resources such as snapshots, IP addresses, and virtual machine instances. Domain administrators can override these resource limits for individual projects with their domains, as long as the new limits are below the global defaults set by the &PRODUCT; root administrator. The root administrator can also set lower resource limits for any project in the cloud" +msgstr "" + diff --git a/docs/pot/set-up-invitations.pot b/docs/pot/set-up-invitations.pot new file mode 100644 index 00000000000..0ea9fe7cce8 --- /dev/null +++ b/docs/pot/set-up-invitations.pot @@ -0,0 +1,160 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting Up Invitations" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; can be set up either so that project administrators can add people directly to a project, or so that it is necessary to send an invitation which the recipient must accept. The invitation can be sent by email or through the user’s &PRODUCT; account. If you want administrators to use invitations to add members to projects, turn on and set up the invitations feature in &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in as administrator to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Global Settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the search box, type project and click the search button." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the search box, type project and click the search button. searchbutton.png: Searches projects " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the search results, you will see a few other parameters you need to set to control how invitations behave. The table below shows global configuration parameters related to project invitations. Click the edit button to set each parameter" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configuration Parameters" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "project.invite.required" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set to true to turn on the invitations feature." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "project.email.sender" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The email address to show in the From field of invitation emails." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "project.invite.timeout" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Amount of time to allow for a new member to respond to the invitation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "project.smtp.host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name of the host that acts as an email server to handle invitations." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "project.smtp.password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) Password required by the SMTP server. You must also set project.smtp.username and set project.smtp.useAuth to true." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "project.smtp.port" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SMTP server’s listening port." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "project.smtp.useAuth" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set to true if the SMTP server requires a username and password." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "project.smtp.username" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) User name required by the SMTP server for authentication. You must also set project.smtp.password and set project.smtp.useAuth to true.." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Server" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "service cloud-management restart" +msgstr "" + diff --git a/docs/pot/set-up-network-for-users.pot b/docs/pot/set-up-network-for-users.pot new file mode 100644 index 00000000000..48c1cb76270 --- /dev/null +++ b/docs/pot/set-up-network-for-users.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting Up Networking for Users" +msgstr "" + diff --git a/docs/pot/set-usage-limit.pot b/docs/pot/set-usage-limit.pot new file mode 100644 index 00000000000..f39f0d6292b --- /dev/null +++ b/docs/pot/set-usage-limit.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting Usage Limits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides several administrator control points for capping resource usage by users. Some of these limits are global configuration parameters. Others are applied at the ROOT domain and may be overridden on a per-account basis." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Aggregate limits may be set on a per-domain basis. For example, you may limit a domain and all subdomains to the creation of 100 VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section covers the following topics:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Globally Configured Limits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Default Account Resource Limits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Per Domain Limits" +msgstr "" + diff --git a/docs/pot/set-zone-vlan-run-vm-max.pot b/docs/pot/set-zone-vlan-run-vm-max.pot new file mode 100644 index 00000000000..6fc47e67b84 --- /dev/null +++ b/docs/pot/set-zone-vlan-run-vm-max.pot @@ -0,0 +1,115 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting Zone VLAN and Running VM Maximums" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the external networking case, every VM in a zone must have a unique guest IP address. There are two variables that you need to consider in determining how to configure &PRODUCT; to support this: how many Zone VLANs do you expect to have and how many VMs do you expect to have running in the Zone at any one time." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use the following table to determine how to configure &PRODUCT; for your deployment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "guest.vlan.bits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum Running VMs per Zone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Maximum Zone VLANs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "12" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4096" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4094" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "11" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "8192" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "2048" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "10" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "16384" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "1024" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "32768" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "512" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Based on your deployment's needs, choose the appropriate value of guest.vlan.bits. Set it as described in Edit the Global Configuration Settings (Optional) section and restart the Management Server." +msgstr "" + diff --git a/docs/pot/shared-networks.pot b/docs/pot/shared-networks.pot new file mode 100644 index 00000000000..9d8085dcb81 --- /dev/null +++ b/docs/pot/shared-networks.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Shared Networks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A shared network can be accessed by virtual machines that belong to many different accounts. Network Isolation on shared networks is accomplished using techniques such as security groups (supported only in basic zones in &PRODUCT; 3.0.3)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Shared Networks are created by the administrator" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Shared Networks can be designated to a certain domain" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Shared Network resources such as VLAN and physical network that it maps to are designated by the administrator" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Shared Networks are isolated by security groups" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public Network is a shared network that is not shown to the end users" +msgstr "" + diff --git a/docs/pot/signing-api-requests.pot b/docs/pot/signing-api-requests.pot new file mode 100644 index 00000000000..10d171473d7 --- /dev/null +++ b/docs/pot/signing-api-requests.pot @@ -0,0 +1,140 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Signing API Requests" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Whether you access the CloudStack API with HTTP or HTTPS, it must still be signed so that CloudStack can verify the caller has been authenticated and authorized to execute the command. Make sure that you have both the API Key and Secret Key provided by the CloudStack administrator for your account before proceeding with the signing process." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To show how to sign a request, we will re-use the previous example." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://http://localhost:8080/client/api?command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXq-jB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Breaking this down, we have several distinct parts to this URL." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Base URL: This is the base URL to the CloudStack Management Server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://localhost:8080" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "API Path: This is the path to the API Servlet that processes the incoming requests." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "/client/api?" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Command String: This part of the query string comprises of the command, its parameters, and the API Key that identifies the account." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "As with all query string parameters of field-value pairs, the \"field\" component is case insensitive while all \"value\" values are case sensitive." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXq-jB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Signature: This is the hashed signature of the Base URL that is generated using a combination of the user’s Secret Key and the HMAC SHA-1 hashing algorithm." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Every API request has the format Base URL+API Path+Command String+Signature." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To generate the signature." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For each field-value pair (as separated by a '&') in the Command String, URL encode each value so that it can be safely sent via HTTP GET." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure all spaces are encoded as \"%20\" rather than \"+\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Lower case the entire Command String and sort it alphabetically via the field for each field-value pair. The result of this step would look like the following." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "apikey=mivr6x7u6bn_sdahobpjnejpgest35exq-jb8cg20yi3yaxxcgpyuairmfi_ejtvwz0nukkjbpmy3y2bcikwfq&command=deployvirtualmachine&diskofferingid=1&serviceofferingid=1&templateid=2&zoneid=4" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Take the sorted Command String and run it through the HMAC SHA-1 hashing algorithm (most programming languages offer a utility method to do this) with the user’s Secret Key. Base64 encode the resulting byte array in UTF-8 so that it can be safely transmitted via HTTP. The final string produced after Base64 encoding should be \"Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D\"." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "By reconstructing the final URL in the format Base URL+API Path+Command String+Signature, the final URL should look like:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "http://localhost:8080/client/api?command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXq-jB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D" +msgstr "" + diff --git a/docs/pot/site-to-site-vpn.pot b/docs/pot/site-to-site-vpn.pot new file mode 100644 index 00000000000..e3be2197d5c --- /dev/null +++ b/docs/pot/site-to-site-vpn.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Setting Up a Site-to-Site VPN Connection" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A Site-to-Site VPN connection helps you establish a secure connection from an enterprise datacenter to the cloud infrastructure. This allows users to access the guest VMs by establishing a VPN connection to the virtual router of the account from a device in the datacenter of the enterprise. Having this facility eliminates the need to establish VPN connections to individual VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The supported endpoints on the remote datacenters are:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Cisco ISR with IOS 12.4 or later" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Juniper J-Series routers with JunOS 9.5 or later" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In addition to the specific Cisco and Juniper devices listed above, the expectation is that any Cisco or Juniper device running on the supported operating systems are able to establish VPN connections." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To set up a Site-to-Site VPN connection, perform the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a Virtual Private Cloud (VPC)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a VPN Customer Gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a VPN gateway for the VPC that you created." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create VPN connection from the VPC VPN gateway to the customer VPN gateway." +msgstr "" + diff --git a/docs/pot/small_scale_deployment.pot b/docs/pot/small_scale_deployment.pot new file mode 100644 index 00000000000..033f3c425a3 --- /dev/null +++ b/docs/pot/small_scale_deployment.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Small-Scale Deployment" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This diagram illustrates the network architecture of a small-scale &PRODUCT; deployment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A firewall provides a connection to the Internet. The firewall is configured in NAT mode. The firewall forwards HTTP requests and API calls from the Internet to the Management Server. The Management Server resides on the management network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A layer-2 switch connects all physical servers and storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A single NFS server functions as both the primary and secondary storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server is connected to the management network." +msgstr "" + diff --git a/docs/pot/snapshot-restore.pot b/docs/pot/snapshot-restore.pot new file mode 100644 index 00000000000..5d4d1f55147 --- /dev/null +++ b/docs/pot/snapshot-restore.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Snapshot Restore" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There are two paths to restoring snapshots. Users can create a volume from the snapshot. The volume can then be mounted to a VM and files recovered as needed. Alternatively, a template may be created from the snapshot of a root disk. The user can then boot a VM from this template to effect recovery of the root disk." +msgstr "" + diff --git a/docs/pot/source-build.pot b/docs/pot/source-build.pot new file mode 100644 index 00000000000..304d2eb36db --- /dev/null +++ b/docs/pot/source-build.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Building &PRODUCT; from Source" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prior to the 4.0.0 incubating release, Ant was used to build &PRODUCT;. Starting with 4.0.0 a migration to Maven is underway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The website and the wiki contain up to date information on the build procedure at:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "https://cwiki.apache.org/CLOUDSTACK/building-with-maven.html" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "http://incubator.apache.org/cloudstack/develop/environment.html" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The overarching steps to build &PRODUCT; are:." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Install the prerequisites and setup your environment" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Understand that various Maven profiles and build targets" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Deploy and test your build" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If needed, learn how to build binaries" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Learning Maven is outside the scope of this documentation." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Go to the Maven website at http://maven.apache.org/guides/getting-started/index.html" +msgstr "" + diff --git a/docs/pot/source-prereqs.pot b/docs/pot/source-prereqs.pot new file mode 100644 index 00000000000..b22b5f7144a --- /dev/null +++ b/docs/pot/source-prereqs.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Prerequisites for building Apache CloudStack" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There are a number of prerequisites needed to build &PRODUCT;. This document assumes compilation on a Linux system that uses RPMs or DEBs for package management." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The minimum bootstrapped prerequisites for building &PRODUCT; includes the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ant" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "maven (version 3)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Java (Java 6/OpenJDK 1.6)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rpmbuild or dpkg-dev" +msgstr "" + diff --git a/docs/pot/source.pot b/docs/pot/source.pot new file mode 100644 index 00000000000..525c0b43d42 --- /dev/null +++ b/docs/pot/source.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Building from Source" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The official &PRODUCT; release is always in source code form. While there may exist convenience binaries in various forms from a number of places, the source is the canonical release will be source. In this document we'll cover acquiring the source release, building that into binary, deployable packages." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "While building and deploying directly from source is certainly possible, the reality of Infrastructure-as-a-Service cloud computing implies a need to deploy packages on a potentially large number of systems, which RPMs and DEBs fill nicely." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Building and deploying directly from source is thus outside the scope of this document, but is documented in the INSTALL.md file in the release." +msgstr "" + diff --git a/docs/pot/ssl.pot b/docs/pot/ssl.pot new file mode 100644 index 00000000000..037169bea8f --- /dev/null +++ b/docs/pot/ssl.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "SSL (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides HTTP access in its default installation. There are a number of technologies and sites which choose to implement SSL. As a result, we have left &PRODUCT; to expose HTTP under the assumption that a site will implement its typical practice." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; uses Tomcat as its servlet container. For sites that would like &PRODUCT; to terminate the SSL session, Tomcat’s SSL access may be enabled. Tomcat SSL configuration is described at http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html." +msgstr "" + diff --git a/docs/pot/standard-events.pot b/docs/pot/standard-events.pot new file mode 100644 index 00000000000..adb22613c10 --- /dev/null +++ b/docs/pot/standard-events.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Standard Events" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The events log records three types of standard events." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "INFO. This event is generated when an operation has been successfully performed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "WARN. This event is generated in the following circumstances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a network is disconnected while monitoring a template download." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a template download is abandoned." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When an issue on the storage server causes the volumes to fail over to the mirror storage server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ERROR. This event is generated when an operation has not been successfully performed" +msgstr "" + diff --git a/docs/pot/static-nat.pot b/docs/pot/static-nat.pot new file mode 100644 index 00000000000..60f01be8e33 --- /dev/null +++ b/docs/pot/static-nat.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Static NAT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A static NAT rule maps a public IP address to the private IP address of a VM in order to allow Internet traffic into the VM. The public IP address always remains the same, which is why it is called \"static\" NAT. This section tells how to enable or disable static NAT for a particular IP address." +msgstr "" + diff --git a/docs/pot/sticky-session-policies-for-lb-rules.pot b/docs/pot/sticky-session-policies-for-lb-rules.pot new file mode 100644 index 00000000000..cbe4ae616ea --- /dev/null +++ b/docs/pot/sticky-session-policies-for-lb-rules.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Sticky Session Policies for Load Balancer Rules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Sticky sessions are used in Web-based applications to ensure continued availability of information across the multiple requests in a user's session. For example, if a shopper is filling a cart, you need to remember what has been purchased so far. The concept of \"stickiness\" is also referred to as persistence or maintaining state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Any load balancer rule defined in &PRODUCT; can have a stickiness policy. The policy consists of a name, stickiness method, and parameters. The parameters are name-value pairs or flags, which are defined by the load balancer vendor. The stickiness method could be load balancer-generated cookie, application-generated cookie, or source-based. In the source-based method, the source IP address is used to identify the user and locate the user’s stored data. In the other methods, cookies are used. The cookie generated by the load balancer or application is included in request and response URLs to create persistence. The cookie name can be specified by the administrator or automatically generated. A variety of options are provided to control the exact behavior of cookies, such as how they are generated and whether they are cached." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the most up to date list of available stickiness methods, see the &PRODUCT; UI or call listNetworks and check the SupportedStickinessMethods capability." +msgstr "" + diff --git a/docs/pot/stop-restart-management-server.pot b/docs/pot/stop-restart-management-server.pot new file mode 100644 index 00000000000..dec05253f6a --- /dev/null +++ b/docs/pot/stop-restart-management-server.pot @@ -0,0 +1,65 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Stopping and Restarting the Management Server" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The root administrator will need to stop and restart the Management Server from time to time." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example, after changing a global configuration parameter, a restart is required. If you have multiple Management Server nodes, restart all of them to put the new parameter value into effect consistently throughout the cloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To stop the Management Server, issue the following command at the operating system prompt on the Management Server node:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management stop" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To start the Management Server:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management start" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To stop the Management Server:" +msgstr "" + diff --git a/docs/pot/stopped-vm.pot b/docs/pot/stopped-vm.pot new file mode 100644 index 00000000000..8f5f7c1b3fe --- /dev/null +++ b/docs/pot/stopped-vm.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Stopped VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; now supports creating a VM without starting it. You can determine whether the VM needs to be started as part of the VM deployment. A VM can now be deployed in two ways: create and start a VM (the default method); or create a VM and leave it in the stopped state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A new request parameter, startVM, is introduced in the deployVm API to support the stopped VM feature." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The possible values are:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "true - The VM starts as a part of the VM deployment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "false - The VM is left in the stopped state at the end of the VM deployment." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The default value is true." +msgstr "" + diff --git a/docs/pot/stopping-and-starting-vms.pot b/docs/pot/stopping-and-starting-vms.pot new file mode 100644 index 00000000000..2228d58c246 --- /dev/null +++ b/docs/pot/stopping-and-starting-vms.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Stopping and Starting VMs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Any user can access their own virtual machines. The administrator can access all VMs running in the cloud." +msgstr "" + diff --git a/docs/pot/storage-nw-topology-req.pot b/docs/pot/storage-nw-topology-req.pot new file mode 100644 index 00000000000..9786961851f --- /dev/null +++ b/docs/pot/storage-nw-topology-req.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Storage Network Topology Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The secondary storage NFS export is mounted by the secondary storage VM. Secondary storage traffic goes over the management traffic network, even if there is a separate storage network. Primary storage traffic goes over the storage network, if available. If you choose to place secondary storage NFS servers on the storage network, you must make sure there is a route from the management traffic network to the storage network." +msgstr "" + diff --git a/docs/pot/storage-overview.pot b/docs/pot/storage-overview.pot new file mode 100644 index 00000000000..a2cad3573f4 --- /dev/null +++ b/docs/pot/storage-overview.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Storage Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; defines two types of storage: primary and secondary. Primary storage can be accessed by either iSCSI or NFS. Additionally, direct attached storage may be used for primary storage. Secondary storage is always accessed using NFS." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There is no ephemeral storage in &PRODUCT;. All volumes on all nodes are persistent." +msgstr "" + diff --git a/docs/pot/storage-tags.pot b/docs/pot/storage-tags.pot new file mode 100644 index 00000000000..8ed6ccf2214 --- /dev/null +++ b/docs/pot/storage-tags.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Storage Tags" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage may be \"tagged\". A tag is a text string attribute associated with primary storage, a Disk Offering, or a Service Offering. Tags allow administrators to provide additional information about the storage. For example, that is a \"SSD\" or it is \"slow\". Tags are not interpreted by &PRODUCT;. They are matched against tags placed on service and disk offerings. &PRODUCT; requires all tags on service and disk offerings to exist on the primary storage before it allocates root or data disks on the primary storage. Service and disk offering tags are used to identify the requirements of the storage that those offerings have. For example, the high end service offering may require \"fast\" for its root disk volume." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The interaction between tags, allocation, and volume copying across clusters and pods can be complex. To simplify the situation, use the same set of tags on the primary storage for all clusters in a pod. Even if different devices are used to present those tags, the set of exposed tags can be the same." +msgstr "" + diff --git a/docs/pot/storage.pot b/docs/pot/storage.pot new file mode 100644 index 00000000000..cc72673f6d9 --- /dev/null +++ b/docs/pot/storage.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Working With Storage" +msgstr "" + diff --git a/docs/pot/suspend-project.pot b/docs/pot/suspend-project.pot new file mode 100644 index 00000000000..e2c6c7d3d01 --- /dev/null +++ b/docs/pot/suspend-project.pot @@ -0,0 +1,80 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Suspending or Deleting a Project" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a project is suspended, it retains the resources it owns, but they can no longer be used. No new resources or members can be added to a suspended project." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a project is deleted, its resources are destroyed, and member accounts are removed from the project. The project’s status is shown as Disabled pending final deletion." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A project can be suspended or deleted by the project administrator, the domain administrator of the domain the project belongs to or of its parent domain, or the &PRODUCT; root administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, click Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Select View, choose Projects." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the name of the project." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click one of the buttons:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To delete, use deletebutton.png: Removes a project " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To suspend, use deletebutton.png: suspends a project " +msgstr "" + diff --git a/docs/pot/sys-offering-sysvm.pot b/docs/pot/sys-offering-sysvm.pot new file mode 100644 index 00000000000..995ae9a3c5e --- /dev/null +++ b/docs/pot/sys-offering-sysvm.pot @@ -0,0 +1,130 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Changing the Default System Offering for System VMs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can manually change the system offering for a particular System VM. Additionally, as a &PRODUCT; administrator, you can also change the default system offering used for System VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a new system offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information, see Creating a New System Service Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Back up the database:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mysqldump -u root -p cloud | bzip2 > cloud_backup.sql.bz2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Open an MySQL prompt:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "mysql -u cloud -p cloud" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following queries on the cloud database." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the disk_offering table, identify the original default offering and the new offering you want to use by default." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Take a note of the ID of the new offering." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "select id,name,unique_name,type from disk_offering;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the original default offering, set the value of unique_name to NULL." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# update disk_offering set unique_name = NULL where id = 10;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that you use the correct value for the ID." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the new offering that you want to use by default, set the value of unique_name as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For the default Console Proxy VM (CPVM) offering,set unique_name to 'Cloud.com-ConsoleProxy'. For the default Secondary Storage VM (SSVM) offering, set unique_name to 'Cloud.com-SecondaryStorage'. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "update disk_offering set unique_name = 'Cloud.com-ConsoleProxy' where id = 16;" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart &PRODUCT; Management Server. Restarting is required because the default offerings are loaded into the memory at startup." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "service cloud-management restart" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Destroy the existing CPVM or SSVM offerings and wait for them to be recreated. The new CPVM or SSVM are configured with the new offering." +msgstr "" + diff --git a/docs/pot/sys-reliability-and-ha.pot b/docs/pot/sys-reliability-and-ha.pot new file mode 100644 index 00000000000..f6820688aa7 --- /dev/null +++ b/docs/pot/sys-reliability-and-ha.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "System Reliability and High Availability" +msgstr "" + diff --git a/docs/pot/sysprep-for-windows-server-2003R2.pot b/docs/pot/sysprep-for-windows-server-2003R2.pot new file mode 100644 index 00000000000..c975206ed97 --- /dev/null +++ b/docs/pot/sysprep-for-windows-server-2003R2.pot @@ -0,0 +1,160 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Sysprep for Windows Server 2003 R2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Earlier versions of Windows have a different sysprep tool. Follow these steps for Windows Server 2003 R2." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Extract the content of \\support\\tools\\deploy.cab on the Windows installation CD into a directory called c:\\sysprep on the Windows 2003 R2 VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run c:\\sysprep\\setupmgr.exe to create the sysprep.inf file." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select Create New to create a new Answer File." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Enter “Sysprep setup†for the Type of Setup." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the appropriate OS version and edition." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the License Agreement screen, select “Yes fully automate the installationâ€." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide your name and organization." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Leave display settings at default." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set the appropriate time zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide your product key." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select an appropriate license mode for your deployment" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select “Automatically generate computer nameâ€." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Type a default administrator password. If you enable the password reset feature, the users will not actually use this password. This password will be reset by the instance manager after the guest boots up." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Leave Network Components at “Typical Settingsâ€." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the “WORKGROUP†option." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Leave Telephony options at default." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select appropriate Regional Settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select appropriate language settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Do not install printers." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Do not specify “Run Once commandsâ€." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You need not specify an identification string." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Save the Answer File as c:\\sysprep\\sysprep.inf." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following command to sysprep the image:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "c:\\sysprep\\sysprep.exe -reseal -mini -activated" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After this step the machine will automatically shut down" +msgstr "" + diff --git a/docs/pot/sysprep-windows-server-2008R2.pot b/docs/pot/sysprep-windows-server-2008R2.pot new file mode 100644 index 00000000000..91202d855da --- /dev/null +++ b/docs/pot/sysprep-windows-server-2008R2.pot @@ -0,0 +1,147 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "System Preparation for Windows Server 2008 R2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For Windows 2008 R2, you run Windows System Image Manager to create a custom sysprep response XML file. Windows System Image Manager is installed as part of the Windows Automated Installation Kit (AIK). Windows AIK can be downloaded from the Microsoft Download Center at the following location:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Microsoft Download Center." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use the following steps to run sysprep for Windows 2008 R2:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The steps outlined here are derived from the excellent guide by Charity Shelbourne, originally published at Windows Server 2008 Sysprep Mini-Setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Download and install the Windows AIK" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Windows AIK should not be installed on the Windows 2008 R2 VM you just created. Windows AIK should not be part of the template you create. It is only used to create the sysprep answer file." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy the install.wim file in the \\sources directory of the Windows 2008 R2 installation DVD to the hard disk. This is a very large file and may take a long time to copy. Windows AIK requires the WIM file to be writable." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Start the Windows System Image Manager, which is part of the Windows AIK." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Windows Image pane, right click “Select a Windows image or catalog file†to load the install.wim file you just copied." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select the Windows 2008 R2 Edition" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You may be prompted with a warning that the catalog file cannot be opened. Click Yes to create a new catalog file." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Answer File pane, right click to create a new answer file." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Generate the answer file from the Windows System Image Manager using the following steps:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The first page you need to automate is the Language and Country or Region Selection page. To automate this, expand Components in your Windows Image pane, right-click and add the Microsoft-Windows-International-Core setting to Pass 7 oobeSystem. In your Answer File pane, configure the InputLocale, SystemLocale, UILanguage, and UserLocale with the appropriate settings for your language and country or region. Should you have a question about any of these settings, you can right-click on the specific setting and select Help. This will open the appropriate CHM help file with more information, including examples on the setting you are attempting to configure." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You need to automate the Software License Terms Selection page, otherwise known as the End-User License Agreement (EULA). To do this, expand the Microsoft-Windows-Shell-Setup component. High-light the OOBE setting, and add the setting to the Pass 7 oobeSystem. In Settings, set HideEULAPage true." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure the license key is properly set. If you use MAK key, you can just enter the MAK key on the Windows 2008 R2 VM. You need not input the MAK into the Windows System Image Manager. If you use KMS host for activation you need not enter the Product Key. Details of Windows Volume Activation can be found at " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You need to automate is the Change Administrator Password page. Expand the Microsoft-Windows-Shell-Setup component (if it is not still expanded), expand UserAccounts, right-click on AdministratorPassword, and add the setting to the Pass 7 oobeSystem configuration pass of your answer file. Under Settings, specify a password next to Value." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You may read the AIK documentation and set many more options that suit your deployment. The steps above are the minimum needed to make Windows unattended setup work." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Save the answer file as unattend.xml. You can ignore the warning messages that appear in the validation window." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy the unattend.xml file into the c:\\windows\\system32\\sysprep directory of the Windows 2008 R2 Virtual Machine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Once you place the unattend.xml file in c:\\windows\\system32\\sysprep directory, you run the sysprep tool as follows:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "cd c:\\Windows\\System32\\sysprep\n" +"sysprep.exe /oobe /generalize /shutdown\n" +"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Windows 2008 R2 VM will automatically shut down after sysprep is complete." +msgstr "" + diff --git a/docs/pot/system-reserved-ip-addresses.pot b/docs/pot/system-reserved-ip-addresses.pot new file mode 100644 index 00000000000..5caf9fa39b8 --- /dev/null +++ b/docs/pot/system-reserved-ip-addresses.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "System Reserved IP Addresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In each zone, you need to configure a range of reserved IP addresses for the management network. This network carries communication between the &PRODUCT; Management Server and various system VMs, such as Secondary Storage VMs, Console Proxy VMs, and DHCP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The reserved IP addresses must be unique across the cloud. You cannot, for example, have a host in one zone which has the same private IP address as a host in another zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The hosts in a pod are assigned private IP addresses. These are typically RFC1918 addresses. The Console Proxy and Secondary Storage system VMs are also allocated private IP addresses in the CIDR of the pod that they are created in." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure computing servers and Management Servers use IP addresses outside of the System Reserved IP range. For example, suppose the System Reserved IP range starts at 192.168.154.2 and ends at 192.168.154.7. &PRODUCT; can use .2 to .7 for System VMs. This leaves the rest of the pod CIDR, from .8 to .254, for the Management Server and hypervisor hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In all zones:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide private IPs for the system in each pod and provision them in &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For KVM and XenServer, the recommended number of private IPs per pod is one per host. If you expect a pod to grow, add enough private IPs now to accommodate the growth." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a zone that uses advanced networking:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For zones with advanced networking, we recommend provisioning enough private IPs for your total number of customers, plus enough for the required &PRODUCT; System VMs. Typically, about 10 additional IPs are required for the System VMs. For more information about System VMs, see Working with System Virtual Machines in the Administrator's Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When advanced networking is being used, the number of private IP addresses available in each pod varies depending on which hypervisor is running on the nodes in that pod. Citrix XenServer and KVM use link-local addresses, which in theory provide more than 65,000 private IP addresses within the address block. As the pod grows over time, this should be more than enough for any reasonable number of hosts as well as IP addresses for guest virtual routers. VMWare ESXi, by contrast uses any administrator-specified subnetting scheme, and the typical administrator provides only 255 IPs per pod. Since these are shared by physical machines, the guest virtual router, and other entities, it is possible to run out of private IPs when scaling up a pod whose nodes are running ESXi." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To ensure adequate headroom to scale private IP space in an ESXi pod that uses advanced networking, use one or both of the following techniques:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specify a larger CIDR block for the subnet. A subnet mask with a /20 suffix will provide more than 4,000 IP addresses." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create multiple pods, each with its own subnet. For example, if you create 10 pods and each pod has 255 IPs, this will provide 2,550 IP addresses." +msgstr "" + diff --git a/docs/pot/system-service-offerings.pot b/docs/pot/system-service-offerings.pot new file mode 100644 index 00000000000..726d0d0f2ce --- /dev/null +++ b/docs/pot/system-service-offerings.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "System Service Offerings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "System service offerings provide a choice of CPU speed, number of CPUs, tags, and RAM size, just as other service offerings do. But rather than being used for virtual machine instances and exposed to users, system service offerings are used to change the default properties of virtual routers, console proxies, and other system VMs. System service offerings are visible only to the &PRODUCT; root administrator. &PRODUCT; provides default system service offerings. The &PRODUCT; root administrator can create additional custom system service offerings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When &PRODUCT; creates a virtual router for a guest network, it uses default settings which are defined in the system service offering associated with the network offering. You can upgrade the capabilities of the virtual router by applying a new network offering that contains a different system service offering. All virtual routers in that network will begin using the settings from the new service offering." +msgstr "" + diff --git a/docs/pot/system-vm-template.pot b/docs/pot/system-vm-template.pot new file mode 100644 index 00000000000..9b739867a7f --- /dev/null +++ b/docs/pot/system-vm-template.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "The System VM Template" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The System VMs come from a single template. The System VM has the following characteristics:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Debian 6.0 (\"Squeeze\"), 2.6.32 kernel with the latest security patches from the Debian security APT repository" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Has a minimal set of packages installed thereby reducing the attack surface" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "32-bit for enhanced performance on Xen/VMWare" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "pvops kernel with Xen PV drivers, KVM virtio drivers, and VMware tools for optimum performance on all hypervisors" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Xen tools inclusion allows performance monitoring" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Latest versions of HAProxy, iptables, IPsec, and Apache from debian repository ensures improved security and speed" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Latest version of JRE from Sun/Oracle ensures improved security and speed" +msgstr "" + diff --git a/docs/pot/tagging-resources.pot b/docs/pot/tagging-resources.pot new file mode 100644 index 00000000000..935fc5f5193 --- /dev/null +++ b/docs/pot/tagging-resources.pot @@ -0,0 +1,140 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using Tags to Organize Resources in the Cloud" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A tag is a key-value pair that stores metadata about a resource in the cloud. Tags are useful for categorizing resources. For example, you can tag a user VM with a value that indicates the user's city of residence. In this case, the key would be \"city\" and the value might be \"Toronto\" or \"Tokyo.\" You can then request &PRODUCT; to find all resources that have a given tag; for example, VMs for users in a given city." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can tag a user virtual machine, volume, snapshot, guest network, template, ISO, firewall rule, port forwarding rule, public IP address, security group, load balancer rule, project, VPC, network ACL, or static route. You can not tag a remote access VPN." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can work with tags through the UI or through the API commands createTags, deleteTags, and listTags. You can define multiple tags for each resource. There is no limit on the number of tags you can define. Each tag can be up to 255 characters long. Users can define tags on the resources they own, and administrators can define tags on any resources in the cloud." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "An optional input parameter, \"tags,\" exists on many of the list* API commands. The following example shows how to use this new parameter to find all the volumes having tag region=canada OR tag city=Toronto:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "command=listVolumes\n" +" &listAll=true\n" +" &tags[0].key=region\n" +" &tags[0].value=canada\n" +" &tags[1].key=city\n" +" &tags[1].value=Toronto" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following API commands have the \"tags\" input parameter:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVirtualMachines" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVolumes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSnapshots" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetworks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listTemplates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listIsos" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listFirewallRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listPortForwardingRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listPublicIpAddresses" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listSecurityGroups" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listLoadBalancerRules" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listProjects" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listVPCs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listNetworkACLs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "listStaticRoutes" +msgstr "" + diff --git a/docs/pot/template-iso-snapshot-usage-record-format.pot b/docs/pot/template-iso-snapshot-usage-record-format.pot new file mode 100644 index 00000000000..c76cb5baa34 --- /dev/null +++ b/docs/pot/template-iso-snapshot-usage-record-format.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Template, ISO, and Snapshot Usage Record Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "account – name of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "accountid – ID of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "domainid – ID of the domain in which this account resides" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "zoneid – Zone where the usage occurred" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "description – A string describing what the usage record is tracking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage – String representation of the usage, including the units of usage (e.g. 'Hrs' for hours)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usagetype – A number representing the usage type (see Usage Types)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rawusage – A number representing the actual usage in hours" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usageid – The ID of the the template, ISO, or snapshot" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "offeringid – The ID of the disk offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "templateid – – Included only for templates (usage type 7). Source template ID." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "size – Size of the template, ISO, or snapshot" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startdate, enddate – The range of time for which the usage is aggregated; see Dates in the Usage Record" +msgstr "" + diff --git a/docs/pot/templates.pot b/docs/pot/templates.pot new file mode 100644 index 00000000000..90eac76c4b3 --- /dev/null +++ b/docs/pot/templates.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Templates" +msgstr "" + diff --git a/docs/pot/time-zones.pot b/docs/pot/time-zones.pot new file mode 100644 index 00000000000..b5573031c86 --- /dev/null +++ b/docs/pot/time-zones.pot @@ -0,0 +1,330 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Time Zones" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following time zone identifiers are accepted by &PRODUCT;. There are several places that have a time zone as a required or optional parameter. These include scheduling recurring snapshots, creating a user, and specifying the usage time zone in the Configuration table." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Etc/GMT+12" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Etc/GMT+11" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Pacific/Samoa" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Pacific/Honolulu" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "US/Alaska" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Los_Angeles" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Mexico/BajaNorte" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "US/Arizona" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "US/Mountain" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Chihuahua" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Chicago" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Costa_Rica" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Mexico_City" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Canada/Saskatchewan" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Bogota" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/New_York" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Caracas" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Asuncion" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Cuiaba" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Halifax" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/La_Paz" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Santiago" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/St_Johns" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Araguaina" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Argentina/Buenos_Aires" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Cayenne" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Godthab" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "America/Montevideo" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Etc/GMT+2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Atlantic/Azores" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Atlantic/Cape_Verde" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Africa/Casablanca" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Etc/UTC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Atlantic/Reykjavik" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Europe/London" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "CET" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Europe/Bucharest" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Africa/Johannesburg" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asia/Beirut" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Africa/Cairo" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asia/Jerusalem" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Europe/Minsk" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Europe/Moscow" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Africa/Nairobi" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asia/Karachi" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asia/Kolkata" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asia/Bangkok" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asia/Shanghai" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asia/Kuala_Lumpur" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Australia/Perth" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asia/Taipei" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asia/Tokyo" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Asia/Seoul" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Australia/Adelaide" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Australia/Darwin" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Australia/Brisbane" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Australia/Canberra" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Pacific/Guam" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Pacific/Auckland" +msgstr "" + diff --git a/docs/pot/tools.pot b/docs/pot/tools.pot new file mode 100644 index 00000000000..08a478c9279 --- /dev/null +++ b/docs/pot/tools.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Tools" +msgstr "" + diff --git a/docs/pot/topology-req.pot b/docs/pot/topology-req.pot new file mode 100644 index 00000000000..3eb0f27ebf3 --- /dev/null +++ b/docs/pot/topology-req.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Topology Requirements" +msgstr "" + diff --git a/docs/pot/troubleshooting-alerts.pot b/docs/pot/troubleshooting-alerts.pot new file mode 100644 index 00000000000..be428933b9f --- /dev/null +++ b/docs/pot/troubleshooting-alerts.pot @@ -0,0 +1,68 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Alerts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following is the list of alert type numbers." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"MEMORY = 0\n" +"CPU = 1\n" +"STORAGE =2\n" +"STORAGE_ALLOCATED = 3\n" +"PUBLIC_IP = 4\n" +"PRIVATE_IP = 5\n" +"HOST = 6\n" +"USERVM = 7\n" +"DOMAIN_ROUTER = 8\n" +"CONSOLE_PROXY = 9\n" +"ROUTING = 10// lost connection to default route (to the gateway)\n" +"STORAGE_MISC = 11 // lost connection to default route (to the gateway)\n" +"USAGE_SERVER = 12 // lost connection to default route (to the gateway)\n" +"MANAGMENT_NODE = 13 // lost connection to default route (to the gateway)\n" +"DOMAIN_ROUTER_MIGRATE = 14\n" +"CONSOLE_PROXY_MIGRATE = 15\n" +"USERVM_MIGRATE = 16\n" +"VLAN = 17\n" +"SSVM = 18\n" +"USAGE_SERVER_RESULT = 19\n" +"STORAGE_DELETE = 20;\n" +"UPDATE_RESOURCE_COUNT = 21; //Generated when we fail to update the resource count\n" +"USAGE_SANITY_RESULT = 22;\n" +"DIRECT_ATTACHED_PUBLIC_IP = 23;\n" +"LOCAL_STORAGE = 24;\n" +"RESOURCE_LIMIT_EXCEEDED = 25; //Generated when the resource limit exceeds the limit. Currently used for recurring snapshots only\n" +"\n" +" " +msgstr "" + diff --git a/docs/pot/troubleshooting-lb-rules-fails.pot b/docs/pot/troubleshooting-lb-rules-fails.pot new file mode 100644 index 00000000000..224d0b880cb --- /dev/null +++ b/docs/pot/troubleshooting-lb-rules-fails.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Load balancer rules fail after changing network offering" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Symptom" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After changing the network offering on a network, load balancer rules stop working." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Cause" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Load balancing rules were created while using a network service offering that includes an external load balancer device such as NetScaler, and later the network service offering changed to one that uses the &PRODUCT; virtual router." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Solution" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a firewall rule on the virtual router for each of your existing load balancing rules so that they continue to function." +msgstr "" + diff --git a/docs/pot/troubleshooting-recover-lost-virtual-router.pot b/docs/pot/troubleshooting-recover-lost-virtual-router.pot new file mode 100644 index 00000000000..8affe2a2fd6 --- /dev/null +++ b/docs/pot/troubleshooting-recover-lost-virtual-router.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Recovering a Lost Virtual Router" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Symptom" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A virtual router is running, but the host is disconnected. A virtual router no longer functions as expected." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Cause" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Virtual router is lost or down." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Solution" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are sure that a virtual router is down forever, or no longer functions as expected, destroy it. You must create one afresh while keeping the backup router up and running (it is assumed this is in a redundant router setup):" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Force stop the router. Use the stopRouter API with forced=true parameter to do so." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Before you continue with destroying this router, ensure that the backup router is running. Otherwise the network connection will be lost." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Destroy the router by using the destroyRouter API." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Recreate the missing router by using the restartNetwork API with cleanup=false parameter. For more information about redundant router setup, see Creating a New Network Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information about the API syntax, see the API Reference at API Reference." +msgstr "" + diff --git a/docs/pot/troubleshooting-unable-to-deploy-vms.pot b/docs/pot/troubleshooting-unable-to-deploy-vms.pot new file mode 100644 index 00000000000..ebc0f213003 --- /dev/null +++ b/docs/pot/troubleshooting-unable-to-deploy-vms.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Unable to deploy VMs from uploaded vSphere template" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Symptom" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When attempting to create a VM, the VM will not deploy." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Cause" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the template was created by uploading an OVA file that was created using vSphere Client, it is possible the OVA contained an ISO image. If it does, the deployment of VMs from the template will fail." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Solution" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Remove the ISO and re-upload the template." +msgstr "" + diff --git a/docs/pot/troubleshooting-unable-to-power-on-vm.pot b/docs/pot/troubleshooting-unable-to-power-on-vm.pot new file mode 100644 index 00000000000..f2b5e71b73c --- /dev/null +++ b/docs/pot/troubleshooting-unable-to-power-on-vm.pot @@ -0,0 +1,80 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Unable to power on virtual machine on VMware" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Symptom" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Virtual machine does not power on. You might see errors like:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Unable to open Swap File" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Unable to access a file since it is locked" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Unable to access Virtual machine configuration" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Cause" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A known issue on VMware machines. ESX hosts lock certain critical virtual machine files and file systems to prevent concurrent changes. Sometimes the files are not unlocked when the virtual machine is powered off. When a virtual machine attempts to power on, it can not access these critical files, and the virtual machine is unable to power on." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Solution" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "See the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMware Knowledge Base Article" +msgstr "" + diff --git a/docs/pot/troubleshooting-working-with-server-logs.pot b/docs/pot/troubleshooting-working-with-server-logs.pot new file mode 100644 index 00000000000..367936c4881 --- /dev/null +++ b/docs/pot/troubleshooting-working-with-server-logs.pot @@ -0,0 +1,76 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Working with Server Logs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; Management Server logs all web site, middle tier, and database activities for diagnostics purposes in /var/log/cloud/management/. The &PRODUCT; logs a variety of error messages. We recommend this command to find the problematic output in the Management Server log:." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When copying and pasting a command, be sure the command has pasted as a single line before executing. Some document viewers may introduce unwanted line breaks in copied text." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" grep -i -E 'exception|unable|fail|invalid|leak|warn|error' /var/log/cloud/management/management-server.log\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; processes requests with a Job ID. If you find an error in the logs and you are interested in debugging the issue you can grep for this job ID in the management server log. For example, suppose that you find the following ERROR message:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" 2010-10-04 13:49:32,595 ERROR [cloud.vm.UserVmManagerImpl] (Job-Executor-11:job-1076) Unable to find any host for [User|i-8-42-VM-untagged]\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Note that the job ID is 1076. You can track back the events relating to job 1076 with the following grep:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +" grep \"job-1076)\" management-server.log\n" +" " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; Agent Server logs its activities in /var/log/cloud/agent/." +msgstr "" + diff --git a/docs/pot/troubleshooting.pot b/docs/pot/troubleshooting.pot new file mode 100644 index 00000000000..b233f5a9f7d --- /dev/null +++ b/docs/pot/troubleshooting.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Troubleshooting" +msgstr "" + diff --git a/docs/pot/troublesht-dataloss-on-exp-primary-storage.pot b/docs/pot/troublesht-dataloss-on-exp-primary-storage.pot new file mode 100644 index 00000000000..43272a472c3 --- /dev/null +++ b/docs/pot/troublesht-dataloss-on-exp-primary-storage.pot @@ -0,0 +1,80 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Data Loss on Exported Primary Storage" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Symptom" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Loss of existing data on primary storage which has been exposed as a Linux NFS server export on an iSCSI volume." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Cause" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "It is possible that a client from outside the intended pool has mounted the storage. When this occurs, the LVM is wiped and all data in the volume is lost" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Solution" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When setting up LUN exports, restrict the range of IP addresses that are allowed access by specifying a subnet mask. For example:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "echo “/export 192.168.1.0/24(rw,async,no_root_squash)†> /etc/exports" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Adjust the above command to suit your deployment needs." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "More Information" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "See the export procedure in the \"Secondary Storage\" section of the &PRODUCT; Installation Guide" +msgstr "" + diff --git a/docs/pot/troublesht-mtn-mode-not-working-on-vCenter.pot b/docs/pot/troublesht-mtn-mode-not-working-on-vCenter.pot new file mode 100644 index 00000000000..e49786b6044 --- /dev/null +++ b/docs/pot/troublesht-mtn-mode-not-working-on-vCenter.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Maintenance mode not working on vCenter" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Symptom" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Host was placed in maintenance mode, but still appears live in vCenter." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Cause" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; administrator UI was used to place the host in scheduled maintenance mode. This mode is separate from vCenter's maintenance mode." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Solution" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use vCenter to place the host in maintenance mode." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "More Information" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "See " +msgstr "" + diff --git a/docs/pot/tuning.pot b/docs/pot/tuning.pot new file mode 100644 index 00000000000..0c4544734bd --- /dev/null +++ b/docs/pot/tuning.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Tuning" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This section provides tips on how to improve the performance of your cloud." +msgstr "" + diff --git a/docs/pot/ui.pot b/docs/pot/ui.pot new file mode 100644 index 00000000000..59f89ccf5f1 --- /dev/null +++ b/docs/pot/ui.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "User Interface" +msgstr "" + diff --git a/docs/pot/upgrade-virtual-router-with-service-offering.pot b/docs/pot/upgrade-virtual-router-with-service-offering.pot new file mode 100644 index 00000000000..51de0692e61 --- /dev/null +++ b/docs/pot/upgrade-virtual-router-with-service-offering.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Upgrading a Virtual Router with System Service Offerings" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When &PRODUCT; creates a virtual router, it uses default settings which are defined in a default system service offering. See . All the virtual routers in a single guest network use the same system service offering. You can upgrade the capabilities of the virtual router by creating and applying a custom system service offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Define your custom system service offering. See . In System VM Type, choose Domain Router." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Associate the system service offering with a network offering. See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Apply the network offering to the network where you want the virtual routers to use the new system service offering. If this is a new network, follow the steps in Adding an Additional Guest Network on page 66. To change the service offering for existing virtual routers, follow the steps in ." +msgstr "" + diff --git a/docs/pot/upload-existing-volume-to-vm.pot b/docs/pot/upload-existing-volume-to-vm.pot new file mode 100644 index 00000000000..167f1e9e062 --- /dev/null +++ b/docs/pot/upload-existing-volume-to-vm.pot @@ -0,0 +1,150 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Uploading an Existing Volume to a Virtual Machine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Existing data can be made accessible to a virtual machine. This is called uploading a volume to the VM. For example, this is useful to upload data from a local file system and attach it to a VM. Root administrators, domain administrators, and end users can all upload existing volumes to VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The upload is performed using HTTP. The uploaded volume is placed in the zone's secondary storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You cannot upload a volume if the preconfigured volume limit has already been reached. The default limit for the cloud is set in the global configuration parameter max.account.volumes, but administrators can also set per-domain limits that are different from the global default. See Setting Usage Limits" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To upload a volume:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) Create an MD5 hash (checksum) of the disk image file that you are going to upload. After uploading the data disk, &PRODUCT; will use this value to verify that no data corruption has occurred." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as an administrator or user" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Storage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Upload Volume." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name and Description. Any desired name and a brief description that can be shown in the UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Availability Zone. Choose the zone where you want to store the volume. VMs running on hosts in this zone can attach the volume." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Format. Choose one of the following to indicate the disk image format of the volume." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disk Image Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "XenServer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VHD" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMware" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OVA" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "KVM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "QCOW2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL. The secure HTTP or HTTPS URL that &PRODUCT; can use to access your disk. The type of file at the URL must match the value chosen in Format. For example, if Format is VHD, the URL might look like the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "http://yourFileServerIP/userdata/myDataDisk.vhd" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "MD5 checksum. (Optional) Use the hash that you created in step 1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Wait until the status of the volume shows that the upload is complete. Click Instances - Volumes, find the name you specified in step 5, and make sure the status is Uploaded." +msgstr "" + diff --git a/docs/pot/upload-template.pot b/docs/pot/upload-template.pot new file mode 100644 index 00000000000..9d6e56ce3de --- /dev/null +++ b/docs/pot/upload-template.pot @@ -0,0 +1,130 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Uploading Templates" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "vSphere Templates and ISOs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are uploading a template that was created using vSphere Client, be sure the OVA file does not contain an ISO. If it does, the deployment of VMs from the template will fail." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Templates are uploaded based on a URL. HTTP is the supported access protocol. Templates are frequently large files. You can optionally gzip them to decrease upload times." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To upload a template:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Create Template." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Provide the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name and Display Text. These will be shown in the UI, so choose something descriptive." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL. The Management Server will download the file from the specified URL, such as http://my.web.server/filename.vhd.gz." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Zone. Choose the zone where you want the template to be available, or All Zones to make it available throughout &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "OS Type: This helps &PRODUCT; and the hypervisor perform certain operations and make assumptions that improve the performance of the guest. Select one of the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the operating system of the stopped VM is listed, choose it." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the OS type of the stopped VM is not listed, choose Other." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You should not choose an older version of the OS than the version in the image. For example, choosing CentOS 5.4 to support a CentOS 6.2 image will in general not work. In those cases you should choose Other." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hypervisor" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Format. The format of the template upload file, such as VHD or OVA." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Password Enabled. Choose Yes if your template has the &PRODUCT; password change script installed. See Adding Password Management to Your Templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Extractable. Choose Yes if the template is available for extraction. If this option is selected, end users can download a full image of a template." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public. Choose Yes to make this template accessible to all users of this &PRODUCT; installation. The template will appear in the Community Templates list. See " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Featured. Choose Yes if you would like this template to be more prominent for users to select. The template will appear in the Featured Templates list. Only an administrator can make a template Featured." +msgstr "" + diff --git a/docs/pot/usage-record-format.pot b/docs/pot/usage-record-format.pot new file mode 100644 index 00000000000..3142d0445f8 --- /dev/null +++ b/docs/pot/usage-record-format.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Usage Record Format" +msgstr "" + diff --git a/docs/pot/usage-types.pot b/docs/pot/usage-types.pot new file mode 100644 index 00000000000..cb246352dc7 --- /dev/null +++ b/docs/pot/usage-types.pot @@ -0,0 +1,245 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Usage Types" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following table shows all usage types." +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "Type ID" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "Type Name" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "Description" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "1" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "RUNNING_VM" +msgstr "" + +#. Tag: entry +#, no-c-format +msgid "Tracks the total running time of a VM per usage record period. If the VM is upgraded during the usage period, you will get a separate Usage Record for the new upgraded VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "2" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ALLOCATED_VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tracks the total time the VM has been created to the time when it has been destroyed. This usage type is also useful in determining usage for specific templates such as Windows-based templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "3" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP_ADDRESS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tracks the public IP address owned by the account." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NETWORK_BYTES_SENT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tracks the total number of bytes sent by all the VMs for an account. Cloud.com does not currently track network traffic per VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "5" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NETWORK_BYTES_RECEIVED" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tracks the total number of bytes received by all the VMs for an account. Cloud.com does not currently track network traffic per VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "6" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VOLUME" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tracks the total time a disk volume has been created to the time when it has been destroyed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "7" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "TEMPLATE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tracks the total time a template (either created from a snapshot or uploaded to the cloud) has been created to the time it has been destroyed. The size of the template is also returned." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "8" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISO" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tracks the total time an ISO has been uploaded to the time it has been removed from the cloud. The size of the ISO is also returned." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "9" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SNAPSHOT" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tracks the total time from when a snapshot has been created to the time it have been destroyed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "11" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "LOAD_BALANCER_POLICY" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tracks the total time a load balancer policy has been created to the time it has been removed. Cloud.com does not track whether a VM has been assigned to a policy." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "12" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "PORT_FORWARDING_RULE" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Tracks the time from when a port forwarding rule was created until the time it was removed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "13" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NETWORK_OFFERING" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The time from when a network offering was assigned to a VM until it is removed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "14" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPN_USERS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The time from when a VPN user is created until it is removed." +msgstr "" + diff --git a/docs/pot/use-project-view.pot b/docs/pot/use-project-view.pot new file mode 100644 index 00000000000..e89b390b07c --- /dev/null +++ b/docs/pot/use-project-view.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using the Project View" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are a member of a project, you can use &PRODUCT;’s project view to see project members, resources consumed, and more. The project view shows only information related to one project. It is a useful way to filter out other information so you can concentrate on a project status and resources." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Project View." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The project dashboard appears, showing the project’s VMs, volumes, users, events, network settings, and more. From the dashboard, you can:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Accounts tab to view and manage project members. If you are the project administrator, you can add new members, remove members, or change the role of a member from user to admin. Only one member at a time can have the admin role, so if you set another user’s role to admin, your role will change to regular user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(If invitations are enabled) Click the Invitations tab to view and manage invitations that have been sent to new project members but not yet accepted. Pending invitations will remain in this list until the new member accepts, the invitation timeout is reached, or you cancel the invitation." +msgstr "" + diff --git a/docs/pot/user-data-and-meta-data.pot b/docs/pot/user-data-and-meta-data.pot new file mode 100644 index 00000000000..239cd72a20e --- /dev/null +++ b/docs/pot/user-data-and-meta-data.pot @@ -0,0 +1,100 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:11:59\n" +"PO-Revision-Date: 2013-02-02T20:11:59\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "User Data and Meta Data" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; provides API access to attach user data to a deployed VM. Deployed VMs also have access to instance metadata via the virtual router." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "User data can be accessed once the IP address of the virtual router is known. Once the IP address is known, use the following steps to access the user data:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following command to find the virtual router." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# cat /var/lib/dhclient/dhclient-eth0.leases | grep dhcp-server-identifier | tail -1" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Access user data by running the following command using the result of the above command" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# curl http://10.1.1.1/latest/user-data" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Meta Data can be accessed similarly, using a URL of the form http://10.1.1.1/latest/meta-data/{metadata type}. (For backwards compatibility, the previous URL http://10.1.1.1/latest/{metadata type} is also supported.) For metadata type, use one of the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "service-offering. A description of the VMs service offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "availability-zone. The Zone name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "local-ipv4. The guest IP of the VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "local-hostname. The hostname of the VM" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "public-ipv4. The first public IP for the router. (E.g. the first IP of eth2)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "public-hostname. This is the same as public-ipv4" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "instance-id. The instance name of the VM" +msgstr "" + diff --git a/docs/pot/user-services-overview.pot b/docs/pot/user-services-overview.pot new file mode 100644 index 00000000000..7fc57020ed7 --- /dev/null +++ b/docs/pot/user-services-overview.pot @@ -0,0 +1,70 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "User Services Overview" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In addition to the physical and logical infrastructure of your cloud, and the &PRODUCT; software and servers, you also need a layer of user services so that people can actually make use of the cloud. This means not just a user UI, but a set of options and resources that users can choose from, such as templates for creating virtual machines, disk storage, and more. If you are running a commercial service, you will be keeping track of what services and resources users are consuming and charging them for that usage. Even if you do not charge anything for people to use your cloud – say, if the users are strictly internal to your organization, or just friends who are sharing your cloud – you can still keep track of what services they use and how much of them." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Service Offerings, Disk Offerings, Network Offerings, and Templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A user creating a new instance can make a variety of choices about its characteristics and capabilities. &PRODUCT; provides several ways to present users with choices when creating a new instance:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Service Offerings, defined by the &PRODUCT; administrator, provide a choice of CPU speed, number of CPUs, RAM size, tags on the root disk, and other choices. See Creating a New Compute Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disk Offerings, defined by the &PRODUCT; administrator, provide a choice of disk size for primary data storage. See Creating a New Disk Offering." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Offerings, defined by the &PRODUCT; administrator, describe the feature set that is available to end users from the virtual router or external networking devices on a given guest network. See Network Offerings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Templates, defined by the &PRODUCT; administrator or by any &PRODUCT; user, are the base OS images that the user can choose from when creating a new instance. For example, &PRODUCT; includes CentOS as a template. See Working with Templates." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In addition to these choices that are provided for users, there is another type of service offering which is available only to the &PRODUCT; root administrator, and is used for configuring virtual infrastructure resources. For more information, see Upgrading a Virtual Router with System Service Offerings." +msgstr "" + diff --git a/docs/pot/using-multiple-guest-networks.pot b/docs/pot/using-multiple-guest-networks.pot new file mode 100644 index 00000000000..c3a6c564332 --- /dev/null +++ b/docs/pot/using-multiple-guest-networks.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using Multiple Guest Networks" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In zones that use advanced networking, additional networks for guest traffic may be added at any time after the initial installation. You can also customize the domain name associated with the network by specifying a DNS suffix for each network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A VM's networks are defined at VM creation time. A VM cannot add or remove networks after it has been created, although the user can go into the guest and remove the IP address from the NIC on a particular network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each VM has just one default network. The virtual router's DHCP reply will set the guest's default gateway as that for the default network. Multiple non-default networks may be added to a guest in addition to the single, required default network. The administrator can control which networks are available as the default network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Additional networks can either be available to all accounts or be assigned to a specific account. Networks that are available to all accounts are zone-wide. Any user with access to the zone can create a VM with access to that network. These zone-wide networks provide little or no isolation between guests.Networks that are assigned to a specific account provide strong isolation." +msgstr "" + diff --git a/docs/pot/using-netscaler-load-balancers.pot b/docs/pot/using-netscaler-load-balancers.pot new file mode 100644 index 00000000000..289490169e5 --- /dev/null +++ b/docs/pot/using-netscaler-load-balancers.pot @@ -0,0 +1,110 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Using a NetScaler Load Balancer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Citrix NetScaler is supported as an external network element for load balancing in zones that use advanced networking (also called advanced zones). Set up an external load balancer when you want to provide load balancing through means other than &PRODUCT;’s provided virtual router." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The NetScaler can be set up in direct (outside the firewall) mode. It must be added before any load balancing rules are deployed on guest VMs in the zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The functional behavior of the NetScaler with &PRODUCT; is the same as described in the &PRODUCT; documentation for using an F5 external load balancer. The only exception is that the F5 supports routing domains, and NetScaler does not. NetScaler can not yet be used as a firewall." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Citrix NetScaler comes in three varieties. The following table summarizes how these variants are treated in &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NetScaler ADC Type" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Description of Capabilities" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; Supported Features" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "MPX" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Physical appliance. Capable of deep packet inspection. Can act as application firewall and load balancer" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In advanced zones, load balancer functionality fully supported without limitation. In basic zones, static NAT, elastic IP (EIP), and elastic load balancing (ELB) are also provided" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPX" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Virtual appliance. Can run as VM on XenServer, ESXi, and Hyper-V hypervisors. Same functionality as MPX" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Supported only on ESXi. Same functional support as for MPX. &PRODUCT; will treat VPX and MPX as the same device type" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "SDX" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Physical appliance. Can create multiple fully isolated VPX instances on a single appliance to support multi-tenant usage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; will dynamically provision, configure, and manage the lifecycle of VPX instances on the SDX. Provisioned instances are added into &PRODUCT; automatically – no manual configuration by the administrator is required. Once a VPX instance is added into &PRODUCT;, it is treated the same as a VPX on an ESXi host." +msgstr "" + diff --git a/docs/pot/using-sshkeys.pot b/docs/pot/using-sshkeys.pot new file mode 100644 index 00000000000..d594e8a1238 --- /dev/null +++ b/docs/pot/using-sshkeys.pot @@ -0,0 +1,238 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using SSH Keys for Authentication" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In addition to the username and password authentication, &PRODUCT; supports using SSH keys to log in to the cloud infrastructure for additional security. You can use the createSSHKeyPair API to generate the SSH keys." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Because each cloud user has their own SSH key, one cloud user cannot log in to another cloud user's instances unless they share their SSH key files. Using a single SSH key pair, you can manage multiple instances." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Creating an Instance Template that Supports SSH Keys" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a instance template that supports SSH Keys." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Create a new instance by using the template provided by cloudstack." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information on creating a new instance, see" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Download the cloudstack script from The SSH Key Gen Scriptto the instance you have created." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "wget http://downloads.sourceforge.net/project/cloudstack/SSH%20Key%20Gen%20Script/cloud-set-guest-sshkey.in?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fcloudstack%2Ffiles%2FSSH%2520Key%2520Gen%2520Script%2F&ts=1331225219&use_mirror=iweb" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy the file to /etc/init.d." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "cp cloud-set-guest-sshkey.in /etc/init.d/" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Give the necessary permissions on the script:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "chmod +x /etc/init.d/cloud-set-guest-sshkey.in" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the script while starting up the operating system:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "chkconfig --add cloud-set-guest-sshkey.in" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Stop the instance." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Creating the SSH Keypair" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You must make a call to the createSSHKeyPair api method. You can either use the &PRODUCT; Python API library or the curl commands to make the call to the cloudstack api." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example, make a call from the cloudstack server to create a SSH keypair called \"keypair-doc\" for the admin account in the root domain:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that you adjust these values to meet your needs. If you are making the API call from a different server, your URL/PORT will be different, and you will need to use the API keys." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Run the following curl command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "curl --globoff \"http://localhost:8096/?command=createSSHKeyPair&name=keypair-doc&account=admin&domainid=5163440e-c44b-42b5-9109-ad75cae8e8a2\"" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The output is something similar to what is given below:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><createsshkeypairresponse cloud-stack-version=\"3.0.0.20120228045507\"><keypair><name>keypair-doc</name><fingerprint>f6:77:39:d5:5e:77:02:22:6a:d8:7f:ce:ab:cd:b3:56</fingerprint><privatekey>-----BEGIN RSA PRIVATE KEY-----\n" +"MIICXQIBAAKBgQCSydmnQ67jP6lNoXdX3noZjQdrMAWNQZ7y5SrEu4wDxplvhYci\n" +"dXYBeZVwakDVsU2MLGl/K+wefwefwefwefwefJyKJaogMKn7BperPD6n1wIDAQAB\n" +"AoGAdXaJ7uyZKeRDoy6wA0UmF0kSPbMZCR+UTIHNkS/E0/4U+6lhMokmFSHtu\n" +"mfDZ1kGGDYhMsdytjDBztljawfawfeawefawfawfawQQDCjEsoRdgkduTy\n" +"QpbSGDIa11Jsc+XNDx2fgRinDsxXI/zJYXTKRhSl/LIPHBw/brW8vzxhOlSOrwm7\n" +"VvemkkgpAkEAwSeEw394LYZiEVv395ar9MLRVTVLwpo54jC4tsOxQCBlloocK\n" +"lYaocpk0yBqqOUSBawfIiDCuLXSdvBo1Xz5ICTM19vgvEp/+kMuECQBzm\n" +"nVo8b2Gvyagqt/KEQo8wzH2THghZ1qQ1QRhIeJG2aissEacF6bGB2oZ7Igim5L14\n" +"4KR7OeEToyCLC2k+02UCQQCrniSnWKtDVoVqeK/zbB32JhW3Wullv5p5zUEcd\n" +"KfEEuzcCUIxtJYTahJ1pvlFkQ8anpuxjSEDp8x/18bq3\n" +"-----END RSA PRIVATE KEY-----\n" +"</privatekey></keypair></createsshkeypairresponse>" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Copy the key data into a file. The file looks like this:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "-----BEGIN RSA PRIVATE KEY-----\n" +"MIICXQIBAAKBgQCSydmnQ67jP6lNoXdX3noZjQdrMAWNQZ7y5SrEu4wDxplvhYci\n" +"dXYBeZVwakDVsU2MLGl/K+wefwefwefwefwefJyKJaogMKn7BperPD6n1wIDAQAB\n" +"AoGAdXaJ7uyZKeRDoy6wA0UmF0kSPbMZCR+UTIHNkS/E0/4U+6lhMokmFSHtu\n" +"mfDZ1kGGDYhMsdytjDBztljawfawfeawefawfawfawQQDCjEsoRdgkduTy\n" +"QpbSGDIa11Jsc+XNDx2fgRinDsxXI/zJYXTKRhSl/LIPHBw/brW8vzxhOlSOrwm7\n" +"VvemkkgpAkEAwSeEw394LYZiEVv395ar9MLRVTVLwpo54jC4tsOxQCBlloocK\n" +"lYaocpk0yBqqOUSBawfIiDCuLXSdvBo1Xz5ICTM19vgvEp/+kMuECQBzm\n" +"nVo8b2Gvyagqt/KEQo8wzH2THghZ1qQ1QRhIeJG2aissEacF6bGB2oZ7Igim5L14\n" +"4KR7OeEToyCLC2k+02UCQQCrniSnWKtDVoVqeK/zbB32JhW3Wullv5p5zUEcd\n" +"KfEEuzcCUIxtJYTahJ1pvlFkQ8anpuxjSEDp8x/18bq3\n" +"-----END RSA PRIVATE KEY-----" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Save the file." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Creating an Instance" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "After you save the SSH keypair file, you must create an instance by using the template that you created at . Ensure that you use the same SSH key name that you created at ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You cannot create the instance by using the GUI at this time and associate the instance with the newly created SSH keypair." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A sample curl command to create a new instance is:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "curl --globoff http://localhost:<port numbet>/?command=deployVirtualMachine\\&zoneId=1\\&serviceOfferingId=18727021-7556-4110-9322-d625b52e0813\\&templateId=e899c18a-ce13-4bbf-98a9-625c5026e0b5\\&securitygroupids=ff03f02f-9e3b-48f8-834d-91b822da40c5\\&account=admin\\&domainid=1\\&keypair=keypair-doc" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Substitute the template, service offering and security group IDs (if you are using the security group feature) that are in your cloud environment." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Logging In Using the SSH Keypair" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To test your SSH key generation is successful, check whether you can log in to the cloud setup." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For exaple, from a Linux OS, run:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "ssh -i ~/.ssh/keypair-doc <ip address>" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The -i parameter tells the ssh client to use a ssh key found at ~/.ssh/keypair-doc." +msgstr "" + diff --git a/docs/pot/using-swift-for-secondary-storage.pot b/docs/pot/using-swift-for-secondary-storage.pot new file mode 100644 index 00000000000..72863d80bd1 --- /dev/null +++ b/docs/pot/using-swift-for-secondary-storage.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using Swift for Secondary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; supports OpenStack Object Storage ( Swift) for secondary storage. When using Swift, you configure Swift storage for the entire &PRODUCT;, then set up NFS secondary storage for each zone as usual. The NFS storage in each zone acts as a staging area through which all templates and other secondary storage data pass before being forwarded to Swift. The Swift storage acts as a cloud-wide resource, making templates and other data available to any zone in the cloud. There is no hierarchy in the Swift storage, just one Swift container per storage object. Any secondary storage in the whole cloud can pull a container from Swift at need. It is not necessary to copy templates and snapshots from one zone to another, as would be required when using zone NFS alone. Everything is available everywhere" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Swift storage must be set up before you add NFS secondary storage to zones. This is accomplished through some additional configuration steps on a fresh Management Server installation, before you add the first zone. The procedure is described in Adding a Zone in the Advanced Installation Guide." +msgstr "" + diff --git a/docs/pot/using-vpn-with-mac.pot b/docs/pot/using-vpn-with-mac.pot new file mode 100644 index 00000000000..d54cfb378df --- /dev/null +++ b/docs/pot/using-vpn-with-mac.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using VPN with Mac OS X" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Mac OS X, in Network Preferences - Advanced, make sure Send all traffic over VPN connection is not checked." +msgstr "" + diff --git a/docs/pot/using-vpn-with-windows.pot b/docs/pot/using-vpn-with-windows.pot new file mode 100644 index 00000000000..ccde5a2111e --- /dev/null +++ b/docs/pot/using-vpn-with-windows.pot @@ -0,0 +1,95 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using VPN with Windows" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The procedure to use VPN varies by Windows version. Generally, the user must edit the VPN properties and make sure that the default route is not the VPN. The following steps are for Windows L2TP clients on Windows Vista. The commands should be similar for other Windows versions." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI and click on the source NAT IP for the account. The VPN tab should display the IPsec preshared key. Make a note of this and the source NAT IP. The UI also lists one or more users and their passwords. Choose one of these users, or, if none exists, add a user and password." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the Windows box, go to Control Panel, then select Network and Sharing center. Click Setup a connection or network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the next dialog, select No, create a new connection." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the next dialog, select Use my Internet Connection (VPN)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the next dialog, enter the source NAT IP from step 1 and give the connection a name. Check Don't connect now." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the next dialog, enter the user name and password selected in step 1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Create." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Go back to the Control Panel and click Network Connections to see the new connection. The connection is not active yet." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Right-click the new connection and select Properties. In the Properties dialog, select the Networking tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In Type of VPN, choose L2TP IPsec VPN, then click IPsec settings. Select Use preshared key. Enter the preshared key from Step 1." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The connection is ready for activation. Go back to Control Panel -> Network Connections and double-click the created connection." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Enter the user name and password from Step 1." +msgstr "" + diff --git a/docs/pot/vcenter-maintenance-mode.pot b/docs/pot/vcenter-maintenance-mode.pot new file mode 100644 index 00000000000..71536afea33 --- /dev/null +++ b/docs/pot/vcenter-maintenance-mode.pot @@ -0,0 +1,80 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "vCenter and Maintenance Mode" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To enter maintenance mode on a vCenter host, both vCenter and &PRODUCT; must be used in concert. &PRODUCT; and vCenter have separate maintenance modes that work closely together." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Place the host into &PRODUCT;'s \"scheduled maintenance\" mode. This does not invoke the vCenter maintenance mode, but only causes VMs to be migrated off the host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the &PRODUCT; maintenance mode is requested, the host first moves into the Prepare for Maintenance state. In this state it cannot be the target of new guest VM starts. Then all VMs will be migrated off the server. Live migration will be used to move VMs off the host. This allows the guests to be migrated to other hosts with no disruption to the guests. After this migration is completed, the host will enter the Ready for Maintenance mode." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Wait for the \"Ready for Maintenance\" indicator to appear in the UI." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Now use vCenter to perform whatever actions are necessary to maintain the host. During this time, the host cannot be the target of new VM allocations." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the maintenance tasks are complete, take the host out of maintenance mode as follows:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "First use vCenter to exit the vCenter maintenance mode." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This makes the host ready for &PRODUCT; to reactivate it." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Then use &PRODUCT;'s administrator UI to cancel the &PRODUCT; maintenance mode" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When the host comes back online, the VMs that were migrated off of it may be migrated back to it manually and new VMs can be added." +msgstr "" + diff --git a/docs/pot/verifying-source.pot b/docs/pot/verifying-source.pot new file mode 100644 index 00000000000..9b2d586aacf --- /dev/null +++ b/docs/pot/verifying-source.pot @@ -0,0 +1,115 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Verifying the downloaded release" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There are a number of mechanisms to check the authenticity and validity of a downloaded release." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Getting the KEYS" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To enable you to verify the GPG signature, you will need to download the KEYS file." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You next need to import those keys, which you can do by running the following command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# gpg --import KEYS" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "GPG" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; project provides a detached GPG signature of the release. To check the signature, run the following command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ gpg --verify apache-cloudstack-4.0.0-incubating-src.tar.bz2.asc" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the signature is valid you will see a line of output that contains 'Good signature'." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "MD5" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In addition to the cryptographic signature, &PRODUCT; has an MD5 checksum that you can use to verify the download matches the release. You can verify this hash by executing the following command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ gpg --print-md MD5 apache-cloudstack-4.0.0-incubating-src.tar.bz2 | diff - apache-cloudstack-4.0.0-incubating-src.tar.bz2.md5" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If this successfully completes you should see no output. If there is any output from them, then there is a difference between the hash you generated locally and the hash that has been pulled from the server." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "SHA512" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In addition to the MD5 hash, the &PRODUCT; project provides a SHA512 cryptographic hash to aid in assurance of the validity of the downloaded release. You can verify this hash by executing the following command:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "$ gpg --print-md SHA512 apache-cloudstack-4.0.0-incubating-src.tar.bz2 | diff - apache-cloudstack-4.0.0-incubating-src.tar.bz2.sha" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If this command successfully completes you should see no output. If there is any output from them, then there is a difference between the hash you generated locally and the hash that has been pulled from the server." +msgstr "" + diff --git a/docs/pot/virtual-machine-usage-record-format.pot b/docs/pot/virtual-machine-usage-record-format.pot new file mode 100644 index 00000000000..5a8763a481a --- /dev/null +++ b/docs/pot/virtual-machine-usage-record-format.pot @@ -0,0 +1,110 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Virtual Machine Usage Record Format" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For running and allocated virtual machine usage, the following fields exist in a usage record:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "account – name of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "accountid – ID of the account" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "domainid – ID of the domain in which this account resides" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "zoneid – Zone where the usage occurred" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "description – A string describing what the usage record is tracking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usage – String representation of the usage, including the units of usage (e.g. 'Hrs' for VM running time)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usagetype – A number representing the usage type (see Usage Types)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "rawusage – A number representing the actual usage in hours" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "virtualMachineId – The ID of the virtual machine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "name – The name of the virtual machine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "offeringid – The ID of the service offering" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "templateid – The ID of the template or the ID of the parent template. The parent template value is present when the current template was created from a volume." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "usageid – Virtual machine" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "type – Hypervisor" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "startdate, enddate – The range of time for which the usage is aggregated; see Dates in the Usage Record" +msgstr "" + diff --git a/docs/pot/virtual-machines.pot b/docs/pot/virtual-machines.pot new file mode 100644 index 00000000000..9991bc8ff61 --- /dev/null +++ b/docs/pot/virtual-machines.pot @@ -0,0 +1,30 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Working With Virtual Machines" +msgstr "" + diff --git a/docs/pot/virtual-router.pot b/docs/pot/virtual-router.pot new file mode 100644 index 00000000000..d5748aef125 --- /dev/null +++ b/docs/pot/virtual-router.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Virtual Router" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The virtual router is a type of System Virtual Machine. The virtual router is one of the most frequently used service providers in &PRODUCT;. The end user has no direct access to the virtual router. Users can ping the virtual router and take actions that affect it (such as setting up port forwarding), but users do not have SSH access into the virtual router." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "There is no mechanism for the administrator to log in to the virtual router. Virtual routers can be restarted by administrators, but this will interrupt public network access and other services for end users. A basic test in debugging networking issues is to attempt to ping the virtual router from a guest VM. Some of the characteristics of the virtual router are determined by its associated system service offering." +msgstr "" + diff --git a/docs/pot/vlan-allocation-eg.pot b/docs/pot/vlan-allocation-eg.pot new file mode 100644 index 00000000000..52608ca0353 --- /dev/null +++ b/docs/pot/vlan-allocation-eg.pot @@ -0,0 +1,130 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "VLAN Allocation Example" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLANs are required for public and guest traffic. The following is an example of a VLAN allocation scheme:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN IDs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Traffic type" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Scope" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "less than 500" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Management traffic. Reserved for administrative purposes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; software can access this, hypervisors, system VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "500-599" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN carrying public traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; accounts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "600-799" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLANs carrying guest traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; accounts. Account-specific VLAN is chosen from this pool." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "800-899" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; accounts. Account-specific VLAN chosen by &PRODUCT; admin to assign to that account." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "900-999" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN carrying guest traffic" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; accounts. Can be scoped by project, domain, or all accounts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "greater than 1000" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reserved for future use" +msgstr "" + diff --git a/docs/pot/vlan-provisioning.pot b/docs/pot/vlan-provisioning.pot new file mode 100644 index 00000000000..406027d3248 --- /dev/null +++ b/docs/pot/vlan-provisioning.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "VLAN Provisioning" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; automatically creates and destroys interfaces bridged to VLANs on the hosts. In general the administrator does not need to manage this process." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; manages VLANs differently based on hypervisor type. For XenServer or KVM, the VLANs are created on only the hosts where they will be used and then they are destroyed when all guests that require them have been terminated or moved to another host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For vSphere the VLANs are provisioned on all hosts in the cluster even if there is no guest running on a particular Host that requires the VLAN. This allows the administrator to perform live migration and other functions in vCenter without having to create the VLAN on the destination Host. Additionally, the VLANs are not removed from the Hosts when they are no longer needed." +msgstr "" + diff --git a/docs/pot/vm-lifecycle.pot b/docs/pot/vm-lifecycle.pot new file mode 100644 index 00000000000..0430f66714c --- /dev/null +++ b/docs/pot/vm-lifecycle.pot @@ -0,0 +1,75 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "VM Lifecycle" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Virtual machines can be in the following states:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Once a virtual machine is destroyed, it cannot be recovered. All the resources used by the virtual machine will be reclaimed by the system. This includes the virtual machine’s IP address." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A stop will attempt to gracefully shut down the operating system, which typically involves terminating all the running applications. If the operation system cannot be stopped, it will be forcefully terminated. This has the same effect as pulling the power cord to a physical machine." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A reboot is a stop followed by a start." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; preserves the state of the virtual machine hard disk until the machine is destroyed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A running virtual machine may fail because of hardware or network issues. A failed virtual machine is in the down state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The system places the virtual machine into the down state if it does not receive the heartbeat from the hypervisor for three minutes." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The user can manually restart the virtual machine from the down state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The system will start the virtual machine from the down state automatically if the virtual machine is marked as HA-enabled." +msgstr "" + diff --git a/docs/pot/vm-storage-migration.pot b/docs/pot/vm-storage-migration.pot new file mode 100644 index 00000000000..4e0ca1f5f1a --- /dev/null +++ b/docs/pot/vm-storage-migration.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "VM Storage Migration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Supported in XenServer, KVM, and VMware." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This procedure is different from moving disk volumes from one VM to another. See Detaching and Moving Volumes ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can migrate a virtual machine’s root disk volume or any additional data disk volume from one storage pool to another in the same zone." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can use the storage migration feature to achieve some commonly desired administration goals, such as balancing the load on storage pools and increasing the reliability of virtual machines by moving them away from any storage pool that is experiencing issues." +msgstr "" + diff --git a/docs/pot/vmware-install.pot b/docs/pot/vmware-install.pot new file mode 100644 index 00000000000..c5c97349e5c --- /dev/null +++ b/docs/pot/vmware-install.pot @@ -0,0 +1,618 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "VMware vSphere Installation and Configuration" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you want to use the VMware vSphere hypervisor to run guest virtual machines, install vSphere on the host(s) in your cloud." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Preparation Checklist for VMware" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For a smoother installation, gather the following information before you start:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Information listed in " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Information listed in " +msgstr "" + +#. Tag: title +#, no-c-format +msgid "vCenter Checklist" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You will need the following information about vCenter." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter Requirement" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Value" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Notes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter User" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This user must have admin privileges." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter User Password" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Password for the above user." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter Datacenter Name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name of the datacenter." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter Cluster Name" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Name of the cluster." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Networking Checklist for VMware" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You will need the following information about VLAN." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN Information" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ESXi VLAN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN on which all your ESXi hypervisors reside." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ESXI VLAN IP Address" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "IP Address Range in the ESXi VLAN. One address per Virtual Router is used from this range." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ESXi VLAN IP Gateway" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ESXi VLAN Netmask" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Management Server VLAN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN on which the &PRODUCT; Management server is installed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public VLAN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN for the Public Network." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public VLAN Gateway" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public VLAN Netmask" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public VLAN IP Address Range" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Range of Public IP Addresses available for &PRODUCT; use. These addresses will be used for virtual router on &PRODUCT; to route private traffic to external networks." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN Range for Customer use" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A contiguous range of non-routable VLANs. One VLAN will be assigned for each customer." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "vSphere Installation Steps" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you haven't already, you'll need to download and purchase vSphere from the VMware Website (https://www.vmware.com/tryvmware/index.php?p=vmware-vsphere&lp=1) and install it by following the VMware vSphere Installation Guide." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Following installation, perform the following configuration, which are described in the next few sections:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Required" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Optional" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ESXi host setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NIC bonding" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure host physical networking, virtual switch, vCenter Management Network, and extended port range" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Multipath storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Prepare storage for iSCSI" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Configure clusters in vCenter and add hosts to them, or add hosts without clusters to vCenter" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "ESXi Host setup" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All ESXi hosts should enable CPU hardware virtualization support in BIOS. Please note hardware virtualization support is not enabled by default on most servers." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Physical Host Networking" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You should have a plan for cabling the vSphere hosts. Proper network configuration is required before adding a vSphere host to &PRODUCT;. To configure an ESXi host, you can use vClient to add it as standalone host to vCenter first. Once you see the host appearing in the vCenter inventory tree, click the host node in the inventory tree, and navigate to the Configuration tab." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the host configuration tab, click the \"Hardware/Networking\" link to bring up the networking configuration page as above." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configure Virtual Switch" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A default virtual switch vSwitch0 is created. &PRODUCT; requires all ESXi hosts in the cloud to use the same set of virtual switch names. If you change the default virtual switch name, you will need to configure one or more &PRODUCT; configuration variables as well." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Separating Traffic" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; allows you to use vCenter to configure three separate networks per ESXi host. These networks are identified by the name of the vSwitch they are connected to. The allowed networks for configuration are public (for traffic to/from the public internet), guest (for guest-guest traffic), and private (for management and usually storage traffic). You can use the default virtual switch for all three, or create one or two other vSwitches for those traffic types." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you want to separate traffic in this way you should first create and configure vSwitches in vCenter according to the vCenter instructions. Take note of the vSwitch names you have used for each traffic type. You will configure &PRODUCT; to use these vSwitches." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Increasing Ports" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "By default a virtual switch on ESXi hosts is created with 56 ports. We recommend setting it to 4088, the maximum number of ports allowed. To do that, click the \"Properties...\" link for virtual switch (note this is not the Properties link for Networking)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In vSwitch properties dialog, select the vSwitch and click Edit. You should see the following dialog:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In this dialog, you can change the number of switch ports. After you've done that, ESXi hosts are required to reboot in order for the setting to take effect." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configure vCenter Management Network" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the vSwitch properties dialog box, you may see a vCenter management network. This same network will also be used as the &PRODUCT; management network. &PRODUCT; requires the vCenter management network to be configured properly. Select the management network item in the dialog, then click Edit." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure the following values are set:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VLAN ID set to the desired ID" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vMotion enabled." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Management traffic enabled." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If the ESXi hosts have multiple VMKernel ports, and ESXi is not using the default value \"Management Network\" as the management network name, you must follow these guidelines to configure the management network port group so that &PRODUCT; can find it:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use one label for the management network port across all ESXi hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the &PRODUCT; UI, go to Configuration - Global Settings and set vmware.management.portgroup to the management network label from the ESXi hosts." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Extend Port Range for &PRODUCT; Console Proxy" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Applies only to VMware vSphere version 4.x)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You need to extend the range of firewall ports that the console proxy works with on the hosts. This is to enable the console proxy to work with VMware-based VMs. The default additional port range is 59000-60000. To extend the port range, log in to the VMware ESX service console on each host and run the following commands:" +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "\n" +"esxcfg-firewall -o 59000-60000,tcp,in,vncextras\n" +"esxcfg-firewall -o 59000-60000,tcp,out,vncextras\n" +" " +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Configure NIC Bonding for vSphere" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NIC bonding on vSphere hosts may be done according to the vSphere installation guide." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Storage Preparation for vSphere (iSCSI only)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use of iSCSI requires preparatory work in vCenter. You must add an iSCSI target and create an iSCSI datastore." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you are using NFS, skip this section." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Enable iSCSI initiator for ESXi hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In vCenter, go to hosts and Clusters/Configuration, and click Storage Adapters link. You will see:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select iSCSI software adapter and click Properties." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the Configure... button." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Check Enabled to enable the initiator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click OK to save." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Add iSCSI target" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Under the properties dialog, add the iSCSI target info:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Repeat these steps for all ESXi hosts in the cluster." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Create an iSCSI datastore" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You should now create a VMFS datastore. Follow these steps to do so:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Select Home/Inventory/Datastores." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Right click on the datacenter node." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose Add Datastore... command." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Follow the wizard to create a iSCSI datastore." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "This procedure should be done on one host in the cluster. It is not necessary to do this on all hosts." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Multipathing for vSphere (Optional)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Storage multipathing on vSphere nodes may be done according to the vSphere installation guide." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Add Hosts or Configure Clusters (vSphere)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Use vCenter to create a vCenter cluster and add your desired hosts to the cluster. You will later add the entire cluster to &PRODUCT;. (see )." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Applying Hotfixes to a VMware vSphere Host" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disconnect the VMware vSphere cluster from &PRODUCT;. It should remain disconnected long enough to apply the hotfix on the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as root." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Navigate to the VMware cluster, click Actions, and select Unmanage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Watch the cluster status until it shows Unmanaged." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Perform the following on each of the ESXi hosts in the cluster:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Move each of the ESXi hosts in the cluster to maintenance mode." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Ensure that all the VMs are migrated to other hosts in that cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If there is only one host in that cluster, shutdown all the VMs and move the host into maintenance mode." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Apply the patch on the ESXi host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the host if prompted." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Cancel the maintenance mode on the host." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Reconnect the cluster to &PRODUCT;:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Navigate to the VMware cluster, click Actions, and select Manage." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Watch the status to see that all the hosts come up. It might take several minutes for the hosts to come up." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Alternatively, verify the host state is properly synchronized and updated in the &PRODUCT; database." +msgstr "" + diff --git a/docs/pot/vmware-requirements.pot b/docs/pot/vmware-requirements.pot new file mode 100644 index 00000000000..38aab24fb82 --- /dev/null +++ b/docs/pot/vmware-requirements.pot @@ -0,0 +1,210 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "System Requirements for vSphere Hosts" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Software requirements:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vSphere and vCenter, both version 4.1 or 5.0." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vSphere Standard is recommended. Note however that customers need to consider the CPU constraints in place with vSphere licensing. See http://www.vmware.com/files/pdf/vsphere_pricing.pdf and discuss with your VMware sales representative." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter Server Standard is recommended." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Be sure all the hotfixes provided by the hypervisor vendor are applied. Track the release of hypervisor patches through your hypervisor vendor's support channel, and apply patches as soon as possible after they are released. &PRODUCT; will not track or notify you of required hypervisor patches. It is essential that your hosts are completely up to date with the provided hypervisor patches. The hypervisor vendor is likely to refuse to support any system that is not up to date with patches." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Apply All Necessary Hotfixes" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The lack of up-do-date hotfixes can lead to data corruption and lost VMs." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Hardware requirements:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The host must be certified as compatible with vSphere. See the VMware Hardware Compatibility Guide at http://www.vmware.com/resources/compatibility/search.php." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All hosts must be 64-bit and must support HVM (Intel-VT or AMD-V enabled)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All hosts within a cluster must be homogenous. That means the CPUs must be of the same type, count, and feature flags." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "64-bit x86 CPU (more cores results in better performance)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Hardware virtualization support required" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "4 GB of memory" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "36 GB of local disk" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "At least 1 NIC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Statically allocated IP Address" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "vCenter Server requirements:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Processor - 2 CPUs 2.0GHz or higher Intel or AMD x86 processors. Processor requirements may be higher if the database runs on the same machine." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Memory - 3GB RAM. RAM requirements may be higher if your database runs on the same machine." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Disk storage - 2GB. Disk requirements may be higher if your database runs on the same machine." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Microsoft SQL Server 2005 Express disk requirements. The bundled database requires up to 2GB free disk space to decompress the installation archive." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Networking - 1Gbit or 10Gbit." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information, see \"vCenter Server and the vSphere Client Hardware Requirements\" at http://pubs.vmware.com/vsp40/wwhelp/wwhimpl/js/html/wwhelp.htm#href=install/c_vc_hw.html." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Other requirements:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VMware vCenter Standard Edition 4.1 or 5.0 must be installed and available to manage the vSphere hosts." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "vCenter must be configured to use the standard port 443 so that it can communicate with the &PRODUCT; Management Server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You must re-install VMware ESXi if you are going to re-use a host from a previous install." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; requires VMware vSphere 4.1 or 5.0. VMware vSphere 4.0 is not supported." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All hosts must be 64-bit and must support HVM (Intel-VT or AMD-V enabled). All hosts within a cluster must be homogenous. That means the CPUs must be of the same type, count, and feature flags." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The &PRODUCT; management network must not be configured as a separate virtual network. The &PRODUCT; management network is the same as the vCenter management network, and will inherit its configuration. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; requires ESXi. ESX is not supported." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All resources used for &PRODUCT; must be used for &PRODUCT; only. &PRODUCT; cannot share instance of ESXi or storage with other management consoles. Do not share the same storage volumes that will be used by &PRODUCT; with a different set of ESXi servers that are not managed by &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Put all target ESXi hypervisors in a cluster in a separate Datacenter in vCenter." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The cluster that will be managed by &PRODUCT; should not contain any VMs. Do not run the management server, vCenter or any other VMs on the cluster that is designated for &PRODUCT; use. Create a separate cluster for use of &PRODUCT; and make sure that they are no VMs in this cluster." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All the required VLANS must be trunked into all network switches that are connected to the ESXi hypervisor hosts. These would include the VLANS for Management, Storage, vMotion, and guest VLANs. The guest VLAN (used in Advanced Networking; see Network Setup) is a contiguous range of VLANs that will be managed by &PRODUCT;." +msgstr "" + diff --git a/docs/pot/vmware-topology-req.pot b/docs/pot/vmware-topology-req.pot new file mode 100644 index 00000000000..05e0e55487b --- /dev/null +++ b/docs/pot/vmware-topology-req.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "VMware Topology Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Server and secondary storage VMs must be able to access vCenter and all ESXi hosts in the zone. To allow the necessary access through the firewall, keep port 443 open." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Servers communicate with VMware vCenter servers on port 443 (HTTPs)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Servers communicate with the System VMs on port 3922 (ssh) on the management traffic network." +msgstr "" + diff --git a/docs/pot/volume-deletion-garbage-collection.pot b/docs/pot/volume-deletion-garbage-collection.pot new file mode 100644 index 00000000000..16ca680565e --- /dev/null +++ b/docs/pot/volume-deletion-garbage-collection.pot @@ -0,0 +1,60 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Volume Deletion and Garbage Collection" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The deletion of a volume does not delete the snapshots that have been created from the volume" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a VM is destroyed, data disk volumes that are attached to the VM are not deleted." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Volumes are permanently destroyed using a garbage collection process. The global configuration variables expunge.delay and expunge.interval determine when the physical deletion of volumes will occur." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "expunge.delay: determines how old the volume must be before it is destroyed, in seconds" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "expunge.interval: determines how often to run the garbage collection check" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Administrators should adjust these values depending on site policies around data retention." +msgstr "" + diff --git a/docs/pot/volume-status.pot b/docs/pot/volume-status.pot new file mode 100644 index 00000000000..08640053661 --- /dev/null +++ b/docs/pot/volume-status.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Volume Status" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a snapshot operation is triggered by means of a recurring snapshot policy, a snapshot is skipped if a volume has remained inactive since its last snapshot was taken. A volume is considered to be inactive if it is either detached or attached to a VM that is not running. &PRODUCT; ensures that at least one snapshot is taken since the volume last became inactive." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a snapshot is taken manually, a snapshot is always created regardless of whether a volume has been active or not." +msgstr "" + diff --git a/docs/pot/vpc.pot b/docs/pot/vpc.pot new file mode 100644 index 00000000000..9841ebca29e --- /dev/null +++ b/docs/pot/vpc.pot @@ -0,0 +1,240 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "About Virtual Private Clouds" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; Virtual Private Cloud is a private, isolated part of &PRODUCT;. A VPC can have its own virtual network topology that resembles a traditional physical network. You can launch VMs in the virtual network that can have private addresses in the range of your choice, for example: 10.0.0.0/16. You can define network tiers within your VPC network range, which in turn enables you to group similar kinds of instances based on IP address range." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For example, if a VPC has the private range 10.0.0.0/16, its guest networks can have the network ranges 10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24, and so on." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Major Components of a VPC:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A VPC is comprised of the following network components:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPC: A VPC acts as a container for multiple isolated networks that can communicate with each other via its virtual router." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Network Tiers: Each tier acts as an isolated network with its own VLANs and CIDR list, where you can place groups of resources, such as VMs. The tiers are segmented by means of VLANs. The NIC of each tier acts as its gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Virtual Router: A virtual router is automatically created and started when you create a VPC. The virtual router connect the tiers and direct traffic among the public gateway, the VPN gateways, and the NAT instances. For each tier, a corresponding NIC and IP exist in the virtual router. The virtual router provides DNS and DHCP services through its IP." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Public Gateway: The traffic to and from the Internet routed to the VPC through the public gateway. In a VPC, the public gateway is not exposed to the end user; therefore, static routes are not support for the public gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Private Gateway: All the traffic to and from a private network routed to the VPC through the private gateway. For more information, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPN Gateway: The VPC side of a VPN connection." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site-to-Site VPN Connection: A hardware-based VPN connection between your VPC and your datacenter, home network, or co-location facility. For more information, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Customer Gateway: The customer side of a VPN Connection. For more information, see ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "NAT Instance: An instance that provides Port Address Translation for instances to access the Internet via the public gateway. For more information, see ." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Network Architecture in a VPC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In a VPC, the following four basic options of network architectures are present:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPC with a public gateway only" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPC with public and private gateways" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPC with public and private gateways and site-to-site VPN access" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "VPC with a private gateway only and site-to-site VPN access" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Connectivity Options for a VPC" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "You can connect your VPC to:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Internet through the public gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The corporate datacenter by using a site-to-site VPN connection through the VPN gateway." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Both the Internet and your corporate datacenter by using both the public gateway and a VPN gateway." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "VPC Network Considerations" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Consider the following before you create a VPC:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A VPC, by default, is created in the enabled state." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A VPC can be created in Advance zone only, and can't belong to more than one zone at a time." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The default number of VPCs an account can create is 20. However, you can change it by using the max.account.vpcs global parameter, which controls the maximum number of VPCs an account is allowed to create." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The default number of tiers an account can create within a VPC is 3. You can configure this number by using the vpc.max.networks parameter." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Each tier should have an unique CIDR in the VPC. Ensure that the tier's CIDR should be within the VPC CIDR range." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A tier belongs to only one VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "All network tiers inside the VPC should belong to the same account." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "When a VPC is created, by default, a SourceNAT IP is allocated to it. The Source NAT IP is released only when the VPC is removed." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A public IP can be used for only one purpose at a time. If the IP is a sourceNAT, it cannot be used for StaticNAT or port forwarding." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The instances only have a private IP address that you provision. To communicate with the Internet, enable NAT to an instance that you launch in your VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Only new networks can be added to a VPC. The maximum number of networks per VPC is limited by the value you specify in the vpc.max.networks parameter. The default value is three." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The load balancing service can be supported by only one tier inside the VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If an IP address is assigned to a tier:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "That IP can't be used by more than one tier at a time in the VPC. For example, if you have tiers A and B, and a public IP1, you can create a port forwarding rule by using the IP either for A or B, but not for both." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "That IP can't be used for StaticNAT, load balancing, or port forwarding rules for another guest network inside the VPC." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Remote access VPN is not supported in VPC networks." +msgstr "" + diff --git a/docs/pot/vpn.pot b/docs/pot/vpn.pot new file mode 100644 index 00000000000..d8c1dafdf7d --- /dev/null +++ b/docs/pot/vpn.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "VPN" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; account owners can create virtual private networks (VPN) to access their virtual machines. If the guest network is instantiated from a network offering that offers the Remote Access VPN service, the virtual router (based on the System VM) is used to provide the service. &PRODUCT; provides a L2TP-over-IPsec-based remote access VPN service to guest virtual networks. Since each network gets its own virtual router, VPNs are not shared across the networks. VPN clients native to Windows, Mac OS X and iOS can be used to connect to the guest networks. The account owner can create and manage users for their VPN. &PRODUCT; does not use its account database for this purpose but uses a separate table. The VPN user database is shared across all the VPNs created by the account owner. All VPN users get access to all VPNs created by the account owner." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Make sure that not all traffic goes through the VPN. That is, the route installed by the VPN should be only for the guest network and not for all traffic." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Road Warrior / Remote Access. Users want to be able to connect securely from a home or office to a private network in the cloud. Typically, the IP address of the connecting client is dynamic and cannot be preconfigured on the VPN server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Site to Site. In this scenario, two private subnets are connected over the public Internet with a secure VPN tunnel. The cloud user’s subnet (for example, an office network) is connected through a gateway to the network in the cloud. The address of the user’s gateway must be preconfigured on the VPN server in the cloud. Note that although L2TP-over-IPsec can be used to set up Site-to-Site VPNs, this is not the primary intent of this feature." +msgstr "" + diff --git a/docs/pot/whatis.pot b/docs/pot/whatis.pot new file mode 100644 index 00000000000..2c3216d27e3 --- /dev/null +++ b/docs/pot/whatis.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "What Is &PRODUCT;?" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; is an open source software platform that pools computing resources to build public, private, and hybrid Infrastructure as a Service (IaaS) clouds. &PRODUCT; manages the network, storage, and compute nodes that make up a cloud infrastructure. Use &PRODUCT; to deploy, manage, and configure cloud computing environments." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Typical users are service providers and enterprises. With &PRODUCT;, you can:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up an on-demand, elastic cloud computing service. Service providers can sell self service virtual machine instances, storage volumes, and networking configurations over the Internet." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Set up an on-premise private cloud for use by employees. Rather than managing virtual machines in the same way as physical machines, with &PRODUCT; an enterprise can offer self-service virtual machines to users without involving IT departments." +msgstr "" + diff --git a/docs/pot/whats-in-this-adminguide.pot b/docs/pot/whats-in-this-adminguide.pot new file mode 100644 index 00000000000..ba033be316f --- /dev/null +++ b/docs/pot/whats-in-this-adminguide.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Who Should Read This" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If you have already installed &PRODUCT; or you want to learn more about the ongoing operation and maintenance of a &PRODUCT;-powered cloud, read this documentation. It will help you start using, configuring, and managing the ongoing operation of your cloud." +msgstr "" + diff --git a/docs/pot/whats-new.pot b/docs/pot/whats-new.pot new file mode 100644 index 00000000000..50d7f5af404 --- /dev/null +++ b/docs/pot/whats-new.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "What's New in the API?" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The following describes any new major features of each &PRODUCT; version as it applies to API usage." +msgstr "" + +#. Tag: title +#, no-c-format +msgid "What's New in the API for 4.0" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "What's New in the API for 3.0" +msgstr "" + diff --git a/docs/pot/who-should-read-installation.pot b/docs/pot/who-should-read-installation.pot new file mode 100644 index 00000000000..cb90df98e01 --- /dev/null +++ b/docs/pot/who-should-read-installation.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Who Should Read This" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For those who have already gone through a design phase and planned a more sophisticated deployment, or those who are ready to start scaling up a trial installation. With the following procedures, you can start using the more powerful features of &PRODUCT;, such as advanced VLAN networking, high availability, additional network elements such as load balancers and firewalls, and support for multiple hypervisors including Citrix XenServer, KVM, and VMware vSphere." +msgstr "" + diff --git a/docs/pot/windows-installation.pot b/docs/pot/windows-installation.pot new file mode 100644 index 00000000000..23fddc97e32 --- /dev/null +++ b/docs/pot/windows-installation.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Windows OS Installation" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Download the installer, CloudInstanceManager.msi, from Download page and run the installer in the newly created Windows VM." +msgstr "" + diff --git a/docs/pot/work-with-usage.pot b/docs/pot/work-with-usage.pot new file mode 100644 index 00000000000..996b6a0dd3c --- /dev/null +++ b/docs/pot/work-with-usage.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Working with Usage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Usage Server is an optional, separately-installed part of &PRODUCT; that provides aggregated usage records which you can use to create billing integration for &PRODUCT;. The Usage Server works by taking data from the events log and creating summary usage records that you can access using the listUsageRecords API call." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The usage records show the amount of resources, such as VM run time or template storage space, consumed by guest instances." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Usage Server runs at least once per day. It can be configured to run multiple times per day." +msgstr "" + diff --git a/docs/pot/working-with-hosts.pot b/docs/pot/working-with-hosts.pot new file mode 100644 index 00000000000..0f12cec59e8 --- /dev/null +++ b/docs/pot/working-with-hosts.pot @@ -0,0 +1,40 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Working With Hosts" +msgstr "" + +#. Tag: title +#, no-c-format +msgid "Adding Hosts" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Additional hosts can be added at any time to provide more capacity for guest VMs. For requirements and instructions, see ." +msgstr "" + diff --git a/docs/pot/working-with-iso.pot b/docs/pot/working-with-iso.pot new file mode 100644 index 00000000000..bf6af43cbc7 --- /dev/null +++ b/docs/pot/working-with-iso.pot @@ -0,0 +1,50 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Working with ISOs" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; supports ISOs and their attachment to guest VMs. An ISO is a read-only file that has an ISO/CD-ROM style file system. Users can upload their own ISOs and mount them on their guest VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISOs are uploaded based on a URL. HTTP is the supported protocol. Once the ISO is available via HTTP specify an upload URL such as http://my.web.server/filename.iso." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISOs may be public or private, like templates.ISOs are not hypervisor-specific. That is, a guest on vSphere can mount the exact same image that a guest on KVM can mount." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "ISO images may be stored in the system and made available with a privacy level similar to templates. ISO images are classified as either bootable or not bootable. A bootable ISO image is one that contains an OS image. &PRODUCT; allows a user to boot a guest VM off of an ISO image. Users can also attach ISO images to guest VMs. For example, this enables installing PV drivers into Windows. ISO images are not hypervisor-specific." +msgstr "" + diff --git a/docs/pot/working-with-snapshots.pot b/docs/pot/working-with-snapshots.pot new file mode 100644 index 00000000000..8f051bd468e --- /dev/null +++ b/docs/pot/working-with-snapshots.pot @@ -0,0 +1,55 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Working with Snapshots" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Supported for the following hypervisors: XenServer, VMware vSphere, and KVM)" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; supports snapshots of disk volumes. Snapshots are a point-in-time capture of virtual machine disks. Memory and CPU states are not captured." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Snapshots may be taken for volumes, including both root and data disks. The administrator places a limit on the number of stored snapshots per user. Users can create new volumes from the snapshot for recovery of particular files and they can create templates from snapshots to boot from a restored disk." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Users can create snapshots manually or by setting up automatic recurring snapshot policies. Users can also create disk volumes from snapshots, which may be attached to a VM like any other disk volume. Snapshots of both root disks and data disks are supported. However, &PRODUCT; does not currently support booting a VM from a recovered root disk. A disk recovered from snapshot of a root disk is treated as a regular data disk; the data on recovered disk can be accessed by attaching the disk to a VM." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A completed snapshot is copied from primary storage to secondary storage, where it is stored until deleted or purged by newer snapshot." +msgstr "" + diff --git a/docs/pot/working-with-system-vm.pot b/docs/pot/working-with-system-vm.pot new file mode 100644 index 00000000000..8ef8d8148a2 --- /dev/null +++ b/docs/pot/working-with-system-vm.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Working with System Virtual Machines" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; uses several types of system virtual machines to perform tasks in the cloud. In general &PRODUCT; manages these system VMs and creates, starts, and stops them as needed based on scale and immediate needs. However, the administrator should be aware of them and their roles to assist in debugging issues." +msgstr "" + diff --git a/docs/pot/working-with-templates.pot b/docs/pot/working-with-templates.pot new file mode 100644 index 00000000000..fc687a376ef --- /dev/null +++ b/docs/pot/working-with-templates.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Working with Templates" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A template is a reusable configuration for virtual machines. When users launch VMs, they can choose from a list of templates in &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Specifically, a template is a virtual disk image that includes one of a variety of operating systems, optional additional software such as office applications, and settings such as access control to determine who can use the template. Each template is associated with a particular type of hypervisor, which is specified when the template is added to &PRODUCT;." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; ships with a default template. In order to present more choices to users, &PRODUCT; administrators and users can create templates and add them to &PRODUCT;." +msgstr "" + diff --git a/docs/pot/working-with-usage-data.pot b/docs/pot/working-with-usage-data.pot new file mode 100644 index 00000000000..8fdafd8eeaf --- /dev/null +++ b/docs/pot/working-with-usage-data.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Working With Usage Data" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Usage Server provides aggregated usage records which you can use to create billing integration for the &PRODUCT; platform. The Usage Server works by taking data from the events log and creating summary usage records that you can access using the listUsageRecords API call." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The usage records show the amount of resources, such as VM run time or template storage space, consumed by guest instances. In the special case of bare metal instances, no template storage resources are consumed, but records showing zero usage are still included in the Usage Server's output." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Usage Server runs at least once per day. It can be configured to run multiple times per day. Its behavior is controlled by configuration settings as described in the &PRODUCT; Administration Guide." +msgstr "" + diff --git a/docs/pot/working-with-volumes.pot b/docs/pot/working-with-volumes.pot new file mode 100644 index 00000000000..fedfc58ba47 --- /dev/null +++ b/docs/pot/working-with-volumes.pot @@ -0,0 +1,45 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Using Swift for Secondary Storage" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "A volume provides storage to a guest VM. The volume can provide for a root disk or an additional data disk. &PRODUCT; supports additional volumes for guest VMs." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Volumes are created for a specific hypervisor type. A volume that has been attached to guest using one hypervisor type (e.g, XenServer) may not be attached to a guest that is using another hypervisor type (e.g. vSphere, KVM). This is because the different hypervisors use different disk image formats." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "&PRODUCT; defines a volume as a unit of storage available to a guest VM. Volumes are either root disks or data disks. The root disk has \"/\" in the file system and is usually the boot device. Data disks provide for additional storage (e.g. As \"/opt\" or \"D:\"). Every guest VM has a root disk, and VMs can also optionally have a data disk. End users can mount multiple data disks to guest VMs. Users choose data disks from the disk offerings created by administrators. The user can create a template from a volume as well; this is the standard procedure for private template creation. Volumes are hypervisor-specific: a volume from one hypervisor type may not be used on a guest of another hypervisor type." +msgstr "" + diff --git a/docs/pot/xenserver-maintenance-mode.pot b/docs/pot/xenserver-maintenance-mode.pot new file mode 100644 index 00000000000..a5d4aabbd09 --- /dev/null +++ b/docs/pot/xenserver-maintenance-mode.pot @@ -0,0 +1,85 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "XenServer and Maintenance Mode" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For XenServer, you can take a server offline temporarily by using the Maintenance Mode feature in XenCenter. When you place a server into Maintenance Mode, all running VMs are automatically migrated from it to another host in the same pool. If the server is the pool master, a new master will also be selected for the pool. While a server is Maintenance Mode, you cannot create or start any VMs on it." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To place a server in Maintenance Mode:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the Resources pane, select the server, then do one of the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Right-click, then click Enter Maintenance Mode on the shortcut menu." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the Server menu, click Enter Maintenance Mode" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Enter Maintenance Mode" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The server's status in the Resources pane shows when all running VMs have been successfully migrated off the server." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "To take a server out of Maintenance Mode:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Right-click, then click Exit Maintenance Mode on the shortcut menu." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On the Server menu, click Exit Maintenance Mode" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Exit Maintenance Mode" +msgstr "" + diff --git a/docs/pot/xenserver-topology-req.pot b/docs/pot/xenserver-topology-req.pot new file mode 100644 index 00000000000..765427bb680 --- /dev/null +++ b/docs/pot/xenserver-topology-req.pot @@ -0,0 +1,35 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "XenServer Topology Requirements" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The Management Servers communicate with XenServer hosts on ports 22 (ssh), 80 (HTTP), and 443 (HTTPs)." +msgstr "" + diff --git a/docs/pot/zone-add.pot b/docs/pot/zone-add.pot new file mode 100644 index 00000000000..f9944a306ba --- /dev/null +++ b/docs/pot/zone-add.pot @@ -0,0 +1,155 @@ +#Licensed to the Apache Software Foundation (ASF) under one +#or more contributor license agreements. See the NOTICE file +#distributed with this work for additional information +#regarding copyright ownership. The ASF licenses this file +#to you under the Apache License, Version 2.0 (the +#"License"); you may not use this file except in compliance +#with the License. You may obtain a copy of the License at +#http://www.apache.org/licenses/LICENSE-2.0 +#Unless required by applicable law or agreed to in writing, +#software distributed under the License is distributed on an +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#KIND, either express or implied. See the License for the +#specific language governing permissions and limitations +#under the License. +msgid "" +msgstr "" +"Project-Id-Version: 0\n" +"POT-Creation-Date: 2013-02-02T20:12:00\n" +"PO-Revision-Date: 2013-02-02T20:12:00\n" +"Last-Translator: Automatically generated\n" +"Language-Team: None\n" +"MIME-Version: 1.0\n" +"Content-Type: application/x-publican; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Tag: title +#, no-c-format +msgid "Adding a Zone" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "These steps assume you have already logged in to the &PRODUCT; UI. See ." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) If you are going to use Swift for cloud-wide secondary storage, you need to add it before you add zones." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Log in to the &PRODUCT; UI as administrator." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "If this is your first time visiting the UI, you will see the guided tour splash screen. Choose “Experienced user.†The Dashboard appears." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation bar, click Global Settings." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the search box, type swift.enable and click the search button." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click the edit button and set swift.enable to true. edit-icon.png: button to modify data " +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Restart the Management Server." +msgstr "" + +#. Tag: programlisting +#, no-c-format +msgid "# service cloud-management restart" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Refresh the &PRODUCT; UI browser tab and log back in." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "In the left navigation, choose Infrastructure." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "On Zones, click View More." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "(Optional) If you are using Swift storage, click Enable Swift. Provide the following:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "URL. The Swift URL." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Account. The Swift account." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Username. The Swift account’s username." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Key. The Swift key." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Click Add Zone. The zone creation wizard will appear." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Choose one of the following network types:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Basic. For AWS-style networking. Provides 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)." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "Advanced. 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." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "For more information about the network types, see Network Setup." +msgstr "" + +#. Tag: para +#, no-c-format +msgid "The rest of the steps differ depending on whether you chose Basic or Advanced. Continue with the steps that apply to you:" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + +#. Tag: para +#, no-c-format +msgid "" +msgstr "" + diff --git a/docs/publican-cloudstack/defaults.cfg b/docs/publican-cloudstack/defaults.cfg index 6aebaee5a83..9e27bdd309d 100644 --- a/docs/publican-cloudstack/defaults.cfg +++ b/docs/publican-cloudstack/defaults.cfg @@ -16,6 +16,6 @@ # specific language governing permissions and limitations # under the License. -doc_url: "http://docs.cloudstack.org" +doc_url: "http://incubator.apache.org/cloudstack/docs" prod_url: "http://cloudstack.org" diff --git a/docs/publican-cloudstack/en-US/Legal_Notice.xml b/docs/publican-cloudstack/en-US/Legal_Notice.xml index 0e4be5bf56a..5e30efb07c0 100644 --- a/docs/publican-cloudstack/en-US/Legal_Notice.xml +++ b/docs/publican-cloudstack/en-US/Legal_Notice.xml @@ -53,6 +53,15 @@ completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF. + + + CloudStack® is a registered trademark of the Apache Software Foundation. + + + + Apache CloudStack, the CloudStack word design, the Apache CloudStack word design, and the cloud monkey logo are trademarks of the + Apache Software Foundation. + diff --git a/docs/publican-cloudstack/en-US/images/title_logo.svg b/docs/publican-cloudstack/en-US/images/title_logo.svg index a5888de4cf4..1d2913bf50c 100644 --- a/docs/publican-cloudstack/en-US/images/title_logo.svg +++ b/docs/publican-cloudstack/en-US/images/title_logo.svg @@ -1,5 +1,6 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/engine/storage/integration-test/test/resource/component.xml b/engine/storage/integration-test/test/resource/component.xml new file mode 100644 index 00000000000..0368ad41425 --- /dev/null +++ b/engine/storage/integration-test/test/resource/component.xml @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/engine/storage/integration-test/test/resource/storageContext.xml b/engine/storage/integration-test/test/resource/storageContext.xml index 0127c96a734..7c5382d49f9 100644 --- a/engine/storage/integration-test/test/resource/storageContext.xml +++ b/engine/storage/integration-test/test/resource/storageContext.xml @@ -23,10 +23,8 @@ - - - + @@ -34,49 +32,12 @@ - - - - - - + - - - - - - - - - org.apache.cloudstack.framework - - + + + - - - - - - - - - - - - - - - - - diff --git a/engine/storage/pom.xml b/engine/storage/pom.xml index e8a2eb75193..270fe47c743 100644 --- a/engine/storage/pom.xml +++ b/engine/storage/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-engine - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../pom.xml diff --git a/engine/storage/snapshot/pom.xml b/engine/storage/snapshot/pom.xml index 45439c4726a..211cdac574e 100644 --- a/engine/storage/snapshot/pom.xml +++ b/engine/storage/snapshot/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-engine - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml @@ -44,7 +44,11 @@ install - src - test + ${project.basedir}/test + + + ${project.basedir}/test/resource + + diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java index 487e2d53eff..fa7772a979d 100644 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java @@ -20,28 +20,65 @@ package org.apache.cloudstack.storage.snapshot; import javax.inject.Inject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; -import org.apache.cloudstack.storage.datastore.DataStoreManager; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager; -import org.apache.cloudstack.storage.db.ObjectInDataStoreVO; -import org.apache.cloudstack.storage.snapshot.db.SnapshotDao2; -import org.apache.cloudstack.storage.snapshot.db.SnapshotVO; import org.springframework.stereotype.Component; +import com.cloud.storage.Snapshot; +import com.cloud.storage.SnapshotVO; +import com.cloud.storage.dao.SnapshotDao; +import com.cloud.utils.exception.CloudRuntimeException; + @Component public class SnapshotDataFactoryImpl implements SnapshotDataFactory { @Inject - SnapshotDao2 snapshotDao; + SnapshotDao snapshotDao; @Inject ObjectInDataStoreManager objMap; @Inject DataStoreManager storeMgr; + @Inject + VolumeDataFactory volumeFactory; @Override public SnapshotInfo getSnapshot(long snapshotId, DataStore store) { - SnapshotVO snapshot = snapshotDao.findById(snapshotId); - ObjectInDataStoreVO obj = objMap.findObject(snapshotId, DataObjectType.SNAPSHOT, store.getId(), store.getRole()); - SnapshotObject so = new SnapshotObject(snapshot, store); + SnapshotVO snapshot = snapshotDao.findByIdIncludingRemoved(snapshotId); + DataObjectInStore obj = objMap.findObject(snapshot.getUuid(), DataObjectType.SNAPSHOT, store.getUuid(), store.getRole()); + if (obj == null) { + return null; + } + SnapshotObject so = SnapshotObject.getSnapshotObject(snapshot, store); + return so; + } + @Override + public SnapshotInfo getSnapshot(long snapshotId) { + SnapshotVO snapshot = snapshotDao.findByIdIncludingRemoved(snapshotId); + SnapshotObject so = null; + if (snapshot.getState() == Snapshot.State.BackedUp) { + DataStore store = objMap.findStore(snapshot.getUuid(), DataObjectType.SNAPSHOT, DataStoreRole.Image); + so = SnapshotObject.getSnapshotObject(snapshot, store); + } else { + VolumeInfo volume = this.volumeFactory.getVolume(snapshot.getVolumeId()); + so = SnapshotObject.getSnapshotObject(snapshot, volume.getDataStore()); + } + return so; + } + + @Override + public SnapshotInfo getSnapshot(DataObject obj, DataStore store) { + SnapshotVO snapshot = snapshotDao.findByIdIncludingRemoved(obj.getId()); + if (snapshot == null) { + throw new CloudRuntimeException("Can't find snapshot: " + obj.getId()); + } + SnapshotObject so = SnapshotObject.getSnapshotObject(snapshot, store); return so; } } diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java index 6ce17973375..d10dc778092 100644 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java @@ -18,19 +18,54 @@ */ package org.apache.cloudstack.storage.snapshot; +import java.util.Date; + +import javax.inject.Inject; + import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat; -import org.apache.cloudstack.storage.snapshot.db.SnapshotVO; +import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager; +import org.apache.log4j.Logger; + +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.storage.Snapshot; +import com.cloud.storage.SnapshotVO; +import com.cloud.storage.dao.SnapshotDao; +import com.cloud.storage.dao.VolumeDao; +import com.cloud.utils.component.ComponentContext; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.fsm.NoTransitionException; public class SnapshotObject implements SnapshotInfo { + private static final Logger s_logger = Logger.getLogger(SnapshotObject.class); private SnapshotVO snapshot; private DataStore store; - - public SnapshotObject(SnapshotVO snapshot, DataStore store) { - this.snapshot = snapshot; - this.store = store; + @Inject + protected SnapshotDao snapshotDao; + @Inject + protected VolumeDao volumeDao; + @Inject protected VolumeDataFactory volFactory; + @Inject protected SnapshotStateMachineManager stateMachineMgr; + @Inject + ObjectInDataStoreManager ojbectInStoreMgr; + public SnapshotObject() { + + } + + protected void configure(SnapshotVO snapshot, DataStore store) { + this.snapshot = snapshot; + this.store = store; + } + + public static SnapshotObject getSnapshotObject(SnapshotVO snapshot, DataStore store) { + SnapshotObject snapObj = ComponentContext.inject(SnapshotObject.class); + snapObj.configure(snapshot, store); + return snapObj; } public DataStore getStore() { @@ -51,50 +86,138 @@ public class SnapshotObject implements SnapshotInfo { @Override public VolumeInfo getBaseVolume() { - // TODO Auto-generated method stub - return null; + return volFactory.getVolume(this.snapshot.getVolumeId()); } @Override public long getId() { - // TODO Auto-generated method stub - return 0; + return this.snapshot.getId(); } @Override public String getUri() { - // TODO Auto-generated method stub - return null; + return this.snapshot.getUuid(); } @Override public DataStore getDataStore() { - // TODO Auto-generated method stub - return null; + return this.store; } @Override public Long getSize() { - // TODO Auto-generated method stub - return 0L; + return this.getSize(); } @Override public DataObjectType getType() { - // TODO Auto-generated method stub - return null; + return DataObjectType.SNAPSHOT; } @Override public DiskFormat getFormat() { - // TODO Auto-generated method stub return null; } @Override public String getUuid() { - // TODO Auto-generated method stub - return null; + return this.snapshot.getUuid(); } + @Override + public void processEvent( + ObjectInDataStoreStateMachine.Event event) { + try { + ojbectInStoreMgr.update(this, event); + } catch (Exception e) { + s_logger.debug("Failed to update state:" + e.toString()); + throw new CloudRuntimeException("Failed to update state: " + e.toString()); + } + } + + @Override + public long getAccountId() { + return this.snapshot.getAccountId(); + } + + @Override + public long getVolumeId() { + return this.snapshot.getVolumeId(); + } + + @Override + public String getPath() { + return this.snapshot.getPath(); + } + + public void setPath(String path) { + this.snapshot.setPath(path); + } + + @Override + public String getName() { + return this.snapshot.getName(); + } + + @Override + public Date getCreated() { + return this.snapshot.getCreated(); + } + + @Override + public Type getRecurringType() { + return this.snapshot.getRecurringType(); + } + + @Override + public State getState() { + return this.snapshot.getState(); + } + + @Override + public HypervisorType getHypervisorType() { + return this.snapshot.getHypervisorType(); + } + + @Override + public boolean isRecursive() { + return this.snapshot.isRecursive(); + } + + @Override + public short getsnapshotType() { + return this.snapshot.getsnapshotType(); + } + + @Override + public long getDomainId() { + return this.snapshot.getDomainId(); + } + + public void setPrevSnapshotId(Long id) { + this.snapshot.setPrevSnapshotId(id); + } + + @Override + public Long getDataCenterId() { + return this.snapshot.getDataCenterId(); + } + + public void processEvent(Snapshot.Event event) + throws NoTransitionException { + stateMachineMgr.processEvent(this.snapshot, event); + } + + @Override + public Long getPrevSnapshotId() { + return this.snapshot.getPrevSnapshotId(); + } + + public void setBackupSnapshotId(String id) { + this.snapshot.setBackupSnapshotId(id); + } + + public String getBackupSnapshotId() { + return this.snapshot.getBackupSnapshotId(); + } } diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java index 80b1918665d..1b64fd0cae3 100644 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java @@ -17,10 +17,15 @@ package org.apache.cloudstack.storage.snapshot; import org.apache.cloudstack.engine.cloud.entity.api.SnapshotEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; import org.springframework.stereotype.Component; @Component public class SnapshotServiceImpl implements SnapshotService { + + public SnapshotServiceImpl() { + + } @Override public SnapshotEntity getSnapshotEntity(long snapshotId) { @@ -45,5 +50,7 @@ public class SnapshotServiceImpl implements SnapshotService { // TODO Auto-generated method stub return false; } + + } diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManager.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManager.java new file mode 100644 index 00000000000..c6057704cd8 --- /dev/null +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManager.java @@ -0,0 +1,26 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.cloudstack.storage.snapshot; + +import com.cloud.storage.Snapshot.Event; +import com.cloud.storage.SnapshotVO; +import com.cloud.utils.fsm.NoTransitionException; + +public interface SnapshotStateMachineManager { + public void processEvent(SnapshotVO snapshot, Event event) throws NoTransitionException; +} diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java new file mode 100644 index 00000000000..aa1cf684d7a --- /dev/null +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotStateMachineManagerImpl.java @@ -0,0 +1,54 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.cloudstack.storage.snapshot; + +import javax.inject.Inject; + +import org.springframework.stereotype.Component; + +import com.cloud.storage.Snapshot; +import com.cloud.storage.Snapshot.Event; +import com.cloud.storage.Snapshot.State; +import com.cloud.storage.SnapshotVO; +import com.cloud.storage.dao.SnapshotDao; +import com.cloud.storage.listener.SnapshotStateListener; +import com.cloud.utils.fsm.NoTransitionException; +import com.cloud.utils.fsm.StateMachine2; + +@Component +public class SnapshotStateMachineManagerImpl implements +SnapshotStateMachineManager { + private StateMachine2 stateMachine = new StateMachine2(); + @Inject + protected SnapshotDao snapshotDao; + public SnapshotStateMachineManagerImpl() { + stateMachine.addTransition(Snapshot.State.Allocated, Event.CreateRequested, Snapshot.State.Creating); + stateMachine.addTransition(Snapshot.State.Creating, Event.OperationSucceeded, Snapshot.State.CreatedOnPrimary); + stateMachine.addTransition(Snapshot.State.Creating, Event.OperationNotPerformed, Snapshot.State.BackedUp); + stateMachine.addTransition(Snapshot.State.Creating, Event.OperationFailed, Snapshot.State.Error); + stateMachine.addTransition(Snapshot.State.CreatedOnPrimary, Event.BackupToSecondary, Snapshot.State.BackingUp); + stateMachine.addTransition(Snapshot.State.BackingUp, Event.OperationSucceeded, Snapshot.State.BackedUp); + stateMachine.addTransition(Snapshot.State.BackingUp, Event.OperationFailed, Snapshot.State.CreatedOnPrimary); + + stateMachine.registerListener(new SnapshotStateListener()); + } + + public void processEvent(SnapshotVO snapshot, Event event) throws NoTransitionException { + stateMachine.transitTo(snapshot, event, null, snapshotDao); + } +} diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/AncientSnasphotStrategy.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/AncientSnasphotStrategy.java new file mode 100644 index 00000000000..ea3b0afd09d --- /dev/null +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/AncientSnasphotStrategy.java @@ -0,0 +1,608 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.cloudstack.storage.snapshot.strategy; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +import javax.inject.Inject; + +import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult; +import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult; +import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotStrategy; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope; +import org.apache.cloudstack.framework.async.AsyncCallFuture; +import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher; +import org.apache.cloudstack.framework.async.AsyncCompletionCallback; +import org.apache.cloudstack.framework.async.AsyncRpcConext; +import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager; +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; +import org.apache.cloudstack.storage.motion.DataMotionService; +import org.apache.cloudstack.storage.snapshot.SnapshotObject; +import org.apache.cloudstack.storage.snapshot.SnapshotStateMachineManager; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.BackupSnapshotAnswer; +import com.cloud.agent.api.DeleteSnapshotBackupCommand; +import com.cloud.agent.api.to.S3TO; +import com.cloud.agent.api.to.SwiftTO; +import com.cloud.configuration.Resource.ResourceType; +import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.dc.ClusterVO; +import com.cloud.dc.dao.ClusterDao; +import com.cloud.event.EventTypes; +import com.cloud.event.UsageEventUtils; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.host.HostVO; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.resource.ResourceManager; +import com.cloud.storage.Snapshot; +import com.cloud.storage.SnapshotVO; +import com.cloud.storage.StoragePool; +import com.cloud.storage.VolumeManager; +import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.SnapshotDao; +import com.cloud.storage.dao.VolumeDao; +import com.cloud.storage.s3.S3Manager; +import com.cloud.storage.snapshot.SnapshotManager; +import com.cloud.storage.swift.SwiftManager; +import com.cloud.utils.NumbersUtil; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.fsm.NoTransitionException; +import com.cloud.vm.UserVmVO; +import com.cloud.vm.VirtualMachine.State; +import com.cloud.vm.dao.UserVmDao; +import com.cloud.vm.snapshot.VMSnapshot; +import com.cloud.vm.snapshot.VMSnapshotVO; +import com.cloud.vm.snapshot.dao.VMSnapshotDao; + +@Component +public class AncientSnasphotStrategy implements SnapshotStrategy { + private static final Logger s_logger = Logger.getLogger(AncientSnasphotStrategy.class); + @Inject + protected VolumeDao _volsDao; + @Inject + protected UserVmDao _vmDao; + @Inject + protected PrimaryDataStoreDao _storagePoolDao; + @Inject + protected ClusterDao _clusterDao; + @Inject + protected SnapshotDao snapshotDao; + @Inject + private ResourceManager _resourceMgr; + @Inject + protected SnapshotDao _snapshotDao; + @Inject + protected SnapshotManager snapshotMgr; + @Inject + protected VolumeManager volumeMgr; + @Inject + private ConfigurationDao _configDao; + @Inject + protected SnapshotStateMachineManager stateMachineManager; + @Inject + private VolumeDao volumeDao; + @Inject + SnapshotDataFactory snapshotfactory; + @Inject + DataStoreManager dataStoreMgr; + @Inject + DataMotionService motionSrv; + @Inject + ObjectInDataStoreManager objInStoreMgr; + @Inject + VMSnapshotDao _vmSnapshotDao; + + + @Override + public boolean canHandle(SnapshotInfo snapshot) { + return true; + } + + static private class CreateSnapshotContext extends AsyncRpcConext { + final VolumeInfo volume; + final SnapshotInfo snapshot; + final AsyncCallFuture future; + public CreateSnapshotContext(AsyncCompletionCallback callback, VolumeInfo volume, + SnapshotInfo snapshot, + AsyncCallFuture future) { + super(callback); + this.volume = volume; + this.snapshot = snapshot; + this.future = future; + } + } + + static private class DeleteSnapshotContext extends AsyncRpcConext { + final SnapshotInfo snapshot; + final AsyncCallFuture future; + public DeleteSnapshotContext(AsyncCompletionCallback callback, SnapshotInfo snapshot, + AsyncCallFuture future) { + super(callback); + this.snapshot = snapshot; + this.future = future; + } + + } + + static private class CopySnapshotContext extends AsyncRpcConext { + final SnapshotInfo srcSnapshot; + final SnapshotInfo destSnapshot; + final AsyncCallFuture future; + public CopySnapshotContext(AsyncCompletionCallback callback, + SnapshotInfo srcSnapshot, + SnapshotInfo destSnapshot, + AsyncCallFuture future) { + super(callback); + this.srcSnapshot = srcSnapshot; + this.destSnapshot = destSnapshot; + this.future = future; + } + + } + + protected Void createSnapshotAsyncCallback(AsyncCallbackDispatcher callback, + CreateSnapshotContext context) { + CreateCmdResult result = callback.getResult(); + SnapshotObject snapshot = (SnapshotObject)context.snapshot; + VolumeInfo volume = context.volume; + AsyncCallFuture future = context.future; + SnapshotResult snapResult = new SnapshotResult(snapshot); + if (result.isFailed()) { + s_logger.debug("create snapshot " + context.snapshot.getName() + " failed: " + result.getResult()); + try { + snapshot.processEvent(Snapshot.Event.OperationFailed); + } catch (NoTransitionException nte) { + s_logger.debug("Failed to update snapshot state due to " + nte.getMessage()); + } + + + snapResult.setResult(result.getResult()); + future.complete(snapResult); + return null; + } + + try { + SnapshotVO preSnapshotVO = this.snapshotMgr.getParentSnapshot(volume, snapshot); + String preSnapshotPath = null; + if (preSnapshotVO != null) { + preSnapshotPath = preSnapshotVO.getPath(); + } + SnapshotVO snapshotVO = this.snapshotDao.findById(snapshot.getId()); + // The snapshot was successfully created + if (preSnapshotPath != null && preSnapshotPath.equals(result.getPath())) { + // empty snapshot + s_logger.debug("CreateSnapshot: this is empty snapshot "); + + snapshotVO.setPath(preSnapshotPath); + snapshotVO.setBackupSnapshotId(preSnapshotVO.getBackupSnapshotId()); + snapshotVO.setSwiftId(preSnapshotVO.getSwiftId()); + snapshotVO.setPrevSnapshotId(preSnapshotVO.getId()); + snapshotVO.setSecHostId(preSnapshotVO.getSecHostId()); + snapshot.processEvent(Snapshot.Event.OperationNotPerformed); + } else { + long preSnapshotId = 0; + + if (preSnapshotVO != null && preSnapshotVO.getBackupSnapshotId() != null) { + preSnapshotId = preSnapshotVO.getId(); + int _deltaSnapshotMax = NumbersUtil.parseInt(_configDao.getValue("snapshot.delta.max"), SnapshotManager.DELTAMAX); + int deltaSnap = _deltaSnapshotMax; + + int i; + for (i = 1; i < deltaSnap; i++) { + String prevBackupUuid = preSnapshotVO.getBackupSnapshotId(); + // previous snapshot doesn't have backup, create a full snapshot + if (prevBackupUuid == null) { + preSnapshotId = 0; + break; + } + long preSSId = preSnapshotVO.getPrevSnapshotId(); + if (preSSId == 0) { + break; + } + preSnapshotVO = _snapshotDao.findByIdIncludingRemoved(preSSId); + } + if (i >= deltaSnap) { + preSnapshotId = 0; + } + } + + //If the volume is moved around, backup a full snapshot to secondary storage + if (volume.getLastPoolId() != null && !volume.getLastPoolId().equals(volume.getPoolId())) { + preSnapshotId = 0; + //TODO: fix this hack + VolumeVO volumeVO = this.volumeDao.findById(volume.getId()); + volumeVO.setLastPoolId(volume.getPoolId()); + this.volumeDao.update(volume.getId(), volumeVO); + } + + snapshot.setPath(result.getPath()); + snapshot.setPrevSnapshotId(preSnapshotId); + + snapshot.processEvent(Snapshot.Event.OperationSucceeded); + snapResult = new SnapshotResult(this.snapshotfactory.getSnapshot(snapshot.getId())); + } + } catch (Exception e) { + s_logger.debug("Failed to create snapshot: ", e); + snapResult.setResult(e.toString()); + try { + snapshot.processEvent(Snapshot.Event.OperationFailed); + } catch (NoTransitionException e1) { + s_logger.debug("Failed to change snapshot state: " + e1.toString()); + } + } + + future.complete(snapResult); + return null; + } + + class SnapshotResult extends CommandResult { + SnapshotInfo snashot; + public SnapshotResult(SnapshotInfo snapshot) { + this.snashot = snapshot; + } + } + + protected SnapshotInfo createSnapshotOnPrimary(VolumeInfo volume, Long snapshotId) { + SnapshotObject snapshot = (SnapshotObject)this.snapshotfactory.getSnapshot(snapshotId); + if (snapshot == null) { + throw new CloudRuntimeException("Can not find snapshot " + snapshotId); + } + + try { + snapshot.processEvent(Snapshot.Event.CreateRequested); + } catch (NoTransitionException nte) { + s_logger.debug("Failed to update snapshot state due to " + nte.getMessage()); + throw new CloudRuntimeException("Failed to update snapshot state due to " + nte.getMessage()); + } + + AsyncCallFuture future = new AsyncCallFuture(); + try { + CreateSnapshotContext context = new CreateSnapshotContext( + null, volume, snapshot, future); + AsyncCallbackDispatcher caller = AsyncCallbackDispatcher + .create(this); + caller.setCallback( + caller.getTarget().createSnapshotAsyncCallback(null, null)) + .setContext(context); + PrimaryDataStoreDriver primaryStore = (PrimaryDataStoreDriver)volume.getDataStore().getDriver(); + primaryStore.takeSnapshot(snapshot, caller); + } catch (Exception e) { + s_logger.debug("Failed to take snapshot: " + snapshot.getId(), e); + try { + snapshot.processEvent(Snapshot.Event.OperationFailed); + } catch (NoTransitionException e1) { + s_logger.debug("Failed to change state for event: OperationFailed" , e); + } + throw new CloudRuntimeException("Failed to take snapshot" + snapshot.getId()); + } + + SnapshotResult result; + + try { + result = future.get(); + if (result.isFailed()) { + s_logger.debug("Failed to create snapshot:" + result.getResult()); + throw new CloudRuntimeException(result.getResult()); + } + return result.snashot; + } catch (InterruptedException e) { + s_logger.debug("Failed to create snapshot", e); + throw new CloudRuntimeException("Failed to create snapshot", e); + } catch (ExecutionException e) { + s_logger.debug("Failed to create snapshot", e); + throw new CloudRuntimeException("Failed to create snapshot", e); + } + + } + + private boolean hostSupportSnapsthot(HostVO host) { + if (host.getHypervisorType() != HypervisorType.KVM) { + return true; + } + // Determine host capabilities + String caps = host.getCapabilities(); + + if (caps != null) { + String[] tokens = caps.split(","); + for (String token : tokens) { + if (token.contains("snapshot")) { + return true; + } + } + } + return false; + } + + protected boolean supportedByHypervisor(VolumeInfo volume) { + if (volume.getHypervisorType().equals(HypervisorType.KVM)) { + StoragePool storagePool = (StoragePool)volume.getDataStore(); + ClusterVO cluster = _clusterDao.findById(storagePool.getClusterId()); + List hosts = _resourceMgr.listAllHostsInCluster(cluster.getId()); + if (hosts != null && !hosts.isEmpty()) { + HostVO host = hosts.get(0); + if (!hostSupportSnapsthot(host)) { + throw new CloudRuntimeException("KVM Snapshot is not supported on cluster: " + host.getId()); + } + } + } + + // if volume is attached to a vm in destroyed or expunging state; disallow + if (volume.getInstanceId() != null) { + UserVmVO userVm = _vmDao.findById(volume.getInstanceId()); + if (userVm != null) { + if (userVm.getState().equals(State.Destroyed) || userVm.getState().equals(State.Expunging)) { + throw new CloudRuntimeException("Creating snapshot failed due to volume:" + volume.getId() + " is associated with vm:" + userVm.getInstanceName() + " is in " + + userVm.getState().toString() + " state"); + } + + if(userVm.getHypervisorType() == HypervisorType.VMware || userVm.getHypervisorType() == HypervisorType.KVM) { + List activeSnapshots = _snapshotDao.listByInstanceId(volume.getInstanceId(), Snapshot.State.Creating, Snapshot.State.CreatedOnPrimary, Snapshot.State.BackingUp); + if(activeSnapshots.size() > 1) + throw new CloudRuntimeException("There is other active snapshot tasks on the instance to which the volume is attached, please try again later"); + } + + List activeVMSnapshots = _vmSnapshotDao.listByInstanceId(userVm.getId(), + VMSnapshot.State.Creating, VMSnapshot.State.Reverting, VMSnapshot.State.Expunging); + if (activeVMSnapshots.size() > 0) { + throw new CloudRuntimeException( + "There is other active vm snapshot tasks on the instance to which the volume is attached, please try again later"); + } + } + } + + return true; + } + + @Override + public SnapshotInfo takeSnapshot(VolumeInfo volume, Long snapshotId) { + + supportedByHypervisor(volume); + + SnapshotInfo snapshot = createSnapshotOnPrimary(volume, snapshotId); + return snapshot; + } + + @Override + public SnapshotInfo backupSnapshot(SnapshotInfo snapshot) { + SnapshotObject snapObj = (SnapshotObject)snapshot; + AsyncCallFuture future = new AsyncCallFuture(); + SnapshotResult result = new SnapshotResult(snapshot); + try { + + snapObj.processEvent(Snapshot.Event.BackupToSecondary); + + ZoneScope scope = new ZoneScope(snapshot.getDataCenterId()); + List stores = this.dataStoreMgr.getImageStores(scope); + if (stores.size() != 1) { + throw new CloudRuntimeException("find out more than one image stores"); + } + + DataStore imageStore = stores.get(0); + SnapshotInfo snapshotOnImageStore = (SnapshotInfo)imageStore.create(snapshot); + + snapshotOnImageStore.processEvent(Event.CreateOnlyRequested); + CopySnapshotContext context = new CopySnapshotContext(null, snapshot, + snapshotOnImageStore, future); + AsyncCallbackDispatcher caller = AsyncCallbackDispatcher + .create(this); + caller.setCallback( + caller.getTarget().copySnapshotAsyncCallback(null, null)) + .setContext(context); + this.motionSrv.copyAsync(snapshot, snapshotOnImageStore, caller); + } catch (Exception e) { + s_logger.debug("Failed to copy snapshot", e); + result.setResult("Failed to copy snapshot:" +e.toString()); + try { + snapObj.processEvent(Snapshot.Event.OperationFailed); + } catch (NoTransitionException e1) { + s_logger.debug("Failed to change state: " + e1.toString()); + } + future.complete(result); + } + + try { + SnapshotResult res = future.get(); + SnapshotInfo destSnapshot = res.snashot; + return destSnapshot; + } catch (InterruptedException e) { + s_logger.debug("failed copy snapshot", e); + throw new CloudRuntimeException("Failed to copy snapshot" , e); + } catch (ExecutionException e) { + s_logger.debug("Failed to copy snapshot", e); + throw new CloudRuntimeException("Failed to copy snapshot" , e); + } + + } + + protected Void copySnapshotAsyncCallback(AsyncCallbackDispatcher callback, + CopySnapshotContext context) { + CopyCommandResult result = callback.getResult(); + SnapshotInfo destSnapshot = context.destSnapshot; + SnapshotObject srcSnapshot = (SnapshotObject)context.srcSnapshot; + AsyncCallFuture future = context.future; + SnapshotResult snapResult = new SnapshotResult(destSnapshot); + if (result.isFailed()) { + snapResult.setResult(result.getResult()); + future.complete(snapResult); + return null; + } + + try { + BackupSnapshotAnswer answer = (BackupSnapshotAnswer)result.getAnswer(); + + DataObjectInStore dataInStore = objInStoreMgr.findObject(destSnapshot, destSnapshot.getDataStore()); + dataInStore.setInstallPath(answer.getBackupSnapshotName()); + objInStoreMgr.update(destSnapshot, Event.OperationSuccessed); + + srcSnapshot.processEvent(Snapshot.Event.OperationSucceeded); + snapResult = new SnapshotResult(this.snapshotfactory.getSnapshot(destSnapshot.getId())); + future.complete(snapResult); + } catch (Exception e) { + s_logger.debug("Failed to update snapshot state", e); + snapResult.setResult(e.toString()); + future.complete(snapResult); + } + return null; + } + + @DB + protected boolean destroySnapshotBackUp(SnapshotVO snapshot) { + DataStore store = objInStoreMgr.findStore(snapshot.getUuid(), DataObjectType.SNAPSHOT, DataStoreRole.Image); + if (store == null) { + s_logger.debug("Can't find snapshot" + snapshot.getId() + " backed up into image store"); + return false; + } + + try { + SnapshotInfo snapshotInfo = this.snapshotfactory.getSnapshot(snapshot.getId(), store); + snapshotInfo.processEvent(ObjectInDataStoreStateMachine.Event.DestroyRequested); + + AsyncCallFuture future = new AsyncCallFuture(); + DeleteSnapshotContext context = new DeleteSnapshotContext(null, + snapshotInfo, future); + AsyncCallbackDispatcher caller = AsyncCallbackDispatcher + .create(this); + caller.setCallback( + caller.getTarget().deleteSnapshotCallback(null, null)) + .setContext(context); + + store.getDriver().deleteAsync(snapshotInfo, caller); + + SnapshotResult result = future.get(); + if (result.isFailed()) { + s_logger.debug("Failed to delete snapsoht: " + result.getResult()); + } + return result.isSuccess(); + } catch (Exception e) { + s_logger.debug("Failed to delete snapshot", e); + return false; + } + } + + protected Void deleteSnapshotCallback(AsyncCallbackDispatcher callback, + DeleteSnapshotContext context) { + CommandResult result = callback.getResult(); + AsyncCallFuture future = context.future; + SnapshotInfo snapshot = context.snapshot; + if (result.isFailed()) { + s_logger.debug("delete snapshot failed" + result.getResult()); + snapshot.processEvent(ObjectInDataStoreStateMachine.Event.OperationFailed); + SnapshotResult res = new SnapshotResult(context.snapshot); + future.complete(res); + return null; + } + snapshot.processEvent(ObjectInDataStoreStateMachine.Event.OperationSuccessed); + SnapshotResult res = new SnapshotResult(context.snapshot); + future.complete(res); + return null; + } + + @Override + public boolean deleteSnapshot(SnapshotInfo snapInfo) { + Long snapshotId = snapInfo.getId(); + SnapshotObject snapshot = (SnapshotObject)snapInfo; + + if (!Snapshot.State.BackedUp.equals(snapshot.getState())) { + throw new InvalidParameterValueException("Can't delete snapshotshot " + snapshotId + " due to it is not in BackedUp Status"); + } + + if (s_logger.isDebugEnabled()) { + s_logger.debug("Calling deleteSnapshot for snapshotId: " + snapshotId); + } + SnapshotVO lastSnapshot = null; + if (snapshot.getBackupSnapshotId() != null) { + List snaps = _snapshotDao.listByBackupUuid(snapshot.getVolumeId(), snapshot.getBackupSnapshotId()); + if (snaps != null && snaps.size() > 1) { + snapshot.setBackupSnapshotId(null); + SnapshotVO snapshotVO = this._snapshotDao.findById(snapshotId); + _snapshotDao.update(snapshot.getId(), snapshotVO); + } + } + + _snapshotDao.remove(snapshotId); + + long lastId = snapshotId; + boolean destroy = false; + while (true) { + lastSnapshot = _snapshotDao.findNextSnapshot(lastId); + if (lastSnapshot == null) { + // if all snapshots after this snapshot in this chain are removed, remove those snapshots. + destroy = true; + break; + } + if (lastSnapshot.getRemoved() == null) { + // if there is one child not removed, then can not remove back up snapshot. + break; + } + lastId = lastSnapshot.getId(); + } + if (destroy) { + lastSnapshot = _snapshotDao.findByIdIncludingRemoved(lastId); + while (lastSnapshot.getRemoved() != null) { + String BackupSnapshotId = lastSnapshot.getBackupSnapshotId(); + if (BackupSnapshotId != null) { + List snaps = _snapshotDao.listByBackupUuid(lastSnapshot.getVolumeId(), BackupSnapshotId); + if (snaps != null && snaps.size() > 1) { + lastSnapshot.setBackupSnapshotId(null); + _snapshotDao.update(lastSnapshot.getId(), lastSnapshot); + } else { + if (destroySnapshotBackUp(lastSnapshot)) { + + } else { + s_logger.debug("Destroying snapshot backup failed " + lastSnapshot); + break; + } + } + } + lastId = lastSnapshot.getPrevSnapshotId(); + if (lastId == 0) { + break; + } + lastSnapshot = _snapshotDao.findByIdIncludingRemoved(lastId); + } + } + return true; + + } + + @Override + public boolean revertSnapshot(SnapshotInfo snapshot) { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/HypervisorBasedSnapshot.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/HypervisorBasedSnapshot.java deleted file mode 100644 index 7f18200cd3d..00000000000 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/HypervisorBasedSnapshot.java +++ /dev/null @@ -1,44 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package org.apache.cloudstack.storage.snapshot.strategy; - -import org.apache.cloudstack.storage.snapshot.SnapshotInfo; -import org.apache.cloudstack.storage.snapshot.SnapshotStrategy; -import org.springframework.stereotype.Component; - -@Component -public class HypervisorBasedSnapshot implements SnapshotStrategy { - - @Override - public boolean takeSnapshot(SnapshotInfo snapshot) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean revertSnapshot(SnapshotInfo snapshot) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean deleteSnapshot(SnapshotInfo snapshot) { - // TODO Auto-generated method stub - return false; - } - -} diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/StorageBasedSnapshot.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/StorageBasedSnapshot.java deleted file mode 100644 index fa9c5aeaa08..00000000000 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/StorageBasedSnapshot.java +++ /dev/null @@ -1,42 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package org.apache.cloudstack.storage.snapshot.strategy; - -import org.apache.cloudstack.storage.snapshot.SnapshotInfo; -import org.apache.cloudstack.storage.snapshot.SnapshotStrategy; - -public class StorageBasedSnapshot implements SnapshotStrategy { - - @Override - public boolean takeSnapshot(SnapshotInfo snapshot) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean revertSnapshot(SnapshotInfo snapshot) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean deleteSnapshot(SnapshotInfo snapshot) { - // TODO Auto-generated method stub - return false; - } - -} diff --git a/engine/storage/snapshot/test/resource/SnapshotManagerTestContext.xml b/engine/storage/snapshot/test/resource/SnapshotManagerTestContext.xml new file mode 100644 index 00000000000..d99c2e2dbac --- /dev/null +++ b/engine/storage/snapshot/test/resource/SnapshotManagerTestContext.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/engine/storage/snapshot/test/src/SnapshotDataFactoryTest.java b/engine/storage/snapshot/test/src/SnapshotDataFactoryTest.java new file mode 100644 index 00000000000..e722ab55c70 --- /dev/null +++ b/engine/storage/snapshot/test/src/SnapshotDataFactoryTest.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package src; + +import javax.inject.Inject; + +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.cloud.utils.component.ComponentContext; + +import junit.framework.TestCase; + +//@RunWith(SpringJUnit4ClassRunner.class) +//@ContextConfiguration(locations = "classpath:/SnapshotManagerTestContext.xml") +public class SnapshotDataFactoryTest extends TestCase { + //@Inject SnapshotDataFactory snapshotFactory; + + @Before + public void setup() throws Exception { + //ComponentContext.initComponentsLifeCycle(); + + } + + @Test + public void testGestSnapshot() { + //snapshotFactory.getSnapshot(snapshotId); + } + +} diff --git a/engine/storage/src/org/apache/cloudstack/storage/HypervsiorHostEndPointRpcServer.java b/engine/storage/src/org/apache/cloudstack/storage/HypervsiorHostEndPointRpcServer.java index b709991ee57..f441f39ddfa 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/HypervsiorHostEndPointRpcServer.java +++ b/engine/storage/src/org/apache/cloudstack/storage/HypervsiorHostEndPointRpcServer.java @@ -40,24 +40,24 @@ public class HypervsiorHostEndPointRpcServer implements HostEndpointRpcServer { private static final Logger s_logger = Logger.getLogger(HypervsiorHostEndPointRpcServer.class); @Inject - private RpcProvider _rpcProvider; + private RpcProvider rpcProvider; public HypervsiorHostEndPointRpcServer() { } public HypervsiorHostEndPointRpcServer(RpcProvider rpcProvider) { - _rpcProvider = rpcProvider; - _rpcProvider.registerRpcServiceEndpoint(RpcServiceDispatcher.getDispatcher(this)); + rpcProvider = rpcProvider; + rpcProvider.registerRpcServiceEndpoint(RpcServiceDispatcher.getDispatcher(this)); } @PostConstruct public void Initialize() { - _rpcProvider.registerRpcServiceEndpoint(RpcServiceDispatcher.getDispatcher(this)); + rpcProvider.registerRpcServiceEndpoint(RpcServiceDispatcher.getDispatcher(this)); } @Override public void sendCommandAsync(HypervisorHostEndPoint host, final Command command, final AsyncCompletionCallback callback) { - _rpcProvider.newCall(host.getHostAddr()).addCallbackListener(new RpcCallbackListener() { + rpcProvider.newCall(host.getHostAddr()).addCallbackListener(new RpcCallbackListener() { @Override public void onSuccess(Answer result) { callback.complete(result); diff --git a/server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java b/engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java similarity index 50% rename from server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java rename to engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java index 61b5e1f7752..6334ca7f2dc 100755 --- a/server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java +++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/AbstractStoragePoolAllocator.java @@ -14,48 +14,38 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.storage.allocator; +package org.apache.cloudstack.storage.allocator; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; -import java.util.Set; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; +import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator; +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.log4j.Logger; -import com.cloud.capacity.CapacityManager; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterVO; import com.cloud.dc.dao.ClusterDao; -import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeploymentPlan; import com.cloud.deploy.DeploymentPlanner.ExcludeList; -import com.cloud.host.Host; -import com.cloud.server.StatsCollector; +import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePool; -import com.cloud.storage.StoragePoolStatus; -import com.cloud.storage.StoragePoolVO; -import com.cloud.storage.VMTemplateStoragePoolVO; -import com.cloud.storage.VMTemplateStorageResourceAssoc; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateVO; import com.cloud.storage.Volume; import com.cloud.storage.Volume.Type; -import com.cloud.storage.dao.StoragePoolDao; -import com.cloud.storage.dao.StoragePoolHostDao; -import com.cloud.storage.dao.VMTemplateDao; -import com.cloud.storage.dao.VMTemplateHostDao; -import com.cloud.storage.dao.VMTemplatePoolDao; +import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.VolumeDao; -import com.cloud.storage.swift.SwiftManager; -import com.cloud.template.TemplateManager; +import com.cloud.user.Account; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.AdapterBase; import com.cloud.vm.DiskProfile; @@ -64,22 +54,19 @@ import com.cloud.vm.VirtualMachineProfile; public abstract class AbstractStoragePoolAllocator extends AdapterBase implements StoragePoolAllocator { private static final Logger s_logger = Logger.getLogger(AbstractStoragePoolAllocator.class); - @Inject TemplateManager _tmpltMgr; - @Inject StorageManager _storageMgr; - @Inject StoragePoolDao _storagePoolDao; - @Inject VMTemplateHostDao _templateHostDao; - @Inject VMTemplatePoolDao _templatePoolDao; - @Inject VMTemplateDao _templateDao; + @Inject StorageManager storageMgr; + protected @Inject PrimaryDataStoreDao _storagePoolDao; @Inject VolumeDao _volumeDao; - @Inject StoragePoolHostDao _poolHostDao; @Inject ConfigurationDao _configDao; @Inject ClusterDao _clusterDao; - @Inject SwiftManager _swiftMgr; - @Inject CapacityManager _capacityMgr; + protected @Inject DataStoreManager dataStoreMgr; protected BigDecimal _storageOverprovisioningFactor = new BigDecimal(1); long _extraBytesPerVolume = 0; Random _rand; boolean _dontMatter; + protected String _allocationAlgorithm = "random"; + @Inject + DiskOfferingDao _diskOfferingDao; @Override public boolean configure(String name, Map params) throws ConfigurationException { @@ -93,53 +80,86 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement _extraBytesPerVolume = 0; _rand = new Random(System.currentTimeMillis()); - + _dontMatter = Boolean.parseBoolean(configs.get("storage.overwrite.provisioning")); - + + String allocationAlgorithm = configs.get("vm.allocation.algorithm"); + if (allocationAlgorithm != null) { + _allocationAlgorithm = allocationAlgorithm; + } + return true; } + + protected abstract List select(DiskProfile dskCh, VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo); - abstract boolean allocatorIsCorrectType(DiskProfile dskCh); + @Override + public + List allocateToPool(DiskProfile dskCh, VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo) { + List pools = select(dskCh, vmProfile, plan, avoid, returnUpTo); + return reOrder(pools, vmProfile, plan); + } - protected boolean templateAvailable(long templateId, long poolId) { - VMTemplateStorageResourceAssoc thvo = _templatePoolDao.findByPoolTemplate(poolId, templateId); - if (thvo != null) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Template id : " + templateId + " status : " + thvo.getDownloadState().toString()); - } - return (thvo.getDownloadState()==Status.DOWNLOADED); - } else { - return false; + protected List reorderPoolsByNumberOfVolumes(DeploymentPlan plan, List pools, Account account) { + if(account == null){ + return pools; + } + long dcId = plan.getDataCenterId(); + Long podId = plan.getPodId(); + Long clusterId = plan.getClusterId(); + + List poolIdsByVolCount = _volumeDao.listPoolIdsByVolumeCount(dcId, podId, clusterId, account.getAccountId()); + if (s_logger.isDebugEnabled()) { + s_logger.debug("List of pools in ascending order of number of volumes for account id: "+ account.getAccountId() + " is: "+ poolIdsByVolCount); + } + + //now filter the given list of Pools by this ordered list + Map poolMap = new HashMap(); + for (StoragePool pool : pools) { + poolMap.put(pool.getId(), pool); + } + List matchingPoolIds = new ArrayList(poolMap.keySet()); + + poolIdsByVolCount.retainAll(matchingPoolIds); + + List reorderedPools = new ArrayList(); + for(Long id: poolIdsByVolCount){ + reorderedPools.add(poolMap.get(id)); + } + + return reorderedPools; + } + + protected List reOrder(List pools, + VirtualMachineProfile vmProfile, + DeploymentPlan plan) { + Account account = null; + if(vmProfile.getVirtualMachine() != null){ + account = vmProfile.getOwner(); } + + if(_allocationAlgorithm.equals("random") || _allocationAlgorithm.equals("userconcentratedpod_random") || (account == null)) { + // Shuffle this so that we don't check the pools in the same order. + Collections.shuffle(pools); + }else if(_allocationAlgorithm.equals("userdispersing")){ + pools = reorderPoolsByNumberOfVolumes(plan, pools, account); + } + return pools; } - protected boolean localStorageAllocationNeeded(DiskProfile dskCh) { - return dskCh.useLocalStorage(); - } - - protected boolean poolIsCorrectType(DiskProfile dskCh, StoragePool pool) { - boolean localStorageAllocationNeeded = localStorageAllocationNeeded(dskCh); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Is localStorageAllocationNeeded? "+ localStorageAllocationNeeded); - s_logger.debug("Is storage pool shared? "+ pool.getPoolType().isShared()); - } - - return ((!localStorageAllocationNeeded && pool.getPoolType().isShared()) || (localStorageAllocationNeeded && !pool.getPoolType().isShared())); - } - - protected boolean checkPool(ExcludeList avoid, StoragePoolVO pool, DiskProfile dskCh, VMTemplateVO template, List templatesInPool, - StatsCollector sc, DeploymentPlan plan) { + protected boolean filter(ExcludeList avoid, StoragePool pool, DiskProfile dskCh, + DeploymentPlan plan) { if (s_logger.isDebugEnabled()) { s_logger.debug("Checking if storage pool is suitable, name: " + pool.getName()+ " ,poolId: "+ pool.getId()); } - if (avoid.shouldAvoid(pool)) { if (s_logger.isDebugEnabled()) { s_logger.debug("StoragePool is in avoid set, skipping this pool"); } return false; } + if(dskCh.getType().equals(Type.ROOT) && pool.getPoolType().equals(StoragePoolType.Iscsi)){ if (s_logger.isDebugEnabled()) { s_logger.debug("Disk needed for ROOT volume, but StoragePoolType is Iscsi, skipping this and trying other available pools"); @@ -147,26 +167,13 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement return false; } - //by default, all pools are up when successfully added - //don't return the pool if not up (if in maintenance/prepareformaintenance/errorinmaintenance) - if(!pool.getStatus().equals(StoragePoolStatus.Up)){ - if (s_logger.isDebugEnabled()) { - s_logger.debug("StoragePool status is not UP, status is: "+pool.getStatus().name()+", skipping this pool"); - } - return false; + DiskOfferingVO diskOffering = _diskOfferingDao.findById(dskCh.getDiskOfferingId()); + if (diskOffering.getSystemUse() && pool.getPoolType() == StoragePoolType.RBD) { + s_logger.debug("Skipping RBD pool " + pool.getName() + " as a suitable pool. RBD is not supported for System VM's"); + return false; } + - // Check that the pool type is correct - if (!poolIsCorrectType(dskCh, pool)) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("StoragePool is not of correct type, skipping this pool"); - } - return false; - } - - /*hypervisor type is correct*/ - // TODO : when creating a standalone volume, offering is passed as NULL, need to - // refine the logic of checking hypervisorType based on offering info Long clusterId = pool.getClusterId(); ClusterVO cluster = _clusterDao.findById(clusterId); if (!(cluster.getHypervisorType() == dskCh.getHypersorType())) { @@ -176,32 +183,10 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement return false; } - // check capacity Volume volume = _volumeDao.findById(dskCh.getVolumeId()); List requestVolumes = new ArrayList(); requestVolumes.add(volume); - return _storageMgr.storagePoolHasEnoughSpace(requestVolumes, pool); + return storageMgr.storagePoolHasEnoughSpace(requestVolumes, pool); } - - - - @Override - public String chooseStorageIp(VirtualMachine vm, Host host, Host storage) { - return storage.getStorageIpAddress(); - } - - - @Override - public List allocateToPool(DiskProfile dskCh, VirtualMachineProfile vmProfile, long dcId, long podId, Long clusterId, Long hostId, Set avoids, int returnUpTo) { - - ExcludeList avoid = new ExcludeList(); - for(StoragePool pool : avoids){ - avoid.addPool(pool.getId()); - } - - DataCenterDeployment plan = new DataCenterDeployment(dcId, podId, clusterId, hostId, null, null); - return allocateToPool(dskCh, vmProfile, plan, avoid, returnUpTo); - } - } diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java b/engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java new file mode 100644 index 00000000000..747e2586fed --- /dev/null +++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/ClusterScopeStoragePoolAllocator.java @@ -0,0 +1,105 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.storage.allocator; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.inject.Inject; +import javax.naming.ConfigurationException; + +import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + +import com.cloud.deploy.DeploymentPlan; +import com.cloud.deploy.DeploymentPlanner.ExcludeList; +import com.cloud.offering.ServiceOffering; +import com.cloud.storage.StoragePool; +import com.cloud.storage.dao.DiskOfferingDao; +import com.cloud.vm.DiskProfile; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; + +@Component +@Local(value=StoragePoolAllocator.class) +public class ClusterScopeStoragePoolAllocator extends AbstractStoragePoolAllocator { + private static final Logger s_logger = Logger.getLogger(ClusterScopeStoragePoolAllocator.class); + protected String _allocationAlgorithm = "random"; + + @Inject + DiskOfferingDao _diskOfferingDao; + + @Override + protected List select(DiskProfile dskCh, VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo) { + + List suitablePools = new ArrayList(); + + long dcId = plan.getDataCenterId(); + Long podId = plan.getPodId(); + Long clusterId = plan.getClusterId(); + + if(dskCh.getTags() != null && dskCh.getTags().length != 0){ + s_logger.debug("Looking for pools in dc: " + dcId + " pod:" + podId + " cluster:" + clusterId + " having tags:" + Arrays.toString(dskCh.getTags())); + }else{ + s_logger.debug("Looking for pools in dc: " + dcId + " pod:" + podId + " cluster:" + clusterId); + } + + List pools = _storagePoolDao.findPoolsByTags(dcId, podId, clusterId, dskCh.getTags()); + if (pools.size() == 0) { + if (s_logger.isDebugEnabled()) { + String storageType = dskCh.useLocalStorage() ? ServiceOffering.StorageType.local.toString() : ServiceOffering.StorageType.shared.toString(); + s_logger.debug("No storage pools available for " + storageType + " volume allocation, returning"); + } + return suitablePools; + } + + for (StoragePoolVO pool: pools) { + if(suitablePools.size() == returnUpTo){ + break; + } + StoragePool pol = (StoragePool)this.dataStoreMgr.getPrimaryDataStore(pool.getId()); + if (filter(avoid, pol, dskCh, plan)) { + suitablePools.add(pol); + } + } + + if (s_logger.isDebugEnabled()) { + s_logger.debug("FirstFitStoragePoolAllocator returning "+suitablePools.size() +" suitable storage pools"); + } + + return suitablePools; + } + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + super.configure(name, params); + + if (_configDao != null) { + Map configs = _configDao.getConfiguration(params); + String allocationAlgorithm = configs.get("vm.allocation.algorithm"); + if (allocationAlgorithm != null) { + _allocationAlgorithm = allocationAlgorithm; + } + } + return true; + } +} diff --git a/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java b/engine/storage/src/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java similarity index 82% rename from server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java rename to engine/storage/src/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java index 4eeae280d8b..91bc25c715d 100644 --- a/server/src/com/cloud/storage/allocator/GarbageCollectingStoragePoolAllocator.java +++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/GarbageCollectingStoragePoolAllocator.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.storage.allocator; +package org.apache.cloudstack.storage.allocator; import java.util.List; import java.util.Map; @@ -23,8 +23,8 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator; import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.deploy.DeploymentPlan; @@ -36,32 +36,18 @@ import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; -@Component @Local(value=StoragePoolAllocator.class) public class GarbageCollectingStoragePoolAllocator extends AbstractStoragePoolAllocator { private static final Logger s_logger = Logger.getLogger(GarbageCollectingStoragePoolAllocator.class); StoragePoolAllocator _firstFitStoragePoolAllocator; StoragePoolAllocator _localStoragePoolAllocator; - @Inject StorageManager _storageMgr; + @Inject StorageManager storageMgr; @Inject ConfigurationDao _configDao; boolean _storagePoolCleanupEnabled; @Override - public boolean allocatorIsCorrectType(DiskProfile dskCh) { - return true; - } - - public Integer getStorageOverprovisioningFactor() { - return null; - } - - public Long getExtraBytesPerVolume() { - return null; - } - - @Override - public List allocateToPool(DiskProfile dskCh, VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo) { + public List select(DiskProfile dskCh, VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo) { if (!_storagePoolCleanupEnabled) { s_logger.debug("Storage pool cleanup is not enabled, so GarbageCollectingStoragePoolAllocator is being skipped."); @@ -69,10 +55,10 @@ public class GarbageCollectingStoragePoolAllocator extends AbstractStoragePoolAl } // Clean up all storage pools - _storageMgr.cleanupStorage(false); + storageMgr.cleanupStorage(false); // Determine what allocator to use StoragePoolAllocator allocator; - if (localStorageAllocationNeeded(dskCh)) { + if (dskCh.useLocalStorage()) { allocator = _localStoragePoolAllocator; } else { allocator = _firstFitStoragePoolAllocator; @@ -88,7 +74,7 @@ public class GarbageCollectingStoragePoolAllocator extends AbstractStoragePoolAl public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); - _firstFitStoragePoolAllocator = ComponentContext.inject(FirstFitStoragePoolAllocator.class); + _firstFitStoragePoolAllocator = ComponentContext.inject(ClusterScopeStoragePoolAllocator.class); _firstFitStoragePoolAllocator.configure("GCFirstFitStoragePoolAllocator", params); _localStoragePoolAllocator = ComponentContext.inject(LocalStoragePoolAllocator.class); _localStoragePoolAllocator.configure("GCLocalStoragePoolAllocator", params); diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java b/engine/storage/src/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java new file mode 100644 index 00000000000..a8d5173cebe --- /dev/null +++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/LocalStoragePoolAllocator.java @@ -0,0 +1,126 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.storage.allocator; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.inject.Inject; +import javax.naming.ConfigurationException; + +import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + +import com.cloud.capacity.dao.CapacityDao; +import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.deploy.DeploymentPlan; +import com.cloud.deploy.DeploymentPlanner.ExcludeList; +import com.cloud.service.dao.ServiceOfferingDao; +import com.cloud.storage.StoragePool; +import com.cloud.storage.StoragePoolHostVO; +import com.cloud.storage.Volume; +import com.cloud.storage.dao.StoragePoolHostDao; +import com.cloud.utils.NumbersUtil; +import com.cloud.vm.DiskProfile; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.dao.UserVmDao; +import com.cloud.vm.dao.VMInstanceDao; + +@Component +@Local(value = StoragePoolAllocator.class) +public class LocalStoragePoolAllocator extends AbstractStoragePoolAllocator { + private static final Logger s_logger = Logger.getLogger(LocalStoragePoolAllocator.class); + + @Inject + StoragePoolHostDao _poolHostDao; + @Inject + VMInstanceDao _vmInstanceDao; + @Inject + UserVmDao _vmDao; + @Inject + ServiceOfferingDao _offeringDao; + @Inject + CapacityDao _capacityDao; + @Inject + ConfigurationDao _configDao; + + @Override + protected List select(DiskProfile dskCh, VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo) { + + List suitablePools = new ArrayList(); + + + if (s_logger.isDebugEnabled()) { + s_logger.debug("LocalStoragePoolAllocator trying to find storage pool to fit the vm"); + } + + // data disk and host identified from deploying vm (attach volume case) + if (dskCh.getType() == Volume.Type.DATADISK && plan.getHostId() != null) { + List hostPools = _poolHostDao.listByHostId(plan.getHostId()); + for (StoragePoolHostVO hostPool: hostPools) { + StoragePoolVO pool = _storagePoolDao.findById(hostPool.getPoolId()); + if (pool != null && pool.isLocal()) { + StoragePool pol = (StoragePool)this.dataStoreMgr.getPrimaryDataStore(pool.getId()); + if (filter(avoid, pol, dskCh, plan)) { + s_logger.debug("Found suitable local storage pool " + pool.getId() + ", adding to list"); + suitablePools.add(pol); + } + } + + if (suitablePools.size() == returnUpTo) { + break; + } + } + } else { + List availablePools = _storagePoolDao.findLocalStoragePoolsByTags(plan.getDataCenterId(), plan.getPodId(), plan.getClusterId(), dskCh.getTags()); + for (StoragePoolVO pool : availablePools) { + if (suitablePools.size() == returnUpTo) { + break; + } + StoragePool pol = (StoragePool)this.dataStoreMgr.getPrimaryDataStore(pool.getId()); + if (filter(avoid, pol, dskCh, plan)) { + suitablePools.add(pol); + } + } + } + + if (s_logger.isDebugEnabled()) { + s_logger.debug("LocalStoragePoolAllocator returning " + suitablePools.size() + " suitable storage pools"); + } + + return suitablePools; + } + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + super.configure(name, params); + + _storageOverprovisioningFactor = new BigDecimal(1); + _extraBytesPerVolume = NumbersUtil.parseLong((String) params.get("extra.bytes.per.volume"), 50 * 1024L * 1024L); + + return true; + } + + public LocalStoragePoolAllocator() { + } +} diff --git a/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java b/engine/storage/src/org/apache/cloudstack/storage/allocator/UseLocalForRootAllocator.java similarity index 74% rename from server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java rename to engine/storage/src/org/apache/cloudstack/storage/allocator/UseLocalForRootAllocator.java index 2c19406fef6..4663b12e97e 100644 --- a/server/src/com/cloud/storage/allocator/UseLocalForRootAllocator.java +++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/UseLocalForRootAllocator.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.storage.allocator; +package org.apache.cloudstack.storage.allocator; import java.util.List; import java.util.Map; @@ -23,23 +23,17 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; -import org.springframework.stereotype.Component; +import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator; -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.deploy.DeploymentPlan; import com.cloud.deploy.DeploymentPlanner.ExcludeList; -import com.cloud.host.Host; import com.cloud.storage.StoragePool; -import com.cloud.storage.Volume.Type; - import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; -@Component @Local(value=StoragePoolAllocator.class) public class UseLocalForRootAllocator extends LocalStoragePoolAllocator implements StoragePoolAllocator { @@ -55,29 +49,13 @@ public class UseLocalForRootAllocator extends LocalStoragePoolAllocator implemen return super.allocateToPool(dskCh, vmProfile, plan, avoid, returnUpTo); } - - @Override - public String chooseStorageIp(VirtualMachine vm, Host host, Host storage) { - return null; - } @Override public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); return true; } - - @Override - protected boolean localStorageAllocationNeeded(DiskProfile dskCh) { - if (dskCh.getType() == Type.ROOT) { - return true; - } else if (dskCh.getType() == Type.DATADISK) { - return false; - } else { - return super.localStorageAllocationNeeded(dskCh); - } - } - + protected UseLocalForRootAllocator() { } } diff --git a/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java b/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java new file mode 100644 index 00000000000..c45f8a822a9 --- /dev/null +++ b/engine/storage/src/org/apache/cloudstack/storage/allocator/ZoneWideStoragePoolAllocator.java @@ -0,0 +1,80 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.storage.allocator; + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; + +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + +import com.cloud.deploy.DeploymentPlan; +import com.cloud.deploy.DeploymentPlanner.ExcludeList; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.storage.StoragePool; +import com.cloud.storage.Volume; +import com.cloud.vm.DiskProfile; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; + +@Component +public class ZoneWideStoragePoolAllocator extends AbstractStoragePoolAllocator { + private static final Logger s_logger = Logger.getLogger(ZoneWideStoragePoolAllocator.class); + @Inject PrimaryDataStoreDao _storagePoolDao; + @Inject DataStoreManager dataStoreMgr; + + @Override + protected boolean filter(ExcludeList avoid, StoragePool pool, DiskProfile dskCh, + DeploymentPlan plan) { + Volume volume = _volumeDao.findById(dskCh.getVolumeId()); + List requestVolumes = new ArrayList(); + requestVolumes.add(volume); + return storageMgr.storagePoolHasEnoughSpace(requestVolumes, pool); + } + + @Override + protected List select(DiskProfile dskCh, + VirtualMachineProfile vmProfile, + DeploymentPlan plan, ExcludeList avoid, int returnUpTo) { + List suitablePools = new ArrayList(); + HypervisorType hypervisor = vmProfile.getHypervisorType(); + if (hypervisor != null) { + if (hypervisor != HypervisorType.KVM) { + s_logger.debug("Only kvm supports zone wide storage"); + return suitablePools; + } + } + + List storagePools = _storagePoolDao.findZoneWideStoragePoolsByTags(plan.getDataCenterId(), dskCh.getTags()); + + for (StoragePoolVO storage : storagePools) { + if (suitablePools.size() == returnUpTo) { + break; + } + StoragePool pol = (StoragePool)this.dataStoreMgr.getPrimaryDataStore(storage.getId()); + if (filter(avoid, pol, dskCh, plan)) { + suitablePools.add(pol); + } + } + return suitablePools; + } +} diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java index 657d32c7877..218f9013a17 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java @@ -24,14 +24,14 @@ import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult; import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult; import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event; import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher; import org.apache.cloudstack.framework.async.AsyncCompletionCallback; import org.apache.cloudstack.framework.async.AsyncRpcConext; -import org.apache.cloudstack.storage.db.ObjectInDataStoreVO; import org.apache.cloudstack.storage.motion.DataMotionService; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -52,7 +52,7 @@ public class DataObjectManagerImpl implements DataObjectManager { protected DataObject waitingForCreated(DataObject dataObj, DataStore dataStore) { long retries = this.waitingRetries; - ObjectInDataStoreVO obj = null; + DataObjectInStore obj = null; do { try { Thread.sleep(waitingTime); @@ -61,8 +61,8 @@ public class DataObjectManagerImpl implements DataObjectManager { throw new CloudRuntimeException("sleep interrupted", e); } - obj = objectInDataStoreMgr.findObject(dataObj.getId(), - dataObj.getType(), dataStore.getId(), dataStore.getRole()); + obj = objectInDataStoreMgr.findObject(dataObj, + dataStore); if (obj == null) { s_logger.debug("can't find object in db, maybe it's cleaned up already, exit waiting"); break; @@ -92,11 +92,10 @@ public class DataObjectManagerImpl implements DataObjectManager { } @Override - public void createAsync(DataObject data, DataStore store, + public void createAsync(DataObject data, DataStore store, AsyncCompletionCallback callback, boolean noCopy) { - ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject( - data.getId(), data.getType(), store.getId(), - store.getRole()); + DataObjectInStore obj = objectInDataStoreMgr.findObject( + data, store); DataObject objInStore = null; boolean freshNewTemplate = false; if (obj == null) { @@ -105,8 +104,8 @@ public class DataObjectManagerImpl implements DataObjectManager { data, store); freshNewTemplate = true; } catch (Throwable e) { - obj = objectInDataStoreMgr.findObject(data.getId(), - data.getType(), store.getId(), store.getRole()); + obj = objectInDataStoreMgr.findObject(data, + store); if (obj == null) { CreateCmdResult result = new CreateCmdResult( null, null); @@ -184,20 +183,12 @@ public class DataObjectManagerImpl implements DataObjectManager { return null; } - ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject( - objInStrore.getId(), objInStrore - .getType(), objInStrore.getDataStore() - .getId(), objInStrore.getDataStore() - .getRole()); - - obj.setInstallPath(result.getPath()); - obj.setSize(result.getSize()); try { - objectInDataStoreMgr.update(obj, + objectInDataStoreMgr.update(objInStrore, ObjectInDataStoreStateMachine.Event.OperationSuccessed); } catch (NoTransitionException e) { try { - objectInDataStoreMgr.update(obj, + objectInDataStoreMgr.update(objInStrore, ObjectInDataStoreStateMachine.Event.OperationFailed); } catch (NoTransitionException e1) { s_logger.debug("failed to change state", e1); @@ -259,14 +250,10 @@ public class DataObjectManagerImpl implements DataObjectManager { CopyContext context) { CopyCommandResult result = callback.getResult(); DataObject destObj = context.destObj; - ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject( - destObj.getId(), destObj - .getType(), destObj.getDataStore() - .getId(), destObj.getDataStore() - .getRole()); + if (result.isFailed()) { try { - objectInDataStoreMgr.update(obj, Event.OperationFailed); + objectInDataStoreMgr.update(destObj, Event.OperationFailed); } catch (NoTransitionException e) { s_logger.debug("Failed to update copying state", e); } @@ -276,10 +263,8 @@ public class DataObjectManagerImpl implements DataObjectManager { context.getParentCallback().complete(res); } - obj.setInstallPath(result.getPath()); - try { - objectInDataStoreMgr.update(obj, + objectInDataStoreMgr.update(destObj, ObjectInDataStoreStateMachine.Event.OperationSuccessed); } catch (NoTransitionException e) { s_logger.debug("Failed to update copying state: ", e); @@ -311,11 +296,8 @@ public class DataObjectManagerImpl implements DataObjectManager { @Override public void deleteAsync(DataObject data, AsyncCompletionCallback callback) { - ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject( - data.getId(), data.getType(), data.getDataStore().getId(), - data.getDataStore().getRole()); try { - objectInDataStoreMgr.update(obj, Event.DestroyRequested); + objectInDataStoreMgr.update(data, Event.DestroyRequested); } catch (NoTransitionException e) { s_logger.debug("destroy failed", e); CreateCmdResult res = new CreateCmdResult( @@ -338,23 +320,18 @@ public class DataObjectManagerImpl implements DataObjectManager { protected Void deleteAsynCallback(AsyncCallbackDispatcher callback, DeleteContext context) { DataObject destObj = context.obj; - ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject( - destObj.getId(), destObj - .getType(), destObj.getDataStore() - .getId(), destObj.getDataStore() - .getRole()); - + CommandResult res = callback.getResult(); if (res.isFailed()) { try { - objectInDataStoreMgr.update(obj, Event.OperationFailed); + objectInDataStoreMgr.update(destObj, Event.OperationFailed); } catch (NoTransitionException e) { s_logger.debug("delete failed", e); } } else { try { - objectInDataStoreMgr.update(obj, Event.OperationSuccessed); + objectInDataStoreMgr.update(destObj, Event.OperationSuccessed); } catch (NoTransitionException e) { s_logger.debug("delete failed", e); } @@ -366,9 +343,8 @@ public class DataObjectManagerImpl implements DataObjectManager { @Override public DataObject createInternalStateOnly(DataObject data, DataStore store) { - ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject( - data.getId(), data.getType(), store.getId(), - store.getRole()); + DataObjectInStore obj = objectInDataStoreMgr.findObject( + data, store); DataObject objInStore = null; if (obj == null) { objInStore = objectInDataStoreMgr.create( @@ -391,12 +367,6 @@ public class DataObjectManagerImpl implements DataObjectManager { @Override public void update(DataObject data, String path, Long size) { - ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject( - data.getId(), data.getType(), data.getDataStore().getId(), - data.getDataStore().getRole()); - - obj.setInstallPath(path); - obj.setSize(size); - objectInDataStoreMgr.update(obj); + throw new CloudRuntimeException("not implemented"); } } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java index f857ac5db1a..a2fd08d1e8f 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java @@ -18,12 +18,15 @@ */ package org.apache.cloudstack.storage.datastore; +import java.util.List; import java.util.Map; import javax.inject.Inject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; +import org.apache.cloudstack.engine.subsystem.api.storage.Scope; import org.apache.cloudstack.storage.image.datastore.ImageDataStoreManager; import org.springframework.stereotype.Component; @@ -50,5 +53,22 @@ public class DataStoreManagerImpl implements DataStoreManager { String providerUuid) { return null; } + @Override + public DataStore getDataStore(String uuid, DataStoreRole role) { + if (role == DataStoreRole.Primary) { + return primaryStorMgr.getPrimaryDataStore(uuid); + } else if (role == DataStoreRole.Image) { + return imageDataStoreMgr.getImageDataStore(uuid); + } + throw new CloudRuntimeException("un recognized type" + role); + } + @Override + public List getImageStores(Scope scope) { + return imageDataStoreMgr.getList(); + } + @Override + public DataStore getPrimaryDataStore(long storeId) { + return primaryStorMgr.getPrimaryDataStore(storeId); + } } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java index e707de6b8bd..d170f5c707a 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java @@ -17,26 +17,20 @@ package org.apache.cloudstack.storage.datastore; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; -import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; -import org.apache.cloudstack.storage.db.ObjectInDataStoreVO; -import org.apache.cloudstack.storage.snapshot.SnapshotInfo; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event; import com.cloud.utils.fsm.NoTransitionException; public interface ObjectInDataStoreManager { public DataObject create(DataObject template, DataStore dataStore); - public VolumeInfo create(VolumeInfo volume, DataStore dataStore); - public SnapshotInfo create(SnapshotInfo snapshot, DataStore dataStore); - public ObjectInDataStoreVO findObject(long objectId, DataObjectType type, - long dataStoreId, DataStoreRole role); public DataObject get(DataObject dataObj, DataStore store); public boolean update(DataObject vo, Event event) throws NoTransitionException; - boolean update(ObjectInDataStoreVO obj, Event event) - throws NoTransitionException; - - boolean update(ObjectInDataStoreVO obj); + DataObjectInStore findObject(String uuid, DataObjectType type, + String dataStoreUuid, DataStoreRole role); + DataObjectInStore findObject(DataObject obj, DataStore store); + DataStore findStore(String objUuid, DataObjectType type, DataStoreRole role); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java index 7eb4932348f..87ba1d216c5 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java @@ -19,19 +19,25 @@ package org.apache.cloudstack.storage.datastore; import javax.inject.Inject; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; -import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.ImageDataFactory; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory; import org.apache.cloudstack.storage.db.ObjectInDataStoreDao; import org.apache.cloudstack.storage.db.ObjectInDataStoreVO; -import org.apache.cloudstack.storage.image.ImageDataFactory; -import org.apache.cloudstack.storage.snapshot.SnapshotInfo; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.State; +import org.apache.log4j.Logger; import org.springframework.stereotype.Component; +import com.cloud.storage.VMTemplateStoragePoolVO; +import com.cloud.storage.dao.VMTemplateHostDao; +import com.cloud.storage.dao.VMTemplatePoolDao; +import com.cloud.storage.dao.VolumeHostDao; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.db.SearchCriteria2; import com.cloud.utils.db.SearchCriteriaService; @@ -41,16 +47,28 @@ import com.cloud.utils.fsm.StateMachine2; @Component public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager { + private static final Logger s_logger = Logger + .getLogger(ObjectInDataStoreManagerImpl.class); @Inject ImageDataFactory imageFactory; @Inject + DataStoreManager storeMgr; + @Inject VolumeDataFactory volumeFactory; @Inject ObjectInDataStoreDao objectDataStoreDao; - protected StateMachine2 stateMachines; + @Inject + VolumeHostDao volumeHostDao; + @Inject + VMTemplateHostDao templateHostDao; + @Inject + VMTemplatePoolDao templatePoolDao; + @Inject + SnapshotDataFactory snapshotFactory; + protected StateMachine2 stateMachines; public ObjectInDataStoreManagerImpl() { - stateMachines = new StateMachine2(); + stateMachines = new StateMachine2(); stateMachines.addTransition(State.Allocated, Event.CreateRequested, State.Creating); stateMachines.addTransition(State.Creating, Event.OperationSuccessed, @@ -76,101 +94,122 @@ public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager { stateMachines.addTransition(State.Allocated, Event.CreateOnlyRequested, State.Creating2); stateMachines.addTransition(State.Creating2, Event.OperationFailed, - State.Failed); + State.Allocated); stateMachines.addTransition(State.Creating2, Event.OperationSuccessed, State.Ready); } @Override public DataObject create(DataObject obj, DataStore dataStore) { - - ObjectInDataStoreVO vo = new ObjectInDataStoreVO(); - vo.setDataStoreId(dataStore.getId()); - vo.setDataStoreRole(dataStore.getRole()); - vo.setObjectId(obj.getId()); - vo.setSize(obj.getSize()); - - vo.setObjectType(obj.getType()); - vo = objectDataStoreDao.persist(vo); + if (obj.getType() == DataObjectType.TEMPLATE && dataStore.getRole() == DataStoreRole.Primary) { + VMTemplateStoragePoolVO vo = new VMTemplateStoragePoolVO(dataStore.getId(), obj.getId()); + vo = templatePoolDao.persist(vo); + } else { + ObjectInDataStoreVO vo = new ObjectInDataStoreVO(); + vo.setDataStoreRole(dataStore.getRole()); + vo.setDataStoreUuid(dataStore.getUuid()); + vo.setObjectType(obj.getType()); + vo.setObjectUuid(obj.getUuid()); + vo = objectDataStoreDao.persist(vo); + } if (obj.getType() == DataObjectType.TEMPLATE) { - return imageFactory.getTemplate(obj.getId(), dataStore); + return imageFactory.getTemplate(obj, dataStore); } else if (obj.getType() == DataObjectType.VOLUME) { - return volumeFactory.getVolume(obj.getId(), dataStore); + return volumeFactory.getVolume(obj, dataStore); + } else if (obj.getType() == DataObjectType.SNAPSHOT) { + return snapshotFactory.getSnapshot(obj, dataStore); } throw new CloudRuntimeException("unknown type"); } - - @Override - public VolumeInfo create(VolumeInfo volume, DataStore dataStore) { - ObjectInDataStoreVO vo = new ObjectInDataStoreVO(); - vo.setDataStoreId(dataStore.getId()); - vo.setDataStoreRole(dataStore.getRole()); - vo.setObjectId(volume.getId()); - vo.setObjectType(volume.getType()); - vo = objectDataStoreDao.persist(vo); - - return volumeFactory.getVolume(volume.getId(), dataStore); - } - - @Override - public SnapshotInfo create(SnapshotInfo snapshot, DataStore dataStore) { - // TODO Auto-generated method stub - return null; - } - - @Override - public ObjectInDataStoreVO findObject(long objectId, DataObjectType type, - long dataStoreId, DataStoreRole role) { - SearchCriteriaService sc = SearchCriteria2 - .create(ObjectInDataStoreVO.class); - sc.addAnd(sc.getEntity().getObjectId(), Op.EQ, objectId); - sc.addAnd(sc.getEntity().getDataStoreId(), Op.EQ, dataStoreId); - sc.addAnd(sc.getEntity().getObjectType(), Op.EQ, type); - sc.addAnd(sc.getEntity().getDataStoreRole(), Op.EQ, role); - sc.addAnd(sc.getEntity().getState(), Op.NIN, - ObjectInDataStoreStateMachine.State.Destroyed, - ObjectInDataStoreStateMachine.State.Failed); - ObjectInDataStoreVO objectStoreVO = sc.find(); - return objectStoreVO; - - } - + @Override public boolean update(DataObject data, Event event) throws NoTransitionException { - ObjectInDataStoreVO obj = this.findObject(data.getId(), data.getType(), - data.getDataStore().getId(), data.getDataStore().getRole()); + DataObjectInStore obj = this.findObject(data, data.getDataStore()); if (obj == null) { throw new CloudRuntimeException( "can't find mapping in ObjectInDataStore table for: " + data); } - return this.stateMachines.transitTo(obj, event, null, - objectDataStoreDao); - - } - - @Override - public boolean update(ObjectInDataStoreVO obj, Event event) - throws NoTransitionException { - return this.stateMachines.transitTo(obj, event, null, - objectDataStoreDao); - + + if (data.getType() == DataObjectType.TEMPLATE && data.getDataStore().getRole() == DataStoreRole.Primary) { + try { + this.stateMachines.transitTo(obj, event, null, + templatePoolDao); + } catch (NoTransitionException e) { + if (event == Event.CreateOnlyRequested || event == Event.OperationSuccessed) { + s_logger.debug("allow muliple create requests"); + } else { + throw e; + } + } + } else { + this.stateMachines.transitTo(obj, event, null, objectDataStoreDao); + } + return true; } @Override public DataObject get(DataObject dataObj, DataStore store) { if (dataObj.getType() == DataObjectType.TEMPLATE) { - return imageFactory.getTemplate(dataObj.getId(), store); + return imageFactory.getTemplate(dataObj, store); } else if (dataObj.getType() == DataObjectType.VOLUME) { - return volumeFactory.getVolume(dataObj.getId(), store); + return volumeFactory.getVolume(dataObj, store); } throw new CloudRuntimeException("unknown type"); } @Override - public boolean update(ObjectInDataStoreVO obj) { - return objectDataStoreDao.update(obj.getId(), obj); + public DataObjectInStore findObject(DataObject obj, DataStore store) { + DataObjectInStore vo = null; + SearchCriteriaService sc = SearchCriteria2.create(ObjectInDataStoreVO.class); + + if (store.getRole() == DataStoreRole.Image) { + sc.addAnd(sc.getEntity().getDataStoreUuid(), Op.EQ, store.getUuid()); + sc.addAnd(sc.getEntity().getDataStoreRole(), Op.EQ, store.getRole()); + sc.addAnd(sc.getEntity().getObjectUuid(), Op.EQ, obj.getUuid()); + sc.addAnd(sc.getEntity().getObjectType(), Op.EQ, obj.getType()); + vo = sc.find(); + } else if (obj.getType() == DataObjectType.TEMPLATE && store.getRole() == DataStoreRole.Primary) { + vo = templatePoolDao.findByPoolTemplate(store.getId(), obj.getId()); + } else { + s_logger.debug("unknown type: " + obj.getType() + " " + store.getRole()); + throw new CloudRuntimeException("unknown type"); + } + return vo; } + + @Override + public DataObjectInStore findObject(String uuid, DataObjectType type, + String dataStoreUuid, DataStoreRole role) { + DataObjectInStore vo = null; + SearchCriteriaService sc = SearchCriteria2.create(ObjectInDataStoreVO.class); + + if (role == DataStoreRole.Image) { + sc.addAnd(sc.getEntity().getDataStoreUuid(), Op.EQ, dataStoreUuid); + sc.addAnd(sc.getEntity().getDataStoreRole(), Op.EQ, role); + sc.addAnd(sc.getEntity().getObjectUuid(), Op.EQ, uuid); + sc.addAnd(sc.getEntity().getObjectType(), Op.EQ, type); + vo = sc.find(); + } + return vo; + } + + @Override + public DataStore findStore(String objUuid, DataObjectType type, DataStoreRole role) { + DataStore store = null; + if (role == DataStoreRole.Image) { + SearchCriteriaService sc = SearchCriteria2.create(ObjectInDataStoreVO.class); + sc.addAnd(sc.getEntity().getDataStoreRole(), Op.EQ, role); + sc.addAnd(sc.getEntity().getObjectUuid(), Op.EQ, objUuid); + sc.addAnd(sc.getEntity().getObjectType(), Op.EQ, type); + ObjectInDataStoreVO vo = sc.find(); + if (vo != null) { + store = this.storeMgr.getDataStore(vo.getDataStoreUuid(), vo.getDataStoreRole()); + } + } + return store; + } + } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java index a6ba9bc1f60..fdaaace49d7 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java @@ -20,31 +20,19 @@ package org.apache.cloudstack.storage.datastore; import java.util.List; -import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; -import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat; -import org.apache.cloudstack.framework.async.AsyncCompletionCallback; -import org.apache.cloudstack.storage.image.TemplateInfo; -import org.apache.cloudstack.storage.snapshot.SnapshotInfo; -import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver; -import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo; public interface PrimaryDataStore extends DataStore, PrimaryDataStoreInfo { VolumeInfo getVolume(long id); List getVolumes(); -/* void deleteVolumeAsync(VolumeInfo volume, AsyncCompletionCallback callback); - - void createVolumeAsync(VolumeInfo vo, VolumeDiskType diskType, AsyncCompletionCallback callback); - - void createVoluemFromBaseImageAsync(VolumeInfo volume, TemplateInfo templateStore, AsyncCompletionCallback callback); - */ - boolean exists(DataObject data); TemplateInfo getTemplate(long templateId); @@ -53,13 +41,4 @@ public interface PrimaryDataStore extends DataStore, PrimaryDataStoreInfo { DiskFormat getDefaultDiskType(); - -/* void takeSnapshot(SnapshotInfo snapshot, - AsyncCompletionCallback callback); - - void revertSnapshot(SnapshotInfo snapshot, - AsyncCompletionCallback callback); - - void deleteSnapshot(SnapshotInfo snapshot, - AsyncCompletionCallback callback);*/ } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreEntityImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreEntityImpl.java index 0ac57f445aa..e70f803ee81 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreEntityImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreEntityImpl.java @@ -26,8 +26,8 @@ import java.util.Map; import org.apache.cloudstack.engine.datacenter.entity.api.StorageEntity; import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; -import com.cloud.storage.StoragePoolStatus; import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StoragePoolStatus; public class PrimaryDataStoreEntityImpl implements StorageEntity { private PrimaryDataStoreInfo dataStore; @@ -132,7 +132,8 @@ public class PrimaryDataStoreEntityImpl implements StorageEntity { @Override public State getState() { - return this.dataStore.getManagedState(); + //return this.dataStore.getManagedState(); + return null; } @Override @@ -229,13 +230,7 @@ public class PrimaryDataStoreEntityImpl implements StorageEntity { return null; } - @Override - public String getStorageProvider() { - // TODO Auto-generated method stub - return null; - } - @Override public String getStorageType() { // TODO Auto-generated method stub return null; @@ -247,4 +242,16 @@ public class PrimaryDataStoreEntityImpl implements StorageEntity { } + @Override + public Long getStorageProviderId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isInMaintenance() { + // TODO Auto-generated method stub + return false; + } + } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java index a60ec7a6e65..d1c26e1a272 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java @@ -18,11 +18,14 @@ */ package org.apache.cloudstack.storage.datastore; -import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver; +import org.apache.cloudstack.engine.subsystem.api.storage.HypervisorHostListener; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver; public interface PrimaryDataStoreProviderManager { public PrimaryDataStore getPrimaryDataStore(long dataStoreId); + public PrimaryDataStore getPrimaryDataStore(String uuid); boolean registerDriver(String uuid, PrimaryDataStoreDriver driver); + boolean registerHostListener(String uuid, HypervisorHostListener listener); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java deleted file mode 100644 index 24a5c790688..00000000000 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cloudstack.storage.datastore.db; - -import java.util.List; -import java.util.Map; - -import org.apache.cloudstack.storage.datastore.DataStoreStatus; - -import com.cloud.utils.db.GenericDao; - -public interface PrimaryDataStoreDao extends GenericDao { - - /** - * @param datacenterId - * -- the id of the datacenter (availability zone) - */ - List listByDataCenterId(long datacenterId); - - /** - * @param datacenterId - * -- the id of the datacenter (availability zone) - */ - List listBy(long datacenterId, long podId, Long clusterId); - - /** - * Set capacity of storage pool in bytes - * - * @param id - * pool id. - * @param capacity - * capacity in bytes - */ - void updateCapacity(long id, long capacity); - - /** - * Set available bytes of storage pool in bytes - * - * @param id - * pool id. - * @param available - * available capacity in bytes - */ - void updateAvailable(long id, long available); - - PrimaryDataStoreVO persist(PrimaryDataStoreVO pool, Map details); - - /** - * Find pool by name. - * - * @param name - * name of pool. - * @return the single StoragePoolVO - */ - List findPoolByName(String name); - - /** - * Find pools by the pod that matches the details. - * - * @param podId - * pod id to find the pools in. - * @param details - * details to match. All must match for the pool to be returned. - * @return List of StoragePoolVO - */ - List findPoolsByDetails(long dcId, long podId, Long clusterId, Map details); - - List findPoolsByTags(long dcId, long podId, Long clusterId, String[] tags, Boolean shared); - - /** - * Find pool by UUID. - * - * @param uuid - * uuid of pool. - * @return the single StoragePoolVO - */ - PrimaryDataStoreVO findPoolByUUID(String uuid); - - List listByStorageHost(String hostFqdnOrIp); - - PrimaryDataStoreVO findPoolByHostPath(long dcId, Long podId, String host, String path, String uuid); - - List listPoolByHostPath(String host, String path); - - void updateDetails(long poolId, Map details); - - Map getDetails(long poolId); - - List searchForStoragePoolDetails(long poolId, String value); - - List findIfDuplicatePoolsExistByUUID(String uuid); - - List listByStatus(DataStoreStatus status); - - long countPoolsByStatus(DataStoreStatus... statuses); - - List listByStatusInZone(long dcId, DataStoreStatus status); - - List listPoolsByCluster(long clusterId); -} \ No newline at end of file diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java deleted file mode 100644 index faca54b569a..00000000000 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java +++ /dev/null @@ -1,360 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cloudstack.storage.datastore.db; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; -import javax.naming.ConfigurationException; - -import org.apache.cloudstack.storage.datastore.DataStoreStatus; -import org.springframework.stereotype.Component; - -import com.cloud.utils.db.DB; -import com.cloud.utils.db.GenericDaoBase; -import com.cloud.utils.db.GenericSearchBuilder; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.db.SearchCriteria.Func; -import com.cloud.utils.db.SearchCriteria.Op; -import com.cloud.utils.db.Transaction; -import com.cloud.utils.exception.CloudRuntimeException; - -@Component -public class PrimaryDataStoreDaoImpl extends GenericDaoBase implements PrimaryDataStoreDao { - protected final SearchBuilder AllFieldSearch; - protected final SearchBuilder DcPodSearch; - protected final SearchBuilder DcPodAnyClusterSearch; - protected final SearchBuilder DeleteLvmSearch; - protected final GenericSearchBuilder StatusCountSearch; - - @Inject protected PrimaryDataStoreDetailsDao _detailsDao; - - private final String DetailsSqlPrefix = "SELECT storage_pool.* from storage_pool LEFT JOIN storage_pool_details ON storage_pool.id = storage_pool_details.pool_id WHERE storage_pool.removed is null and storage_pool.data_center_id = ? and (storage_pool.pod_id = ? or storage_pool.pod_id is null) and ("; - private final String DetailsSqlSuffix = ") GROUP BY storage_pool_details.pool_id HAVING COUNT(storage_pool_details.name) >= ?"; - private final String FindPoolTagDetails = "SELECT storage_pool_details.name FROM storage_pool_details WHERE pool_id = ? and value = ?"; - - public PrimaryDataStoreDaoImpl() { - AllFieldSearch = createSearchBuilder(); - AllFieldSearch.and("name", AllFieldSearch.entity().getName(), SearchCriteria.Op.EQ); - AllFieldSearch.and("uuid", AllFieldSearch.entity().getUuid(), SearchCriteria.Op.EQ); - AllFieldSearch.and("datacenterId", AllFieldSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); - AllFieldSearch.and("hostAddress", AllFieldSearch.entity().getHostAddress(), SearchCriteria.Op.EQ); - AllFieldSearch.and("status", AllFieldSearch.entity().getStatus(), SearchCriteria.Op.EQ); - AllFieldSearch.and("path", AllFieldSearch.entity().getPath(), SearchCriteria.Op.EQ); - AllFieldSearch.and("podId", AllFieldSearch.entity().getPodId(), Op.EQ); - AllFieldSearch.and("clusterId", AllFieldSearch.entity().getClusterId(), Op.EQ); - AllFieldSearch.done(); - - DcPodSearch = createSearchBuilder(); - DcPodSearch.and("datacenterId", DcPodSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); - DcPodSearch.and().op("nullpod", DcPodSearch.entity().getPodId(), SearchCriteria.Op.NULL); - DcPodSearch.or("podId", DcPodSearch.entity().getPodId(), SearchCriteria.Op.EQ); - DcPodSearch.cp(); - DcPodSearch.and().op("nullcluster", DcPodSearch.entity().getClusterId(), SearchCriteria.Op.NULL); - DcPodSearch.or("cluster", DcPodSearch.entity().getClusterId(), SearchCriteria.Op.EQ); - DcPodSearch.cp(); - DcPodSearch.done(); - - DcPodAnyClusterSearch = createSearchBuilder(); - DcPodAnyClusterSearch.and("datacenterId", DcPodAnyClusterSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); - DcPodAnyClusterSearch.and().op("nullpod", DcPodAnyClusterSearch.entity().getPodId(), SearchCriteria.Op.NULL); - DcPodAnyClusterSearch.or("podId", DcPodAnyClusterSearch.entity().getPodId(), SearchCriteria.Op.EQ); - DcPodAnyClusterSearch.cp(); - DcPodAnyClusterSearch.done(); - - DeleteLvmSearch = createSearchBuilder(); - DeleteLvmSearch.and("ids", DeleteLvmSearch.entity().getId(), SearchCriteria.Op.IN); - DeleteLvmSearch.and().op("LVM", DeleteLvmSearch.entity().getPoolType(), SearchCriteria.Op.EQ); - DeleteLvmSearch.or("Filesystem", DeleteLvmSearch.entity().getPoolType(), SearchCriteria.Op.EQ); - DeleteLvmSearch.cp(); - DeleteLvmSearch.done(); - - StatusCountSearch = createSearchBuilder(Long.class); - StatusCountSearch.and("status", StatusCountSearch.entity().getStatus(), SearchCriteria.Op.IN); - StatusCountSearch.select(null, Func.COUNT, null); - StatusCountSearch.done(); - } - - @Override - public List findPoolByName(String name) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("name", name); - return listIncludingRemovedBy(sc); - } - - @Override - public PrimaryDataStoreVO findPoolByUUID(String uuid) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("uuid", uuid); - return findOneIncludingRemovedBy(sc); - } - - @Override - public List findIfDuplicatePoolsExistByUUID(String uuid) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("uuid", uuid); - return listBy(sc); - } - - @Override - public List listByDataCenterId(long datacenterId) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("datacenterId", datacenterId); - return listBy(sc); - } - - @Override - public void updateAvailable(long id, long available) { - PrimaryDataStoreVO pool = createForUpdate(id); - pool.setAvailableBytes(available); - update(id, pool); - } - - @Override - public void updateCapacity(long id, long capacity) { - PrimaryDataStoreVO pool = createForUpdate(id); - pool.setCapacityBytes(capacity); - update(id, pool); - - } - - @Override - public List listByStorageHost(String hostFqdnOrIp) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("hostAddress", hostFqdnOrIp); - return listIncludingRemovedBy(sc); - } - - @Override - public List listByStatus(DataStoreStatus status) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("status", status); - return listBy(sc); - } - - @Override - public List listByStatusInZone(long dcId, DataStoreStatus status) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("status", status); - sc.setParameters("datacenterId", dcId); - return listBy(sc); - } - - @Override - public PrimaryDataStoreVO findPoolByHostPath(long datacenterId, Long podId, String host, String path, String uuid) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("hostAddress", host); - sc.setParameters("path", path); - sc.setParameters("datacenterId", datacenterId); - sc.setParameters("podId", podId); - sc.setParameters("uuid", uuid); - - return findOneBy(sc); - } - - @Override - public List listBy(long datacenterId, long podId, Long clusterId) { - if (clusterId != null) { - SearchCriteria sc = DcPodSearch.create(); - sc.setParameters("datacenterId", datacenterId); - sc.setParameters("podId", podId); - - sc.setParameters("cluster", clusterId); - return listBy(sc); - } else { - SearchCriteria sc = DcPodAnyClusterSearch.create(); - sc.setParameters("datacenterId", datacenterId); - sc.setParameters("podId", podId); - return listBy(sc); - } - } - - @Override - public List listPoolByHostPath(String host, String path) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("hostAddress", host); - sc.setParameters("path", path); - - return listBy(sc); - } - - public PrimaryDataStoreVO listById(Integer id) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("id", id); - - return findOneIncludingRemovedBy(sc); - } - - @Override - @DB - public PrimaryDataStoreVO persist(PrimaryDataStoreVO pool, Map details) { - Transaction txn = Transaction.currentTxn(); - txn.start(); - pool = super.persist(pool); - if (details != null) { - for (Map.Entry detail : details.entrySet()) { - PrimaryDataStoreDetailVO vo = new PrimaryDataStoreDetailVO(pool.getId(), detail.getKey(), detail.getValue()); - _detailsDao.persist(vo); - } - } - txn.commit(); - return pool; - } - - @DB - @Override - public List findPoolsByDetails(long dcId, long podId, Long clusterId, Map details) { - StringBuilder sql = new StringBuilder(DetailsSqlPrefix); - if (clusterId != null) { - sql.append("storage_pool.cluster_id = ? OR storage_pool.cluster_id IS NULL) AND ("); - } - for (Map.Entry detail : details.entrySet()) { - sql.append("((storage_pool_details.name='").append(detail.getKey()).append("') AND (storage_pool_details.value='").append(detail.getValue()).append("')) OR "); - } - sql.delete(sql.length() - 4, sql.length()); - sql.append(DetailsSqlSuffix); - Transaction txn = Transaction.currentTxn(); - PreparedStatement pstmt = null; - try { - pstmt = txn.prepareAutoCloseStatement(sql.toString()); - int i = 1; - pstmt.setLong(i++, dcId); - pstmt.setLong(i++, podId); - if (clusterId != null) { - pstmt.setLong(i++, clusterId); - } - pstmt.setInt(i++, details.size()); - ResultSet rs = pstmt.executeQuery(); - List pools = new ArrayList(); - while (rs.next()) { - pools.add(toEntityBean(rs, false)); - } - return pools; - } catch (SQLException e) { - throw new CloudRuntimeException("Unable to execute " + pstmt, e); - } - } - - protected Map tagsToDetails(String[] tags) { - Map details = new HashMap(tags.length); - for (String tag : tags) { - details.put(tag, "true"); - } - return details; - } - - @Override - public List findPoolsByTags(long dcId, long podId, Long clusterId, String[] tags, Boolean shared) { - List storagePools = null; - if (tags == null || tags.length == 0) { - storagePools = listBy(dcId, podId, clusterId); - } else { - Map details = tagsToDetails(tags); - storagePools = findPoolsByDetails(dcId, podId, clusterId, details); - } - - if (shared == null) { - return storagePools; - } else { - List filteredStoragePools = new ArrayList(storagePools); - for (PrimaryDataStoreVO pool : storagePools) { - /* - * if (shared != pool.isShared()) { - * filteredStoragePools.remove(pool); } - */ - } - - return filteredStoragePools; - } - } - - @Override - @DB - public List searchForStoragePoolDetails(long poolId, String value) { - - StringBuilder sql = new StringBuilder(FindPoolTagDetails); - - Transaction txn = Transaction.currentTxn(); - PreparedStatement pstmt = null; - try { - pstmt = txn.prepareAutoCloseStatement(sql.toString()); - pstmt.setLong(1, poolId); - pstmt.setString(2, value); - - ResultSet rs = pstmt.executeQuery(); - List tags = new ArrayList(); - - while (rs.next()) { - tags.add(rs.getString("name")); - } - return tags; - } catch (SQLException e) { - throw new CloudRuntimeException("Unable to execute " + pstmt.toString(), e); - } - - } - - @Override - public void updateDetails(long poolId, Map details) { - if (details != null) { - _detailsDao.update(poolId, details); - } - } - - @Override - public Map getDetails(long poolId) { - return _detailsDao.getDetails(poolId); - } - - @Override - public boolean configure(String name, Map params) throws ConfigurationException { - super.configure(name, params); - _detailsDao.configure("DetailsDao", params); - return true; - } - - @Override - public long countPoolsByStatus(DataStoreStatus... statuses) { - SearchCriteria sc = StatusCountSearch.create(); - - sc.setParameters("status", (Object[]) statuses); - - List rs = customSearchIncludingRemoved(sc, null); - if (rs.size() == 0) { - return 0; - } - - return rs.get(0); - } - - @Override - public List listPoolsByCluster(long clusterId) { - SearchCriteria sc = AllFieldSearch.create(); - sc.setParameters("clusterId", clusterId); - - return listBy(sc); - } -} diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java index 3634b52908a..96d2da357f5 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java @@ -26,14 +26,19 @@ import java.util.UUID; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager; import org.apache.cloudstack.storage.datastore.db.DataStoreProviderDao; import org.apache.cloudstack.storage.datastore.db.DataStoreProviderVO; +import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.utils.component.ManagerBase; @Component public class DataStoreProviderManagerImpl extends ManagerBase implements DataStoreProviderManager { + private static final Logger s_logger = Logger + .getLogger(DataStoreProviderManagerImpl.class); @Inject List providers; @Inject @@ -59,8 +64,8 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto @Override public boolean configure(String name, Map params) throws ConfigurationException { - -/* + Map copyParams = new HashMap(params); + //TODO: hold global lock List providerVos = providerDao.listAll(); for (DataStoreProvider provider : providers) { @@ -83,12 +88,20 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto } else { uuid = providerVO.getUuid(); } - params.put("uuid", uuid); - params.put("id", providerVO.getId()); - provider.configure(params); + copyParams.put("uuid", uuid); + copyParams.put("id", providerVO.getId()); providerMap.put(uuid, provider); + try { + boolean registrationResult = provider.configure(copyParams); + if (!registrationResult) { + providerMap.remove(uuid); + } + } catch(Exception e) { + s_logger.debug("configure provider failed", e); + providerMap.remove(uuid); + } } - */ + return true; } @@ -97,4 +110,9 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto DataStoreProviderVO provider = providerDao.findById(id); return providerMap.get(provider.getUuid()); } + + @Override + public DataStoreProvider getDefaultPrimaryDataStoreProvider() { + return this.getDataStoreProvider("ancient primary data store provider"); + } } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/ImageDataStoreProvider.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/ImageDataStoreProvider.java index 502158cdaaa..d44a40e971f 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/ImageDataStoreProvider.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/ImageDataStoreProvider.java @@ -18,6 +18,8 @@ */ package org.apache.cloudstack.storage.datastore.provider; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; + public interface ImageDataStoreProvider extends DataStoreProvider { } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java index dbca549212c..fdf5958f1ab 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java @@ -16,6 +16,8 @@ // under the License. package org.apache.cloudstack.storage.datastore.provider; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; + public interface PrimaryDataStoreProvider extends DataStoreProvider { } diff --git a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java index 08f9182f237..fb7dec0fa41 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java +++ b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java @@ -16,10 +16,12 @@ // under the License. package org.apache.cloudstack.storage.db; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; + import com.cloud.utils.db.GenericDao; import com.cloud.utils.fsm.StateDao; -public interface ObjectInDataStoreDao extends GenericDao, StateDao { +public interface ObjectInDataStoreDao extends GenericDao, StateDao { } diff --git a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java index 4a5a913adca..9965d60b23d 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java @@ -20,17 +20,17 @@ import java.util.Map; import javax.naming.ConfigurationException; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.State; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; -import com.cloud.storage.VolumeVO; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.db.UpdateBuilder; import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.db.UpdateBuilder; @Component public class ObjectInDataStoreDaoImpl extends GenericDaoBase implements ObjectInDataStoreDao { @@ -38,6 +38,8 @@ public class ObjectInDataStoreDaoImpl extends GenericDaoBase updateStateSearch; @Override public boolean configure(String name, Map params) throws ConfigurationException { + super.configure(name, params); + updateStateSearch = this.createSearchBuilder(); updateStateSearch.and("id", updateStateSearch.entity().getId(), Op.EQ); updateStateSearch.and("state", updateStateSearch.entity().getState(), Op.EQ); @@ -47,7 +49,8 @@ public class ObjectInDataStoreDaoImpl extends GenericDaoBase { +public class ObjectInDataStoreVO implements StateObject, DataObjectInStore { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) long id; - @Column(name = "datastore_id") - private long dataStoreId; + @Column(name = "datastore_uuid") + private String dataStoreUuid; @Column(name = "datastore_role") @Enumerated(EnumType.STRING) private DataStoreRole dataStoreRole; - @Column(name = "object_id") - long objectId; + @Column(name = "object_uuid") + String objectUuid; @Column(name = "object_type") @Enumerated(EnumType.STRING) @@ -74,6 +76,15 @@ public class ObjectInDataStoreVO implements StateObject params) { - ImageDataStoreVO store = imageStoreDao.findByUuid(params.get("uuid")); + public ImageDataStoreVO createImageDataStore(Map params) { + ImageDataStoreVO store = imageStoreDao.findByUuid((String)params.get("uuid")); if (store != null) { - throw new CloudRuntimeException("duplicate uuid"); + return store; } store = new ImageDataStoreVO(); - store.setName(params.get("name")); - store.setProtocol(params.get("protocol")); - store.setProvider(Long.parseLong(params.get("provider"))); - store.setScope(Enum.valueOf(ScopeType.class, params.get("scope"))); - store.setUuid(params.get("uuid")); + store.setName((String)params.get("name")); + store.setProtocol((String)params.get("protocol")); + store.setProvider((Long)params.get("provider")); + store.setScope((ScopeType)params.get("scope")); + store.setUuid((String)params.get("uuid")); store = imageStoreDao.persist(store); return store; } diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageDataStoreManager.java b/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageDataStoreManager.java index 2bd361f05e9..b6d84cdcef2 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageDataStoreManager.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageDataStoreManager.java @@ -18,9 +18,14 @@ */ package org.apache.cloudstack.storage.image.datastore; +import java.util.List; + +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.storage.image.ImageDataStoreDriver; public interface ImageDataStoreManager { ImageDataStore getImageDataStore(long dataStoreId); + ImageDataStore getImageDataStore(String uuid); + List getList(); boolean registerDriver(String uuid, ImageDataStoreDriver driver); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataDao.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataDao.java deleted file mode 100644 index b5db164055d..00000000000 --- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataDao.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cloudstack.storage.image.db; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.cloudstack.storage.image.TemplateEvent; -import org.apache.cloudstack.storage.image.TemplateState; - -import com.cloud.domain.DomainVO; -import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.projects.Project.ListProjectResourcesCriteria; -import com.cloud.template.VirtualMachineTemplate.TemplateFilter; -import com.cloud.user.Account; -import com.cloud.utils.Pair; -import com.cloud.utils.db.GenericDao; -import com.cloud.utils.fsm.StateDao; - -public interface ImageDataDao extends GenericDao, StateDao { - public List listByPublic(); - - public ImageDataVO findByName(String templateName); - - public ImageDataVO findByTemplateName(String templateName); - - // public void update(ImageDataVO template); - - public List listAllSystemVMTemplates(); - - public List listDefaultBuiltinTemplates(); - - public String getRoutingTemplateUniqueName(); - - public List findIsosByIdAndPath(Long domainId, Long accountId, String path); - - public List listReadyTemplates(); - - public List listByAccountId(long accountId); - - public Set> searchTemplates(String name, String keyword, TemplateFilter templateFilter, boolean isIso, List hypers, Boolean bootable, DomainVO domain, - Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean onlyReady, boolean showDomr, List permittedAccounts, Account caller, - ListProjectResourcesCriteria listProjectResourcesCriteria, Map tags); - - public Set> searchSwiftTemplates(String name, String keyword, TemplateFilter templateFilter, boolean isIso, List hypers, Boolean bootable, DomainVO domain, - Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean onlyReady, boolean showDomr, List permittedAccounts, Account caller, Map tags); - - public long addTemplateToZone(ImageDataVO tmplt, long zoneId); - - public List listAllInZone(long dataCenterId); - - public List listByHypervisorType(List hyperTypes); - - public List publicIsoSearch(Boolean bootable, boolean listRemoved, Map tags); - - public List userIsoSearch(boolean listRemoved); - - ImageDataVO findSystemVMTemplate(long zoneId); - - ImageDataVO findSystemVMTemplate(long zoneId, HypervisorType hType); - - ImageDataVO findRoutingTemplate(HypervisorType type); - - List listPrivateTemplatesByHost(Long hostId); - - public Long countTemplatesForAccount(long accountId); - -} diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataDaoImpl.java deleted file mode 100644 index 301b5861f8c..00000000000 --- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataDaoImpl.java +++ /dev/null @@ -1,975 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cloudstack.storage.image.db; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.inject.Inject; -import javax.naming.ConfigurationException; - -import org.apache.cloudstack.storage.image.TemplateEvent; -import org.apache.cloudstack.storage.image.TemplateState; -import org.apache.cloudstack.storage.image.format.ISO; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - -import com.cloud.configuration.dao.ConfigurationDao; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.domain.DomainVO; -import com.cloud.domain.dao.DomainDao; -import com.cloud.host.Host; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.projects.Project.ListProjectResourcesCriteria; -import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.storage.Storage; -import com.cloud.storage.Storage.TemplateType; -import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import com.cloud.storage.VMTemplateZoneVO; -import com.cloud.storage.dao.VMTemplateDaoImpl; -import com.cloud.storage.dao.VMTemplateDetailsDao; -import com.cloud.storage.dao.VMTemplateZoneDao; -import com.cloud.tags.ResourceTagVO; -import com.cloud.tags.dao.ResourceTagsDaoImpl; -import com.cloud.template.VirtualMachineTemplate.TemplateFilter; -import com.cloud.user.Account; -import com.cloud.utils.Pair; -import com.cloud.utils.db.DB; -import com.cloud.utils.db.Filter; -import com.cloud.utils.db.GenericDaoBase; -import com.cloud.utils.db.GenericSearchBuilder; -import com.cloud.utils.db.JoinBuilder; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.db.SearchCriteria.Func; -import com.cloud.utils.db.SearchCriteria.Op; -import com.cloud.utils.db.Transaction; -import com.cloud.utils.db.UpdateBuilder; -import com.cloud.utils.exception.CloudRuntimeException; - -@Component -public class ImageDataDaoImpl extends GenericDaoBase implements ImageDataDao { - private static final Logger s_logger = Logger.getLogger(VMTemplateDaoImpl.class); - - @Inject - VMTemplateZoneDao templateZoneDao; - @Inject - VMTemplateDetailsDao templateDetailsDao; - - @Inject - ConfigurationDao configDao; - @Inject - HostDao hostDao; - @Inject - DomainDao domainDao; - @Inject - DataCenterDao dcDao; - - private final String SELECT_TEMPLATE_HOST_REF = "SELECT t.id, h.data_center_id, t.unique_name, t.name, t.public, t.featured, t.type, t.hvm, t.bits, t.url, t.format, t.created, t.account_id, " - + "t.checksum, t.display_text, t.enable_password, t.guest_os_id, t.bootable, t.prepopulate, t.cross_zones, t.hypervisor_type FROM vm_template t"; - - private final String SELECT_TEMPLATE_ZONE_REF = "SELECT t.id, tzr.zone_id, t.unique_name, t.name, t.public, t.featured, t.type, t.hvm, t.bits, t.url, t.format, t.created, t.account_id, " - + "t.checksum, t.display_text, t.enable_password, t.guest_os_id, t.bootable, t.prepopulate, t.cross_zones, t.hypervisor_type FROM vm_template t INNER JOIN template_zone_ref tzr on (t.id = tzr.template_id) "; - - private final String SELECT_TEMPLATE_SWIFT_REF = "SELECT t.id, t.unique_name, t.name, t.public, t.featured, t.type, t.hvm, t.bits, t.url, t.format, t.created, t.account_id, " - + "t.checksum, t.display_text, t.enable_password, t.guest_os_id, t.bootable, t.prepopulate, t.cross_zones, t.hypervisor_type FROM vm_template t"; - protected SearchBuilder TemplateNameSearch; - protected SearchBuilder UniqueNameSearch; - protected SearchBuilder tmpltTypeSearch; - protected SearchBuilder tmpltTypeHyperSearch; - protected SearchBuilder tmpltTypeHyperSearch2; - - protected SearchBuilder AccountIdSearch; - protected SearchBuilder NameSearch; - protected SearchBuilder TmpltsInZoneSearch; - private SearchBuilder PublicSearch; - private SearchBuilder NameAccountIdSearch; - private SearchBuilder PublicIsoSearch; - private SearchBuilder UserIsoSearch; - private GenericSearchBuilder CountTemplatesByAccount; - private SearchBuilder updateStateSearch; - - //ResourceTagsDaoImpl _tagsDao = ComponentInject.inject(ResourceTagsDaoImpl.class); - @Inject - ResourceTagsDaoImpl _tagsDao = null; - private String routerTmpltName; - private String consoleProxyTmpltName; - - protected ImageDataDaoImpl() { - } - - @Override - public List listByPublic() { - SearchCriteria sc = PublicSearch.create(); - sc.setParameters("public", 1); - return listBy(sc); - } - - @Override - public ImageDataVO findByName(String templateName) { - SearchCriteria sc = UniqueNameSearch.create(); - sc.setParameters("uniqueName", templateName); - return findOneIncludingRemovedBy(sc); - } - - @Override - public ImageDataVO findByTemplateName(String templateName) { - SearchCriteria sc = NameSearch.create(); - sc.setParameters("name", templateName); - return findOneIncludingRemovedBy(sc); - } - - @Override - public List publicIsoSearch(Boolean bootable, boolean listRemoved, Map tags) { - - SearchBuilder sb = null; - if (tags == null || tags.isEmpty()) { - sb = PublicIsoSearch; - } else { - sb = createSearchBuilder(); - sb.and("public", sb.entity().isPublicTemplate(), SearchCriteria.Op.EQ); - sb.and("format", sb.entity().getFormat(), SearchCriteria.Op.EQ); - sb.and("type", sb.entity().getTemplateType(), SearchCriteria.Op.EQ); - sb.and("bootable", sb.entity().isBootable(), SearchCriteria.Op.EQ); - sb.and("removed", sb.entity().getRemoved(), SearchCriteria.Op.EQ); - - SearchBuilder tagSearch = _tagsDao.createSearchBuilder(); - for (int count = 0; count < tags.size(); count++) { - tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ); - tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ); - tagSearch.cp(); - } - tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ); - sb.groupBy(sb.entity().getId()); - sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); - } - - SearchCriteria sc = sb.create(); - - sc.setParameters("public", 1); - sc.setParameters("format", "ISO"); - sc.setParameters("type", TemplateType.PERHOST.toString()); - if (bootable != null) { - sc.setParameters("bootable", bootable); - } - - if (!listRemoved) { - sc.setParameters("removed", (Object) null); - } - - if (tags != null && !tags.isEmpty()) { - int count = 0; - sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.ISO.toString()); - for (String key : tags.keySet()) { - sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key); - sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key)); - count++; - } - } - - return listBy(sc); - } - - @Override - public List userIsoSearch(boolean listRemoved) { - - SearchBuilder sb = null; - sb = UserIsoSearch; - SearchCriteria sc = sb.create(); - - sc.setParameters("format", Storage.ImageFormat.ISO); - sc.setParameters("type", TemplateType.USER.toString()); - - if (!listRemoved) { - sc.setParameters("removed", (Object) null); - } - - return listBy(sc); - } - - @Override - public List listAllSystemVMTemplates() { - SearchCriteria sc = tmpltTypeSearch.create(); - sc.setParameters("templateType", Storage.TemplateType.SYSTEM); - - Filter filter = new Filter(ImageDataVO.class, "id", false, null, null); - return listBy(sc, filter); - } - - @Override - public List listPrivateTemplatesByHost(Long hostId) { - - String sql = "select * from template_host_ref as thr INNER JOIN vm_template as t ON t.id=thr.template_id " - + "where thr.host_id=? and t.public=0 and t.featured=0 and t.type='USER' and t.removed is NULL"; - - List l = new ArrayList(); - - Transaction txn = Transaction.currentTxn(); - - PreparedStatement pstmt = null; - try { - pstmt = txn.prepareAutoCloseStatement(sql); - pstmt.setLong(1, hostId); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) { - l.add(rs.getLong(1)); - } - } catch (SQLException e) { - } catch (Throwable e) { - } - return l; - } - - @Override - public List listReadyTemplates() { - SearchCriteria sc = createSearchCriteria(); - sc.addAnd("ready", SearchCriteria.Op.EQ, true); - sc.addAnd("format", SearchCriteria.Op.NEQ, Storage.ImageFormat.ISO); - return listIncludingRemovedBy(sc); - } - - @Override - public List findIsosByIdAndPath(Long domainId, Long accountId, String path) { - SearchCriteria sc = createSearchCriteria(); - sc.addAnd("iso", SearchCriteria.Op.EQ, true); - if (domainId != null) { - sc.addAnd("domainId", SearchCriteria.Op.EQ, domainId); - } - if (accountId != null) { - sc.addAnd("accountId", SearchCriteria.Op.EQ, accountId); - } - if (path != null) { - sc.addAnd("path", SearchCriteria.Op.EQ, path); - } - return listIncludingRemovedBy(sc); - } - - @Override - public List listByAccountId(long accountId) { - SearchCriteria sc = AccountIdSearch.create(); - sc.setParameters("accountId", accountId); - return listBy(sc); - } - - @Override - public List listByHypervisorType(List hyperTypes) { - SearchCriteria sc = createSearchCriteria(); - hyperTypes.add(HypervisorType.None); - sc.addAnd("hypervisorType", SearchCriteria.Op.IN, hyperTypes.toArray()); - return listBy(sc); - } - - @Override - public boolean configure(String name, Map params) throws ConfigurationException { - boolean result = super.configure(name, params); - - PublicSearch = createSearchBuilder(); - PublicSearch.and("public", PublicSearch.entity().isPublicTemplate(), SearchCriteria.Op.EQ); - - routerTmpltName = (String) params.get("routing.uniquename"); - - s_logger.debug("Found parameter routing unique name " + routerTmpltName); - if (routerTmpltName == null) { - routerTmpltName = "routing"; - } - - consoleProxyTmpltName = (String) params.get("consoleproxy.uniquename"); - if (consoleProxyTmpltName == null) { - consoleProxyTmpltName = "routing"; - } - if (s_logger.isDebugEnabled()) { - s_logger.debug("Use console proxy template : " + consoleProxyTmpltName); - } - - UniqueNameSearch = createSearchBuilder(); - UniqueNameSearch.and("uniqueName", UniqueNameSearch.entity().getUniqueName(), SearchCriteria.Op.EQ); - NameSearch = createSearchBuilder(); - NameSearch.and("name", NameSearch.entity().getName(), SearchCriteria.Op.EQ); - - NameAccountIdSearch = createSearchBuilder(); - NameAccountIdSearch.and("name", NameAccountIdSearch.entity().getName(), SearchCriteria.Op.EQ); - NameAccountIdSearch.and("accountId", NameAccountIdSearch.entity().getAccountId(), SearchCriteria.Op.EQ); - - PublicIsoSearch = createSearchBuilder(); - PublicIsoSearch.and("public", PublicIsoSearch.entity().isPublicTemplate(), SearchCriteria.Op.EQ); - PublicIsoSearch.and("format", PublicIsoSearch.entity().getFormat(), SearchCriteria.Op.EQ); - PublicIsoSearch.and("type", PublicIsoSearch.entity().getTemplateType(), SearchCriteria.Op.EQ); - PublicIsoSearch.and("bootable", PublicIsoSearch.entity().isBootable(), SearchCriteria.Op.EQ); - PublicIsoSearch.and("removed", PublicIsoSearch.entity().getRemoved(), SearchCriteria.Op.EQ); - - UserIsoSearch = createSearchBuilder(); - UserIsoSearch.and("format", UserIsoSearch.entity().getFormat(), SearchCriteria.Op.EQ); - UserIsoSearch.and("type", UserIsoSearch.entity().getTemplateType(), SearchCriteria.Op.EQ); - UserIsoSearch.and("removed", UserIsoSearch.entity().getRemoved(), SearchCriteria.Op.EQ); - - tmpltTypeHyperSearch = createSearchBuilder(); - tmpltTypeHyperSearch.and("templateType", tmpltTypeHyperSearch.entity().getTemplateType(), SearchCriteria.Op.EQ); - SearchBuilder hostHyperSearch = hostDao.createSearchBuilder(); - hostHyperSearch.and("type", hostHyperSearch.entity().getType(), SearchCriteria.Op.EQ); - hostHyperSearch.and("zoneId", hostHyperSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); - hostHyperSearch.groupBy(hostHyperSearch.entity().getHypervisorType()); - - tmpltTypeHyperSearch.join("tmplHyper", hostHyperSearch, hostHyperSearch.entity().getHypervisorType(), tmpltTypeHyperSearch.entity().getHypervisorType(), JoinBuilder.JoinType.INNER); - hostHyperSearch.done(); - tmpltTypeHyperSearch.done(); - - tmpltTypeHyperSearch2 = createSearchBuilder(); - tmpltTypeHyperSearch2.and("templateType", tmpltTypeHyperSearch2.entity().getTemplateType(), SearchCriteria.Op.EQ); - tmpltTypeHyperSearch2.and("hypervisorType", tmpltTypeHyperSearch2.entity().getHypervisorType(), SearchCriteria.Op.EQ); - - tmpltTypeSearch = createSearchBuilder(); - tmpltTypeSearch.and("removed", tmpltTypeSearch.entity().getRemoved(), SearchCriteria.Op.NULL); - tmpltTypeSearch.and("templateType", tmpltTypeSearch.entity().getTemplateType(), SearchCriteria.Op.EQ); - - AccountIdSearch = createSearchBuilder(); - AccountIdSearch.and("accountId", AccountIdSearch.entity().getAccountId(), SearchCriteria.Op.EQ); - AccountIdSearch.and("publicTemplate", AccountIdSearch.entity().isPublicTemplate(), SearchCriteria.Op.EQ); - AccountIdSearch.done(); - - SearchBuilder tmpltZoneSearch = templateZoneDao.createSearchBuilder(); - tmpltZoneSearch.and("removed", tmpltZoneSearch.entity().getRemoved(), SearchCriteria.Op.NULL); - tmpltZoneSearch.and("zoneId", tmpltZoneSearch.entity().getZoneId(), SearchCriteria.Op.EQ); - - TmpltsInZoneSearch = createSearchBuilder(); - TmpltsInZoneSearch.and("removed", TmpltsInZoneSearch.entity().getRemoved(), SearchCriteria.Op.NULL); - TmpltsInZoneSearch.and().op("avoidtype", TmpltsInZoneSearch.entity().getTemplateType(), SearchCriteria.Op.NEQ); - TmpltsInZoneSearch.or("templateType", TmpltsInZoneSearch.entity().getTemplateType(), SearchCriteria.Op.NULL); - TmpltsInZoneSearch.cp(); - TmpltsInZoneSearch.join("tmpltzone", tmpltZoneSearch, tmpltZoneSearch.entity().getTemplateId(), TmpltsInZoneSearch.entity().getId(), JoinBuilder.JoinType.INNER); - tmpltZoneSearch.done(); - TmpltsInZoneSearch.done(); - - CountTemplatesByAccount = createSearchBuilder(Long.class); - CountTemplatesByAccount.select(null, Func.COUNT, null); - CountTemplatesByAccount.and("account", CountTemplatesByAccount.entity().getAccountId(), SearchCriteria.Op.EQ); - CountTemplatesByAccount.and("removed", CountTemplatesByAccount.entity().getRemoved(), SearchCriteria.Op.NULL); - CountTemplatesByAccount.done(); - - updateStateSearch = this.createSearchBuilder(); - updateStateSearch.and("id", updateStateSearch.entity().getId(), Op.EQ); - updateStateSearch.and("state", updateStateSearch.entity().getState(), Op.EQ); - updateStateSearch.and("updatedCount", updateStateSearch.entity().getUpdatedCount(), Op.EQ); - updateStateSearch.done(); - return result; - } - - @Override - public String getRoutingTemplateUniqueName() { - return routerTmpltName; - } - - @Override - public Set> searchSwiftTemplates(String name, String keyword, TemplateFilter templateFilter, boolean isIso, List hypers, Boolean bootable, DomainVO domain, - Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean onlyReady, boolean showDomr, List permittedAccounts, Account caller, Map tags) { - - StringBuilder builder = new StringBuilder(); - if (!permittedAccounts.isEmpty()) { - for (Account permittedAccount : permittedAccounts) { - builder.append(permittedAccount.getAccountId() + ","); - } - } - - String permittedAccountsStr = builder.toString(); - - if (permittedAccountsStr.length() > 0) { - // chop the "," off - permittedAccountsStr = permittedAccountsStr.substring(0, permittedAccountsStr.length() - 1); - } - - Transaction txn = Transaction.currentTxn(); - txn.start(); - - Set> templateZonePairList = new HashSet>(); - PreparedStatement pstmt = null; - ResultSet rs = null; - String sql = SELECT_TEMPLATE_SWIFT_REF; - try { - String joinClause = ""; - String whereClause = " WHERE t.removed IS NULL"; - - if (isIso) { - whereClause += " AND t.format = 'ISO'"; - if (!hyperType.equals(HypervisorType.None)) { - joinClause = " INNER JOIN guest_os guestOS on (guestOS.id = t.guest_os_id) INNER JOIN guest_os_hypervisor goh on ( goh.guest_os_id = guestOS.id) "; - whereClause += " AND goh.hypervisor_type = '" + hyperType.toString() + "'"; - } - } else { - whereClause += " AND t.format <> 'ISO'"; - if (hypers.isEmpty()) { - return templateZonePairList; - } else { - StringBuilder relatedHypers = new StringBuilder(); - for (HypervisorType hyper : hypers) { - relatedHypers.append("'"); - relatedHypers.append(hyper.toString()); - relatedHypers.append("'"); - relatedHypers.append(","); - } - relatedHypers.setLength(relatedHypers.length() - 1); - whereClause += " AND t.hypervisor_type IN (" + relatedHypers + ")"; - } - } - joinClause += " INNER JOIN template_swift_ref tsr on (t.id = tsr.template_id)"; - if (keyword != null) { - whereClause += " AND t.name LIKE \"%" + keyword + "%\""; - } else if (name != null) { - whereClause += " AND t.name LIKE \"%" + name + "%\""; - } - - if (bootable != null) { - whereClause += " AND t.bootable = " + bootable; - } - - if (!showDomr) { - whereClause += " AND t.type != '" + Storage.TemplateType.SYSTEM.toString() + "'"; - } - - if (templateFilter == TemplateFilter.featured) { - whereClause += " AND t.public = 1 AND t.featured = 1"; - } else if ((templateFilter == TemplateFilter.self || templateFilter == TemplateFilter.selfexecutable) && caller.getType() != Account.ACCOUNT_TYPE_ADMIN) { - if (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) { - joinClause += " INNER JOIN account a on (t.account_id = a.id) INNER JOIN domain d on (a.domain_id = d.id)"; - whereClause += " AND d.path LIKE '" + domain.getPath() + "%'"; - } else { - whereClause += " AND t.account_id IN (" + permittedAccountsStr + ")"; - } - } else if (templateFilter == TemplateFilter.sharedexecutable && caller.getType() != Account.ACCOUNT_TYPE_ADMIN) { - if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL) { - joinClause += " LEFT JOIN launch_permission lp ON t.id = lp.template_id WHERE" + " (t.account_id IN (" + permittedAccountsStr + ") OR" + " lp.account_id IN (" - + permittedAccountsStr + "))"; - } else { - joinClause += " INNER JOIN account a on (t.account_id = a.id) "; - } - } else if (templateFilter == TemplateFilter.executable && !permittedAccounts.isEmpty()) { - whereClause += " AND (t.public = 1 OR t.account_id IN (" + permittedAccountsStr + "))"; - } else if (templateFilter == TemplateFilter.community) { - whereClause += " AND t.public = 1 AND t.featured = 0"; - } else if (templateFilter == TemplateFilter.all && caller.getType() == Account.ACCOUNT_TYPE_ADMIN) { - } else if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) { - return templateZonePairList; - } - - sql += joinClause + whereClause + getOrderByLimit(pageSize, startIndex); - pstmt = txn.prepareStatement(sql); - rs = pstmt.executeQuery(); - while (rs.next()) { - Pair templateZonePair = new Pair(rs.getLong(1), -1L); - templateZonePairList.add(templateZonePair); - } - - } catch (Exception e) { - s_logger.warn("Error listing templates", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - txn.commit(); - } catch (SQLException sqle) { - s_logger.warn("Error in cleaning up", sqle); - } - } - - return templateZonePairList; - } - - @Override - public Set> searchTemplates(String name, String keyword, TemplateFilter templateFilter, boolean isIso, List hypers, Boolean bootable, DomainVO domain, - Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean onlyReady, boolean showDomr, List permittedAccounts, Account caller, - ListProjectResourcesCriteria listProjectResourcesCriteria, Map tags) { - StringBuilder builder = new StringBuilder(); - if (!permittedAccounts.isEmpty()) { - for (Account permittedAccount : permittedAccounts) { - builder.append(permittedAccount.getAccountId() + ","); - } - } - - String permittedAccountsStr = builder.toString(); - - if (permittedAccountsStr.length() > 0) { - // chop the "," off - permittedAccountsStr = permittedAccountsStr.substring(0, permittedAccountsStr.length() - 1); - } - - Transaction txn = Transaction.currentTxn(); - txn.start(); - - /* Use LinkedHashSet here to guarantee iteration order */ - Set> templateZonePairList = new LinkedHashSet>(); - PreparedStatement pstmt = null; - ResultSet rs = null; - StringBuilder relatedDomainIds = new StringBuilder(); - String sql = SELECT_TEMPLATE_ZONE_REF; - String groupByClause = ""; - try { - // short accountType; - // String accountId = null; - String guestOSJoin = ""; - StringBuilder templateHostRefJoin = new StringBuilder(); - String dataCenterJoin = "", lpjoin = ""; - String tagsJoin = ""; - - if (isIso && !hyperType.equals(HypervisorType.None)) { - guestOSJoin = " INNER JOIN guest_os guestOS on (guestOS.id = t.guest_os_id) INNER JOIN guest_os_hypervisor goh on ( goh.guest_os_id = guestOS.id) "; - } - if (onlyReady) { - templateHostRefJoin.append(" INNER JOIN template_host_ref thr on (t.id = thr.template_id) INNER JOIN host h on (thr.host_id = h.id)"); - sql = SELECT_TEMPLATE_HOST_REF; - groupByClause = " GROUP BY t.id, h.data_center_id "; - } - if ((templateFilter == TemplateFilter.featured) || (templateFilter == TemplateFilter.community)) { - dataCenterJoin = " INNER JOIN data_center dc on (h.data_center_id = dc.id)"; - } - - if (templateFilter == TemplateFilter.sharedexecutable) { - lpjoin = " INNER JOIN launch_permission lp ON t.id = lp.template_id "; - } - - if (tags != null && !tags.isEmpty()) { - tagsJoin = " INNER JOIN resource_tags r ON t.id = r.resource_id "; - } - - sql += guestOSJoin + templateHostRefJoin + dataCenterJoin + lpjoin + tagsJoin; - String whereClause = ""; - - // All joins have to be made before we start setting the condition - // settings - if ((listProjectResourcesCriteria == ListProjectResourcesCriteria.SkipProjectResources || (!permittedAccounts.isEmpty() && !(templateFilter == TemplateFilter.community || templateFilter == TemplateFilter.featured))) - && !(caller.getType() != Account.ACCOUNT_TYPE_NORMAL && templateFilter == TemplateFilter.all)) { - whereClause += " INNER JOIN account a on (t.account_id = a.id)"; - if ((templateFilter == TemplateFilter.self || templateFilter == TemplateFilter.selfexecutable) - && (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN || caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN)) { - whereClause += " INNER JOIN domain d on (a.domain_id = d.id) WHERE d.path LIKE '" + domain.getPath() + "%'"; - if (listProjectResourcesCriteria == ListProjectResourcesCriteria.SkipProjectResources) { - whereClause += " AND a.type != " + Account.ACCOUNT_TYPE_PROJECT; - } - } else if (listProjectResourcesCriteria == ListProjectResourcesCriteria.SkipProjectResources) { - whereClause += " WHERE a.type != " + Account.ACCOUNT_TYPE_PROJECT; - } - } - - if (!permittedAccounts.isEmpty()) { - for (Account account : permittedAccounts) { - // accountType = account.getType(); - // accountId = Long.toString(account.getId()); - DomainVO accountDomain = domainDao.findById(account.getDomainId()); - - // get all parent domain ID's all the way till root domain - DomainVO domainTreeNode = accountDomain; - while (true) { - relatedDomainIds.append(domainTreeNode.getId()); - relatedDomainIds.append(","); - if (domainTreeNode.getParent() != null) { - domainTreeNode = domainDao.findById(domainTreeNode.getParent()); - } else { - break; - } - } - - // get all child domain ID's - if (isAdmin(account.getType())) { - List allChildDomains = domainDao.findAllChildren(accountDomain.getPath(), accountDomain.getId()); - for (DomainVO childDomain : allChildDomains) { - relatedDomainIds.append(childDomain.getId()); - relatedDomainIds.append(","); - } - } - relatedDomainIds.setLength(relatedDomainIds.length() - 1); - } - } - - String attr = " AND "; - if (whereClause.endsWith(" WHERE ")) { - attr += " WHERE "; - } - - if (!isIso) { - if (hypers.isEmpty()) { - return templateZonePairList; - } else { - StringBuilder relatedHypers = new StringBuilder(); - for (HypervisorType hyper : hypers) { - relatedHypers.append("'"); - relatedHypers.append(hyper.toString()); - relatedHypers.append("'"); - relatedHypers.append(","); - } - relatedHypers.setLength(relatedHypers.length() - 1); - whereClause += attr + " t.hypervisor_type IN (" + relatedHypers + ")"; - } - } - - if (!permittedAccounts.isEmpty() && !(templateFilter == TemplateFilter.featured || templateFilter == TemplateFilter.community || templateFilter == TemplateFilter.executable) - && !isAdmin(caller.getType())) { - whereClause += attr + "t.account_id IN (" + permittedAccountsStr + ")"; - } - - if (templateFilter == TemplateFilter.featured) { - whereClause += attr + "t.public = 1 AND t.featured = 1"; - if (!permittedAccounts.isEmpty()) { - whereClause += attr + "(dc.domain_id IN (" + relatedDomainIds + ") OR dc.domain_id is NULL)"; - } - } else if (templateFilter == TemplateFilter.self || templateFilter == TemplateFilter.selfexecutable) { - whereClause += " AND t.account_id IN (" + permittedAccountsStr + ")"; - } else if (templateFilter == TemplateFilter.sharedexecutable) { - whereClause += " AND " + " (t.account_id IN (" + permittedAccountsStr + ") OR" + " lp.account_id IN (" + permittedAccountsStr + "))"; - } else if (templateFilter == TemplateFilter.executable && !permittedAccounts.isEmpty()) { - whereClause += attr + "(t.public = 1 OR t.account_id IN (" + permittedAccountsStr + "))"; - } else if (templateFilter == TemplateFilter.community) { - whereClause += attr + "t.public = 1 AND t.featured = 0"; - if (!permittedAccounts.isEmpty()) { - whereClause += attr + "(dc.domain_id IN (" + relatedDomainIds + ") OR dc.domain_id is NULL)"; - } - } else if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN && !isIso) { - return templateZonePairList; - } - - if (tags != null && !tags.isEmpty()) { - whereClause += " AND ("; - boolean first = true; - for (String key : tags.keySet()) { - if (!first) { - whereClause += " OR "; - } - whereClause += "(r.key=\"" + key + "\" and r.value=\"" + tags.get(key) + "\")"; - first = false; - } - whereClause += ")"; - } - - if (whereClause.equals("")) { - whereClause += " WHERE "; - } else if (!whereClause.equals(" WHERE ")) { - whereClause += " AND "; - } - - sql += whereClause + getExtrasWhere(templateFilter, name, keyword, isIso, bootable, hyperType, zoneId, onlyReady, showDomr) + groupByClause + getOrderByLimit(pageSize, startIndex); - - pstmt = txn.prepareStatement(sql); - rs = pstmt.executeQuery(); - - while (rs.next()) { - Pair templateZonePair = new Pair(rs.getLong(1), rs.getLong(2)); - templateZonePairList.add(templateZonePair); - } - // for now, defaulting pageSize to a large val if null; may need to - // revisit post 2.2RC2 - if (isIso && - templateZonePairList.size() < (pageSize != null ? pageSize : 500) && - templateFilter != TemplateFilter.community && - !(templateFilter == TemplateFilter.self) /* TODO: Fix this! && !BaseCmd.isRootAdmin(caller.getType())*/) { // evaluates - // to - // true - // If - // root - // admin - // and - // filter=self - - List publicIsos = publicIsoSearch(bootable, false, tags); - List userIsos = userIsoSearch(false); - - // Listing the ISOs according to the page size.Restricting the - // total no. of ISOs on a page - // to be less than or equal to the pageSize parameter - - int i = 0; - - if (startIndex > userIsos.size()) { - i = (int) (startIndex - userIsos.size()); - } - - for (; i < publicIsos.size(); i++) { - if (templateZonePairList.size() >= pageSize) { - break; - } else { - if (keyword != null && publicIsos.get(i).getName().contains(keyword)) { - templateZonePairList.add(new Pair(publicIsos.get(i).getId(), null)); - continue; - } else if (name != null && publicIsos.get(i).getName().contains(name)) { - templateZonePairList.add(new Pair(publicIsos.get(i).getId(), null)); - continue; - } else if (keyword == null && name == null) { - templateZonePairList.add(new Pair(publicIsos.get(i).getId(), null)); - } - } - } - } - } catch (Exception e) { - s_logger.warn("Error listing templates", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - txn.commit(); - } catch (SQLException sqle) { - s_logger.warn("Error in cleaning up", sqle); - } - } - - return templateZonePairList; - } - - private String getExtrasWhere(TemplateFilter templateFilter, String name, String keyword, boolean isIso, Boolean bootable, HypervisorType hyperType, Long zoneId, boolean onlyReady, - boolean showDomr) { - String sql = ""; - if (keyword != null) { - sql += " t.name LIKE \"%" + keyword + "%\" AND"; - } else if (name != null) { - sql += " t.name LIKE \"%" + name + "%\" AND"; - } - - if (isIso) { - sql += " t.format = 'ISO'"; - if (!hyperType.equals(HypervisorType.None)) { - sql += " AND goh.hypervisor_type = '" + hyperType.toString() + "'"; - } - } else { - sql += " t.format <> 'ISO'"; - if (!hyperType.equals(HypervisorType.None)) { - sql += " AND t.hypervisor_type = '" + hyperType.toString() + "'"; - } - } - - if (bootable != null) { - sql += " AND t.bootable = " + bootable; - } - - if (onlyReady) { - sql += " AND thr.download_state = '" + Status.DOWNLOADED.toString() + "'" + " AND thr.destroyed=0 "; - if (zoneId != null) { - sql += " AND h.data_center_id = " + zoneId; - } - } else if (zoneId != null) { - sql += " AND tzr.zone_id = " + zoneId + " AND tzr.removed is null"; - } else { - sql += " AND tzr.removed is null "; - } - if (!showDomr) { - sql += " AND t.type != '" + Storage.TemplateType.SYSTEM.toString() + "'"; - } - - sql += " AND t.removed IS NULL"; - - return sql; - } - - private String getOrderByLimit(Long pageSize, Long startIndex) { - Boolean isAscending = Boolean.parseBoolean(configDao.getValue("sortkey.algorithm")); - isAscending = (isAscending == null ? true : isAscending); - - String sql; - if (isAscending) { - sql = " ORDER BY t.sort_key ASC"; - } else { - sql = " ORDER BY t.sort_key DESC"; - } - - if ((pageSize != null) && (startIndex != null)) { - sql += " LIMIT " + startIndex.toString() + "," + pageSize.toString(); - } - return sql; - } - - @Override - @DB - public long addTemplateToZone(ImageDataVO tmplt, long zoneId) { - Transaction txn = Transaction.currentTxn(); - txn.start(); - ImageDataVO tmplt2 = findById(tmplt.getId()); - if (tmplt2 == null) { - if (persist(tmplt) == null) { - throw new CloudRuntimeException("Failed to persist the template " + tmplt); - } - if (tmplt.getDetails() != null) { - templateDetailsDao.persist(tmplt.getId(), tmplt.getDetails()); - } - } - VMTemplateZoneVO tmpltZoneVO = templateZoneDao.findByZoneTemplate(zoneId, tmplt.getId()); - if (tmpltZoneVO == null) { - tmpltZoneVO = new VMTemplateZoneVO(zoneId, tmplt.getId(), new Date()); - templateZoneDao.persist(tmpltZoneVO); - } else { - tmpltZoneVO.setRemoved(null); - tmpltZoneVO.setLastUpdated(new Date()); - templateZoneDao.update(tmpltZoneVO.getId(), tmpltZoneVO); - } - txn.commit(); - - return tmplt.getId(); - } - - @Override - @DB - public List listAllInZone(long dataCenterId) { - SearchCriteria sc = TmpltsInZoneSearch.create(); - sc.setParameters("avoidtype", TemplateType.PERHOST.toString()); - sc.setJoinParameters("tmpltzone", "zoneId", dataCenterId); - return listBy(sc); - } - - @Override - public List listDefaultBuiltinTemplates() { - SearchCriteria sc = tmpltTypeSearch.create(); - sc.setParameters("templateType", Storage.TemplateType.BUILTIN); - return listBy(sc); - } - - @Override - public ImageDataVO findSystemVMTemplate(long zoneId) { - SearchCriteria sc = tmpltTypeHyperSearch.create(); - sc.setParameters("templateType", Storage.TemplateType.SYSTEM); - sc.setJoinParameters("tmplHyper", "type", Host.Type.Routing); - sc.setJoinParameters("tmplHyper", "zoneId", zoneId); - - // order by descending order of id and select the first (this is going - // to be the latest) - List tmplts = listBy(sc, new Filter(ImageDataVO.class, "id", false, null, 1l)); - - if (tmplts.size() > 0) { - return tmplts.get(0); - } else { - return null; - } - } - - @Override - public ImageDataVO findSystemVMTemplate(long zoneId, HypervisorType hType) { - SearchCriteria sc = tmpltTypeHyperSearch.create(); - sc.setParameters("templateType", Storage.TemplateType.SYSTEM); - sc.setJoinParameters("tmplHyper", "type", Host.Type.Routing); - sc.setJoinParameters("tmplHyper", "zoneId", zoneId); - - // order by descending order of id - List tmplts = listBy(sc, new Filter(ImageDataVO.class, "id", false, null, null)); - - for (ImageDataVO tmplt : tmplts) { - if (tmplt.getHypervisorType() == hType) { - return tmplt; - } - } - if (tmplts.size() > 0 && hType == HypervisorType.Any) { - return tmplts.get(0); - } - return null; - } - - @Override - public ImageDataVO findRoutingTemplate(HypervisorType hType) { - SearchCriteria sc = tmpltTypeHyperSearch2.create(); - sc.setParameters("templateType", Storage.TemplateType.SYSTEM); - sc.setParameters("hypervisorType", hType); - - // order by descending order of id and select the first (this is going - // to be the latest) - List tmplts = listBy(sc, new Filter(ImageDataVO.class, "id", false, null, 1l)); - - if (tmplts.size() > 0) { - return tmplts.get(0); - } else { - return null; - } - } - - @Override - public Long countTemplatesForAccount(long accountId) { - SearchCriteria sc = CountTemplatesByAccount.create(); - sc.setParameters("account", accountId); - return customSearch(sc, null).get(0); - } - - @Override - @DB - public boolean remove(Long id) { - Transaction txn = Transaction.currentTxn(); - txn.start(); - ImageDataVO template = createForUpdate(); - template.setRemoved(new Date()); - - ImageDataVO vo = findById(id); - if (vo != null) { - if (vo.getFormat().equalsIgnoreCase(new ISO().toString())) { - _tagsDao.removeByIdAndType(id, TaggedResourceType.ISO); - } else { - _tagsDao.removeByIdAndType(id, TaggedResourceType.Template); - } - } - - boolean result = update(id, template); - txn.commit(); - return result; - } - - private boolean isAdmin(short accountType) { - return ((accountType == Account.ACCOUNT_TYPE_ADMIN) || (accountType == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) || (accountType == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) || (accountType == Account.ACCOUNT_TYPE_READ_ONLY_ADMIN)); - } - - @Override - public boolean updateState(TemplateState currentState, TemplateEvent event, - TemplateState nextState, ImageDataVO vo, Object data) { - Long oldUpdated = vo.getUpdatedCount(); - Date oldUpdatedTime = vo.getUpdated(); - - - SearchCriteria sc = updateStateSearch.create(); - sc.setParameters("id", vo.getId()); - sc.setParameters("state", currentState); - sc.setParameters("updatedCount", vo.getUpdatedCount()); - - vo.incrUpdatedCount(); - - UpdateBuilder builder = getUpdateBuilder(vo); - builder.set(vo, "state", nextState); - builder.set(vo, "updated", new Date()); - - int rows = update((ImageDataVO) vo, sc); - if (rows == 0 && s_logger.isDebugEnabled()) { - ImageDataVO dbVol = findByIdIncludingRemoved(vo.getId()); - if (dbVol != null) { - StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString()); - str.append(": DB Data={id=").append(dbVol.getId()).append("; state=").append(dbVol.getState()).append("; updatecount=").append(dbVol.getUpdatedCount()).append(";updatedTime=") - .append(dbVol.getUpdated()); - str.append(": New Data={id=").append(vo.getId()).append("; state=").append(nextState).append("; event=").append(event).append("; updatecount=").append(vo.getUpdatedCount()) - .append("; updatedTime=").append(vo.getUpdated()); - str.append(": stale Data={id=").append(vo.getId()).append("; state=").append(currentState).append("; event=").append(event).append("; updatecount=").append(oldUpdated) - .append("; updatedTime=").append(oldUpdatedTime); - } else { - s_logger.debug("Unable to update objectIndatastore: id=" + vo.getId() + ", as there is no such object exists in the database anymore"); - } - } - return rows > 0; - } -} \ No newline at end of file diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java deleted file mode 100644 index e3ddaed721a..00000000000 --- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java +++ /dev/null @@ -1,450 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cloudstack.storage.image.db; - -import java.util.Date; -import java.util.Map; -import java.util.UUID; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.TableGenerator; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.persistence.Transient; - -import org.apache.cloudstack.api.Identity; -import org.apache.cloudstack.storage.image.TemplateState; - -import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.storage.Storage; -import com.cloud.storage.Storage.TemplateType; -import com.cloud.storage.VMTemplateVO; -import com.cloud.utils.db.GenericDao; -import com.cloud.utils.fsm.StateObject; - -@Entity -@Table(name = "vm_template") -public class ImageDataVO implements Identity, StateObject { - @Id - @TableGenerator(name = "vm_template_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "vm_template_seq", allocationSize = 1) - @Column(name = "id", nullable = false) - private long id; - - @Column(name = "format") - private String format; - - @Column(name = "unique_name") - private String uniqueName; - - @Column(name = "name") - private String name = null; - - @Column(name = "public") - private boolean publicTemplate = true; - - @Column(name = "featured") - private boolean featured; - - @Column(name = "type") - private Storage.TemplateType templateType; - - @Column(name = "url") - private String url = null; - - @Column(name = "hvm") - private boolean requiresHvm; - - @Column(name = "bits") - private int bits; - - @Temporal(value = TemporalType.TIMESTAMP) - @Column(name = GenericDao.CREATED_COLUMN) - private Date created = null; - - @Column(name = GenericDao.REMOVED) - @Temporal(TemporalType.TIMESTAMP) - private Date removed; - - @Column(name = "account_id") - private long accountId; - - @Column(name = "checksum") - private String checksum; - - @Column(name = "display_text", length = 4096) - private String displayText; - - @Column(name = "enable_password") - private boolean enablePassword; - - @Column(name = "guest_os_id") - private long guestOSId; - - @Column(name = "bootable") - private boolean bootable = true; - - @Column(name = "prepopulate") - private boolean prepopulate = false; - - @Column(name = "cross_zones") - private boolean crossZones = false; - - @Column(name = "hypervisor_type") - @Enumerated(value = EnumType.STRING) - private HypervisorType hypervisorType; - - @Column(name = "extractable") - private boolean extractable = true; - - @Column(name = "source_template_id") - private Long sourceTemplateId; - - @Column(name = "template_tag") - private String templateTag; - - @Column(name = "uuid") - private String uuid; - - @Column(name = "sort_key") - private int sortKey; - - @Column(name = "enable_sshkey") - private boolean enableSshKey; - - @Column(name = "image_data_store_id") - private long imageDataStoreId; - - @Column(name = "size") - private Long size; - - @Column(name = "state") - private TemplateState state; - - @Column(name="update_count", updatable = true) - protected long updatedCount; - - @Column(name = "updated") - @Temporal(value = TemporalType.TIMESTAMP) - Date updated; - - @Transient - Map details; - - public String getUniqueName() { - return uniqueName; - } - - public void setUniqueName(String uniqueName) { - this.uniqueName = uniqueName; - } - - public ImageDataVO() { - this.uuid = UUID.randomUUID().toString(); - this.state = TemplateState.Allocated; - this.created = new Date(); - } - - public boolean getEnablePassword() { - return enablePassword; - } - - public String getFormat() { - return format; - } - - public void setEnablePassword(boolean enablePassword) { - this.enablePassword = enablePassword; - } - - public void setFormat(String format) { - this.format = format; - } - - public long getId() { - return id; - } - - public TemplateType getTemplateType() { - return templateType; - } - - public void setTemplateType(TemplateType type) { - this.templateType = type; - } - - public boolean requiresHvm() { - return requiresHvm; - } - - public void setRequireHvm(boolean hvm) { - this.requiresHvm = hvm; - } - - public int getBits() { - return bits; - } - - public void setBits(int bits) { - this.bits = bits; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Date getRemoved() { - return removed; - } - - public boolean isPublicTemplate() { - return publicTemplate; - } - - public void setPublicTemplate(boolean publicTemplate) { - this.publicTemplate = publicTemplate; - } - - public boolean isFeatured() { - return featured; - } - - public void setFeatured(boolean featured) { - this.featured = featured; - } - - public Date getCreated() { - return created; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public long getAccountId() { - return accountId; - } - - public void setAccountId(long accountId) { - this.accountId = accountId; - } - - public String getChecksum() { - return checksum; - } - - public void setChecksum(String checksum) { - this.checksum = checksum; - } - - public String getDisplayText() { - return displayText; - } - - public void setDisplayText(String displayText) { - this.displayText = displayText; - } - - public long getGuestOSId() { - return guestOSId; - } - - public void setGuestOSId(long guestOSId) { - this.guestOSId = guestOSId; - } - - public boolean isBootable() { - return bootable; - } - - public void setBootable(boolean bootable) { - this.bootable = bootable; - } - - public void setPrepopulate(boolean prepopulate) { - this.prepopulate = prepopulate; - } - - public boolean isPrepopulate() { - return prepopulate; - } - - public void setCrossZones(boolean crossZones) { - this.crossZones = crossZones; - } - - public boolean isCrossZones() { - return crossZones; - } - - public HypervisorType getHypervisorType() { - return hypervisorType; - } - - public void setHypervisorType(HypervisorType hyperType) { - hypervisorType = hyperType; - } - - public boolean isExtractable() { - return extractable; - } - - public void setExtractable(boolean extractable) { - this.extractable = extractable; - } - - public Long getSourceTemplateId() { - return sourceTemplateId; - } - - public void setSourceTemplateId(Long sourceTemplateId) { - this.sourceTemplateId = sourceTemplateId; - } - - public String getTemplateTag() { - return templateTag; - } - - public void setTemplateTag(String templateTag) { - this.templateTag = templateTag; - } - - public long getDomainId() { - return -1; - } - - @Override - public String getUuid() { - return this.uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - public Map getDetails() { - return this.details; - } - - public void setDetails(Map details) { - this.details = details; - } - - @Override - public boolean equals(Object that) { - if (this == that) { - return true; - } - if (!(that instanceof VMTemplateVO)) { - return false; - } - VMTemplateVO other = (VMTemplateVO) that; - - return ((this.getUniqueName().equals(other.getUniqueName()))); - } - - @Override - public int hashCode() { - return uniqueName.hashCode(); - } - - @Transient - String toString; - - @Override - public String toString() { - if (toString == null) { - toString = new StringBuilder("Tmpl[").append(id).append("-").append(format).append("-").append(uniqueName).toString(); - } - return toString; - } - - public void setRemoved(Date removed) { - this.removed = removed; - } - - public void setSortKey(int key) { - sortKey = key; - } - - public int getSortKey() { - return sortKey; - } - - public boolean getEnableSshKey() { - return enableSshKey; - } - - public void setEnableSshKey(boolean enable) { - enableSshKey = enable; - } - - public Long getImageDataStoreId() { - return this.imageDataStoreId; - } - - public void setImageDataStoreId(long dataStoreId) { - this.imageDataStoreId = dataStoreId; - } - - public void setSize(Long size) { - this.size = size; - } - - public Long getSize() { - return this.size; - } - - public TemplateState getState() { - return this.state; - } - - public long getUpdatedCount() { - return this.updatedCount; - } - - public void incrUpdatedCount() { - this.updatedCount++; - } - - public void decrUpdatedCount() { - this.updatedCount--; - } - - public Date getUpdated() { - return updated; - } - - public void setUpdated(Date updated) { - this.updated = updated; - } - -} diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java b/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java index 422bc066211..908d6d52c20 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java @@ -19,9 +19,9 @@ package org.apache.cloudstack.storage.image.motion; import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult; +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.framework.async.AsyncCompletionCallback; import org.apache.cloudstack.storage.db.ObjectInDataStoreVO; -import org.apache.cloudstack.storage.image.TemplateInfo; import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo; public interface ImageMotionService { diff --git a/engine/storage/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java b/engine/storage/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java new file mode 100644 index 00000000000..cfd9f400839 --- /dev/null +++ b/engine/storage/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java @@ -0,0 +1,725 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.motion; + +import java.util.Date; +import java.util.List; + +import javax.inject.Inject; + +import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; +import org.apache.cloudstack.framework.async.AsyncCompletionCallback; +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.BackupSnapshotAnswer; +import com.cloud.agent.api.BackupSnapshotCommand; +import com.cloud.agent.api.Command; +import com.cloud.agent.api.CreatePrivateTemplateFromSnapshotCommand; +import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand; +import com.cloud.agent.api.CreateVolumeFromSnapshotAnswer; +import com.cloud.agent.api.CreateVolumeFromSnapshotCommand; +import com.cloud.agent.api.UpgradeSnapshotCommand; +import com.cloud.agent.api.storage.CopyVolumeAnswer; +import com.cloud.agent.api.storage.CopyVolumeCommand; +import com.cloud.agent.api.storage.CreateAnswer; +import com.cloud.agent.api.storage.CreateCommand; +import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; +import com.cloud.agent.api.to.S3TO; +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.agent.api.to.SwiftTO; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.exception.StorageUnavailableException; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.storage.DiskOfferingVO; +import com.cloud.storage.SnapshotVO; +import com.cloud.storage.Storage.ImageFormat; +import com.cloud.storage.StorageManager; +import com.cloud.storage.StoragePool; +import com.cloud.storage.VMTemplateHostVO; +import com.cloud.storage.VMTemplateStoragePoolVO; +import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; +import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.VolumeHostVO; +import com.cloud.storage.VolumeManager; +import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.DiskOfferingDao; +import com.cloud.storage.dao.SnapshotDao; +import com.cloud.storage.dao.VMTemplateDao; +import com.cloud.storage.dao.VMTemplateHostDao; +import com.cloud.storage.dao.VMTemplatePoolDao; +import com.cloud.storage.dao.VolumeDao; +import com.cloud.storage.dao.VolumeHostDao; +import com.cloud.storage.s3.S3Manager; +import com.cloud.storage.snapshot.SnapshotManager; +import com.cloud.storage.swift.SwiftManager; +import com.cloud.template.TemplateManager; +import com.cloud.utils.NumbersUtil; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.vm.DiskProfile; + +@Component +public class AncientDataMotionStrategy implements DataMotionStrategy { + private static final Logger s_logger = Logger + .getLogger(AncientDataMotionStrategy.class); + @Inject + TemplateManager templateMgr; + @Inject + VolumeHostDao volumeHostDao; + @Inject + HostDao hostDao; + @Inject + ConfigurationDao configDao; + @Inject + StorageManager storageMgr; + @Inject + VolumeDao volDao; + @Inject + VMTemplateDao templateDao; + @Inject + SnapshotManager snapshotMgr; + @Inject + SnapshotDao snapshotDao; + @Inject + PrimaryDataStoreDao primaryDataStoreDao; + @Inject + DataStoreManager dataStoreMgr; + @Inject + VMTemplateHostDao templateHostDao; + @Inject DiskOfferingDao diskOfferingDao; + @Inject VMTemplatePoolDao templatePoolDao; + @Inject + VolumeManager volumeMgr; + @Inject + private SwiftManager _swiftMgr; + @Inject + private S3Manager _s3Mgr; + + @Override + public boolean canHandle(DataObject srcData, DataObject destData) { + // TODO Auto-generated method stub + return true; + } + + @DB + protected Answer copyVolumeFromImage(DataObject srcData, DataObject destData) { + String value = configDao.getValue(Config.RecreateSystemVmEnabled.key()); + int _copyvolumewait = NumbersUtil.parseInt(value, + Integer.parseInt(Config.CopyVolumeWait.getDefaultValue())); + + VolumeHostVO volumeHostVO = volumeHostDao.findByVolumeId(srcData + .getId()); + HostVO secStorage = hostDao.findById(volumeHostVO.getHostId()); + String secondaryStorageURL = secStorage.getStorageUrl(); + String[] volumePath = volumeHostVO.getInstallPath().split("/"); + String volumeUUID = volumePath[volumePath.length - 1].split("\\.")[0]; + StoragePool destPool = (StoragePool) destData.getDataStore(); + CopyVolumeCommand cvCmd = new CopyVolumeCommand(srcData.getId(), + volumeUUID, destPool, secondaryStorageURL, false, + _copyvolumewait); + CopyVolumeAnswer cvAnswer = null; + String errMsg = null; + try { + cvAnswer = (CopyVolumeAnswer) this.storageMgr.sendToPool(destPool, + cvCmd); + } catch (StorageUnavailableException e1) { + s_logger.debug("Failed to copy volume " + srcData.getId() + " to " + + destData.getId(), e1); + errMsg = e1.toString(); + } + + if (cvAnswer == null || !cvAnswer.getResult()) { + errMsg = cvAnswer.getDetails(); + } + + VolumeVO vol = this.volDao.findById(destData.getId()); + Transaction txn = Transaction.currentTxn(); + txn.start(); + vol.setPath(cvAnswer.getVolumePath()); + vol.setFolder(destPool.getPath()); + vol.setPodId(destPool.getPodId()); + vol.setPoolId(destPool.getId()); + vol.setPodId(destPool.getPodId()); + + this.volDao.update(vol.getId(), vol); + volumeHostDao.remove(volumeHostVO.getId()); + txn.commit(); + return cvAnswer; + } + + private Answer copyTemplate(DataObject srcData, DataObject destData) { + VMTemplateVO template = this.templateDao.findById(srcData.getId()); + templateMgr.prepareTemplateForCreate(template, + (StoragePool) destData.getDataStore()); + return null; + } + + protected Answer copyFromSnapshot(DataObject snapObj, DataObject volObj) { + SnapshotVO snapshot = this.snapshotDao.findById(snapObj.getId()); + StoragePool pool = (StoragePool) volObj.getDataStore(); + String vdiUUID = null; + Long snapshotId = snapshot.getId(); + Long volumeId = snapshot.getVolumeId(); + Long dcId = snapshot.getDataCenterId(); + String secondaryStoragePoolUrl = this.snapshotMgr + .getSecondaryStorageURL(snapshot); + long accountId = snapshot.getAccountId(); + + String backedUpSnapshotUuid = snapshot.getBackupSnapshotId(); + snapshot = snapshotDao.findById(snapshotId); + if (snapshot.getVersion().trim().equals("2.1")) { + VolumeVO volume = this.volDao.findByIdIncludingRemoved(volumeId); + if (volume == null) { + throw new CloudRuntimeException("failed to upgrade snapshot " + + snapshotId + " due to unable to find orignal volume:" + + volumeId + ", try it later "); + } + if (volume.getTemplateId() == null) { + snapshotDao.updateSnapshotVersion(volumeId, "2.1", "2.2"); + } else { + VMTemplateVO template = templateDao + .findByIdIncludingRemoved(volume.getTemplateId()); + if (template == null) { + throw new CloudRuntimeException( + "failed to upgrade snapshot " + + snapshotId + + " due to unalbe to find orignal template :" + + volume.getTemplateId() + + ", try it later "); + } + Long templateId = template.getId(); + Long tmpltAccountId = template.getAccountId(); + if (!snapshotDao.lockInLockTable(snapshotId.toString(), 10)) { + throw new CloudRuntimeException( + "failed to upgrade snapshot " + + snapshotId + + " due to this snapshot is being used, try it later "); + } + UpgradeSnapshotCommand cmd = new UpgradeSnapshotCommand(null, + secondaryStoragePoolUrl, dcId, accountId, volumeId, + templateId, tmpltAccountId, null, + snapshot.getBackupSnapshotId(), snapshot.getName(), + "2.1"); + Answer answer = null; + try { + answer = this.storageMgr.sendToPool(pool, cmd); + } catch (StorageUnavailableException e) { + } finally { + snapshotDao.unlockFromLockTable(snapshotId.toString()); + } + if ((answer != null) && answer.getResult()) { + snapshotDao.updateSnapshotVersion(volumeId, "2.1", "2.2"); + } else { + throw new CloudRuntimeException("Unable to upgrade snapshot from 2.1 to 2.2 for " + + snapshot.getId()); + } + } + } + String basicErrMsg = "Failed to create volume from " + + snapshot.getName() + " on pool " + pool; + + try { + if (snapshot.getSwiftId() != null && snapshot.getSwiftId() != 0) { + snapshotMgr.downloadSnapshotsFromSwift(snapshot); + } else if (snapshot.getS3Id() != null && snapshot.getS3Id() != 0) { + snapshotMgr.downloadSnapshotsFromS3(snapshot); + } + String value = configDao + .getValue(Config.CreateVolumeFromSnapshotWait.toString()); + int _createVolumeFromSnapshotWait = NumbersUtil.parseInt(value, + Integer.parseInt(Config.CreateVolumeFromSnapshotWait + .getDefaultValue())); + CreateVolumeFromSnapshotCommand createVolumeFromSnapshotCommand = new CreateVolumeFromSnapshotCommand( + pool, secondaryStoragePoolUrl, dcId, accountId, volumeId, + backedUpSnapshotUuid, snapshot.getName(), + _createVolumeFromSnapshotWait); + CreateVolumeFromSnapshotAnswer answer; + if (!snapshotDao.lockInLockTable(snapshotId.toString(), 10)) { + throw new CloudRuntimeException("failed to create volume from " + + snapshotId + + " due to this snapshot is being used, try it later "); + } + answer = (CreateVolumeFromSnapshotAnswer) this.storageMgr + .sendToPool(pool, createVolumeFromSnapshotCommand); + if (answer != null && answer.getResult()) { + vdiUUID = answer.getVdi(); + VolumeVO vol = this.volDao.findById(volObj.getId()); + vol.setPath(vdiUUID); + this.volDao.update(vol.getId(), vol); + return null; + } else { + s_logger.error(basicErrMsg + " due to " + + ((answer == null) ? "null" : answer.getDetails())); + throw new CloudRuntimeException(basicErrMsg); + } + } catch (StorageUnavailableException e) { + s_logger.error(basicErrMsg, e); + throw new CloudRuntimeException(basicErrMsg); + } finally { + if (snapshot.getSwiftId() != null) { + snapshotMgr.deleteSnapshotsDirForVolume( + secondaryStoragePoolUrl, dcId, accountId, volumeId); + } + } + } + + protected Answer cloneVolume(DataObject template, DataObject volume) { + VolumeInfo volInfo = (VolumeInfo)volume; + DiskOfferingVO offering = diskOfferingDao.findById(volInfo.getDiskOfferingId()); + VMTemplateStoragePoolVO tmpltStoredOn = templatePoolDao.findByPoolTemplate(template.getDataStore().getId(), template.getId()); + + DiskProfile diskProfile = new DiskProfile(volInfo, offering, + null); + CreateCommand cmd = new CreateCommand(diskProfile, + tmpltStoredOn.getLocalDownloadPath(), + new StorageFilerTO((StoragePool)template.getDataStore())); + Answer answer = null; + StoragePool pool = (StoragePool)volume.getDataStore(); + String errMsg = null; + try { + answer = storageMgr.sendToPool(pool, null, cmd); + } catch (StorageUnavailableException e) { + s_logger.debug("Failed to send to storage pool", e); + throw new CloudRuntimeException("Failed to send to storage pool", e); + } + + if (answer.getResult()) { + VolumeVO vol = this.volDao.findById(volume.getId()); + CreateAnswer createAnswer = (CreateAnswer) answer; + vol.setFolder(pool.getPath()); + vol.setPath(createAnswer.getVolume().getPath()); + vol.setSize(createAnswer.getVolume().getSize()); + vol.setPoolType(pool.getPoolType()); + vol.setPoolId(pool.getId()); + vol.setPodId(pool.getPodId()); + this.volDao.update(vol.getId(), vol); + + } else { + if (tmpltStoredOn != null + && (answer instanceof CreateAnswer) + && ((CreateAnswer) answer) + .templateReloadRequested()) { + if (!templateMgr + .resetTemplateDownloadStateOnPool(tmpltStoredOn + .getId())) { + + } + } + errMsg = answer.getDetails(); + } + + return answer; + } + + protected Answer copyVolumeBetweenPools(DataObject srcData, DataObject destData) { + VolumeInfo volume = (VolumeInfo)srcData; + VolumeInfo destVolume = (VolumeInfo)destData; + String secondaryStorageURL = this.templateMgr.getSecondaryStorageURL(volume + .getDataCenterId()); + StoragePool srcPool = (StoragePool)this.dataStoreMgr.getDataStore(volume + .getPoolId(), DataStoreRole.Primary); + + StoragePool destPool = (StoragePool)this.dataStoreMgr.getDataStore(destVolume.getPoolId(), DataStoreRole.Primary); + + String value = this.configDao.getValue(Config.CopyVolumeWait.toString()); + int _copyvolumewait = NumbersUtil.parseInt(value, + Integer.parseInt(Config.CopyVolumeWait.getDefaultValue())); + CopyVolumeCommand cvCmd = new CopyVolumeCommand(volume.getId(), + volume.getPath(), srcPool, secondaryStorageURL, true, + _copyvolumewait); + CopyVolumeAnswer cvAnswer; + try { + cvAnswer = (CopyVolumeAnswer) this.storageMgr.sendToPool(srcPool, cvCmd); + } catch (StorageUnavailableException e1) { + throw new CloudRuntimeException( + "Failed to copy the volume from the source primary storage pool to secondary storage.", + e1); + } + + if (cvAnswer == null || !cvAnswer.getResult()) { + throw new CloudRuntimeException( + "Failed to copy the volume from the source primary storage pool to secondary storage."); + } + + String secondaryStorageVolumePath = cvAnswer.getVolumePath(); + + cvCmd = new CopyVolumeCommand(volume.getId(), + secondaryStorageVolumePath, destPool, + secondaryStorageURL, false, _copyvolumewait); + try { + cvAnswer = (CopyVolumeAnswer) this.storageMgr.sendToPool(destPool, cvCmd); + } catch (StorageUnavailableException e1) { + throw new CloudRuntimeException( + "Failed to copy the volume from secondary storage to the destination primary storage pool."); + } + + if (cvAnswer == null || !cvAnswer.getResult()) { + throw new CloudRuntimeException( + "Failed to copy the volume from secondary storage to the destination primary storage pool."); + } + + VolumeVO destVol = this.volDao.findById(destVolume.getId()); + destVol.setPath(cvAnswer.getVolumePath()); + this.volDao.update(destVol.getId(), destVol); + return cvAnswer; + } + + @Override + public Void copyAsync(DataObject srcData, DataObject destData, + AsyncCompletionCallback callback) { + Answer answer = null; + String errMsg = null; + try { + if (destData.getType() == DataObjectType.VOLUME + && srcData.getType() == DataObjectType.VOLUME && srcData.getDataStore().getRole() == DataStoreRole.Image) { + answer = copyVolumeFromImage(srcData, destData); + } else if (destData.getType() == DataObjectType.TEMPLATE + && srcData.getType() == DataObjectType.TEMPLATE) { + answer = copyTemplate(srcData, destData); + } else if (srcData.getType() == DataObjectType.SNAPSHOT + && destData.getType() == DataObjectType.VOLUME) { + answer = copyFromSnapshot(srcData, destData); + } else if (srcData.getType() == DataObjectType.SNAPSHOT + && destData.getType() == DataObjectType.TEMPLATE) { + answer = createTemplateFromSnashot(srcData, destData); + } else if (srcData.getType() == DataObjectType.VOLUME + && destData.getType() == DataObjectType.TEMPLATE) { + answer = createTemplateFromVolume(srcData, destData); + } else if (srcData.getType() == DataObjectType.TEMPLATE + && destData.getType() == DataObjectType.VOLUME) { + answer = cloneVolume(srcData, destData); + } else if (destData.getType() == DataObjectType.VOLUME + && srcData.getType() == DataObjectType.VOLUME && srcData.getDataStore().getRole() == DataStoreRole.Primary) { + answer = copyVolumeBetweenPools(srcData, destData); + } else if (srcData.getType() == DataObjectType.SNAPSHOT && + destData.getType() == DataObjectType.SNAPSHOT) { + answer = copySnapshot(srcData, destData); + } + } catch (Exception e) { + s_logger.debug("copy failed", e); + errMsg = e.toString(); + } + CopyCommandResult result = new CopyCommandResult(null, answer); + result.setResult(errMsg); + callback.complete(result); + + return null; + } + + @DB + protected Answer createTemplateFromSnashot(DataObject srcData, + DataObject destData) { + long snapshotId = srcData.getId(); + SnapshotVO snapshot = snapshotDao.findById(snapshotId); + if (snapshot == null) { + throw new CloudRuntimeException("Unable to find Snapshot for Id " + + srcData.getId()); + } + Long zoneId = snapshot.getDataCenterId(); + HostVO secondaryStorageHost = this.templateMgr + .getSecondaryStorageHost(zoneId); + String secondaryStorageURL = snapshotMgr + .getSecondaryStorageURL(snapshot); + VMTemplateVO template = this.templateDao.findById(destData.getId()); + String name = template.getName(); + String backupSnapshotUUID = snapshot.getBackupSnapshotId(); + if (backupSnapshotUUID == null) { + throw new CloudRuntimeException( + "Unable to create private template from snapshot " + + snapshotId + + " due to there is no backupSnapshotUUID for this snapshot"); + } + + Long dcId = snapshot.getDataCenterId(); + Long accountId = snapshot.getAccountId(); + Long volumeId = snapshot.getVolumeId(); + + String origTemplateInstallPath = null; + List pools = this.storageMgr + .ListByDataCenterHypervisor(zoneId, + snapshot.getHypervisorType()); + if (pools == null || pools.size() == 0) { + throw new CloudRuntimeException( + "Unable to find storage pools in zone " + zoneId); + } + StoragePoolVO poolvo = pools.get(0); + StoragePool pool = (StoragePool) this.dataStoreMgr.getDataStore( + poolvo.getId(), DataStoreRole.Primary); + if (snapshot.getVersion() != null + && snapshot.getVersion().equalsIgnoreCase("2.1")) { + VolumeVO volume = this.volDao.findByIdIncludingRemoved(volumeId); + if (volume == null) { + throw new CloudRuntimeException("failed to upgrade snapshot " + + snapshotId + " due to unable to find orignal volume:" + + volumeId + ", try it later "); + } + if (volume.getTemplateId() == null) { + snapshotDao.updateSnapshotVersion(volumeId, "2.1", "2.2"); + } else { + template = templateDao.findByIdIncludingRemoved(volume + .getTemplateId()); + if (template == null) { + throw new CloudRuntimeException( + "failed to upgrade snapshot " + + snapshotId + + " due to unalbe to find orignal template :" + + volume.getTemplateId() + + ", try it later "); + } + Long origTemplateId = template.getId(); + Long origTmpltAccountId = template.getAccountId(); + if (!this.volDao.lockInLockTable(volumeId.toString(), 10)) { + throw new CloudRuntimeException( + "failed to upgrade snapshot " + snapshotId + + " due to volume:" + volumeId + + " is being used, try it later "); + } + UpgradeSnapshotCommand cmd = new UpgradeSnapshotCommand(null, + secondaryStorageURL, dcId, accountId, volumeId, + origTemplateId, origTmpltAccountId, null, + snapshot.getBackupSnapshotId(), snapshot.getName(), + "2.1"); + if (!this.volDao.lockInLockTable(volumeId.toString(), 10)) { + throw new CloudRuntimeException( + "Creating template failed due to volume:" + + volumeId + + " is being used, try it later "); + } + Answer answer = null; + try { + answer = this.storageMgr.sendToPool(pool, cmd); + cmd = null; + } catch (StorageUnavailableException e) { + } finally { + this.volDao.unlockFromLockTable(volumeId.toString()); + } + if ((answer != null) && answer.getResult()) { + snapshotDao.updateSnapshotVersion(volumeId, "2.1", "2.2"); + } else { + throw new CloudRuntimeException( + "Unable to upgrade snapshot"); + } + } + } + if (snapshot.getSwiftId() != null && snapshot.getSwiftId() != 0) { + snapshotMgr.downloadSnapshotsFromSwift(snapshot); + } + String value = configDao + .getValue(Config.CreatePrivateTemplateFromSnapshotWait + .toString()); + int _createprivatetemplatefromsnapshotwait = NumbersUtil.parseInt( + value, Integer + .parseInt(Config.CreatePrivateTemplateFromSnapshotWait + .getDefaultValue())); + + CreatePrivateTemplateFromSnapshotCommand cmd = new CreatePrivateTemplateFromSnapshotCommand( + pool, secondaryStorageURL, dcId, accountId, + snapshot.getVolumeId(), backupSnapshotUUID, snapshot.getName(), + origTemplateInstallPath, template.getId(), name, + _createprivatetemplatefromsnapshotwait); + + return sendCommand(cmd, pool, template.getId(), dcId, + secondaryStorageHost.getId()); + } + + @DB + protected Answer sendCommand(Command cmd, StoragePool pool, + long templateId, long zoneId, long hostId) { + + CreatePrivateTemplateAnswer answer = null; + try { + answer = (CreatePrivateTemplateAnswer) this.storageMgr.sendToPool( + pool, cmd); + } catch (StorageUnavailableException e) { + throw new CloudRuntimeException( + "Failed to execute CreatePrivateTemplateFromSnapshotCommand", + e); + } + + if (answer == null || !answer.getResult()) { + return answer; + } + + VMTemplateVO privateTemplate = templateDao.findById(templateId); + String answerUniqueName = answer.getUniqueName(); + if (answerUniqueName != null) { + privateTemplate.setUniqueName(answerUniqueName); + } + ImageFormat format = answer.getImageFormat(); + if (format != null) { + privateTemplate.setFormat(format); + } else { + // This never occurs. + // Specify RAW format makes it unusable for snapshots. + privateTemplate.setFormat(ImageFormat.RAW); + } + + String checkSum = this.templateMgr + .getChecksum(hostId, answer.getPath()); + + Transaction txn = Transaction.currentTxn(); + + txn.start(); + + privateTemplate.setChecksum(checkSum); + templateDao.update(privateTemplate.getId(), privateTemplate); + + // add template zone ref for this template + templateDao.addTemplateToZone(privateTemplate, zoneId); + VMTemplateHostVO templateHostVO = new VMTemplateHostVO(hostId, + privateTemplate.getId()); + templateHostVO.setDownloadPercent(100); + templateHostVO.setDownloadState(Status.DOWNLOADED); + templateHostVO.setInstallPath(answer.getPath()); + templateHostVO.setLastUpdated(new Date()); + templateHostVO.setSize(answer.getVirtualSize()); + templateHostVO.setPhysicalSize(answer.getphysicalSize()); + templateHostDao.persist(templateHostVO); + txn.close(); + return answer; + } + + private Answer createTemplateFromVolume(DataObject srcObj, + DataObject destObj) { + long volumeId = srcObj.getId(); + VolumeVO volume = this.volDao.findById(volumeId); + if (volume == null) { + throw new CloudRuntimeException("Unable to find volume for Id " + + volumeId); + } + long accountId = volume.getAccountId(); + + String vmName = this.volumeMgr.getVmNameOnVolume(volume); + Long zoneId = volume.getDataCenterId(); + HostVO secondaryStorageHost = this.templateMgr + .getSecondaryStorageHost(zoneId); + if (secondaryStorageHost == null) { + throw new CloudRuntimeException( + "Can not find the secondary storage for zoneId " + zoneId); + } + String secondaryStorageURL = secondaryStorageHost.getStorageUrl(); + VMTemplateVO template = this.templateDao.findById(destObj.getId()); + StoragePool pool = (StoragePool) this.dataStoreMgr.getDataStore( + volume.getPoolId(), DataStoreRole.Primary); + String value = configDao + .getValue(Config.CreatePrivateTemplateFromVolumeWait.toString()); + int _createprivatetemplatefromvolumewait = NumbersUtil.parseInt(value, + Integer.parseInt(Config.CreatePrivateTemplateFromVolumeWait + .getDefaultValue())); + + CreatePrivateTemplateFromVolumeCommand cmd = new CreatePrivateTemplateFromVolumeCommand( + pool, secondaryStorageURL, destObj.getId(), accountId, + template.getName(), template.getUniqueName(), volume.getPath(), + vmName, _createprivatetemplatefromvolumewait); + + return sendCommand(cmd, pool, template.getId(), zoneId, + secondaryStorageHost.getId()); + } + + private HostVO getSecHost(long volumeId, long dcId) { + Long id = snapshotDao.getSecHostId(volumeId); + if ( id != null) { + return hostDao.findById(id); + } + return this.templateMgr.getSecondaryStorageHost(dcId); + } + + protected Answer copySnapshot(DataObject srcObject, DataObject destObject) { + SnapshotInfo srcSnapshot = (SnapshotInfo)srcObject; + VolumeInfo baseVolume = srcSnapshot.getBaseVolume(); + Long dcId = baseVolume.getDataCenterId(); + Long accountId = baseVolume.getAccountId(); + + HostVO secHost = getSecHost(baseVolume.getId(), baseVolume.getDataCenterId()); + + String secondaryStoragePoolUrl = secHost.getStorageUrl(); + String snapshotUuid = srcSnapshot.getPath(); + // In order to verify that the snapshot is not empty, + // we check if the parent of the snapshot is not the same as the parent of the previous snapshot. + // We pass the uuid of the previous snapshot to the plugin to verify this. + SnapshotVO prevSnapshot = null; + String prevSnapshotUuid = null; + String prevBackupUuid = null; + + + SwiftTO swift = _swiftMgr.getSwiftTO(); + S3TO s3 = _s3Mgr.getS3TO(); + + long prevSnapshotId = srcSnapshot.getPrevSnapshotId(); + if (prevSnapshotId > 0) { + prevSnapshot = snapshotDao.findByIdIncludingRemoved(prevSnapshotId); + if ( prevSnapshot.getBackupSnapshotId() != null && swift == null) { + if (prevSnapshot.getVersion() != null && prevSnapshot.getVersion().equals("2.2")) { + prevBackupUuid = prevSnapshot.getBackupSnapshotId(); + prevSnapshotUuid = prevSnapshot.getPath(); + } + } else if ((prevSnapshot.getSwiftId() != null && swift != null) + || (prevSnapshot.getS3Id() != null && s3 != null)) { + prevBackupUuid = prevSnapshot.getBackupSnapshotId(); + prevSnapshotUuid = prevSnapshot.getPath(); + } + } + boolean isVolumeInactive = this.volumeMgr.volumeInactive(baseVolume); + String vmName = this.volumeMgr.getVmNameOnVolume(baseVolume); + StoragePool srcPool = (StoragePool)dataStoreMgr.getPrimaryDataStore(baseVolume.getPoolId()); + String value = configDao.getValue(Config.BackupSnapshotWait.toString()); + int _backupsnapshotwait = NumbersUtil.parseInt(value, Integer.parseInt(Config.BackupSnapshotWait.getDefaultValue())); + BackupSnapshotCommand backupSnapshotCommand = new BackupSnapshotCommand(secondaryStoragePoolUrl, dcId, accountId, baseVolume.getId(), srcSnapshot.getId(), baseVolume.getPath(), srcPool, snapshotUuid, + srcSnapshot.getName(), prevSnapshotUuid, prevBackupUuid, isVolumeInactive, vmName, _backupsnapshotwait); + + if ( swift != null ) { + backupSnapshotCommand.setSwift(swift); + } else if (s3 != null) { + backupSnapshotCommand.setS3(s3); + } + BackupSnapshotAnswer answer = (BackupSnapshotAnswer) this.snapshotMgr.sendToPool(baseVolume, backupSnapshotCommand); + if (answer != null && answer.getResult()) { + SnapshotVO snapshotVO = this.snapshotDao.findById(srcSnapshot.getId()); + if (backupSnapshotCommand.getSwift() != null ) { + snapshotVO.setSwiftId(swift.getId()); + snapshotVO.setBackupSnapshotId(answer.getBackupSnapshotName()); + } else if (backupSnapshotCommand.getS3() != null) { + snapshotVO.setS3Id(s3.getId()); + snapshotVO.setBackupSnapshotId(answer.getBackupSnapshotName()); + } else { + snapshotVO.setSecHostId(secHost.getId()); + snapshotVO.setBackupSnapshotId(answer.getBackupSnapshotName()); + } + if (answer.isFull()) { + snapshotVO.setPrevSnapshotId(0L); + } + this.snapshotDao.update(srcSnapshot.getId(), snapshotVO); + } + return answer; + } + +} diff --git a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java index 6a7d78a972a..0a91186aaab 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotEntityImpl.java @@ -105,13 +105,6 @@ public class SnapshotEntityImpl implements SnapshotEntity { return null; } - @Override - public Type getType() { - // TODO Auto-generated method stub - return null; - } - - @Override public HypervisorType getHypervisorType() { // TODO Auto-generated method stub @@ -190,4 +183,10 @@ public class SnapshotEntityImpl implements SnapshotEntity { return null; } + @Override + public Type getRecurringType() { + // TODO Auto-generated method stub + return null; + } + } diff --git a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotService.java b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotService.java index d50c9a0c8f3..f3e5c4aea50 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotService.java +++ b/engine/storage/src/org/apache/cloudstack/storage/snapshot/SnapshotService.java @@ -17,6 +17,7 @@ package org.apache.cloudstack.storage.snapshot; import org.apache.cloudstack.engine.cloud.entity.api.SnapshotEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; public interface SnapshotService { public SnapshotEntity getSnapshotEntity(long snapshotId); diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java index cd67b97b02c..aa47e8f4977 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java +++ b/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java @@ -21,12 +21,12 @@ import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; public class PrimaryDataStoreTO { private final String uuid; private final String name; - private final String type; + private String type; private final long id; public PrimaryDataStoreTO(PrimaryDataStoreInfo dataStore) { this.uuid = dataStore.getUuid(); this.name = dataStore.getName(); - this.type = dataStore.getType(); + // this.type = dataStore.getType(); this.id = dataStore.getId(); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java index ed5990986e5..bc55ea8c3ea 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java +++ b/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java @@ -16,8 +16,8 @@ // under the License. package org.apache.cloudstack.storage.to; +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat; -import org.apache.cloudstack.storage.image.TemplateInfo; import org.apache.cloudstack.storage.image.datastore.ImageDataStoreInfo; public class TemplateTO { diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreInfo.java b/engine/storage/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreInfo.java index 368c33a32bf..b8d0857d495 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreInfo.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreInfo.java @@ -18,8 +18,8 @@ */ package org.apache.cloudstack.storage.volume; +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.storage.datastore.PrimaryDataStore; -import org.apache.cloudstack.storage.image.TemplateInfo; public interface TemplateOnPrimaryDataStoreInfo { public String getPath(); diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java b/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java index 20ceaa303fc..c6ca90d1641 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/datastore/PrimaryDataStoreHelper.java @@ -23,40 +23,38 @@ import java.util.Map; import javax.inject.Inject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; -import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; import org.apache.cloudstack.storage.command.AttachPrimaryDataStoreCmd; -import org.apache.cloudstack.storage.datastore.PrimaryDataStore; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; -import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO; -import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.springframework.stereotype.Component; +import com.cloud.storage.Storage.StoragePoolType; import com.cloud.utils.exception.CloudRuntimeException; @Component public class PrimaryDataStoreHelper { @Inject private PrimaryDataStoreDao dataStoreDao; - public PrimaryDataStoreVO createPrimaryDataStore(Map params) { - PrimaryDataStoreVO dataStoreVO = dataStoreDao.findPoolByUUID(params.get("uuid")); + public StoragePoolVO createPrimaryDataStore(Map params) { + StoragePoolVO dataStoreVO = dataStoreDao.findPoolByUUID((String)params.get("uuid")); if (dataStoreVO != null) { throw new CloudRuntimeException("duplicate uuid: " + params.get("uuid")); } - dataStoreVO = new PrimaryDataStoreVO(); - dataStoreVO.setStorageProviderId(Long.parseLong(params.get("providerId"))); - dataStoreVO.setHostAddress(params.get("server")); - dataStoreVO.setPath(params.get("path")); - dataStoreVO.setPoolType(params.get("protocol")); - dataStoreVO.setPort(Integer.parseInt(params.get("port"))); - dataStoreVO.setName(params.get("name")); - dataStoreVO.setUuid(params.get("uuid")); + dataStoreVO = new StoragePoolVO(); + dataStoreVO.setStorageProviderId(Long.parseLong((String)params.get("providerId"))); + dataStoreVO.setHostAddress((String)params.get("server")); + dataStoreVO.setPath((String)params.get("path")); + dataStoreVO.setPoolType((StoragePoolType)params.get("protocol")); + dataStoreVO.setPort(Integer.parseInt((String)params.get("port"))); + dataStoreVO.setName((String)params.get("name")); + dataStoreVO.setUuid((String)params.get("uuid")); dataStoreVO = dataStoreDao.persist(dataStoreVO); return dataStoreVO; } public boolean deletePrimaryDataStore(long id) { - PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(id); + StoragePoolVO dataStoreVO = dataStoreDao.findById(id); if (dataStoreVO == null) { throw new CloudRuntimeException("can't find store: " + id); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDao.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDao.java index 45ff1ec2258..63cdb16c596 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDao.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDao.java @@ -18,7 +18,7 @@ */ package org.apache.cloudstack.storage.volume.db; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; import com.cloud.utils.db.GenericDao; import com.cloud.utils.fsm.StateDao; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java index b47f08881e1..ad561502266 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java @@ -20,9 +20,9 @@ package org.apache.cloudstack.storage.volume.db; import java.util.Date; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.State; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreVO.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreVO.java index 2d355df7e2a..48a9f334a19 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreVO.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreVO.java @@ -32,7 +32,9 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; -import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine; + +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; + import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.fsm.StateObject; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java index 1e12498dff6..d8497e2f3da 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao2Impl.java @@ -24,6 +24,7 @@ import java.util.Date; import java.util.List; import javax.ejb.Local; +import javax.inject.Inject; import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk; import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType; @@ -36,6 +37,7 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Volume; +import com.cloud.tags.dao.ResourceTagDao; import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.utils.Pair; @@ -63,8 +65,7 @@ public class VolumeDao2Impl extends GenericDaoBase implements Vo protected final SearchBuilder InstanceStatesSearch; protected final SearchBuilder AllFieldsSearch; protected GenericSearchBuilder CountByAccount; - //ResourceTagsDaoImpl _tagsDao = ComponentLocator.inject(ResourceTagsDaoImpl.class); - ResourceTagsDaoImpl _tagsDao = null; + @Inject ResourceTagDao _tagsDao = null; protected static final String SELECT_VM_SQL = "SELECT DISTINCT instance_id from volumes v where v.host_id = ? and v.mirror_state = ?"; protected static final String SELECT_HYPERTYPE_FROM_VOLUME = "SELECT c.hypervisor_type from volumes v, storage_pool s, cluster c where v.pool_id = s.id and s.cluster_id = c.id and v.id = ?"; diff --git a/engine/storage/volume/pom.xml b/engine/storage/volume/pom.xml index e424cab5d0e..19357ab11e4 100644 --- a/engine/storage/volume/pom.xml +++ b/engine/storage/volume/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-engine - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java index 9c009c95623..fbfade6c6aa 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java @@ -18,45 +18,50 @@ package org.apache.cloudstack.storage.datastore; import java.io.File; import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.inject.Inject; -import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State; import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; +import org.apache.cloudstack.engine.subsystem.api.storage.ImageDataFactory; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver; import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle; import org.apache.cloudstack.engine.subsystem.api.storage.Scope; import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope; import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; -import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO; -import org.apache.cloudstack.storage.datastore.provider.DataStoreProvider; -import org.apache.cloudstack.storage.db.ObjectInDataStoreVO; -import org.apache.cloudstack.storage.image.ImageDataFactory; -import org.apache.cloudstack.storage.image.TemplateInfo; -import org.apache.cloudstack.storage.snapshot.SnapshotDataFactory; -import org.apache.cloudstack.storage.snapshot.SnapshotInfo; -import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.volume.VolumeObject; -import org.apache.cloudstack.storage.volume.db.VolumeDao2; -import org.apache.cloudstack.storage.volume.db.VolumeVO; import org.apache.log4j.Logger; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StoragePoolStatus; +import com.cloud.storage.VMTemplateStoragePoolVO; +import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.VMTemplatePoolDao; +import com.cloud.storage.dao.VolumeDao; import com.cloud.utils.component.ComponentContext; +import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.storage.encoding.EncodingType; public class DefaultPrimaryDataStore implements PrimaryDataStore { private static final Logger s_logger = Logger .getLogger(DefaultPrimaryDataStore.class); protected PrimaryDataStoreDriver driver; - protected PrimaryDataStoreVO pdsv; + protected StoragePoolVO pdsv; @Inject protected PrimaryDataStoreDao dataStoreDao; protected PrimaryDataStoreLifeCycle lifeCycle; @@ -67,15 +72,16 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore { @Inject SnapshotDataFactory snapshotFactory; protected DataStoreProvider provider; - @Inject - private VolumeDao2 volumeDao; + VMTemplatePoolDao templatePoolDao; - protected DefaultPrimaryDataStore() { + private VolumeDao volumeDao; + + public DefaultPrimaryDataStore() { } - public void configure(PrimaryDataStoreVO pdsv, + public void configure(StoragePoolVO pdsv, PrimaryDataStoreDriver driver, DataStoreProvider provider) { this.pdsv = pdsv; this.driver = driver; @@ -83,7 +89,7 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore { } public static DefaultPrimaryDataStore createDataStore( - PrimaryDataStoreVO pdsv, PrimaryDataStoreDriver driver, + StoragePoolVO pdsv, PrimaryDataStoreDriver driver, DataStoreProvider provider) { DefaultPrimaryDataStore dataStore = (DefaultPrimaryDataStore)ComponentContext.inject(DefaultPrimaryDataStore.class); dataStore.configure(pdsv, driver, provider); @@ -109,19 +115,16 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore { @Override public DataStoreDriver getDriver() { - // TODO Auto-generated method stub return this.driver; } @Override public DataStoreRole getRole() { - // TODO Auto-generated method stub return DataStoreRole.Primary; } @Override public long getId() { - // TODO Auto-generated method stub return this.pdsv.getId(); } @@ -143,7 +146,7 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore { @Override public Scope getScope() { - PrimaryDataStoreVO vo = dataStoreDao.findById(this.pdsv.getId()); + StoragePoolVO vo = dataStoreDao.findById(this.pdsv.getId()); if (vo.getScope() == ScopeType.CLUSTER) { return new ClusterScope(vo.getClusterId(), vo.getPodId(), vo.getDataCenterId()); @@ -156,7 +159,7 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore { @Override public boolean isHypervisorSupported(HypervisorType hypervisor) { // TODO Auto-generated method stub - return false; + return true; } @Override @@ -171,28 +174,10 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore { return false; } - @Override - public long getCapacity() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public long getAvailableCapacity() { - // TODO Auto-generated method stub - return 0; - } @Override public String getUuid() { - // TODO Auto-generated method stub - return null; - } - - @Override - public State getManagedState() { - // TODO Auto-generated method stub - return null; + return this.pdsv.getUuid(); } @Override @@ -201,12 +186,6 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore { return null; } - @Override - public String getType() { - // TODO Auto-generated method stub - return null; - } - @Override public PrimaryDataStoreLifeCycle getLifeCycle() { return this.lifeCycle; @@ -214,14 +193,13 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore { @Override public boolean exists(DataObject data) { - return (objectInStoreMgr.findObject(data.getId(), data.getType(), - this.getId(), this.getRole()) != null) ? true : false; + return (objectInStoreMgr.findObject(data, data.getDataStore()) != null) ? true : false; } @Override public TemplateInfo getTemplate(long templateId) { - ObjectInDataStoreVO obj = objectInStoreMgr.findObject(templateId, DataObjectType.TEMPLATE, this.getId(), this.getRole()); - if (obj == null) { + VMTemplateStoragePoolVO template = templatePoolDao.findByPoolTemplate(this.getId(), templateId); + if (template == null || template.getState() != ObjectInDataStoreStateMachine.State.Ready) { return null; } return imageDataFactory.getTemplate(templateId, this); @@ -238,4 +216,117 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore { // TODO Auto-generated method stub return null; } + + @Override + public DataObject create(DataObject obj) { + //create template on primary storage + if (obj.getType() == DataObjectType.TEMPLATE) { + VMTemplateStoragePoolVO templateStoragePoolRef = templatePoolDao.findByPoolTemplate(this.getId(), obj.getId()); + if (templateStoragePoolRef == null) { + try { + templateStoragePoolRef = new VMTemplateStoragePoolVO(this.getId(), obj.getId()); + templateStoragePoolRef = templatePoolDao.persist(templateStoragePoolRef); + } catch (Throwable t) { + templateStoragePoolRef = templatePoolDao.findByPoolTemplate(this.getId(), obj.getId()); + if (templateStoragePoolRef == null) { + throw new CloudRuntimeException("Failed to create template storage pool entry"); + } + } + } + + } + + return objectInStoreMgr.get(obj, this); + } + + @Override + public boolean delete(DataObject obj) { + // TODO Auto-generated method stub + return false; + } + + @Override + public long getDataCenterId() { + return this.pdsv.getDataCenterId(); + } + + @Override + public String getPath() { + return this.pdsv.getPath(); + } + + @Override + public StoragePoolType getPoolType() { + return this.pdsv.getPoolType(); + } + + @Override + public Date getCreated() { + return this.pdsv.getCreated(); + } + + @Override + public Date getUpdateTime() { + return this.pdsv.getUpdateTime(); + } + + @Override + public long getCapacityBytes() { + return this.pdsv.getCapacityBytes(); + } + + @Override + public long getAvailableBytes() { + return this.pdsv.getAvailableBytes(); + } + + @Override + public Long getClusterId() { + return this.pdsv.getClusterId(); + } + + @Override + public String getHostAddress() { + return this.pdsv.getHostAddress(); + } + + @Override + public String getUserInfo() { + return this.pdsv.getUserInfo(); + } + + @Override + public boolean isShared() { + return this.pdsv.getScope() == ScopeType.HOST ? false : true; + } + + @Override + public boolean isLocal() { + return !this.isShared(); + } + + @Override + public StoragePoolStatus getStatus() { + return this.pdsv.getStatus(); + } + + @Override + public int getPort() { + return this.pdsv.getPort(); + } + + @Override + public Long getPodId() { + return this.pdsv.getPodId(); + } + + @Override + public Long getStorageProviderId() { + return this.pdsv.getStorageProviderId(); + } + + @Override + public boolean isInMaintenance() { + return this.getStatus() == StoragePoolStatus.Maintenance ? true : false; + } } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/AncientPrimaryDataStoreDriverImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/AncientPrimaryDataStoreDriverImpl.java new file mode 100644 index 00000000000..440cb8c5ea0 --- /dev/null +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/AncientPrimaryDataStoreDriverImpl.java @@ -0,0 +1,362 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.datastore.driver; + +import java.util.Set; + +import javax.inject.Inject; + +import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult; +import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult; +import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; +import org.apache.cloudstack.framework.async.AsyncCompletionCallback; +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; +import org.apache.cloudstack.storage.volume.VolumeObject; +import org.apache.log4j.Logger; + +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.ManageSnapshotAnswer; +import com.cloud.agent.api.ManageSnapshotCommand; +import com.cloud.agent.api.storage.CreateAnswer; +import com.cloud.agent.api.storage.CreateCommand; +import com.cloud.agent.api.storage.DestroyCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.exception.StorageUnavailableException; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.storage.DiskOfferingVO; +import com.cloud.storage.ResizeVolumePayload; +import com.cloud.storage.Storage; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.SnapshotVO; +import com.cloud.storage.StorageManager; +import com.cloud.storage.StoragePool; +import com.cloud.storage.VMTemplateHostVO; +import com.cloud.storage.VMTemplateStoragePoolVO; +import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.VolumeManager; +import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.DiskOfferingDao; +import com.cloud.storage.dao.SnapshotDao; +import com.cloud.storage.dao.VMTemplateDao; +import com.cloud.storage.dao.VolumeDao; +import com.cloud.storage.snapshot.SnapshotManager; +import com.cloud.template.TemplateManager; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.vm.DiskProfile; +import com.cloud.vm.dao.VMInstanceDao; + +public class AncientPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver { + private static final Logger s_logger = Logger + .getLogger(AncientPrimaryDataStoreDriverImpl.class); + @Inject DiskOfferingDao diskOfferingDao; + @Inject VMTemplateDao templateDao; + @Inject VolumeDao volumeDao; + @Inject TemplateManager templateMgr; + @Inject HostDao hostDao; + @Inject StorageManager storageMgr; + @Inject VolumeManager volumeMgr; + @Inject VMInstanceDao vmDao; + @Inject SnapshotDao snapshotDao; + @Inject PrimaryDataStoreDao primaryStoreDao; + @Inject SnapshotManager snapshotMgr; + @Override + public String grantAccess(DataObject data, EndPoint ep) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokeAccess(DataObject data, EndPoint ep) { + // TODO Auto-generated method stub + return false; + } + + @Override + public Set listObjects(DataStore store) { + // TODO Auto-generated method stub + return null; + } + + public boolean createVolume( + VolumeInfo volume) throws StorageUnavailableException { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Creating volume: " + volume); + } + + DiskOfferingVO offering = diskOfferingDao.findById(volume.getDiskOfferingId()); + DiskProfile diskProfile = new DiskProfile(volume, offering, + null); + + VMTemplateVO template = null; + if (volume.getTemplateId() != null) { + template = templateDao.findById(volume.getTemplateId()); + } + + StoragePool pool = (StoragePool)volume.getDataStore(); + VolumeVO vol = volumeDao.findById(volume.getId()); + if (pool != null) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Trying to create in " + pool); + } + vol.setPoolId(pool.getId()); + + CreateCommand cmd = null; + VMTemplateStoragePoolVO tmpltStoredOn = null; + + for (int i = 0; i < 2; i++) { + if (template != null + && template.getFormat() != Storage.ImageFormat.ISO) { + if (pool.getPoolType() == StoragePoolType.CLVM) { + // prepareISOForCreate does what we need, which is to + // tell us where the template is + VMTemplateHostVO tmpltHostOn = templateMgr + .prepareISOForCreate(template, pool); + if (tmpltHostOn == null) { + s_logger.debug("cannot find template " + + template.getId() + " " + + template.getName()); + throw new CloudRuntimeException("cannot find template" + + template.getId() + + template.getName()); + } + HostVO secondaryStorageHost = hostDao + .findById(tmpltHostOn.getHostId()); + String tmpltHostUrl = secondaryStorageHost + .getStorageUrl(); + String fullTmpltUrl = tmpltHostUrl + "/" + + tmpltHostOn.getInstallPath(); + cmd = new CreateCommand(diskProfile, fullTmpltUrl, + new StorageFilerTO(pool)); + } else { + tmpltStoredOn = templateMgr.prepareTemplateForCreate( + template, pool); + if (tmpltStoredOn == null) { + s_logger.debug("Cannot use this pool " + pool + + " because we can't propagate template " + + template); + throw new CloudRuntimeException("Cannot use this pool " + pool + + " because we can't propagate template " + + template); + } + cmd = new CreateCommand(diskProfile, + tmpltStoredOn.getLocalDownloadPath(), + new StorageFilerTO(pool)); + } + } else { + if (template != null + && Storage.ImageFormat.ISO == template.getFormat()) { + VMTemplateHostVO tmpltHostOn = templateMgr + .prepareISOForCreate(template, pool); + if (tmpltHostOn == null) { + throw new CloudRuntimeException( + "Did not find ISO in secondry storage in zone " + + pool.getDataCenterId()); + } + } + cmd = new CreateCommand(diskProfile, new StorageFilerTO( + pool)); + } + + Answer answer = storageMgr.sendToPool(pool, null, cmd); + if (answer.getResult()) { + CreateAnswer createAnswer = (CreateAnswer) answer; + vol.setFolder(pool.getPath()); + vol.setPath(createAnswer.getVolume().getPath()); + vol.setSize(createAnswer.getVolume().getSize()); + vol.setPoolType(pool.getPoolType()); + vol.setPoolId(pool.getId()); + vol.setPodId(pool.getPodId()); + this.volumeDao.update(vol.getId(), vol); + return true; + } else { + if (tmpltStoredOn != null + && (answer instanceof CreateAnswer) + && ((CreateAnswer) answer) + .templateReloadRequested()) { + if (!templateMgr + .resetTemplateDownloadStateOnPool(tmpltStoredOn + .getId())) { + break; // break out of template-redeploy retry loop + } + } else { + break; + } + } + } + } + + if (s_logger.isDebugEnabled()) { + s_logger.debug("Unable to create volume " + volume.getId()); + } + return false; + } + + @Override + public void createAsync(DataObject data, + AsyncCompletionCallback callback) { + // TODO Auto-generated method stub + String errMsg = null; + if (data.getType() == DataObjectType.VOLUME) { + try { + createVolume((VolumeInfo)data); + } catch (StorageUnavailableException e) { + s_logger.debug("failed to create volume", e); + errMsg = e.toString(); + } catch (Exception e) { + s_logger.debug("failed to create volume", e); + errMsg = e.toString(); + } + } + CreateCmdResult result = new CreateCmdResult(null, null); + if (errMsg != null) { + result.setResult(errMsg); + } + + callback.complete(result); + + } + + @Override + public void deleteAsync(DataObject data, + AsyncCompletionCallback callback) { + + String vmName = null; + VolumeVO vol = this.volumeDao.findById(data.getId()); + + + StoragePool pool = (StoragePool)data.getDataStore(); + + DestroyCommand cmd = new DestroyCommand(pool, vol, vmName); + + CommandResult result = new CommandResult(); + try { + Answer answer = this.storageMgr.sendToPool(pool, cmd); + if (answer != null && !answer.getResult()) { + result.setResult(answer.getDetails()); + s_logger.info("Will retry delete of " + vol + " from " + pool.getId()); + } + } catch (StorageUnavailableException e) { + s_logger.error("Storage is unavailable currently. Will retry delete of " + + vol + " from " + pool.getId(), e); + result.setResult(e.toString()); + } catch (Exception ex) { + s_logger.debug("Unable to destoy volume" + vol + " from " + pool.getId(), ex); + result.setResult(ex.toString()); + } + callback.complete(result); + } + + @Override + public void copyAsync(DataObject srcdata, DataObject destData, + AsyncCompletionCallback callback) { + // TODO Auto-generated method stub + + } + + @Override + public boolean canCopy(DataObject srcData, DataObject destData) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void takeSnapshot(SnapshotInfo snapshot, + AsyncCompletionCallback callback) { + CreateCmdResult result = null; + try { + VolumeInfo volume = snapshot.getBaseVolume(); + String vmName = this.volumeMgr.getVmNameOnVolume(volume); + SnapshotVO preSnapshotVO = this.snapshotMgr.getParentSnapshot(volume, snapshot); + String parentSnapshotPath = null; + if (preSnapshotVO != null) { + parentSnapshotPath = preSnapshotVO.getPath(); + } + StoragePool srcPool = (StoragePool)volume.getDataStore(); + + ManageSnapshotCommand cmd = new ManageSnapshotCommand(snapshot.getId(), volume.getPath(), srcPool, parentSnapshotPath, snapshot.getName(), vmName); + + ManageSnapshotAnswer answer = (ManageSnapshotAnswer) this.snapshotMgr.sendToPool(volume, cmd); + + if ((answer != null) && answer.getResult()) { + result = new CreateCmdResult(answer.getSnapshotPath(), null); + } else { + result = new CreateCmdResult(null, null); + } + } catch (Exception e) { + s_logger.debug("Failed to take snapshot: " + snapshot.getId(), e); + result = new CreateCmdResult(null, null); + result.setResult(e.toString()); + } + callback.complete(result); + } + + @Override + public void revertSnapshot(SnapshotInfo snapshot, + AsyncCompletionCallback callback) { + // TODO Auto-generated method stub + + } + + @Override + public void resize(DataObject data, + AsyncCompletionCallback callback) { + VolumeObject vol = (VolumeObject)data; + StoragePool pool = (StoragePool)data.getDataStore(); + ResizeVolumePayload resizeParameter = (ResizeVolumePayload)vol.getpayload(); + + ResizeVolumeCommand resizeCmd = new ResizeVolumeCommand( + vol.getPath(), new StorageFilerTO(pool), vol.getSize(), + resizeParameter.newSize, resizeParameter.shrinkOk, resizeParameter.instanceName); + CreateCmdResult result = new CreateCmdResult(null, null); + try { + ResizeVolumeAnswer answer = (ResizeVolumeAnswer) this.storageMgr.sendToPool(pool, + resizeParameter.hosts, resizeCmd); + if (answer != null && answer.getResult()) { + long finalSize = answer.getNewSize(); + s_logger.debug("Resize: volume started at size " + vol.getSize() + + " and ended at size " + finalSize); + + vol.setSize(finalSize); + vol.update(); + } else if (answer != null) { + result.setResult(answer.getDetails()); + } else { + s_logger.debug("return a null answer, mark it as failed for unknown reason"); + result.setResult("return a null answer, mark it as failed for unknown reason"); + } + + } catch (Exception e) { + s_logger.debug("sending resize command failed", e); + result.setResult(e.toString()); + } + + callback.complete(result); + } + +} diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java index dfe4518edab..6d0c2c6862b 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java @@ -27,6 +27,8 @@ import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher; import org.apache.cloudstack.framework.async.AsyncCompletionCallback; import org.apache.cloudstack.framework.async.AsyncRpcConext; @@ -35,8 +37,6 @@ import org.apache.cloudstack.storage.command.CreateObjectCommand; import org.apache.cloudstack.storage.command.DeleteCommand; import org.apache.cloudstack.storage.datastore.DataObjectManager; import org.apache.cloudstack.storage.endpoint.EndPointSelector; -import org.apache.cloudstack.storage.snapshot.SnapshotInfo; -import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver; import org.apache.log4j.Logger; import com.cloud.agent.api.Answer; @@ -210,13 +210,6 @@ public class DefaultPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver return null; } - @Override - public void takeSnapshot(SnapshotInfo snapshot, - AsyncCompletionCallback callback) { - // TODO Auto-generated method stub - - } - @Override public void revertSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback callback) { @@ -238,5 +231,19 @@ public class DefaultPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver // TODO Auto-generated method stub } + + @Override + public void resize(DataObject data, + AsyncCompletionCallback callback) { + // TODO Auto-generated method stub + + } + + @Override + public void takeSnapshot(SnapshotInfo snapshot, + AsyncCompletionCallback callback) { + // TODO Auto-generated method stub + + } } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/AncientPrimaryDataStoreLifeCycleImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/AncientPrimaryDataStoreLifeCycleImpl.java new file mode 100644 index 00000000000..6154a666b24 --- /dev/null +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/AncientPrimaryDataStoreLifeCycleImpl.java @@ -0,0 +1,963 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.datastore.lifecycle; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.inject.Inject; + +import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreStatus; +import org.apache.cloudstack.engine.subsystem.api.storage.HostScope; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle; +import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType; +import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope; +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; +import org.apache.log4j.Logger; + +import com.cloud.agent.AgentManager; +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.CreateStoragePoolCommand; +import com.cloud.agent.api.DeleteStoragePoolCommand; +import com.cloud.agent.api.ModifyStoragePoolCommand; +import com.cloud.agent.api.StoragePoolInfo; +import com.cloud.alert.AlertManager; +import com.cloud.capacity.Capacity; +import com.cloud.capacity.CapacityVO; +import com.cloud.capacity.dao.CapacityDao; +import com.cloud.exception.DiscoveryException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.host.Host; +import com.cloud.host.HostVO; +import com.cloud.host.Status; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.resource.ResourceManager; +import com.cloud.server.ManagementServer; +import com.cloud.storage.OCFS2Manager; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StorageManager; +import com.cloud.storage.StoragePool; +import com.cloud.storage.StoragePoolDiscoverer; +import com.cloud.storage.StoragePoolHostVO; +import com.cloud.storage.StoragePoolStatus; +import com.cloud.storage.StoragePoolWorkVO; +import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.StoragePoolHostDao; +import com.cloud.storage.dao.StoragePoolWorkDao; +import com.cloud.storage.dao.VolumeDao; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.user.UserContext; +import com.cloud.user.dao.UserDao; +import com.cloud.utils.NumbersUtil; +import com.cloud.utils.UriUtils; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.exception.ExecutionException; +import com.cloud.vm.ConsoleProxyVO; +import com.cloud.vm.DomainRouterVO; +import com.cloud.vm.SecondaryStorageVmVO; +import com.cloud.vm.UserVmVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachine.State; +import com.cloud.vm.VirtualMachineManager; +import com.cloud.vm.dao.ConsoleProxyDao; +import com.cloud.vm.dao.DomainRouterDao; +import com.cloud.vm.dao.SecondaryStorageVmDao; +import com.cloud.vm.dao.UserVmDao; +import com.cloud.vm.dao.VMInstanceDao; + +public class AncientPrimaryDataStoreLifeCycleImpl implements + PrimaryDataStoreLifeCycle { + private static final Logger s_logger = Logger + .getLogger(AncientPrimaryDataStoreLifeCycleImpl.class); + @Inject + protected ResourceManager _resourceMgr; + protected List _discoverers; + @Inject + PrimaryDataStoreDao primaryDataStoreDao; + @Inject + protected OCFS2Manager _ocfs2Mgr; + @Inject + DataStoreManager dataStoreMgr; + @Inject + AgentManager agentMgr; + @Inject + StorageManager storageMgr; + @Inject + protected CapacityDao _capacityDao; + + @Inject + VolumeDao volumeDao; + @Inject + VMInstanceDao vmDao; + @Inject + ManagementServer server; + @Inject + protected VirtualMachineManager vmMgr; + @Inject + protected SecondaryStorageVmDao _secStrgDao; + @Inject + UserVmDao userVmDao; + @Inject + protected UserDao _userDao; + @Inject + protected DomainRouterDao _domrDao; + @Inject + protected StoragePoolHostDao _storagePoolHostDao; + @Inject + protected AlertManager _alertMgr; + @Inject + protected ConsoleProxyDao _consoleProxyDao; + + @Inject + protected StoragePoolWorkDao _storagePoolWorkDao; + + @Override + public DataStore initialize(Map dsInfos) { + Long clusterId = (Long) dsInfos.get("clusterId"); + Long podId = (Long) dsInfos.get("podId"); + Long zoneId = (Long) dsInfos.get("zoneId"); + String url = (String) dsInfos.get("url"); + Long providerId = (Long)dsInfos.get("providerId"); + if (clusterId != null && podId == null) { + throw new InvalidParameterValueException( + "Cluster id requires pod id"); + } + + URI uri = null; + try { + uri = new URI(UriUtils.encodeURIComponent(url)); + if (uri.getScheme() == null) { + throw new InvalidParameterValueException("scheme is null " + + url + ", add nfs:// as a prefix"); + } else if (uri.getScheme().equalsIgnoreCase("nfs")) { + String uriHost = uri.getHost(); + String uriPath = uri.getPath(); + if (uriHost == null || uriPath == null + || uriHost.trim().isEmpty() || uriPath.trim().isEmpty()) { + throw new InvalidParameterValueException( + "host or path is null, should be nfs://hostname/path"); + } + } else if (uri.getScheme().equalsIgnoreCase("sharedMountPoint")) { + String uriPath = uri.getPath(); + if (uriPath == null) { + throw new InvalidParameterValueException( + "host or path is null, should be sharedmountpoint://localhost/path"); + } + } else if (uri.getScheme().equalsIgnoreCase("rbd")) { + String uriPath = uri.getPath(); + if (uriPath == null) { + throw new InvalidParameterValueException( + "host or path is null, should be rbd://hostname/pool"); + } + } + } catch (URISyntaxException e) { + throw new InvalidParameterValueException(url + + " is not a valid uri"); + } + + String tags = (String) dsInfos.get("tags"); + Map details = (Map) dsInfos + .get("details"); + if (tags != null) { + String[] tokens = tags.split(","); + + for (String tag : tokens) { + tag = tag.trim(); + if (tag.length() == 0) { + continue; + } + details.put(tag, "true"); + } + } + + String scheme = uri.getScheme(); + String storageHost = uri.getHost(); + String hostPath = uri.getPath(); + Object localStorage = dsInfos.get("localStorage"); + if (localStorage != null) { + hostPath = hostPath.replace("/", ""); + } + String userInfo = uri.getUserInfo(); + int port = uri.getPort(); + StoragePoolVO pool = null; + if (s_logger.isDebugEnabled()) { + s_logger.debug("createPool Params @ scheme - " + scheme + + " storageHost - " + storageHost + " hostPath - " + + hostPath + " port - " + port); + } + if (scheme.equalsIgnoreCase("nfs")) { + if (port == -1) { + port = 2049; + } + pool = new StoragePoolVO(StoragePoolType.NetworkFilesystem, + storageHost, port, hostPath); + } else if (scheme.equalsIgnoreCase("file")) { + if (port == -1) { + port = 0; + } + pool = new StoragePoolVO(StoragePoolType.Filesystem, + "localhost", 0, hostPath); + } else if (scheme.equalsIgnoreCase("sharedMountPoint")) { + pool = new StoragePoolVO(StoragePoolType.SharedMountPoint, + storageHost, 0, hostPath); + } else if (scheme.equalsIgnoreCase("clvm")) { + pool = new StoragePoolVO(StoragePoolType.CLVM, storageHost, 0, + hostPath.replaceFirst("/", "")); + } else if (scheme.equalsIgnoreCase("rbd")) { + if (port == -1) { + port = 6789; + } + pool = new StoragePoolVO(StoragePoolType.RBD, storageHost, + port, hostPath.replaceFirst("/", "")); + pool.setUserInfo(userInfo); + } else if (scheme.equalsIgnoreCase("PreSetup")) { + pool = new StoragePoolVO(StoragePoolType.PreSetup, + storageHost, 0, hostPath); + } else if (scheme.equalsIgnoreCase("iscsi")) { + String[] tokens = hostPath.split("/"); + int lun = NumbersUtil.parseInt(tokens[tokens.length - 1], -1); + if (port == -1) { + port = 3260; + } + if (lun != -1) { + if (clusterId == null) { + throw new IllegalArgumentException( + "IscsiLUN need to have clusters specified"); + } + hostPath.replaceFirst("/", ""); + pool = new StoragePoolVO(StoragePoolType.IscsiLUN, + storageHost, port, hostPath); + } else { + for (StoragePoolDiscoverer discoverer : _discoverers) { + Map> pools; + try { + pools = discoverer.find(zoneId, podId, uri, details); + } catch (DiscoveryException e) { + throw new IllegalArgumentException( + "Not enough information for discovery " + uri, + e); + } + if (pools != null) { + Map.Entry> entry = pools + .entrySet().iterator().next(); + pool = entry.getKey(); + details = entry.getValue(); + break; + } + } + } + } else if (scheme.equalsIgnoreCase("iso")) { + if (port == -1) { + port = 2049; + } + pool = new StoragePoolVO(StoragePoolType.ISO, storageHost, + port, hostPath); + } else if (scheme.equalsIgnoreCase("vmfs")) { + pool = new StoragePoolVO(StoragePoolType.VMFS, + "VMFS datastore: " + hostPath, 0, hostPath); + } else if (scheme.equalsIgnoreCase("ocfs2")) { + port = 7777; + pool = new StoragePoolVO(StoragePoolType.OCFS2, "clustered", + port, hostPath); + } else { + StoragePoolType type = Enum.valueOf(StoragePoolType.class, scheme); + + if (type != null) { + pool = new StoragePoolVO(type, storageHost, + 0, hostPath); + } else { + s_logger.warn("Unable to figure out the scheme for URI: " + uri); + throw new IllegalArgumentException( + "Unable to figure out the scheme for URI: " + uri); + } + } + + if (pool == null) { + s_logger.warn("Unable to figure out the scheme for URI: " + uri); + throw new IllegalArgumentException( + "Unable to figure out the scheme for URI: " + uri); + } + + if (localStorage == null) { + List pools = primaryDataStoreDao + .listPoolByHostPath(storageHost, hostPath); + if (!pools.isEmpty() && !scheme.equalsIgnoreCase("sharedmountpoint")) { + Long oldPodId = pools.get(0).getPodId(); + throw new CloudRuntimeException("Storage pool " + uri + + " already in use by another pod (id=" + oldPodId + ")"); + } + } + + long poolId = primaryDataStoreDao.getNextInSequence(Long.class, "id"); + Object existingUuid = dsInfos.get("uuid"); + String uuid = null; + + if (existingUuid != null) { + uuid = (String)existingUuid; + } else if (scheme.equalsIgnoreCase("sharedmountpoint") + || scheme.equalsIgnoreCase("clvm")) { + uuid = UUID.randomUUID().toString(); + } else if (scheme.equalsIgnoreCase("PreSetup")) { + uuid = hostPath.replace("/", ""); + } else { + uuid = UUID.nameUUIDFromBytes( + new String(storageHost + hostPath).getBytes()).toString(); + } + + List spHandles = primaryDataStoreDao + .findIfDuplicatePoolsExistByUUID(uuid); + if ((spHandles != null) && (spHandles.size() > 0)) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Another active pool with the same uuid already exists"); + } + throw new CloudRuntimeException( + "Another active pool with the same uuid already exists"); + } + + String poolName = (String) dsInfos.get("name"); + if (s_logger.isDebugEnabled()) { + s_logger.debug("In createPool Setting poolId - " + poolId + + " uuid - " + uuid + " zoneId - " + zoneId + " podId - " + + podId + " poolName - " + poolName); + } + + pool.setId(poolId); + pool.setUuid(uuid); + pool.setDataCenterId(zoneId); + pool.setPodId(podId); + pool.setName(poolName); + pool.setClusterId(clusterId); + pool.setStorageProviderId(providerId); + pool.setStatus(StoragePoolStatus.Initialized); + pool = primaryDataStoreDao.persist(pool, details); + + return dataStoreMgr.getDataStore(pool.getId(), DataStoreRole.Primary); + } + + protected boolean createStoragePool(long hostId, StoragePool pool) { + s_logger.debug("creating pool " + pool.getName() + " on host " + + hostId); + if (pool.getPoolType() != StoragePoolType.NetworkFilesystem + && pool.getPoolType() != StoragePoolType.Filesystem + && pool.getPoolType() != StoragePoolType.IscsiLUN + && pool.getPoolType() != StoragePoolType.Iscsi + && pool.getPoolType() != StoragePoolType.VMFS + && pool.getPoolType() != StoragePoolType.SharedMountPoint + && pool.getPoolType() != StoragePoolType.PreSetup + && pool.getPoolType() != StoragePoolType.OCFS2 + && pool.getPoolType() != StoragePoolType.RBD + && pool.getPoolType() != StoragePoolType.CLVM) { + s_logger.warn(" Doesn't support storage pool type " + + pool.getPoolType()); + return false; + } + CreateStoragePoolCommand cmd = new CreateStoragePoolCommand(true, pool); + final Answer answer = agentMgr.easySend(hostId, cmd); + if (answer != null && answer.getResult()) { + return true; + } else { + primaryDataStoreDao.expunge(pool.getId()); + String msg = ""; + if (answer != null) { + msg = "Can not create storage pool through host " + hostId + + " due to " + answer.getDetails(); + s_logger.warn(msg); + } else { + msg = "Can not create storage pool through host " + hostId + + " due to CreateStoragePoolCommand returns null"; + s_logger.warn(msg); + } + throw new CloudRuntimeException(msg); + } + } + + @Override + public boolean attachCluster(DataStore store, ClusterScope scope) { + PrimaryDataStoreInfo primarystore = (PrimaryDataStoreInfo) store; + // Check if there is host up in this cluster + List allHosts = _resourceMgr.listAllUpAndEnabledHosts( + Host.Type.Routing, primarystore.getClusterId(), + primarystore.getPodId(), primarystore.getDataCenterId()); + if (allHosts.isEmpty()) { + throw new CloudRuntimeException( + "No host up to associate a storage pool with in cluster " + + primarystore.getClusterId()); + } + + if (primarystore.getPoolType() == StoragePoolType.OCFS2 + && !_ocfs2Mgr.prepareNodes(allHosts, primarystore)) { + s_logger.warn("Can not create storage pool " + primarystore + + " on cluster " + primarystore.getClusterId()); + primaryDataStoreDao.expunge(primarystore.getId()); + return false; + } + + boolean success = false; + for (HostVO h : allHosts) { + success = createStoragePool(h.getId(), primarystore); + if (success) { + break; + } + } + + s_logger.debug("In createPool Adding the pool to each of the hosts"); + List poolHosts = new ArrayList(); + for (HostVO h : allHosts) { + try { + this.storageMgr.connectHostToSharedPool(h.getId(), + primarystore.getId()); + poolHosts.add(h); + } catch (Exception e) { + s_logger.warn("Unable to establish a connection between " + h + + " and " + primarystore, e); + } + } + + if (poolHosts.isEmpty()) { + s_logger.warn("No host can access storage pool " + primarystore + + " on cluster " + primarystore.getClusterId()); + primaryDataStoreDao.expunge(primarystore.getId()); + return false; + } else { + storageMgr.createCapacityEntry(primarystore.getId()); + } + StoragePoolVO pool = this.primaryDataStoreDao.findById(store.getId()); + pool.setScope(ScopeType.CLUSTER); + pool.setStatus(StoragePoolStatus.Up); + this.primaryDataStoreDao.update(pool.getId(), pool); + return true; + } + + @Override + public boolean attachZone(DataStore dataStore, ZoneScope scope) { + List hosts = _resourceMgr.listAllUpAndEnabledHostsInOneZoneByHypervisor(HypervisorType.KVM, scope.getScopeId()); + for (HostVO host : hosts) { + try { + this.storageMgr.connectHostToSharedPool(host.getId(), + dataStore.getId()); + } catch (Exception e) { + s_logger.warn("Unable to establish a connection between " + host + + " and " + dataStore, e); + } + } + StoragePoolVO pool = this.primaryDataStoreDao.findById(dataStore.getId()); + + pool.setScope(ScopeType.ZONE); + pool.setStatus(StoragePoolStatus.Up); + this.primaryDataStoreDao.update(pool.getId(), pool); + return true; + } + + @Override + public boolean dettach() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean unmanaged() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean maintain(long storeId) { + Long userId = UserContext.current().getCallerUserId(); + User user = _userDao.findById(userId); + Account account = UserContext.current().getCaller(); + StoragePoolVO pool = this.primaryDataStoreDao.findById(storeId); + try { + StoragePool storagePool = (StoragePool) this.dataStoreMgr + .getDataStore(storeId, DataStoreRole.Primary); + List hosts = _resourceMgr.listHostsInClusterByStatus( + pool.getClusterId(), Status.Up); + if (hosts == null || hosts.size() == 0) { + pool.setStatus(StoragePoolStatus.Maintenance); + primaryDataStoreDao.update(pool.getId(), pool); + return true; + } else { + // set the pool state to prepare for maintenance + pool.setStatus(StoragePoolStatus.PrepareForMaintenance); + primaryDataStoreDao.update(pool.getId(), pool); + } + // remove heartbeat + for (HostVO host : hosts) { + ModifyStoragePoolCommand cmd = new ModifyStoragePoolCommand( + false, storagePool); + final Answer answer = agentMgr.easySend(host.getId(), cmd); + if (answer == null || !answer.getResult()) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("ModifyStoragePool false failed due to " + + ((answer == null) ? "answer null" : answer + .getDetails())); + } + } else { + if (s_logger.isDebugEnabled()) { + s_logger.debug("ModifyStoragePool false secceeded"); + } + } + } + // check to see if other ps exist + // if they do, then we can migrate over the system vms to them + // if they dont, then just stop all vms on this one + List upPools = primaryDataStoreDao + .listByStatusInZone(pool.getDataCenterId(), + StoragePoolStatus.Up); + boolean restart = true; + if (upPools == null || upPools.size() == 0) { + restart = false; + } + + // 2. Get a list of all the ROOT volumes within this storage pool + List allVolumes = this.volumeDao.findByPoolId(pool + .getId()); + + // 3. Enqueue to the work queue + for (VolumeVO volume : allVolumes) { + VMInstanceVO vmInstance = vmDao + .findById(volume.getInstanceId()); + + if (vmInstance == null) { + continue; + } + + // enqueue sp work + if (vmInstance.getState().equals(State.Running) + || vmInstance.getState().equals(State.Starting) + || vmInstance.getState().equals(State.Stopping)) { + + try { + StoragePoolWorkVO work = new StoragePoolWorkVO( + vmInstance.getId(), pool.getId(), false, false, + server.getId()); + _storagePoolWorkDao.persist(work); + } catch (Exception e) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Work record already exists, re-using by re-setting values"); + } + StoragePoolWorkVO work = _storagePoolWorkDao + .findByPoolIdAndVmId(pool.getId(), + vmInstance.getId()); + work.setStartedAfterMaintenance(false); + work.setStoppedForMaintenance(false); + work.setManagementServerId(server.getId()); + _storagePoolWorkDao.update(work.getId(), work); + } + } + } + + // 4. Process the queue + List pendingWork = _storagePoolWorkDao + .listPendingWorkForPrepareForMaintenanceByPoolId(pool + .getId()); + + for (StoragePoolWorkVO work : pendingWork) { + // shut down the running vms + VMInstanceVO vmInstance = vmDao.findById(work.getVmId()); + + if (vmInstance == null) { + continue; + } + + // if the instance is of type consoleproxy, call the console + // proxy + if (vmInstance.getType().equals( + VirtualMachine.Type.ConsoleProxy)) { + // call the consoleproxymanager + ConsoleProxyVO consoleProxy = _consoleProxyDao + .findById(vmInstance.getId()); + if (!vmMgr.advanceStop(consoleProxy, true, user, account)) { + String errorMsg = "There was an error stopping the console proxy id: " + + vmInstance.getId() + + " ,cannot enable storage maintenance"; + s_logger.warn(errorMsg); + throw new CloudRuntimeException(errorMsg); + } else { + // update work status + work.setStoppedForMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + + if (restart) { + + if (this.vmMgr.advanceStart(consoleProxy, null, user, + account) == null) { + String errorMsg = "There was an error starting the console proxy id: " + + vmInstance.getId() + + " on another storage pool, cannot enable primary storage maintenance"; + s_logger.warn(errorMsg); + } else { + // update work status + work.setStartedAfterMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + } + } + + // if the instance is of type uservm, call the user vm manager + if (vmInstance.getType().equals(VirtualMachine.Type.User)) { + UserVmVO userVm = userVmDao.findById(vmInstance.getId()); + if (!vmMgr.advanceStop(userVm, true, user, account)) { + String errorMsg = "There was an error stopping the user vm id: " + + vmInstance.getId() + + " ,cannot enable storage maintenance"; + s_logger.warn(errorMsg); + throw new CloudRuntimeException(errorMsg); + } else { + // update work status + work.setStoppedForMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + } + + // if the instance is of type secondary storage vm, call the + // secondary storage vm manager + if (vmInstance.getType().equals( + VirtualMachine.Type.SecondaryStorageVm)) { + SecondaryStorageVmVO secStrgVm = _secStrgDao + .findById(vmInstance.getId()); + if (!vmMgr.advanceStop(secStrgVm, true, user, account)) { + String errorMsg = "There was an error stopping the ssvm id: " + + vmInstance.getId() + + " ,cannot enable storage maintenance"; + s_logger.warn(errorMsg); + throw new CloudRuntimeException(errorMsg); + } else { + // update work status + work.setStoppedForMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + + if (restart) { + if (vmMgr.advanceStart(secStrgVm, null, user, account) == null) { + String errorMsg = "There was an error starting the ssvm id: " + + vmInstance.getId() + + " on another storage pool, cannot enable primary storage maintenance"; + s_logger.warn(errorMsg); + } else { + // update work status + work.setStartedAfterMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + } + } + + // if the instance is of type domain router vm, call the network + // manager + if (vmInstance.getType().equals( + VirtualMachine.Type.DomainRouter)) { + DomainRouterVO domR = _domrDao.findById(vmInstance.getId()); + if (!vmMgr.advanceStop(domR, true, user, account)) { + String errorMsg = "There was an error stopping the domain router id: " + + vmInstance.getId() + + " ,cannot enable primary storage maintenance"; + s_logger.warn(errorMsg); + throw new CloudRuntimeException(errorMsg); + } else { + // update work status + work.setStoppedForMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + + if (restart) { + if (vmMgr.advanceStart(domR, null, user, account) == null) { + String errorMsg = "There was an error starting the domain router id: " + + vmInstance.getId() + + " on another storage pool, cannot enable primary storage maintenance"; + s_logger.warn(errorMsg); + } else { + // update work status + work.setStartedAfterMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + } + } + } + + // 5. Update the status + pool.setStatus(StoragePoolStatus.Maintenance); + this.primaryDataStoreDao.update(pool.getId(), pool); + + return true; + } catch (Exception e) { + s_logger.error( + "Exception in enabling primary storage maintenance:", e); + setPoolStateToError(pool); + throw new CloudRuntimeException(e.getMessage()); + } + } + + private void setPoolStateToError(StoragePoolVO primaryStorage) { + primaryStorage.setStatus(StoragePoolStatus.ErrorInMaintenance); + this.primaryDataStoreDao.update(primaryStorage.getId(), primaryStorage); + } + + @Override + public boolean cancelMaintain(long storageId) { + // Change the storage state back to up + Long userId = UserContext.current().getCallerUserId(); + User user = _userDao.findById(userId); + Account account = UserContext.current().getCaller(); + StoragePoolVO poolVO = this.primaryDataStoreDao + .findById(storageId); + StoragePool pool = (StoragePool) this.dataStoreMgr.getDataStore( + storageId, DataStoreRole.Primary); + poolVO.setStatus(StoragePoolStatus.Up); + primaryDataStoreDao.update(storageId, poolVO); + + List hosts = _resourceMgr.listHostsInClusterByStatus( + pool.getClusterId(), Status.Up); + if (hosts == null || hosts.size() == 0) { + return true; + } + // add heartbeat + for (HostVO host : hosts) { + ModifyStoragePoolCommand msPoolCmd = new ModifyStoragePoolCommand( + true, pool); + final Answer answer = agentMgr.easySend(host.getId(), msPoolCmd); + if (answer == null || !answer.getResult()) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("ModifyStoragePool add failed due to " + + ((answer == null) ? "answer null" : answer + .getDetails())); + } + } else { + if (s_logger.isDebugEnabled()) { + s_logger.debug("ModifyStoragePool add secceeded"); + } + } + } + + // 2. Get a list of pending work for this queue + List pendingWork = _storagePoolWorkDao + .listPendingWorkForCancelMaintenanceByPoolId(poolVO.getId()); + + // 3. work through the queue + for (StoragePoolWorkVO work : pendingWork) { + try { + VMInstanceVO vmInstance = vmDao.findById(work.getVmId()); + + if (vmInstance == null) { + continue; + } + + // if the instance is of type consoleproxy, call the console + // proxy + if (vmInstance.getType().equals( + VirtualMachine.Type.ConsoleProxy)) { + + ConsoleProxyVO consoleProxy = _consoleProxyDao + .findById(vmInstance.getId()); + if (vmMgr.advanceStart(consoleProxy, null, user, account) == null) { + String msg = "There was an error starting the console proxy id: " + + vmInstance.getId() + + " on storage pool, cannot complete primary storage maintenance"; + s_logger.warn(msg); + throw new ExecutionException(msg); + } else { + // update work queue + work.setStartedAfterMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + } + + // if the instance is of type ssvm, call the ssvm manager + if (vmInstance.getType().equals( + VirtualMachine.Type.SecondaryStorageVm)) { + SecondaryStorageVmVO ssVm = _secStrgDao.findById(vmInstance + .getId()); + if (vmMgr.advanceStart(ssVm, null, user, account) == null) { + String msg = "There was an error starting the ssvm id: " + + vmInstance.getId() + + " on storage pool, cannot complete primary storage maintenance"; + s_logger.warn(msg); + throw new ExecutionException(msg); + } else { + // update work queue + work.setStartedAfterMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + } + + // if the instance is of type ssvm, call the ssvm manager + if (vmInstance.getType().equals( + VirtualMachine.Type.DomainRouter)) { + DomainRouterVO domR = _domrDao.findById(vmInstance.getId()); + if (vmMgr.advanceStart(domR, null, user, account) == null) { + String msg = "There was an error starting the domR id: " + + vmInstance.getId() + + " on storage pool, cannot complete primary storage maintenance"; + s_logger.warn(msg); + throw new ExecutionException(msg); + } else { + // update work queue + work.setStartedAfterMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + } + + // if the instance is of type user vm, call the user vm manager + if (vmInstance.getType().equals(VirtualMachine.Type.User)) { + UserVmVO userVm = userVmDao.findById(vmInstance.getId()); + + if (vmMgr.advanceStart(userVm, null, user, account) == null) { + + String msg = "There was an error starting the user vm id: " + + vmInstance.getId() + + " on storage pool, cannot complete primary storage maintenance"; + s_logger.warn(msg); + throw new ExecutionException(msg); + } else { + // update work queue + work.setStartedAfterMaintenance(true); + _storagePoolWorkDao.update(work.getId(), work); + } + } + } catch (Exception e) { + s_logger.debug("Failed start vm", e); + throw new CloudRuntimeException(e.toString()); + } + } + return true; + } + + @DB + @Override + public boolean deleteDataStore(long storeId) { + // for the given pool id, find all records in the storage_pool_host_ref + List hostPoolRecords = this._storagePoolHostDao + .listByPoolId(storeId); + StoragePoolVO poolVO = this.primaryDataStoreDao.findById(storeId); + StoragePool pool = (StoragePool)this.dataStoreMgr.getDataStore(storeId, DataStoreRole.Primary); + boolean deleteFlag = false; + Transaction txn = Transaction.currentTxn(); + try { + // if not records exist, delete the given pool (base case) + if (hostPoolRecords.size() == 0) { + + txn.start(); + poolVO.setUuid(null); + this.primaryDataStoreDao.update(poolVO.getId(), poolVO); + primaryDataStoreDao.remove(poolVO.getId()); + deletePoolStats(poolVO.getId()); + txn.commit(); + + deleteFlag = true; + return true; + } else { + // Remove the SR associated with the Xenserver + for (StoragePoolHostVO host : hostPoolRecords) { + DeleteStoragePoolCommand deleteCmd = new DeleteStoragePoolCommand( + pool); + final Answer answer = agentMgr.easySend(host.getHostId(), + deleteCmd); + + if (answer != null && answer.getResult()) { + deleteFlag = true; + break; + } + } + } + } finally { + if (deleteFlag) { + // now delete the storage_pool_host_ref and storage_pool records + txn.start(); + for (StoragePoolHostVO host : hostPoolRecords) { + _storagePoolHostDao.deleteStoragePoolHostDetails( + host.getHostId(), host.getPoolId()); + } + poolVO.setUuid(null); + this.primaryDataStoreDao.update(poolVO.getId(), poolVO); + primaryDataStoreDao.remove(poolVO.getId()); + deletePoolStats(poolVO.getId()); + // Delete op_host_capacity entries + this._capacityDao.removeBy(Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED, + null, null, null, poolVO.getId()); + txn.commit(); + + s_logger.debug("Storage pool id=" + poolVO.getId() + + " is removed successfully"); + return true; + } else { + // alert that the storage cleanup is required + s_logger.warn("Failed to Delete storage pool id: " + poolVO.getId()); + _alertMgr + .sendAlert(AlertManager.ALERT_TYPE_STORAGE_DELETE, + poolVO.getDataCenterId(), poolVO.getPodId(), + "Unable to delete storage pool id= " + poolVO.getId(), + "Delete storage pool command failed. Please check logs."); + } + } + return false; + } + + @DB + private boolean deletePoolStats(Long poolId) { + CapacityVO capacity1 = _capacityDao.findByHostIdType(poolId, + CapacityVO.CAPACITY_TYPE_STORAGE); + CapacityVO capacity2 = _capacityDao.findByHostIdType(poolId, + CapacityVO.CAPACITY_TYPE_STORAGE_ALLOCATED); + Transaction txn = Transaction.currentTxn(); + txn.start(); + if (capacity1 != null) { + _capacityDao.remove(capacity1.getId()); + } + + if (capacity2 != null) { + _capacityDao.remove(capacity2.getId()); + } + + txn.commit(); + return true; + } + + @Override + public boolean attachHost(DataStore store, HostScope scope, StoragePoolInfo existingInfo) { + StoragePoolHostVO poolHost = _storagePoolHostDao.findByPoolHost(store.getId(), scope.getScopeId()); + if (poolHost == null) { + poolHost = new StoragePoolHostVO(store.getId(), scope.getScopeId(), existingInfo.getLocalPath()); + _storagePoolHostDao.persist(poolHost); + } + + StoragePoolVO pool = this.primaryDataStoreDao.findById(store.getId()); + pool.setScope(scope.getScopeType()); + pool.setAvailableBytes(existingInfo.getAvailableBytes()); + pool.setCapacityBytes(existingInfo.getCapacityBytes()); + pool.setStatus(StoragePoolStatus.Up); + this.primaryDataStoreDao.update(pool.getId(), pool); + this.storageMgr.createCapacityEntry(pool, Capacity.CAPACITY_TYPE_LOCAL_STORAGE, pool.getCapacityBytes() - pool.getAvailableBytes()); + + return true; + } + +} diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java index ffe7efdcda7..5e8727a316a 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java @@ -26,22 +26,22 @@ import javax.inject.Inject; import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; +import org.apache.cloudstack.engine.subsystem.api.storage.HostScope; import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle; import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope; import org.apache.cloudstack.storage.command.AttachPrimaryDataStoreCmd; import org.apache.cloudstack.storage.command.CreatePrimaryDataStoreCmd; -import org.apache.cloudstack.storage.datastore.DataStoreStatus; -import org.apache.cloudstack.storage.datastore.PrimaryDataStore; import org.apache.cloudstack.storage.datastore.PrimaryDataStoreProviderManager; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; -import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.endpoint.EndPointSelector; -import org.apache.cloudstack.storage.image.datastore.ImageDataStoreHelper; import org.apache.cloudstack.storage.volume.datastore.PrimaryDataStoreHelper; +import com.cloud.agent.api.StoragePoolInfo; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.storage.StoragePoolStatus; public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLifeCycle { @Inject @@ -58,9 +58,9 @@ public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLif } @Override - public DataStore initialize(Map dsInfos) { + public DataStore initialize(Map dsInfos) { - PrimaryDataStoreVO storeVO = primaryStoreHelper.createPrimaryDataStore(dsInfos); + StoragePoolVO storeVO = primaryStoreHelper.createPrimaryDataStore(dsInfos); return providerMgr.getPrimaryDataStore(storeVO.getId()); } @@ -83,11 +83,11 @@ public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLif @Override public boolean attachCluster(DataStore dataStore, ClusterScope scope) { - PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(dataStore.getId()); + StoragePoolVO dataStoreVO = dataStoreDao.findById(dataStore.getId()); dataStoreVO.setDataCenterId(scope.getZoneId()); dataStoreVO.setPodId(scope.getPodId()); dataStoreVO.setClusterId(scope.getScopeId()); - dataStoreVO.setStatus(DataStoreStatus.Attaching); + dataStoreVO.setStatus(StoragePoolStatus.Attaching); dataStoreVO.setScope(scope.getScopeType()); dataStoreDao.update(dataStoreVO.getId(), dataStoreVO); @@ -95,7 +95,7 @@ public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLif attachCluster(dataStore); dataStoreVO = dataStoreDao.findById(dataStore.getId()); - dataStoreVO.setStatus(DataStoreStatus.Up); + dataStoreVO.setStatus(StoragePoolStatus.Up); dataStoreDao.update(dataStoreVO.getId(), dataStoreVO); return true; @@ -114,19 +114,19 @@ public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLif } @Override - public boolean maintain() { + public boolean maintain(long storeId) { // TODO Auto-generated method stub return false; } @Override - public boolean cancelMaintain() { + public boolean cancelMaintain(long storeId) { // TODO Auto-generated method stub return false; } @Override - public boolean deleteDataStore() { + public boolean deleteDataStore(long storeId) { // TODO Auto-generated method stub return false; } @@ -139,4 +139,11 @@ public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLif return false; } + @Override + public boolean attachHost(DataStore store, HostScope scope, + StoragePoolInfo existingInfo) { + // TODO Auto-generated method stub + return false; + } + } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreProviderManagerImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreProviderManagerImpl.java index 1a24d87346e..e181adabb5b 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreProviderManagerImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreProviderManagerImpl.java @@ -21,20 +21,22 @@ package org.apache.cloudstack.storage.datastore.manager; import java.util.HashMap; import java.util.Map; +import javax.annotation.PostConstruct; import javax.inject.Inject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager; +import org.apache.cloudstack.engine.subsystem.api.storage.HypervisorHostListener; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver; import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore; import org.apache.cloudstack.storage.datastore.PrimaryDataStore; import org.apache.cloudstack.storage.datastore.PrimaryDataStoreProviderManager; import org.apache.cloudstack.storage.datastore.db.DataStoreProviderDao; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; -import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO; -import org.apache.cloudstack.storage.datastore.provider.DataStoreProvider; -import org.apache.cloudstack.storage.datastore.provider.DataStoreProviderManager; -import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.springframework.stereotype.Component; -import com.cloud.utils.component.ComponentContext; +import com.cloud.storage.StorageManager; @Component public class DefaultPrimaryDataStoreProviderManagerImpl implements PrimaryDataStoreProviderManager { @@ -44,16 +46,19 @@ public class DefaultPrimaryDataStoreProviderManagerImpl implements PrimaryDataSt DataStoreProviderManager providerManager; @Inject PrimaryDataStoreDao dataStoreDao; - Map driverMaps = new HashMap(); + Map driverMaps; + @Inject StorageManager storageMgr; + @PostConstruct + public void config() { + driverMaps = new HashMap(); + } + @Override public PrimaryDataStore getPrimaryDataStore(long dataStoreId) { - PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(dataStoreId); + StoragePoolVO dataStoreVO = dataStoreDao.findById(dataStoreId); long providerId = dataStoreVO.getStorageProviderId(); DataStoreProvider provider = providerManager.getDataStoreProviderById(providerId); - /*DefaultPrimaryDataStore dataStore = DefaultPrimaryDataStore.createDataStore(dataStoreVO, - driverMaps.get(provider.getUuid()), - provider);*/ DefaultPrimaryDataStore dataStore = DefaultPrimaryDataStore.createDataStore(dataStoreVO, driverMaps.get(provider.getUuid()), provider); return dataStore; } @@ -66,4 +71,15 @@ public class DefaultPrimaryDataStoreProviderManagerImpl implements PrimaryDataSt driverMaps.put(uuid, driver); return true; } + + @Override + public PrimaryDataStore getPrimaryDataStore(String uuid) { + StoragePoolVO dataStoreVO = dataStoreDao.findByUuid(uuid); + return getPrimaryDataStore(dataStoreVO.getId()); + } + + @Override + public boolean registerHostListener(String uuid, HypervisorHostListener listener) { + return storageMgr.registerHostListener(uuid, listener); + } } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/data model.ucls b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/data model.ucls index 9386454efb3..8d7a696957d 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/data model.ucls +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/data model.ucls @@ -1,20 +1,20 @@ @@ -36,18 +36,18 @@ - + - + diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/AncientPrimaryDataStoreProviderImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/AncientPrimaryDataStoreProviderImpl.java new file mode 100644 index 00000000000..09e78e45659 --- /dev/null +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/AncientPrimaryDataStoreProviderImpl.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.datastore.provider; + +import java.util.Map; + +import javax.inject.Inject; + +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle; +import org.apache.cloudstack.engine.subsystem.api.storage.HypervisorHostListener; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver; +import org.apache.cloudstack.storage.datastore.PrimaryDataStoreProviderManager; +import org.apache.cloudstack.storage.datastore.driver.AncientPrimaryDataStoreDriverImpl; +import org.apache.cloudstack.storage.datastore.lifecycle.AncientPrimaryDataStoreLifeCycleImpl; +import org.springframework.stereotype.Component; + +import com.cloud.utils.component.ComponentContext; + +@Component +public class AncientPrimaryDataStoreProviderImpl implements + PrimaryDataStoreProvider { + + private final String providerName = "ancient primary data store provider"; + protected PrimaryDataStoreDriver driver; + @Inject + PrimaryDataStoreProviderManager storeMgr; + protected DataStoreLifeCycle lifecyle; + protected String uuid; + protected long id; + @Override + public String getName() { + return providerName; + } + + @Override + public DataStoreLifeCycle getLifeCycle() { + return this.lifecyle; + } + + @Override + public boolean configure(Map params) { + lifecyle = ComponentContext.inject(AncientPrimaryDataStoreLifeCycleImpl.class); + driver = ComponentContext.inject(AncientPrimaryDataStoreDriverImpl.class); + uuid = (String)params.get("uuid"); + id = (Long)params.get("id"); + storeMgr.registerDriver(uuid, this.driver); + HypervisorHostListener listener = ComponentContext.inject(DefaultHostListener.class); + storeMgr.registerHostListener(uuid, listener); + return true; + } + + @Override + public String getUuid() { + return this.uuid; + } + + @Override + public long getId() { + return this.id; + } + +} diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java new file mode 100644 index 00000000000..f2cb1c45c82 --- /dev/null +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.storage.datastore.provider; + +import javax.inject.Inject; + +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; +import org.apache.cloudstack.engine.subsystem.api.storage.HypervisorHostListener; +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; +import org.apache.log4j.Logger; + +import com.cloud.agent.AgentManager; +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.ModifyStoragePoolAnswer; +import com.cloud.agent.api.ModifyStoragePoolCommand; +import com.cloud.alert.AlertManager; +import com.cloud.storage.StoragePool; +import com.cloud.storage.StoragePoolHostVO; +import com.cloud.storage.dao.StoragePoolHostDao; +import com.cloud.utils.exception.CloudRuntimeException; + +public class DefaultHostListener implements HypervisorHostListener { + private static final Logger s_logger = Logger + .getLogger(DefaultHostListener.class); + @Inject AgentManager agentMgr; + @Inject DataStoreManager dataStoreMgr; + @Inject AlertManager alertMgr; + @Inject StoragePoolHostDao storagePoolHostDao; + @Inject PrimaryDataStoreDao primaryStoreDao; + @Override + public boolean hostConnect(long hostId, long poolId) { + StoragePool pool = (StoragePool)this.dataStoreMgr.getDataStore(poolId, DataStoreRole.Primary); + ModifyStoragePoolCommand cmd = new ModifyStoragePoolCommand(true, pool); + final Answer answer = agentMgr.easySend(hostId, cmd); + + if (answer == null) { + throw new CloudRuntimeException("Unable to get an answer to the modify storage pool command" + pool.getId()); + } + + if (!answer.getResult()) { + String msg = "Add host failed due to ModifyStoragePoolCommand failed" + answer.getDetails(); + alertMgr.sendAlert(AlertManager.ALERT_TYPE_HOST, pool.getDataCenterId(), pool.getPodId(), msg, msg); + throw new CloudRuntimeException("Unable establish connection from storage head to storage pool " + pool.getId() + " due to " + answer.getDetails() + pool.getId()); + } + + assert (answer instanceof ModifyStoragePoolAnswer) : "Well, now why won't you actually return the ModifyStoragePoolAnswer when it's ModifyStoragePoolCommand? Pool=" + pool.getId() + "Host=" + hostId; + ModifyStoragePoolAnswer mspAnswer = (ModifyStoragePoolAnswer) answer; + + StoragePoolHostVO poolHost = storagePoolHostDao.findByPoolHost(pool.getId(), hostId); + if (poolHost == null) { + poolHost = new StoragePoolHostVO(pool.getId(), hostId, mspAnswer.getPoolInfo().getLocalPath().replaceAll("//", "/")); + storagePoolHostDao.persist(poolHost); + } else { + poolHost.setLocalPath(mspAnswer.getPoolInfo().getLocalPath().replaceAll("//", "/")); + } + + StoragePoolVO poolVO = this.primaryStoreDao.findById(poolId); + poolVO.setAvailableBytes(mspAnswer.getPoolInfo().getAvailableBytes()); + poolVO.setCapacityBytes(mspAnswer.getPoolInfo().getCapacityBytes()); + primaryStoreDao.update(pool.getId(), poolVO); + + s_logger.info("Connection established between " + pool + " host + " + hostId); + return true; + } + + @Override + public boolean hostDisconnected(long hostId, long poolId) { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java index 540ea6381fa..a1402c13b3d 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java @@ -21,10 +21,11 @@ import java.util.Map; import javax.inject.Inject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle; +import org.apache.cloudstack.engine.subsystem.api.storage.HypervisorHostListener; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver; import org.apache.cloudstack.storage.datastore.PrimaryDataStoreProviderManager; import org.apache.cloudstack.storage.datastore.driver.DefaultPrimaryDataStoreDriverImpl; import org.apache.cloudstack.storage.datastore.lifecycle.DefaultPrimaryDataStoreLifeCycleImpl; -import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver; import org.springframework.stereotype.Component; import com.cloud.utils.component.ComponentContext; @@ -35,6 +36,7 @@ public class DefaultPrimaryDatastoreProviderImpl implements PrimaryDataStoreProv protected PrimaryDataStoreDriver driver; @Inject PrimaryDataStoreProviderManager storeMgr; + protected DataStoreLifeCycle lifecyle; protected String uuid; protected long id; @@ -52,9 +54,11 @@ public class DefaultPrimaryDatastoreProviderImpl implements PrimaryDataStoreProv public boolean configure(Map params) { lifecyle = ComponentContext.inject(DefaultPrimaryDataStoreLifeCycleImpl.class); driver = ComponentContext.inject(DefaultPrimaryDataStoreDriverImpl.class); + HypervisorHostListener listener = ComponentContext.inject(DefaultHostListener.class); uuid = (String)params.get("uuid"); id = (Long)params.get("id"); storeMgr.registerDriver(uuid, this.driver); + storeMgr.registerHostListener(uuid, listener); return true; } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateInstallStrategy.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateInstallStrategy.java index 7679bb3e729..99b34cbcf18 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateInstallStrategy.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateInstallStrategy.java @@ -18,9 +18,9 @@ */ package org.apache.cloudstack.storage.volume; +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.framework.async.AsyncCompletionCallback; import org.apache.cloudstack.storage.datastore.PrimaryDataStore; -import org.apache.cloudstack.storage.image.TemplateInfo; import org.apache.cloudstack.storage.volume.VolumeServiceImpl.CreateBaseImageResult; public interface TemplateInstallStrategy { diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateInstallStrategyImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateInstallStrategyImpl.java index 80e098d769a..5f1735c180a 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateInstallStrategyImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateInstallStrategyImpl.java @@ -20,24 +20,16 @@ package org.apache.cloudstack.storage.volume; import javax.inject.Inject; -import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult; -import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult; -import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher; +import org.apache.cloudstack.engine.subsystem.api.storage.ImageDataFactory; +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.framework.async.AsyncCompletionCallback; -import org.apache.cloudstack.framework.async.AsyncRpcConext; import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager; import org.apache.cloudstack.storage.datastore.PrimaryDataStore; -import org.apache.cloudstack.storage.db.ObjectInDataStoreVO; -import org.apache.cloudstack.storage.image.ImageDataFactory; -import org.apache.cloudstack.storage.image.TemplateInfo; import org.apache.cloudstack.storage.motion.DataMotionService; import org.apache.cloudstack.storage.volume.VolumeServiceImpl.CreateBaseImageResult; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.fsm.NoTransitionException; - @Component public class TemplateInstallStrategyImpl implements TemplateInstallStrategy { private static final Logger s_logger = Logger @@ -50,7 +42,7 @@ public class TemplateInstallStrategyImpl implements TemplateInstallStrategy { ImageDataFactory imageFactory; protected long waitingTime = 1800; // half an hour protected long waitingRetries = 10; - +/* protected TemplateInfo waitingForTemplateDownload(TemplateInfo template, PrimaryDataStore dataStore) { long retries = this.waitingRetries; @@ -106,8 +98,8 @@ public class TemplateInstallStrategyImpl implements TemplateInstallStrategy { boolean freshNewTemplate = false; if (obj == null) { try { - /*templateOnPrimaryStoreObj = objectInDataStoreMgr.create( - template, store);*/ + templateOnPrimaryStoreObj = objectInDataStoreMgr.create( + template, store); freshNewTemplate = true; } catch (Throwable e) { obj = objectInDataStoreMgr.findObject(template.getId(), @@ -264,13 +256,10 @@ public class TemplateInstallStrategyImpl implements TemplateInstallStrategy { res.setResult(result.getResult()); context.getParentCallback().complete(res); } - ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject( - templateOnPrimaryStoreObj.getId(), templateOnPrimaryStoreObj - .getType(), templateOnPrimaryStoreObj.getDataStore() - .getId(), templateOnPrimaryStoreObj.getDataStore() - .getRole()); + DataObjectInStore obj = objectInDataStoreMgr.findObject( + templateOnPrimaryStoreObj, templateOnPrimaryStoreObj.getDataStore()); + - obj.setInstallPath(result.getPath()); CreateBaseImageResult res = new CreateBaseImageResult( templateOnPrimaryStoreObj); try { @@ -289,6 +278,12 @@ public class TemplateInstallStrategyImpl implements TemplateInstallStrategy { } context.getParentCallback().complete(res); return null; + }*/ + @Override + public Void installAsync(TemplateInfo template, PrimaryDataStore store, + AsyncCompletionCallback callback) { + // TODO Auto-generated method stub + return null; } } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java index 64af097bb32..e0ecd165d7f 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeDataFactoryImpl.java @@ -20,21 +20,23 @@ package org.apache.cloudstack.storage.volume; import javax.inject.Inject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; -import org.apache.cloudstack.storage.datastore.DataStoreManager; import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager; -import org.apache.cloudstack.storage.datastore.VolumeDataFactory; -import org.apache.cloudstack.storage.db.ObjectInDataStoreVO; -import org.apache.cloudstack.storage.volume.db.VolumeDao2; -import org.apache.cloudstack.storage.volume.db.VolumeVO; import org.springframework.stereotype.Component; +import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.VolumeDao; + @Component public class VolumeDataFactoryImpl implements VolumeDataFactory { @Inject - VolumeDao2 volumeDao; + VolumeDao volumeDao; @Inject ObjectInDataStoreManager objMap; @Inject @@ -42,12 +44,30 @@ public class VolumeDataFactoryImpl implements VolumeDataFactory { @Override public VolumeInfo getVolume(long volumeId, DataStore store) { VolumeVO volumeVO = volumeDao.findById(volumeId); - ObjectInDataStoreVO obj = objMap.findObject(volumeId, DataObjectType.VOLUME, store.getId(), store.getRole()); - if (obj == null) { - VolumeObject vol = VolumeObject.getVolumeObject(null, volumeVO); - return vol; - } + VolumeObject vol = VolumeObject.getVolumeObject(store, volumeVO); + + return vol; + } + + @Override + public VolumeInfo getVolume(long volumeId) { + VolumeVO volumeVO = volumeDao.findById(volumeId); + VolumeObject vol = null; + if (volumeVO.getPoolId() == null) { + DataStore store = objMap.findStore(volumeVO.getUuid(), DataObjectType.VOLUME, DataStoreRole.Image); + vol = VolumeObject.getVolumeObject(store, volumeVO); + } else { + DataStore store = this.storeMgr.getDataStore(volumeVO.getPoolId(), DataStoreRole.Primary); + vol = VolumeObject.getVolumeObject(store, volumeVO); + } + return vol; + } + + @Override + public VolumeInfo getVolume(DataObject volume, DataStore store) { + VolumeInfo vol = (VolumeObject)getVolume(volume.getId(), store); + vol.addPayload(((VolumeInfo)volume).getpayload()); return vol; } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java index 14d741707b5..d3e8c543b54 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java @@ -22,27 +22,24 @@ import java.lang.reflect.Method; import java.util.Date; import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutionException; import org.apache.cloudstack.engine.cloud.entity.api.SnapshotEntity; import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; import org.apache.cloudstack.engine.datacenter.entity.api.StorageEntity; import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult; import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat; import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType; -import org.apache.cloudstack.framework.async.AsyncCallFuture; import org.apache.cloudstack.storage.datastore.PrimaryDataStoreEntityImpl; -import org.apache.cloudstack.storage.volume.VolumeService.VolumeApiResult; - -import com.cloud.utils.exception.CloudRuntimeException; public class VolumeEntityImpl implements VolumeEntity { private VolumeInfo volumeInfo; private final VolumeService vs; private VolumeApiResult result; - protected VolumeEntityImpl() { + public VolumeEntityImpl() { this.vs = null; } @@ -167,7 +164,7 @@ public class VolumeEntityImpl implements VolumeEntity { @Override public void destroy() { - AsyncCallFuture future = vs.deleteVolumeAsync(volumeInfo); + /*AsyncCallFuture future = vs.deleteVolumeAsync(volumeInfo); try { result = future.get(); if (!result.isSuccess()) { @@ -177,7 +174,7 @@ public class VolumeEntityImpl implements VolumeEntity { throw new CloudRuntimeException("wait to delete volume info failed", e); } catch (ExecutionException e) { throw new CloudRuntimeException("wait to delete volume failed", e); - } + }*/ } @Override diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeManagerImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeManagerImpl.java deleted file mode 100644 index bcff312626f..00000000000 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeManagerImpl.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.cloudstack.storage.volume; - -import javax.inject.Inject; - -import org.apache.cloudstack.engine.subsystem.api.storage.VolumeProfile; -import org.apache.cloudstack.storage.volume.db.VolumeDao2; -import org.apache.cloudstack.storage.volume.db.VolumeVO; -import org.springframework.stereotype.Component; - -import com.cloud.storage.Volume; -import com.cloud.storage.Volume.Event; -import com.cloud.storage.Volume.State; -import com.cloud.utils.fsm.NoTransitionException; -import com.cloud.utils.fsm.StateMachine2; - -@Component -public class VolumeManagerImpl implements VolumeManager { - @Inject - protected VolumeDao2 _volumeDao; - private final StateMachine2 s_fsm = new StateMachine2(); - public VolumeManagerImpl() { - initStateMachine(); - } - - @Override - public VolumeVO allocateDuplicateVolume(VolumeVO oldVol) { - /* - VolumeVO newVol = new VolumeVO(oldVol.getVolumeType(), oldVol.getName(), oldVol.getDataCenterId(), oldVol.getDomainId(), oldVol.getAccountId(), oldVol.getDiskOfferingId(), oldVol.getSize()); - newVol.setTemplateId(oldVol.getTemplateId()); - newVol.setDeviceId(oldVol.getDeviceId()); - newVol.setInstanceId(oldVol.getInstanceId()); - newVol.setRecreatable(oldVol.isRecreatable()); - newVol.setReservationId(oldVol.getReservationId()); - */ - return null; - // return _volumeDao.persist(newVol); - } - - private void initStateMachine() { - s_fsm.addTransition(Volume.State.Allocated, Event.CreateRequested, Volume.State.Creating); - s_fsm.addTransition(Volume.State.Allocated, Event.DestroyRequested, Volume.State.Destroying); - s_fsm.addTransition(Volume.State.Creating, Event.OperationRetry, Volume.State.Creating); - s_fsm.addTransition(Volume.State.Creating, Event.OperationFailed, Volume.State.Allocated); - s_fsm.addTransition(Volume.State.Creating, Event.OperationSucceeded, Volume.State.Ready); - s_fsm.addTransition(Volume.State.Creating, Event.DestroyRequested, Volume.State.Destroying); - s_fsm.addTransition(Volume.State.Creating, Event.CreateRequested, Volume.State.Creating); - s_fsm.addTransition(Volume.State.Allocated, Event.UploadRequested, Volume.State.UploadOp); - s_fsm.addTransition(Volume.State.UploadOp, Event.CopyRequested, Volume.State.Creating);// CopyRequested for volume from sec to primary storage - s_fsm.addTransition(Volume.State.Creating, Event.CopySucceeded, Volume.State.Ready); - s_fsm.addTransition(Volume.State.Creating, Event.CopyFailed, Volume.State.UploadOp);// Copying volume from sec to primary failed. - s_fsm.addTransition(Volume.State.UploadOp, Event.DestroyRequested, Volume.State.Destroying); - s_fsm.addTransition(Volume.State.Ready, Event.DestroyRequested, Volume.State.Destroying); - s_fsm.addTransition(Volume.State.Destroy, Event.ExpungingRequested, Volume.State.Expunging); - s_fsm.addTransition(Volume.State.Ready, Event.SnapshotRequested, Volume.State.Snapshotting); - s_fsm.addTransition(Volume.State.Snapshotting, Event.OperationSucceeded, Volume.State.Ready); - s_fsm.addTransition(Volume.State.Snapshotting, Event.OperationFailed, Volume.State.Ready); - s_fsm.addTransition(Volume.State.Ready, Event.MigrationRequested, Volume.State.Migrating); - s_fsm.addTransition(Volume.State.Migrating, Event.OperationSucceeded, Volume.State.Ready); - s_fsm.addTransition(Volume.State.Migrating, Event.OperationFailed, Volume.State.Ready); - s_fsm.addTransition(Volume.State.Destroy, Event.OperationSucceeded, Volume.State.Destroy); - s_fsm.addTransition(Volume.State.Destroying, Event.OperationSucceeded, Volume.State.Destroy); - s_fsm.addTransition(Volume.State.Destroying, Event.OperationFailed, Volume.State.Destroying); - s_fsm.addTransition(Volume.State.Destroying, Event.DestroyRequested, Volume.State.Destroying); - } - - @Override - public StateMachine2 getStateMachine() { - return s_fsm; - } - - @Override - public VolumeVO processEvent(Volume vol, Volume.Event event) throws NoTransitionException { - // _volStateMachine.transitTo(vol, event, null, _volumeDao); - return _volumeDao.findById(vol.getId()); - } - - @Override - public VolumeProfile getProfile(long volumeId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public VolumeVO getVolume(long volumeId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public VolumeVO updateVolume(VolumeVO volume) { - // TODO Auto-generated method stub - return null; - } -} diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java index 9e04909135e..ceadb253976 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java @@ -16,19 +16,24 @@ // under the License. package org.apache.cloudstack.storage.volume; +import java.util.Date; + import javax.inject.Inject; +import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat; import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager; -import org.apache.cloudstack.storage.db.ObjectInDataStoreVO; -import org.apache.cloudstack.storage.volume.db.VolumeDao2; -import org.apache.cloudstack.storage.volume.db.VolumeVO; import org.apache.log4j.Logger; +import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.Volume; +import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.VolumeDao; import com.cloud.utils.component.ComponentContext; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.fsm.NoTransitionException; @@ -38,17 +43,16 @@ import com.cloud.utils.storage.encoding.EncodingType; public class VolumeObject implements VolumeInfo { private static final Logger s_logger = Logger.getLogger(VolumeObject.class); protected VolumeVO volumeVO; - private StateMachine2 _volStateMachine; + private StateMachine2 _volStateMachine; protected DataStore dataStore; @Inject - VolumeDao2 volumeDao; - @Inject - VolumeManager volumeMgr; + VolumeDao volumeDao; @Inject ObjectInDataStoreManager ojbectInStoreMgr; + private Object payload; - protected VolumeObject() { - + public VolumeObject() { + _volStateMachine = Volume.State.getStateMachine(); } protected void configure(DataStore dataStore, VolumeVO volumeVO) { @@ -70,6 +74,10 @@ public class VolumeObject implements VolumeInfo { public void setPath(String uuid) { volumeVO.setPath(uuid); } + + public void setSize(Long size) { + volumeVO.setSize(size); + } public Volume.State getState() { return volumeVO.getState(); @@ -88,12 +96,11 @@ public class VolumeObject implements VolumeInfo { public long getVolumeId() { return volumeVO.getId(); } - public boolean stateTransit(Volume.Event event) { boolean result = false; - _volStateMachine = volumeMgr.getStateMachine(); try { result = _volStateMachine.transitTo(volumeVO, event, null, volumeDao); + volumeVO = volumeDao.findById(volumeVO.getId()); } catch (NoTransitionException e) { String errorMessage = "Failed to transit volume: " + this.getVolumeId() + ", due to: " + e.toString(); s_logger.debug(errorMessage); @@ -122,7 +129,7 @@ public class VolumeObject implements VolumeInfo { if (this.dataStore == null) { throw new CloudRuntimeException("datastore must be set before using this object"); } - ObjectInDataStoreVO obj = ojbectInStoreMgr.findObject(this.volumeVO.getId(), DataObjectType.VOLUME, this.dataStore.getId(), this.dataStore.getRole()); + DataObjectInStore obj = ojbectInStoreMgr.findObject(this.volumeVO.getUuid(), DataObjectType.VOLUME, this.dataStore.getUuid(), this.dataStore.getRole()); if (obj.getState() != ObjectInDataStoreStateMachine.State.Ready) { return this.dataStore.getUri() + "&" + EncodingType.OBJTYPE + "=" + DataObjectType.VOLUME + @@ -145,4 +152,179 @@ public class VolumeObject implements VolumeInfo { // TODO Auto-generated method stub return null; } + + @Override + public void processEvent( + ObjectInDataStoreStateMachine.Event event) { + if (this.dataStore == null) { + return; + } + try { + Volume.Event volEvent = null; + if (this.dataStore.getRole() == DataStoreRole.Image) { + ojbectInStoreMgr.update(this, event); + if (event == ObjectInDataStoreStateMachine.Event.CreateRequested) { + volEvent = Volume.Event.UploadRequested; + } else if (event == ObjectInDataStoreStateMachine.Event.OperationSuccessed) { + volEvent = Volume.Event.CopySucceeded; + } else if (event == ObjectInDataStoreStateMachine.Event.OperationFailed) { + volEvent = Volume.Event.CopyFailed; + } + } else { + if (event == ObjectInDataStoreStateMachine.Event.CreateRequested || + event == ObjectInDataStoreStateMachine.Event.CreateOnlyRequested) { + volEvent = Volume.Event.CreateRequested; + } else if (event == ObjectInDataStoreStateMachine.Event.CopyingRequested) { + volEvent = Volume.Event.CopyRequested; + } + } + + if (event == ObjectInDataStoreStateMachine.Event.DestroyRequested) { + volEvent = Volume.Event.DestroyRequested; + } else if (event == ObjectInDataStoreStateMachine.Event.ExpungeRequested) { + volEvent = Volume.Event.ExpungingRequested; + } else if (event == ObjectInDataStoreStateMachine.Event.OperationSuccessed) { + volEvent = Volume.Event.OperationSucceeded; + } else if (event == ObjectInDataStoreStateMachine.Event.OperationFailed) { + volEvent = Volume.Event.OperationFailed; + } else if (event == ObjectInDataStoreStateMachine.Event.ResizeRequested) { + volEvent = Volume.Event.ResizeRequested; + } + this.stateTransit(volEvent); + } catch (Exception e) { + s_logger.debug("Failed to update state", e); + throw new CloudRuntimeException("Failed to update state:" + e.toString()); + } + + } + + @Override + public String getName() { + return this.volumeVO.getName(); + } + + @Override + public Long getInstanceId() { + return this.volumeVO.getInstanceId(); + } + + @Override + public String getFolder() { + return this.volumeVO.getFolder(); + } + + @Override + public String getPath() { + return this.volumeVO.getPath(); + } + + @Override + public Long getPodId() { + return this.volumeVO.getPodId(); + } + + @Override + public long getDataCenterId() { + return this.volumeVO.getDataCenterId(); + } + + @Override + public Type getVolumeType() { + return this.volumeVO.getVolumeType(); + } + + @Override + public Long getPoolId() { + return this.volumeVO.getPoolId(); + } + + @Override + public Date getAttached() { + return this.volumeVO.getAttached(); + } + + @Override + public Long getDeviceId() { + return this.volumeVO.getDeviceId(); + } + + @Override + public Date getCreated() { + return this.volumeVO.getCreated(); + } + + @Override + public long getDiskOfferingId() { + return this.volumeVO.getDiskOfferingId(); + } + + @Override + public String getChainInfo() { + return this.volumeVO.getChainInfo(); + } + + @Override + public boolean isRecreatable() { + return this.volumeVO.isRecreatable(); + } + + @Override + public long getUpdatedCount() { + return this.volumeVO.getUpdatedCount(); + } + + @Override + public void incrUpdatedCount() { + this.volumeVO.incrUpdatedCount(); + } + + @Override + public Date getUpdated() { + return this.volumeVO.getUpdated(); + } + + @Override + public String getReservationId() { + return this.volumeVO.getReservationId(); + } + + @Override + public void setReservationId(String reserv) { + this.volumeVO.setReservationId(reserv); + } + + @Override + public long getAccountId() { + return this.volumeVO.getAccountId(); + } + + @Override + public long getDomainId() { + return this.volumeVO.getDomainId(); + } + + @Override + public Long getTemplateId() { + return this.volumeVO.getTemplateId(); + } + + @Override + public void addPayload(Object data) { + this.payload = data; + } + + @Override + public Object getpayload() { + return this.payload; + } + + @Override + public HypervisorType getHypervisorType() { + return this.volumeDao.getHypervisorType(this.volumeVO.getId()); + } + + @Override + public Long getLastPoolId() { + return this.volumeVO.getLastPoolId(); + } } diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java index 8cfbae455e7..c019374d9b9 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java @@ -22,12 +22,16 @@ import javax.inject.Inject; import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult; +import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult; import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; -import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; -import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService; import org.apache.cloudstack.framework.async.AsyncCallFuture; import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher; import org.apache.cloudstack.framework.async.AsyncCompletionCallback; @@ -36,22 +40,28 @@ import org.apache.cloudstack.storage.datastore.DataObjectManager; import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager; import org.apache.cloudstack.storage.datastore.PrimaryDataStore; import org.apache.cloudstack.storage.datastore.PrimaryDataStoreProviderManager; -import org.apache.cloudstack.storage.image.TemplateInfo; -import org.apache.cloudstack.storage.image.motion.ImageMotionService; -import org.apache.cloudstack.storage.volume.db.VolumeDao2; -import org.apache.cloudstack.storage.volume.db.VolumeVO; +import org.apache.cloudstack.storage.motion.DataMotionService; +import org.apache.log4j.Logger; import org.springframework.stereotype.Component; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.storage.StoragePool; import com.cloud.storage.Volume; +import com.cloud.storage.Volume.Type; +import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.VolumeDao; +import com.cloud.storage.snapshot.SnapshotManager; import com.cloud.utils.db.DB; - -//1. change volume state -//2. orchestrator of volume, control most of the information of volume, storage pool id, voluem state, scope etc. +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.dao.VMInstanceDao; @Component public class VolumeServiceImpl implements VolumeService { + private static final Logger s_logger = Logger + .getLogger(VolumeServiceImpl.class); @Inject - VolumeDao2 volDao; + VolumeDao volDao; @Inject PrimaryDataStoreProviderManager dataStoreMgr; @Inject @@ -59,27 +69,31 @@ public class VolumeServiceImpl implements VolumeService { @Inject DataObjectManager dataObjectMgr; @Inject - ImageMotionService imageMotion; + DataMotionService motionSrv; @Inject TemplateInstallStrategy templateInstallStrategy; + @Inject + VolumeDataFactory volFactory; + @Inject SnapshotManager snapshotMgr; + @Inject VMInstanceDao vmDao; public VolumeServiceImpl() { } private class CreateVolumeContext extends AsyncRpcConext { - private VolumeObject volume; + private DataObject volume; private AsyncCallFuture future; /** * @param callback */ - public CreateVolumeContext(AsyncCompletionCallback callback, VolumeObject volume, AsyncCallFuture future) { + public CreateVolumeContext(AsyncCompletionCallback callback, DataObject volume, AsyncCallFuture future) { super(callback); this.volume = volume; this.future = future; } - public VolumeObject getVolume() { + public DataObject getVolume() { return this.volume; } @@ -89,49 +103,35 @@ public class VolumeServiceImpl implements VolumeService { } - - @Override - public AsyncCallFuture createVolumeAsync(VolumeInfo volume, long dataStoreId) { - PrimaryDataStore dataStore = dataStoreMgr.getPrimaryDataStore(dataStoreId); + public AsyncCallFuture createVolumeAsync(VolumeInfo volume, DataStore dataStore) { AsyncCallFuture future = new AsyncCallFuture(); - VolumeApiResult result = new VolumeApiResult(volume); - - if (dataStore == null) { - result.setResult("Can't find dataStoreId: " + dataStoreId); - future.complete(result); - return future; - } + DataObject volumeOnStore = dataStore.create(volume); + volumeOnStore.processEvent(Event.CreateOnlyRequested); - if (dataStore.exists(volume)) { - result.setResult("Volume: " + volume.getId() + " already exists on primary data store: " + dataStoreId); - future.complete(result); - return future; - } - - VolumeObject vo = (VolumeObject) volume; - vo.stateTransit(Volume.Event.CreateRequested); - - CreateVolumeContext context = new CreateVolumeContext(null, vo, future); + CreateVolumeContext context = new CreateVolumeContext(null, volumeOnStore, future); AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); caller.setCallback(caller.getTarget().createVolumeCallback(null, null)) .setContext(context); - dataObjectMgr.createAsync(volume, dataStore, caller, true); + dataStore.getDriver().createAsync(volumeOnStore, caller); return future; } protected Void createVolumeCallback(AsyncCallbackDispatcher callback, CreateVolumeContext context) { CreateCmdResult result = callback.getResult(); - VolumeObject vo = context.getVolume(); - VolumeApiResult volResult = new VolumeApiResult(vo); + DataObject vo = context.getVolume(); + String errMsg = null; if (result.isSuccess()) { - vo.stateTransit(Volume.Event.OperationSucceeded); + vo.processEvent(Event.OperationSuccessed); } else { - vo.stateTransit(Volume.Event.OperationFailed); - volResult.setResult(result.getResult()); + vo.processEvent(Event.OperationFailed); + errMsg = result.getResult(); + } + VolumeApiResult volResult = new VolumeApiResult((VolumeObject)vo); + if (errMsg != null) { + volResult.setResult(errMsg); } - context.getFuture().complete(volResult); return null; } @@ -159,26 +159,47 @@ public class VolumeServiceImpl implements VolumeService { @DB @Override - public AsyncCallFuture deleteVolumeAsync(VolumeInfo volume) { - VolumeObject vo = (VolumeObject)volume; + public AsyncCallFuture expungeVolumeAsync(VolumeInfo volume) { AsyncCallFuture future = new AsyncCallFuture(); VolumeApiResult result = new VolumeApiResult(volume); - - DataStore dataStore = vo.getDataStore(); - vo.stateTransit(Volume.Event.DestroyRequested); - if (dataStore == null) { - vo.stateTransit(Volume.Event.OperationSucceeded); - volDao.remove(vo.getId()); + if (volume.getDataStore() == null) { + this.volDao.remove(volume.getId()); future.complete(result); return future; } + String vmName = null; + VolumeVO vol = this.volDao.findById(volume.getId()); + if (vol.getVolumeType() == Type.ROOT && vol.getInstanceId() != null) { + VirtualMachine vm = vmDao.findByIdIncludingRemoved(vol + .getInstanceId()); + if (vm != null) { + vmName = vm.getInstanceName(); + } + } + + String volumePath = vol.getPath(); + Long poolId = vol.getPoolId(); + if (poolId == null || volumePath == null || volumePath.trim().isEmpty()) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Marking volume that was never created as destroyed: " + + vol); + } + this.volDao.remove(vol.getId()); + future.complete(result); + return future; + } + VolumeObject vo = (VolumeObject)volume; + + volume.processEvent(Event.ExpungeRequested); + + DeleteVolumeContext context = new DeleteVolumeContext(null, vo, future); AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); caller.setCallback(caller.getTarget().deleteVolumeCallback(null, null)) .setContext(context); - dataObjectMgr.deleteAsync(volume, caller); + volume.getDataStore().getDriver().deleteAsync(volume, caller); return future; } @@ -187,10 +208,10 @@ public class VolumeServiceImpl implements VolumeService { VolumeObject vo = context.getVolume(); VolumeApiResult apiResult = new VolumeApiResult(vo); if (result.isSuccess()) { - vo.stateTransit(Volume.Event.OperationSucceeded); + vo.processEvent(Event.OperationSuccessed); volDao.remove(vo.getId()); } else { - vo.stateTransit(Volume.Event.OperationFailed); + vo.processEvent(Event.OperationFailed); apiResult.setResult(result.getResult()); } context.getFuture().complete(apiResult); @@ -203,24 +224,6 @@ public class VolumeServiceImpl implements VolumeService { return false; } - @Override - public boolean createVolumeFromSnapshot(long volumeId, long snapshotId) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean rokeAccess(long volumeId, long endpointId) { - // TODO Auto-generated method stub - return false; - } - - @Override - public VolumeEntity allocateVolumeInDb(long size, VolumeType type, String volName, Long templateId) { - VolumeVO vo = volDao.allocVolume(size, type, volName, templateId); - return new VolumeEntityImpl(VolumeObject.getVolumeObject(null, vo), this); - } - @Override public VolumeEntity getVolumeEntity(long volumeId) { VolumeVO vo = volDao.findById(volumeId); @@ -236,25 +239,21 @@ public class VolumeServiceImpl implements VolumeService { } } - @Override - public String grantAccess(VolumeInfo volume, EndPoint endpointId) { - // TODO Auto-generated method stub - return null; - } - class CreateBaseImageContext extends AsyncRpcConext { private final VolumeInfo volume; private final PrimaryDataStore dataStore; private final TemplateInfo srcTemplate; private final AsyncCallFuture future; + final DataObject destObj; public CreateBaseImageContext(AsyncCompletionCallback callback, VolumeInfo volume, PrimaryDataStore datastore, TemplateInfo srcTemplate, - AsyncCallFuture future) { + AsyncCallFuture future, DataObject destObj) { super(callback); this.volume = volume; this.dataStore = datastore; this.future = future; this.srcTemplate = srcTemplate; + this.destObj = destObj; } public VolumeInfo getVolume() { @@ -285,33 +284,45 @@ public class VolumeServiceImpl implements VolumeService { @DB protected void createBaseImageAsync(VolumeInfo volume, PrimaryDataStore dataStore, TemplateInfo template, AsyncCallFuture future) { + + DataObject templateOnPrimaryStoreObj = dataStore.create(template); CreateBaseImageContext context = new CreateBaseImageContext(null, volume, dataStore, template, - future); - - AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); + future, templateOnPrimaryStoreObj); + AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); caller.setCallback(caller.getTarget().copyBaseImageCallback(null, null)) .setContext(context); - DataObject templateOnPrimaryStoreObj = dataObjectMgr.createInternalStateOnly(template, dataStore); + + templateOnPrimaryStoreObj.processEvent(Event.CreateOnlyRequested); - dataObjectMgr.copyAsync(context.srcTemplate, templateOnPrimaryStoreObj, caller); + try { + motionSrv.copyAsync(template, templateOnPrimaryStoreObj, caller); + } catch (Exception e) { + s_logger.debug("failed to create template on storage", e); + templateOnPrimaryStoreObj.processEvent(Event.OperationFailed); + VolumeApiResult result = new VolumeApiResult(volume); + result.setResult(e.toString()); + caller.complete(result); + } return; } @DB - protected Void copyBaseImageCallback(AsyncCallbackDispatcher callback, CreateBaseImageContext context) { - CreateCmdResult result = callback.getResult(); + protected Void copyBaseImageCallback(AsyncCallbackDispatcher callback, CreateBaseImageContext context) { + CopyCommandResult result = callback.getResult(); VolumeApiResult res = new VolumeApiResult(context.getVolume()); AsyncCallFuture future = context.getFuture(); + DataObject templateOnPrimaryStoreObj = context.destObj; if (!result.isSuccess()) { + templateOnPrimaryStoreObj.processEvent(Event.OperationFailed); res.setResult(result.getResult()); future.complete(res); return null; } - DataObject templateOnPrimaryStoreObj = objectInDataStoreMgr.get(context.srcTemplate, context.dataStore); - + + templateOnPrimaryStoreObj.processEvent(Event.OperationSuccessed); createVolumeFromBaseImageAsync(context.volume, templateOnPrimaryStoreObj, context.dataStore, future); return null; } @@ -332,10 +343,7 @@ public class VolumeServiceImpl implements VolumeService { this.templateOnStore = templateOnStore; } - public VolumeObject getVolumeObject() { - return this.vo; - } - + public AsyncCallFuture getFuture() { return this.future; } @@ -343,39 +351,32 @@ public class VolumeServiceImpl implements VolumeService { @DB protected void createVolumeFromBaseImageAsync(VolumeInfo volume, DataObject templateOnPrimaryStore, PrimaryDataStore pd, AsyncCallFuture future) { - VolumeObject vo = (VolumeObject) volume; - try { - vo.stateTransit(Volume.Event.CreateRequested); - } catch (Exception e) { - VolumeApiResult result = new VolumeApiResult(volume); - result.setResult(e.toString()); - future.complete(result); - return; - } - + VolumeObject vo = (VolumeObject)volume; CreateVolumeFromBaseImageContext context = new CreateVolumeFromBaseImageContext(null, vo, pd, templateOnPrimaryStore, future); - AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); + AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); caller.setCallback(caller.getTarget().copyBaseImageCallBack(null, null)) .setContext(context); - DataObject volumeOnPrimaryStorage = dataObjectMgr.createInternalStateOnly(volume, pd); - dataObjectMgr.copyAsync(context.templateOnStore, volumeOnPrimaryStorage, caller); + DataObject volumeOnPrimaryStorage = pd.create(volume); + volume.processEvent(Event.CreateOnlyRequested); + + motionSrv.copyAsync(context.templateOnStore, volumeOnPrimaryStorage, caller); return; } @DB - public Void copyBaseImageCallBack(AsyncCallbackDispatcher callback, CreateVolumeFromBaseImageContext context) { - VolumeObject vo = context.getVolumeObject(); - CreateCmdResult result = callback.getResult(); + public Void copyBaseImageCallBack(AsyncCallbackDispatcher callback, CreateVolumeFromBaseImageContext context) { + VolumeObject vo = context.vo; + CopyCommandResult result = callback.getResult(); VolumeApiResult volResult = new VolumeApiResult(vo); if (result.isSuccess()) { if (result.getPath() != null) { vo.setPath(result.getPath()); } - vo.stateTransit(Volume.Event.OperationSucceeded); + vo.processEvent(Event.OperationSuccessed); } else { - vo.stateTransit(Volume.Event.OperationFailed); + vo.processEvent(Event.OperationFailed); volResult.setResult(result.getResult()); } @@ -397,13 +398,253 @@ public class VolumeServiceImpl implements VolumeService { return future; } - createVolumeFromBaseImageAsync(volume, template, pd, future); + createVolumeFromBaseImageAsync(volume, templateOnPrimaryStore, pd, future); return future; } @Override - public TemplateOnPrimaryDataStoreInfo grantAccess(TemplateOnPrimaryDataStoreInfo template, EndPoint endPoint) { - // TODO Auto-generated method stub + @DB + public boolean destroyVolume(long volumeId) + throws ConcurrentOperationException { + + VolumeInfo vol = this.volFactory.getVolume(volumeId); + vol.processEvent(Event.DestroyRequested); + this.snapshotMgr.deletePoliciesForVolume(volumeId); + + vol.processEvent(Event.OperationSuccessed); + + return true; + } + + @Override + public AsyncCallFuture createVolumeFromSnapshot( + VolumeInfo volume, DataStore store, SnapshotInfo snapshot) { + AsyncCallFuture future = new AsyncCallFuture(); + + try { + DataObject volumeOnStore = store.create(volume); + volume.processEvent(Event.CreateOnlyRequested); + CreateVolumeFromBaseImageContext context = new CreateVolumeFromBaseImageContext(null, + (VolumeObject)volume, store, volumeOnStore, future); + AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); + caller.setCallback(caller.getTarget().createVolumeFromSnapshotCallback(null, null)) + .setContext(context); + this.motionSrv.copyAsync(snapshot, volumeOnStore, caller); + } catch (Exception e) { + s_logger.debug("create volume from snapshot failed", e); + VolumeApiResult result = new VolumeApiResult(volume); + result.setResult(e.toString()); + future.complete(result); + } + + return future; + } + + protected Void createVolumeFromSnapshotCallback(AsyncCallbackDispatcher callback, + CreateVolumeFromBaseImageContext context) { + CopyCommandResult result = callback.getResult(); + VolumeInfo volume = context.vo; + VolumeApiResult apiResult = new VolumeApiResult(volume); + Event event = null; + if (result.isFailed()) { + apiResult.setResult(result.getResult()); + event = Event.OperationFailed; + } else { + event = Event.OperationSuccessed; + } + + try { + volume.processEvent(event); + } catch (Exception e) { + s_logger.debug("create volume from snapshot failed", e); + apiResult.setResult(e.toString()); + } + + AsyncCallFuture future = context.future; + future.complete(apiResult); + return null; + } + + protected VolumeVO duplicateVolumeOnAnotherStorage(Volume volume, StoragePool pool) { + Long lastPoolId = volume.getPoolId(); + VolumeVO newVol = new VolumeVO(volume); + newVol.setPoolId(pool.getId()); + newVol.setFolder(pool.getPath()); + newVol.setPodId(pool.getPodId()); + newVol.setPoolId(pool.getId()); + newVol.setLastPoolId(lastPoolId); + newVol.setPodId(pool.getPodId()); + return this.volDao.persist(newVol); + } + + + private class CopyVolumeContext extends AsyncRpcConext { + final VolumeInfo srcVolume; + final VolumeInfo destVolume; + final DataStore destStore; + final AsyncCallFuture future; + /** + * @param callback + */ + public CopyVolumeContext(AsyncCompletionCallback callback, AsyncCallFuture future, VolumeInfo srcVolume, VolumeInfo destVolume, + DataStore destStore) { + super(callback); + this.srcVolume = srcVolume; + this.destVolume = destVolume; + this.destStore = destStore; + this.future = future; + } + + } + @Override + public AsyncCallFuture copyVolume(VolumeInfo srcVolume, + DataStore destStore) { + AsyncCallFuture future = new AsyncCallFuture(); + VolumeApiResult res = new VolumeApiResult(srcVolume); + try { + if (!this.snapshotMgr.canOperateOnVolume(srcVolume)) { + s_logger.debug( + "There are snapshots creating on this volume, can not move this volume"); + + res.setResult("There are snapshots creating on this volume, can not move this volume"); + future.complete(res); + return future; + } + + VolumeVO destVol = duplicateVolumeOnAnotherStorage(srcVolume, (StoragePool)destStore); + VolumeInfo destVolume = this.volFactory.getVolume(destVol.getId(), destStore); + destVolume.processEvent(Event.CreateOnlyRequested); + srcVolume.processEvent(Event.CopyingRequested); + + CopyVolumeContext context = new CopyVolumeContext(null, future, srcVolume, + destVolume, + destStore); + AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); + caller.setCallback(caller.getTarget().copyVolumeCallBack(null, null)) + .setContext(context); + this.motionSrv.copyAsync(srcVolume, destVolume, caller); + } catch (Exception e) { + s_logger.debug("Failed to copy volume", e); + res.setResult(e.toString()); + future.complete(res); + } + return future; + } + + protected Void copyVolumeCallBack(AsyncCallbackDispatcher callback, CopyVolumeContext context) { + VolumeInfo srcVolume = context.srcVolume; + VolumeInfo destVolume = context.destVolume; + CopyCommandResult result = callback.getResult(); + AsyncCallFuture future = context.future; + VolumeApiResult res = new VolumeApiResult(destVolume); + try { + if (result.isFailed()) { + res.setResult(result.getResult()); + destVolume.processEvent(Event.OperationFailed); + srcVolume.processEvent(Event.OperationFailed); + AsyncCallFuture destroyFuture = this.expungeVolumeAsync(destVolume); + destroyFuture.get(); + future.complete(res); + return null; + } + srcVolume.processEvent(Event.OperationSuccessed); + destVolume.processEvent(Event.OperationSuccessed); + AsyncCallFuture destroyFuture = this.expungeVolumeAsync(srcVolume); + destroyFuture.get(); + future.complete(res); + return null; + } catch (Exception e) { + s_logger.debug("Failed to process copy volume callback",e); + res.setResult(e.toString()); + future.complete(res); + } + return null; } + + @Override + public AsyncCallFuture registerVolume(VolumeInfo volume, DataStore store) { + + AsyncCallFuture future = new AsyncCallFuture(); + VolumeObject vo = (VolumeObject) volume; + vo.stateTransit(Volume.Event.UploadRequested); + + CreateVolumeContext context = new CreateVolumeContext(null, vo, future); + AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); + caller.setCallback(caller.getTarget().registerVolumeCallback(null, null)) + .setContext(context); + + dataObjectMgr.createAsync(volume, store, caller, true); + return future; + } + + protected Void registerVolumeCallback(AsyncCallbackDispatcher callback, CreateVolumeContext context) { + CreateCmdResult result = callback.getResult(); + VolumeObject vo = (VolumeObject)context.volume; + /*if (result.isFailed()) { + vo.stateTransit(Volume.Event.OperationFailed); + } else { + vo.stateTransit(Volume.Event.OperationSucceeded); + }*/ + VolumeApiResult res = new VolumeApiResult(vo); + context.future.complete(res); + return null; + } + + + @Override + public AsyncCallFuture resize(VolumeInfo volume) { + AsyncCallFuture future = new AsyncCallFuture(); + VolumeApiResult result = new VolumeApiResult(volume); + try { + volume.processEvent(Event.ResizeRequested); + } catch (Exception e) { + s_logger.debug("Failed to change state to resize", e); + result.setResult(e.toString()); + future.complete(result); + return future; + } + CreateVolumeContext context = new CreateVolumeContext(null, volume, future); + AsyncCallbackDispatcher caller = AsyncCallbackDispatcher.create(this); + caller.setCallback(caller.getTarget().registerVolumeCallback(null, null)) + .setContext(context); + volume.getDataStore().getDriver().resize(volume, caller); + return future; + } + + protected Void resizeVolumeCallback(AsyncCallbackDispatcher callback, CreateVolumeContext context) { + CreateCmdResult result = callback.getResult(); + AsyncCallFuture future = context.future; + VolumeInfo volume = (VolumeInfo)context.volume; + + if (result.isFailed()) { + try { + volume.processEvent(Event.OperationFailed); + } catch (Exception e) { + s_logger.debug("Failed to change state", e); + } + VolumeApiResult res = new VolumeApiResult(volume); + res.setResult(result.getResult()); + future.complete(res); + return null; + } + + try { + volume.processEvent(Event.OperationSuccessed); + } catch(Exception e) { + s_logger.debug("Failed to change state", e); + VolumeApiResult res = new VolumeApiResult(volume); + res.setResult(result.getResult()); + future.complete(res); + return null; + } + + VolumeApiResult res = new VolumeApiResult(volume); + future.complete(res); + + return null; + } + + + } diff --git a/framework/api/pom.xml b/framework/api/pom.xml new file mode 100644 index 00000000000..5260ebc4bf6 --- /dev/null +++ b/framework/api/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + cloud-framework-api + + org.apache.cloudstack + cloudstack-framework + 4.2.0-SNAPSHOT + ../pom.xml + + + + + org.apache.cloudstack + cloud-utils + 4.2.0-SNAPSHOT + + + + + + install + src + ${project.basedir}/test + + + ${project.basedir}/test/resources + + + + diff --git a/framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCallFuture.java b/framework/api/src/org/apache/cloudstack/framework/async/AsyncCallFuture.java similarity index 100% rename from framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCallFuture.java rename to framework/api/src/org/apache/cloudstack/framework/async/AsyncCallFuture.java diff --git a/framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCompletionCallback.java b/framework/api/src/org/apache/cloudstack/framework/async/AsyncCompletionCallback.java similarity index 100% rename from framework/ipc/src/org/apache/cloudstack/framework/async/AsyncCompletionCallback.java rename to framework/api/src/org/apache/cloudstack/framework/async/AsyncCompletionCallback.java diff --git a/framework/events/pom.xml b/framework/events/pom.xml index ef812e5a014..7c788c35bbd 100644 --- a/framework/events/pom.xml +++ b/framework/events/pom.xml @@ -20,11 +20,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 cloud-framework-events - Apache CloudStack Event Notification Framework + Apache CloudStack Framework - Event Notification org.apache.cloudstack cloudstack-framework - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../pom.xml diff --git a/framework/events/src/org/apache/cloudstack/framework/events/EventBus.java b/framework/events/src/org/apache/cloudstack/framework/events/EventBus.java index c16ee6f96f4..b83e3b28a7a 100644 --- a/framework/events/src/org/apache/cloudstack/framework/events/EventBus.java +++ b/framework/events/src/org/apache/cloudstack/framework/events/EventBus.java @@ -19,15 +19,13 @@ package org.apache.cloudstack.framework.events; -import com.cloud.utils.component.Adapter; - import java.util.UUID; /** * Interface to publish and subscribe to CloudStack events * */ -public interface EventBus extends Adapter{ +public interface EventBus { /** * publish an event on to the event bus diff --git a/framework/ipc/pom.xml b/framework/ipc/pom.xml index 6afd1c49ef2..b7f4fcc78ce 100644 --- a/framework/ipc/pom.xml +++ b/framework/ipc/pom.xml @@ -12,10 +12,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 cloud-framework-ipc + Apache CloudStack Framework - IPC org.apache.cloudstack cloudstack-framework - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../pom.xml @@ -24,13 +25,13 @@ org.apache.cloudstack cloud-core - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT org.apache.cloudstack cloud-utils - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT diff --git a/framework/jobs/pom.xml b/framework/jobs/pom.xml index 8b12f5d4bb5..56490216f16 100644 --- a/framework/jobs/pom.xml +++ b/framework/jobs/pom.xml @@ -26,4 +26,4 @@ quartz 2.1.6
- \ No newline at end of file + diff --git a/framework/pom.xml b/framework/pom.xml index 9ac1ae070c0..4633dab2b30 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -19,12 +19,12 @@ 4.0.0 cloudstack-framework - Apache CloudStack framework POM + Apache CloudStack Framework pom org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT install @@ -33,5 +33,6 @@ ipc rest events + api diff --git a/framework/rest/pom.xml b/framework/rest/pom.xml index 2f890562190..a783bc8de2f 100644 --- a/framework/rest/pom.xml +++ b/framework/rest/pom.xml @@ -16,58 +16,62 @@ specific language governing permissions and limitations under the License. --> - - 4.0.0 - - org.apache.cloudstack - cloudstack-framework - 4.1.0-SNAPSHOT - ../pom.xml - - cloud-framework-rest - CloudStack Framework for Providing REST - - install - src - test - - - - com.fasterxml.jackson.module - jackson-module-jaxb-annotations - 2.1.1 - - - com.fasterxml.jackson.core - jackson-annotations - 2.1.1 - - - com.fasterxml.jackson.core - jackson-core - 2.1.1 - - - com.fasterxml.jackson.core - jackson-databind - 2.1.1 - - - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider - 2.1.1 - - - org.apache.cxf - cxf-bundle-jaxrs - 2.7.0 - - - org.eclipse.jetty - jetty-server - - - - - + + 4.0.0 + + org.apache.cloudstack + cloudstack-framework + 4.2.0-SNAPSHOT + ../pom.xml + + cloud-framework-rest + Apache CloudStack Framework - REST + + install + src + test + + + + com.fasterxml.jackson.module + jackson-module-jaxb-annotations + 2.1.1 + + + com.fasterxml.jackson.core + jackson-annotations + 2.1.1 + + + com.fasterxml.jackson.core + jackson-core + 2.1.1 + + + com.fasterxml.jackson.core + jackson-databind + 2.1.1 + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-json-provider + 2.1.1 + + + org.apache.cxf + cxf-bundle-jaxrs + 2.7.0 + + + org.eclipse.jetty + jetty-server + + + org.apache.geronimo.specs + geronimo-servlet_3.0_spec + + + + + diff --git a/packaging/centos63/cloud-agent.rc b/packaging/centos63/cloud-agent.rc index 505118fcbc8..6d534732528 100755 --- a/packaging/centos63/cloud-agent.rc +++ b/packaging/centos63/cloud-agent.rc @@ -24,14 +24,15 @@ . /etc/rc.d/init.d/functions -whatami=cloud-agent +whatami=cloudstack-agent # set environment variables SHORTNAME="$whatami" PIDFILE=/var/run/"$whatami".pid LOCKFILE=/var/lock/subsys/"$SHORTNAME" -LOGFILE=/var/log/cloud/agent/agent.log +LOGDIR=/var/log/cloudstack/agent +LOGFILE=${LOGDIR}/agent.log PROGNAME="Cloud Agent" CLASS="com.cloud.agent.AgentShell" JSVC=`which jsvc 2>/dev/null`; @@ -46,7 +47,7 @@ unset OPTIONS [ -r /etc/sysconfig/"$SHORTNAME" ] && source /etc/sysconfig/"$SHORTNAME" # The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) -JDK_DIRS="/usr/lib/jvm/jre /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" +JDK_DIRS="/usr/lib/jvm/jre /usr/lib/jvm/java-7-openjdk /usr/lib/jvm/java-7-openjdk-i386 /usr/lib/jvm/java-7-openjdk-amd64 /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun" for jdir in $JDK_DIRS; do if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then @@ -55,67 +56,64 @@ for jdir in $JDK_DIRS; do done export JAVA_HOME -SCP="" -DCP="" -ACP=`ls /usr/share/cloud/java/* | tr '\n' ':'` -JCP="/usr/share/java/jna.jar:/usr/share/java/commons-daemon.jar" +ACP=`ls /usr/share/cloudstack-agent/lib/*.jar | tr '\n' ':' | sed s'/.$//'` +PCP=`ls /usr/share/cloudstack-agent/plugins/*.jar 2>/dev/null | tr '\n' ':' | sed s'/.$//'` # We need to append the JSVC daemon JAR to the classpath # AgentShell implements the JSVC daemon methods -export CLASSPATH="$SCP:$DCP:$ACP:$JCP:/etc/cloud/agent:/usr/lib64/cloud/agent" +# We also need JNA in the classpath (from the distribution) for the Libvirt Java bindings +export CLASSPATH="/usr/share/java/commons-daemon.jar:/usr/share/java/jna.jar:$ACP:$PCP:/etc/cloudstack/agent:/usr/share/cloudstack-common/scripts" start() { - echo -n $"Starting $PROGNAME: " - if hostname --fqdn >/dev/null 2>&1 ; then - $JSVC -cp "$CLASSPATH" -pidfile "$PIDFILE" $CLASS - RETVAL=$? - echo - else - failure - echo - echo The host name does not resolve properly to an IP address. Cannot start "$PROGNAME". > /dev/stderr - RETVAL=9 - fi - [ $RETVAL = 0 ] && touch ${LOCKFILE} - return $RETVAL + echo -n $"Starting $PROGNAME: " + if hostname --fqdn >/dev/null 2>&1 ; then + $JSVC -cp "$CLASSPATH" -pidfile "$PIDFILE" -errfile SYSLOG $CLASS + RETVAL=$? + echo + else + failure + echo + echo The host name does not resolve properly to an IP address. Cannot start "$PROGNAME". > /dev/stderr + RETVAL=9 + fi + [ $RETVAL = 0 ] && touch ${LOCKFILE} + return $RETVAL } stop() { - echo -n $"Stopping $PROGNAME: " - $JSVC -pidfile "$PIDFILE" -stop $CLASS - RETVAL=$? - echo - [ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE} + echo -n $"Stopping $PROGNAME: " + $JSVC -pidfile "$PIDFILE" -stop $CLASS + RETVAL=$? + echo + [ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE} } - -# See how we were called. case "$1" in - start) - start - ;; - stop) - stop - ;; - status) + start) + start + ;; + stop) + stop + ;; + status) status -p ${PIDFILE} $SHORTNAME - RETVAL=$? - ;; - restart) - stop - sleep 3 - start - ;; - condrestart) - if status -p ${PIDFILE} $SHORTNAME >&/dev/null; then - stop - sleep 3 - start - fi - ;; - *) - echo $"Usage: $whatami {start|stop|restart|condrestart|status|help}" - RETVAL=3 + RETVAL=$? + ;; + restart) + stop + sleep 3 + start + ;; + condrestart) + if status -p ${PIDFILE} $SHORTNAME >&/dev/null; then + stop + sleep 3 + start + fi + ;; + *) + echo $"Usage: $whatami {start|stop|restart|condrestart|status|help}" + RETVAL=3 esac exit $RETVAL diff --git a/packaging/centos63/cloud-management.rc b/packaging/centos63/cloud-management.rc index 48c2ab44a62..6fd435b555d 100755 --- a/packaging/centos63/cloud-management.rc +++ b/packaging/centos63/cloud-management.rc @@ -46,8 +46,8 @@ NAME="$(basename $0)" stop() { SHUTDOWN_WAIT="30" count="0" - if [ -f /var/run/cloud-management.pid ]; then - pid=`cat /var/run/cloud-management.pid` + if [ -f /var/run/${NAME}.pid ]; then + pid=`cat /var/run/${NAME}.pid` kill $pid &>/dev/null until [ "$(ps --pid $pid | grep -c $pid)" -eq "0" ] || \ [ "$count" -gt "$SHUTDOWN_WAIT" ] @@ -78,8 +78,8 @@ set_ulimit() { handle_pid_file() { if [ "$1" -ne 0 ] ; then - echo "The pid file locates at /var/run/cloud-management.pid and lock file at /var/lock/subsys/cloud-management. - Starting cloud-management will take care of them or you can manually clean up." + echo "The pid file locates at /var/run/${NAME}.pid and lock file at /var/lock/subsys/${NAME}. + Starting ${NAME} will take care of them or you can manually clean up." fi } diff --git a/packaging/centos63/cloud-management.sysconfig b/packaging/centos63/cloud-management.sysconfig index 15df8cdab92..cbc8b8b36c1 100644 --- a/packaging/centos63/cloud-management.sysconfig +++ b/packaging/centos63/cloud-management.sysconfig @@ -18,6 +18,6 @@ # This file is loaded in /etc/init.d/vmopsmanagement # ATM we only do two things here: -dummy=1 ; export TOMCAT_CFG=/etc/cloud/management/tomcat6.conf ; . /etc/cloud/management/tomcat6.conf +dummy=1 ; export TOMCAT_CFG=/etc/cloudstack/management/tomcat6.conf ; . /etc/cloudstack/management/tomcat6.conf #-------------------------- diff --git a/packaging/centos63/cloud-usage.rc b/packaging/centos63/cloud-usage.rc index 9aa01ea2b11..76f0e06fdfe 100755 --- a/packaging/centos63/cloud-usage.rc +++ b/packaging/centos63/cloud-usage.rc @@ -32,10 +32,11 @@ . /etc/rc.d/init.d/functions -SHORTNAME="cloud-usage" +SHORTNAME="cloudstack-usage" PIDFILE=/var/run/"$SHORTNAME".pid LOCKFILE=/var/lock/subsys/"$SHORTNAME" -LOGFILE=/var/log/cloud/usage/usage.log +LOGDIR=/var/log/cloudstack/usage +LOGFILE=${LOGDIR}/usage.log PROGNAME="CloudStack Usage Monitor" CLASS="com.cloud.usage.UsageServer" PROG="jsvc" @@ -57,12 +58,12 @@ export JAVA_HOME SCP="" DCP="" -UCP=`ls /usr/share/cloud/usage/java/* | tr '\n' ':'` +UCP=`ls /usr/share/cloudstack-usage/cloud-usage-*.jar`":"`ls /usr/share/cloudstack-usage/lib/* | tr '\n' ':'` JCP="/usr/share/java/commons-daemon.jar" # We need to append the JSVC daemon JAR to the classpath # AgentShell implements the JSVC daemon methods -export CLASSPATH="$SCP:$DCP:$UCP:$JCP:/etc/sysconfig +export CLASSPATH="$SCP:$DCP:$UCP:$JCP:/etc/cloudstack/usage" start() { if [ -s "$PIDFILE" ] && kill -0 $(cat "$PIDFILE") >/dev/null 2>&1; then @@ -79,7 +80,8 @@ start() { echo -n "Starting $PROGNAME" "$SHORTNAME" - if daemon --pidfile $PIDFILE $DAEMON -cp "$CLASSPATH" -pidfile "$PIDFILE" -user "$USER" -errfile SYSLOG -Dpid=$$ $CLASS + if daemon --pidfile $PIDFILE $DAEMON -cp "$CLASSPATH" -pidfile "$PIDFILE" -user "$USER" \ + -errfile $LOGDIR/cloudstack-usage.err -outfile $LOGDIR/cloudstack-usage.out -Dpid=$$ $CLASS RETVAL=$? then rc=0 diff --git a/packaging/centos63/cloud.spec b/packaging/centos63/cloud.spec index 50e1d11ef71..e340dd08c60 100644 --- a/packaging/centos63/cloud.spec +++ b/packaging/centos63/cloud.spec @@ -21,7 +21,7 @@ # DISABLE the post-percentinstall java repacking and line number stripping # we need to find a way to just disable the java repacking and line number stripping, but not the autodeps -Name: cloud +Name: cloudstack Summary: CloudStack IaaS Platform #http://fedoraproject.org/wiki/PackageNamingGuidelines#Pre-Release_packages %if "%{?_prerelease}" != "" @@ -54,7 +54,7 @@ BuildRequires: MySQL-python CloudStack is a highly-scalable elastic, open source, intelligent IaaS cloud implementation. -%package management-server +%package management Summary: CloudStack management server UI Requires: tomcat6 Requires: java >= 1.6.0 @@ -78,42 +78,48 @@ Requires: mkisofs Requires: MySQL-python Requires: python-paramiko Requires: ipmitool -Requires: %{name}-setup = %{_ver} +Requires: %{name}-common = %{_ver} +Obsoletes: cloud-client < 4.1.0 +Obsoletes: cloud-client-ui < 4.1.0 +Obsoletes: cloud-daemonize < 4.1.0 +Obsoletes: cloud-server < 4.1.0 +Obsoletes: cloud-test < 4.1.0 +Provides: cloud-client Group: System Environment/Libraries -%description management-server +%description management The CloudStack management server is the central point of coordination, management, and intelligence in CloudStack. -%package setup -Summary: CloudStack database setup scripts -Requires: java >= 1.6.0 +%package common +Summary: Apache CloudStack common files and scripts Requires: python -Requires: MySQL-python -Requires: %{name}-python = %{_ver} -Group: System Environment/Libraries -%description setup -The scripts and commands used to setup and configure the database - -%package python -Summary: CloudStack Python library -# FIXME nuke the archdependency -Requires: python -Group: System Environment/Libraries -%description python -The CloudStack Python library contains a few Python modules that the -CloudStack uses. +Obsoletes: cloud-test < 4.1.0 +Obsoletes: cloud-scripts < 4.1.0 +Obsoletes: cloud-utils < 4.1.0 +Obsoletes: cloud-core < 4.1.0 +Obsoletes: cloud-deps < 4.1.0 +Obsoletes: cloud-python < 4.1.0 +Obsoletes: cloud-setup < 4.1.0 +Obsoletes: cloud-cli < 4.1.0 +Group: System Environment/Libraries +%description common +The Apache CloudStack files shared between agent and management server %package agent Summary: CloudStack Agent for KVM hypervisors Requires: java >= 1.6.0 -Requires: %{name}-python = %{_ver} +Requires: jna >= 3.2.4 +Requires: %{name}-common = %{_ver} Requires: libvirt Requires: bridge-utils Requires: ebtables Requires: jsvc -Requires: jna Requires: jakarta-commons-daemon Requires: jakarta-commons-daemon-jsvc +Requires: perl +Provides: cloud-agent +Obsoletes: cloud-agent < 4.1.0 +Obsoletes: cloud-test < 4.1.0 Group: System Environment/Libraries %description agent The CloudStack agent for KVM hypervisors @@ -124,192 +130,265 @@ Requires: java >= 1.6.0 Requires: jsvc Requires: jakarta-commons-daemon Requires: jakarta-commons-daemon-jsvc +Obsoletes: cloud-usage < 4.1.0 +Provides: cloud-usage %description usage The CloudStack usage calculation service +%package cli +Summary: Apache CloudStack CLI +Provides: python-cloudmonkey +Provides: python-marvin +%description cli +Apache CloudStack command line interface + +%package awsapi +Summary: Apache CloudStack AWS API compatibility wrapper +Requires: %{name}-management = %{_ver} +%description awsapi +Apache Cloudstack AWS API compatibility wrapper + +%package docs +Summary: Apache CloudStack documentation +%description docs +Apache CloudStack documentations + %prep echo Doing CloudStack build - %setup -q -n %{name}-%{_maventag} %build -# this fixes the /usr/com bug on centos5 -%define _localstatedir /var -%define _sharedstatedir /var/lib cp packaging/centos63/replace.properties build/replace.properties echo VERSION=%{_maventag} >> build/replace.properties echo PACKAGE=%{name} >> build/replace.properties -mvn package -Dsystemvm +mvn -P awsapi package -Dsystemvm %install [ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT} +# Common directories mkdir -p ${RPM_BUILD_ROOT}%{_bindir} -mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}/setup -mkdir -p ${RPM_BUILD_ROOT}/usr/share/%{name}/management/ -ln -sf /usr/share/tomcat6/bin ${RPM_BUILD_ROOT}/usr/share/%{name}/management/bin -ln -sf /etc/cloud/management ${RPM_BUILD_ROOT}/usr/share/%{name}/management/conf -ln -sf /usr/share/tomcat6/lib ${RPM_BUILD_ROOT}/usr/share/%{name}/management/lib -ln -sf /var/log/cloud/management ${RPM_BUILD_ROOT}/usr/share/%{name}/management/logs -ln -sf /var/cache/cloud/management/temp ${RPM_BUILD_ROOT}/usr/share/%{name}/management/temp -ln -sf /var/cache/cloud/management/work ${RPM_BUILD_ROOT}/usr/share/%{name}/management/work -mkdir -p ${RPM_BUILD_ROOT}/usr/share/%{name}/management/webapps/client -mkdir -p ${RPM_BUILD_ROOT}/var/log/%{name}/management -mkdir -p ${RPM_BUILD_ROOT}/var/log/%{name}/agent -mkdir -p ${RPM_BUILD_ROOT}/var/log/%{name}/awsapi -mkdir -p ${RPM_BUILD_ROOT}/var/log/%{name}/ipallocator -mkdir -p ${RPM_BUILD_ROOT}/var/cache/%{name}/management/work -mkdir -p ${RPM_BUILD_ROOT}/var/cache/%{name}/management/temp -mkdir -p ${RPM_BUILD_ROOT}/var/lib/%{name}/mnt -mkdir -p ${RPM_BUILD_ROOT}/var/lib/%{name}/management -mkdir -p ${RPM_BUILD_ROOT}/etc/%{name}/management -mkdir -p ${RPM_BUILD_ROOT}/etc/%{name}/management/Catalina/localhost/client -mkdir -p ${RPM_BUILD_ROOT}/etc/rc.d/init.d -mkdir -p ${RPM_BUILD_ROOT}/etc/sysconfig -mkdir -p ${RPM_BUILD_ROOT}/etc/%{name}/management/Catalina/localhost/client +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/agent +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/awsapi +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/ipallocator +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/cache/%{name}/management/work +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/cache/%{name}/management/temp +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/%{name}/mnt +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/%{name}/management +mkdir -p ${RPM_BUILD_ROOT}%{_initrddir} +mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig -install -D client/target/utilities/bin/* ${RPM_BUILD_ROOT}%{_bindir} -install -D console-proxy/dist/systemvm.iso ${RPM_BUILD_ROOT}/usr/share/%{name}/management/webapps/client/WEB-INF/classes/vms/systemvm.iso -install -D console-proxy/dist/systemvm.zip ${RPM_BUILD_ROOT}/usr/share/%{name}/management/webapps/client/WEB-INF/classes/vms/systemvm.zip +# Common +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/scripts +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/vms +mkdir -p ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/ +cp -r scripts/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/scripts +install -D services/console-proxy/server/dist/systemvm.iso ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/vms/systemvm.iso +install -D services/console-proxy/server/dist/systemvm.zip ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/vms/systemvm.zip +install python/lib/cloud_utils.py ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/cloud_utils.py +cp -r python/lib/cloudutils ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/ +python -m py_compile ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/cloud_utils.py +python -m compileall ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/cloudutils -cp -r client/target/utilities/scripts/db/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}/setup -cp -r client/target/cloud-client-ui-4.1.0-SNAPSHOT/* ${RPM_BUILD_ROOT}/usr/share/%{name}/management/webapps/client +# Management +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/ +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/setup +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/management +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/awsapi +mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management + +# Specific for tomcat +mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management/Catalina/localhost/client +ln -sf /usr/share/tomcat6/bin ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/bin +ln -sf /etc/%{name}/management ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/conf +ln -sf /usr/share/tomcat6/lib ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/lib +ln -sf /var/log/%{name}/management ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/logs +ln -sf /var/cache/%{name}/management/temp ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/temp +ln -sf /var/cache/%{name}/management/work ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/work + +install -D client/target/utilities/bin/cloud-migrate-databases ${RPM_BUILD_ROOT}%{_bindir}/%{name}-migrate-databases +install -D client/target/utilities/bin/cloud-set-guest-password ${RPM_BUILD_ROOT}%{_bindir}/%{name}-set-guest-password +install -D client/target/utilities/bin/cloud-set-guest-sshkey ${RPM_BUILD_ROOT}%{_bindir}/%{name}-set-guest-sshkey +install -D client/target/utilities/bin/cloud-setup-databases ${RPM_BUILD_ROOT}%{_bindir}/%{name}-setup-databases +install -D client/target/utilities/bin/cloud-setup-encryption ${RPM_BUILD_ROOT}%{_bindir}/%{name}-setup-encryption +install -D client/target/utilities/bin/cloud-setup-management ${RPM_BUILD_ROOT}%{_bindir}/%{name}-setup-management +install -D client/target/utilities/bin/cloud-sysvmadm ${RPM_BUILD_ROOT}%{_bindir}/%{name}-sysvmadm +install -D client/target/utilities/bin/cloud-update-xenserver-licenses ${RPM_BUILD_ROOT}%{_bindir}/%{name}-update-xenserver-licenses + +cp -r client/target/utilities/scripts/db/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/setup +cp -r client/target/cloud-client-ui-%{_maventag}/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client + +# Don't package the scripts in the management webapp +rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client/WEB-INF/classes/scripts +rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client/WEB-INF/classes/vms for name in db.properties log4j-cloud.xml tomcat6-nonssl.conf tomcat6-ssl.conf server-ssl.xml server-nonssl.xml \ - catalina.policy catalina.properties db-enc.properties classpath.conf tomcat-users.xml web.xml ; do - mv ${RPM_BUILD_ROOT}/usr/share/%{name}/management/webapps/client/WEB-INF/classes/$name \ - ${RPM_BUILD_ROOT}/etc/%{name}/management/$name + catalina.policy catalina.properties db-enc.properties classpath.conf tomcat-users.xml web.xml environment.properties ; do + mv ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client/WEB-INF/classes/$name \ + ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management/$name done -mv ${RPM_BUILD_ROOT}/usr/share/%{name}/management/webapps/client/WEB-INF/classes/context.xml \ - ${RPM_BUILD_ROOT}/etc/%{name}/management/Catalina/localhost/client -mkdir -p ${RPM_BUILD_ROOT}/usr/lib/python2.6/site-packages/ -cp -r python/lib/cloudutils ${RPM_BUILD_ROOT}/usr/lib/python2.6/site-packages/ -cp -r cloud-cli/cloudtool ${RPM_BUILD_ROOT}/usr/lib/python2.6/site-packages/ -install python/lib/cloud_utils.py ${RPM_BUILD_ROOT}/usr/lib/python2.6/site-packages/cloud_utils.py -install cloud-cli/cloudapis/cloud.py ${RPM_BUILD_ROOT}/usr/lib/python2.6/site-packages/cloudapis.py -install python/bindir/cloud-external-ipallocator.py ${RPM_BUILD_ROOT}%{_bindir}/ +ln -s %{_sysconfdir}/%{name}/management/log4j-cloud.xml \ + ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client/WEB-INF/classes/log4j-cloud.xml + +mv ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client/WEB-INF/classes/context.xml \ + ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management/Catalina/localhost/client + +install python/bindir/cloud-external-ipallocator.py ${RPM_BUILD_ROOT}%{_bindir}/%{name}-external-ipallocator.py install -D client/target/pythonlibs/jasypt-1.9.0.jar ${RPM_BUILD_ROOT}%{_javadir}/jasypt-1.9.0.jar install -D client/target/pythonlibs/jasypt-1.8.jar ${RPM_BUILD_ROOT}%{_javadir}/jasypt-1.8.jar -install -D packaging/centos63/cloud-ipallocator.rc ${RPM_BUILD_ROOT}/etc/rc.d/init.d/%{name}-ipallocator -install -D packaging/centos63/cloud-management.rc ${RPM_BUILD_ROOT}/etc/rc.d/init.d/%{name}-management -install -D packaging/centos63/cloud-management.sysconfig ${RPM_BUILD_ROOT}/etc/sysconfig/%{name}-management +install -D packaging/centos63/cloud-ipallocator.rc ${RPM_BUILD_ROOT}%{_initrddir}/%{name}-ipallocator +install -D packaging/centos63/cloud-management.rc ${RPM_BUILD_ROOT}%{_initrddir}/%{name}-management +install -D packaging/centos63/cloud-management.sysconfig ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/%{name}-management chmod 770 ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management/Catalina chmod 770 ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management/Catalina/localhost chmod 770 ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/management/Catalina/localhost/client -chmod 770 ${RPM_BUILD_ROOT}%{_sharedstatedir}/%{name}/mnt -chmod 770 ${RPM_BUILD_ROOT}%{_sharedstatedir}/%{name}/management +chmod 770 ${RPM_BUILD_ROOT}%{_localstatedir}/%{name}/mnt +chmod 770 ${RPM_BUILD_ROOT}%{_localstatedir}/%{name}/management chmod 770 ${RPM_BUILD_ROOT}%{_localstatedir}/cache/%{name}/management/work chmod 770 ${RPM_BUILD_ROOT}%{_localstatedir}/cache/%{name}/management/temp chmod 770 ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/management chmod 770 ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/agent -chmod -R ugo+x ${RPM_BUILD_ROOT}/usr/share/%{name}/management/webapps/client/WEB-INF/classes/scripts # KVM Agent -mkdir -p ${RPM_BUILD_ROOT}/etc/cloud/agent -mkdir -p ${RPM_BUILD_ROOT}/var/log/cloud/agent -install -D packaging/centos63/cloud-agent.rc ${RPM_BUILD_ROOT}/etc/init.d/%{name}-agent -install -D agent/target/transformed/agent.properties ${RPM_BUILD_ROOT}/etc/cloud/agent/agent.properties -install -D agent/target/transformed/environment.properties ${RPM_BUILD_ROOT}/etc/cloud/agent/environment.properties -install -D agent/target/transformed/log4j-cloud.xml ${RPM_BUILD_ROOT}/etc/cloud/agent/log4j-cloud.xml -install -D agent/target/transformed/cloud-setup-agent ${RPM_BUILD_ROOT}/usr/bin/cloud-setup-agent -install -D agent/target/transformed/cloud-ssh ${RPM_BUILD_ROOT}/usr/bin/cloud-ssh -install -D plugins/hypervisors/kvm/target/%{name}-plugin-hypervisor-kvm-%{_maventag}.jar ${RPM_BUILD_ROOT}/usr/share/cloud/java/%{name}-plugin-hypervisor-kvm-%{_maventag}.jar -cp plugins/hypervisors/kvm/target/dependencies/* ${RPM_BUILD_ROOT}/usr/share/cloud/java -mkdir -p ${RPM_BUILD_ROOT}/usr/share/cloud/scripts -cp -r scripts/* ${RPM_BUILD_ROOT}/usr/share/cloud/scripts +mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/agent +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/agent +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-agent/lib +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-agent/plugins +install -D packaging/centos63/cloud-agent.rc ${RPM_BUILD_ROOT}%{_sysconfdir}/init.d/%{name}-agent +install -D agent/target/transformed/agent.properties ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/agent/agent.properties +install -D agent/target/transformed/environment.properties ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/agent/environment.properties +install -D agent/target/transformed/log4j-cloud.xml ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/agent/log4j-cloud.xml +install -D agent/target/transformed/cloud-setup-agent ${RPM_BUILD_ROOT}%{_bindir}/%{name}-setup-agent +install -D agent/target/transformed/cloud-ssh ${RPM_BUILD_ROOT}%{_bindir}/%{name}-ssh +install -D plugins/hypervisors/kvm/target/cloud-plugin-hypervisor-kvm-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%name-agent/lib/cloud-plugin-hypervisor-kvm-%{_maventag}.jar +cp plugins/hypervisors/kvm/target/dependencies/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-agent/lib # Usage server -install -D usage/target/%{name}-usage-%{_maventag}.jar ${RPM_BUILD_ROOT}/usr/share/cloud/usage/java/%{name}-usage-%{_maventag}.jar -cp usage/target/dependencies/* ${RPM_BUILD_ROOT}/usr/share/cloud/usage/java -install -D packaging/centos63/cloud-usage.rc ${RPM_BUILD_ROOT}/etc/init.d/%{name}-usage -mkdir -p ${RPM_BUILD_ROOT}/var/log/cloud/usage/ +mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/usage +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-usage/lib +install -D usage/target/cloud-usage-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%{name}-usage/cloud-usage-%{_maventag}.jar +cp usage/target/dependencies/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-usage/lib/ +install -D packaging/centos63/cloud-usage.rc ${RPM_BUILD_ROOT}/%{_sysconfdir}/init.d/%{name}-usage +mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/log/%{name}/usage/ + +# CLI +cp -r cloud-cli/cloudtool ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/ +install cloud-cli/cloudapis/cloud.py ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/cloudapis.py + +# AWS API +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-bridge/webapps/bridge +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}-bridge/setup +cp -r awsapi/target/cloud-awsapi-%{_maventag}/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-bridge/webapps/bridge +install -D awsapi-setup/setup/cloud-setup-bridge ${RPM_BUILD_ROOT}%{_bindir}/cloudstack-setup-bridge +install -D awsapi-setup/setup/cloudstack-aws-api-register ${RPM_BUILD_ROOT}%{_bindir}/cloudstack-aws-api-register +cp -r awsapi-setup/db/mysql/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-bridge/setup %clean [ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT} -%preun management-server -/sbin/service %{name}-management stop || true +%preun management +/sbin/service cloud-management stop || true if [ "$1" == "0" ] ; then - /sbin/chkconfig --del %{name}-management > /dev/null 2>&1 || true - /sbin/service %{name}-management stop > /dev/null 2>&1 || true + /sbin/chkconfig --del cloud-management > /dev/null 2>&1 || true + /sbin/service cloud-management stop > /dev/null 2>&1 || true fi -%pre management-server -id %{name} > /dev/null 2>&1 || /usr/sbin/useradd -M -c "CloudStack unprivileged user" \ - -r -s /bin/sh -d %{_sharedstatedir}/%{name}/management %{name}|| true +%pre management +id cloud > /dev/null 2>&1 || /usr/sbin/useradd -M -c "CloudStack unprivileged user" \ + -r -s /bin/sh -d %{_localstatedir}/cloudstack/management cloud|| true # set max file descriptors for cloud user to 4096 sed -i /"cloud hard nofile"/d /etc/security/limits.conf sed -i /"cloud soft nofile"/d /etc/security/limits.conf echo "cloud hard nofile 4096" >> /etc/security/limits.conf echo "cloud soft nofile 4096" >> /etc/security/limits.conf -rm -rf %{_localstatedir}/cache/%{name} +rm -rf %{_localstatedir}/cache/cloud # user harcoded here, also hardcoded on wscript -%post management-server +%post management if [ "$1" == "1" ] ; then - /sbin/chkconfig --add %{name}-management > /dev/null 2>&1 || true - /sbin/chkconfig --level 345 %{name}-management on > /dev/null 2>&1 || true + /sbin/chkconfig --add cloud-management > /dev/null 2>&1 || true + /sbin/chkconfig --level 345 cloud-management on > /dev/null 2>&1 || true fi -if [ ! -f %{_datadir}/%{name}/management/webapps/client/WEB-INF/classes/scripts/scripts/vm/hypervisor/xenserver/vhd-util ] ; then +if [ ! -f %{_datadir}/cloudstack-common/scripts/vm/hypervisor/xenserver/vhd-util ] ; then echo Please download vhd-util from http://download.cloud.com.s3.amazonaws.com/tools/vhd-util and put it in - echo %{_datadir}/%{name}/management/webapps/client/WEB-INF/classes/scripts/vm/hypervisor/xenserver/ + echo %{_datadir}/cloudstack-common/scripts/vm/hypervisor/xenserver/ +fi + +# change cloud user's home to 4.1+ version if needed. Would do this via 'usermod', but it +# requires that cloud user not be in use, so RPM could not be installed while management is running +if getent passwd cloud | grep -q /var/lib/cloud; then + sed -i 's/\/var\/lib\/cloud\/management/\/var\/cloudstack\/management/g' /etc/passwd +fi + + +%post awsapi +if [ -d "%{_datadir}/%{name}-management" ] ; then + ln -s %{_datadir}/%{name}-bridge/webapps %{_datadir}/%{name}-management/webapps7080 fi #No default permission as the permission setup is complex -%files management-server +%files management %defattr(-,root,root,-) %doc LICENSE %doc NOTICE -%dir %attr(0770,root,%{name}) %{_sysconfdir}/%{name}/management/Catalina -%dir %attr(0770,root,%{name}) %{_sysconfdir}/%{name}/management/Catalina/localhost -%dir %attr(0770,root,%{name}) %{_sysconfdir}/%{name}/management/Catalina/localhost/client -%dir %{_datadir}/%{name}/management -%dir %attr(0770,root,%{name}) %{_sharedstatedir}/%{name}/mnt -%dir %attr(0770,%{name},%{name}) %{_sharedstatedir}/%{name}/management -%dir %attr(0770,root,%{name}) %{_localstatedir}/cache/%{name}/management -%dir %attr(0770,root,%{name}) %{_localstatedir}/cache/%{name}/management/work -%dir %attr(0770,root,%{name}) %{_localstatedir}/cache/%{name}/management/temp -%dir %attr(0770,root,%{name}) %{_localstatedir}/log/%{name}/management -%dir %attr(0770,root,%{name}) %{_localstatedir}/log/%{name}/agent +%dir %attr(0770,root,cloud) %{_sysconfdir}/%{name}/management/Catalina +%dir %attr(0770,root,cloud) %{_sysconfdir}/%{name}/management/Catalina/localhost +%dir %attr(0770,root,cloud) %{_sysconfdir}/%{name}/management/Catalina/localhost/client +%dir %{_datadir}/%{name}-management +%dir %attr(0770,root,cloud) %{_localstatedir}/%{name}/mnt +%dir %attr(0770,cloud,cloud) %{_localstatedir}/%{name}/management +%dir %attr(0770,root,cloud) %{_localstatedir}/cache/%{name}/management +%dir %attr(0770,root,cloud) %{_localstatedir}/cache/%{name}/management/work +%dir %attr(0770,root,cloud) %{_localstatedir}/cache/%{name}/management/temp +%dir %attr(0770,root,cloud) %{_localstatedir}/log/%{name}/management +%dir %attr(0770,root,cloud) %{_localstatedir}/log/%{name}/agent +%dir %attr(0770,root,cloud) %{_localstatedir}/log/%{name}/awsapi %config(noreplace) %{_sysconfdir}/sysconfig/%{name}-management -%config(noreplace) %{_sysconfdir}/%{name}/management -%config(noreplace) %attr(0640,root,%{name}) %{_sysconfdir}/%{name}/management/db.properties -%config(noreplace) %{_sysconfdir}/%{name}/management/log4j-%{name}.xml +%config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/db.properties +%config(noreplace) %{_sysconfdir}/%{name}/management/log4j-cloud.xml %config(noreplace) %{_sysconfdir}/%{name}/management/tomcat6-nonssl.conf %config(noreplace) %{_sysconfdir}/%{name}/management/tomcat6-ssl.conf +%config(noreplace) %{_sysconfdir}/%{name}/management/Catalina/localhost/client/context.xml +%config(noreplace) %{_sysconfdir}/%{name}/management/catalina.policy +%config(noreplace) %{_sysconfdir}/%{name}/management/catalina.properties +%config(noreplace) %{_sysconfdir}/%{name}/management/classpath.conf +%config(noreplace) %{_sysconfdir}/%{name}/management/db-enc.properties +%config(noreplace) %{_sysconfdir}/%{name}/management/server-nonssl.xml +%config(noreplace) %{_sysconfdir}/%{name}/management/server-ssl.xml +%config(noreplace) %{_sysconfdir}/%{name}/management/tomcat-users.xml +%config(noreplace) %{_sysconfdir}/%{name}/management/web.xml +%config(noreplace) %{_sysconfdir}/%{name}/management/environment.properties %attr(0755,root,root) %{_initrddir}/%{name}-management %attr(0755,root,root) %{_bindir}/%{name}-setup-management %attr(0755,root,root) %{_bindir}/%{name}-update-xenserver-licenses -%{_datadir}/%{name}/management/* - -%files setup +%{_datadir}/%{name}-management/webapps +%dir %{_datadir}/%{name}-management/bin +%dir %{_datadir}/%{name}-management/conf +%dir %{_datadir}/%{name}-management/lib +%dir %{_datadir}/%{name}-management/logs +%dir %{_datadir}/%{name}-management/temp +%dir %{_datadir}/%{name}-management/work %attr(0755,root,root) %{_bindir}/%{name}-setup-databases %attr(0755,root,root) %{_bindir}/%{name}-migrate-databases %attr(0755,root,root) %{_bindir}/%{name}-set-guest-password %attr(0755,root,root) %{_bindir}/%{name}-set-guest-sshkey %attr(0755,root,root) %{_bindir}/%{name}-sysvmadm %attr(0755,root,root) %{_bindir}/%{name}-setup-encryption -%dir %{_datadir}/%{name}/setup -%{_datadir}/%{name}/setup/*.sql -%{_datadir}/%{name}/setup/db/*.sql -%{_datadir}/%{name}/setup/*.sh -%{_datadir}/%{name}/setup/server-setup.xml +%{_datadir}/%{name}-management/setup/*.sql +%{_datadir}/%{name}-management/setup/db/*.sql +%{_datadir}/%{name}-management/setup/*.sh +%{_datadir}/%{name}-management/setup/server-setup.xml %{_javadir}/jasypt-1.9.0.jar %{_javadir}/jasypt-1.8.jar -%doc LICENSE -%doc NOTICE - -%files python -%defattr(0644,root,root,0755) -%{_prefix}/lib*/python*/site-packages/%{name}* -%attr(0755,root,root) %{_bindir}/cloud-external-ipallocator.py -%attr(0755,root,root) %{_initrddir}/cloud-ipallocator +%attr(0755,root,root) %{_bindir}/%{name}-external-ipallocator.py +%attr(0755,root,root) %{_initrddir}/%{name}-ipallocator %dir %attr(0770,root,root) %{_localstatedir}/log/%{name}/ipallocator %doc LICENSE %doc NOTICE @@ -317,16 +396,55 @@ fi %files agent %attr(0755,root,root) %{_bindir}/%{name}-setup-agent %attr(0755,root,root) %{_bindir}/%{name}-ssh -%attr(0755,root,root) %{_sysconfdir}/init.d/cloud-agent -%config(noreplace) %{_sysconfdir}/cloud/agent -%dir /var/log/cloud/agent -%attr(0644,root,root) /usr/share/cloud/java/*.jar -%attr(0755,root,root) /usr/share/cloud/scripts +%attr(0755,root,root) %{_sysconfdir}/init.d/%{name}-agent +%config(noreplace) %{_sysconfdir}/%{name}/agent +%dir %{_localstatedir}/log/%{name}/agent +%attr(0644,root,root) %{_datadir}/%{name}-agent/lib/*.jar +%dir %{_datadir}/%{name}-agent/plugins +%doc LICENSE +%doc NOTICE + +%files common +%dir %attr(0755,root,root) %{_libdir}/python2.6/site-packages/cloudutils +%dir %attr(0755,root,root) %{_datadir}/%{name}-common/vms +%attr(0755,root,root) %{_datadir}/%{name}-common/scripts +%attr(0644, root, root) %{_datadir}/%{name}-common/vms/systemvm.iso +%attr(0644, root, root) %{_datadir}/%{name}-common/vms/systemvm.zip +%attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloud_utils.py +%attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloud_utils.pyc +%attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloudutils/* +%doc LICENSE +%doc NOTICE %files usage -%attr(0755,root,root) %{_sysconfdir}/init.d/cloud-usage -%attr(0644,root,root) /usr/share/cloud/usage/java/*.jar -%dir /var/log/cloud/usage +%attr(0755,root,root) %{_sysconfdir}/init.d/%{name}-usage +%attr(0644,root,root) %{_datadir}/%{name}-usage/*.jar +%attr(0644,root,root) %{_datadir}/%{name}-usage/lib/*.jar +%dir /var/log/%{name}/usage +%dir %{_sysconfdir}/%{name}/usage +%doc LICENSE +%doc NOTICE + +%files cli +%attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloudapis.py +%attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloudtool/__init__.py +%attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloudtool/utils.py +%doc LICENSE +%doc NOTICE + +%files docs +%doc LICENSE +%doc NOTICE + +%files awsapi +%defattr(0644,cloud,cloud,0755) +%{_datadir}/%{name}-bridge/webapps/bridge +%attr(0644,root,root) %{_datadir}/%{name}-bridge/setup/* +%attr(0755,root,root) %{_bindir}/cloudstack-aws-api-register +%attr(0755,root,root) %{_bindir}/cloudstack-setup-bridge +%doc LICENSE +%doc NOTICE + %changelog * Fri Oct 03 2012 Hugo Trippaers 4.1.0 diff --git a/packaging/centos63/package.sh b/packaging/centos63/package.sh old mode 100644 new mode 100755 index 83c0e5eda4c..2515ecba11f --- a/packaging/centos63/package.sh +++ b/packaging/centos63/package.sh @@ -18,10 +18,10 @@ CWD=`pwd` RPMDIR=$CWD/../../dist/rpmbuild +PACK_PROJECT=cloudstack - -VERSION=`(cd ../../; mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version) | grep -v '^\['` +VERSION=`(cd ../../; mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version) | grep '^[0-9]\.'` if echo $VERSION | grep SNAPSHOT ; then REALVER=`echo $VERSION | cut -d '-' -f 1` DEFVER="-D_ver $REALVER" @@ -34,12 +34,12 @@ else fi mkdir -p $RPMDIR/SPECS -mkdir -p $RPMDIR/SOURCES/cloud-$VERSION +mkdir -p $RPMDIR/SOURCES/$PACK_PROJECT-$VERSION -(cd ../../; tar -c --exclude .git --exclude dist . | tar -C $RPMDIR/SOURCES/cloud-$VERSION -x ) -(cd $RPMDIR/SOURCES/; tar -czf cloud-$VERSION.tgz cloud-$VERSION) +(cd ../../; tar -c --exclude .git --exclude dist . | tar -C $RPMDIR/SOURCES/$PACK_PROJECT-$VERSION -x ) +(cd $RPMDIR/SOURCES/; tar -czf $PACK_PROJECT-$VERSION.tgz $PACK_PROJECT-$VERSION) cp cloud.spec $RPMDIR/SPECS -(cd $RPMDIR; rpmbuild -ba SPECS/cloud.spec "-D_topdir $RPMDIR" "$DEFVER" "$DEFREL" "$DEFPRE" ) +(cd $RPMDIR; rpmbuild -ba SPECS/cloud.spec "-D_topdir $RPMDIR" "$DEFVER" "$DEFREL" "$DEFPRE") diff --git a/packaging/centos63/replace.properties b/packaging/centos63/replace.properties index e6efc76278c..211cc95449f 100644 --- a/packaging/centos63/replace.properties +++ b/packaging/centos63/replace.properties @@ -21,41 +21,40 @@ DBROOTPW= MSLOG=vmops.log APISERVERLOG=api.log DBHOST=localhost -MSMNTDIR=/mnt COMPONENTS-SPEC=components-premium.xml AWSAPILOG=awsapi.log REMOTEHOST=localhost AGENTCLASSPATH= -AGENTLOG=/var/log/cloud/agent/agent.log -AGENTLOGDIR=/var/log/cloud/agent/ -AGENTSYSCONFDIR=/etc/cloud/agent -APISERVERLOG=/var/log/cloud/management/apilog.log -AWSAPILOG=/var/log/cloud/awsapi/awsapi.log +AGENTLOG=/var/log/cloudstack/agent/agent.log +AGENTLOGDIR=/var/log/cloudstack/agent/ +AGENTSYSCONFDIR=/etc/cloudstack/agent +APISERVERLOG=/var/log/cloudstack/management/apilog.log +AWSAPILOG=/var/log/cloudstack/awsapi/awsapi.log BINDIR=/usr/bin -COMMONLIBDIR=/usr/share/java +COMMONLIBDIR=/usr/share/cloudstack-common CONFIGUREVARS= DEPSCLASSPATH= DOCDIR= -IPALOCATORLOG=/var/log/cloud/management/ipallocator.log +IPALOCATORLOG=/var/log/cloudstack/management/ipallocator.log JAVADIR=/usr/share/java LIBEXECDIR=/usr/libexec LOCKDIR=/var/lock MSCLASSPATH= -MSCONF=/etc/cloud/management -MSENVIRON=/usr/share/cloud/management -MSLOG=/var/log/cloud/management/management-server.log -MSLOGDIR=/var/log/cloud/management/ -MSMNTDIR=/var/lib/cloud/mnt +MSCONF=/etc/cloudstack/management +MSENVIRON=/usr/share/cloudstack-management +MSLOG=/var/log/cloudstack/management/management-server.log +MSLOGDIR=/var/log/cloudstack/management/ +MSMNTDIR=/var/cloudstack/mnt MSUSER=cloud PIDDIR=/var/run -PLUGINJAVADIR= -PREMIUMJAVADIR= +PLUGINJAVADIR=/usr/share/cloudstack-management/plugin +PREMIUMJAVADIR=/usr/share/cloudstack-management/premium PYTHONDIR=/usr/lib/python2.6/site-packages/ SERVERSYSCONFDIR=/etc/sysconfig -SETUPDATADIR=/usr/share/cloud/setup +SETUPDATADIR=/usr/share/cloudstack-management/setup SYSCONFDIR=/etc/sysconfig SYSTEMCLASSPATH= SYSTEMJARS= USAGECLASSPATH= -USAGELOG=/var/log/cloud/usage +USAGELOG=/var/log/cloudstack/usage USAGESYSCONFDIR=/etc/sysconfig diff --git a/packaging/debian/init/cloud-agent b/packaging/debian/init/cloud-agent new file mode 100755 index 00000000000..c87a5c09f81 --- /dev/null +++ b/packaging/debian/init/cloud-agent @@ -0,0 +1,171 @@ +#!/bin/bash + +### BEGIN INIT INFO +# Provides: cloud agent +# Required-Start: $network $local_fs +# Required-Stop: $network $local_fs +# Default-Start: 3 4 5 +# Default-Stop: 0 1 2 6 +# Short-Description: Start/stop Apache CloudStack Agent +# Description: This scripts Starts/Stops the Apache CloudStack agent +## The CloudStack Agent is a part of the Apache CloudStack project and is used +## for managing KVM-based Hypervisors and performing secondary storage tasks inside +## the Secondary Storage System Virtual Machine. +## JSVC (Java daemonizing) is used for starting and stopping the agent +### END INIT INFO + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +. /lib/lsb/init-functions + +SHORTNAME="cloud-agent" +PIDFILE=/var/run/"$SHORTNAME".pid +LOCKFILE=/var/lock/subsys/"$SHORTNAME" +PROGNAME="CloudStack Agent" +CLASS="com.cloud.agent.AgentShell" +PROG="jsvc" +DAEMON="/usr/bin/jsvc" +SHUTDOWN_WAIT="30" + +unset OPTIONS +[ -r /etc/default/"$SHORTNAME" ] && source /etc/default/"$SHORTNAME" + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/java-7-openjdk-amd64 /usr/lib/jvm/java-7-openjdk-i386 /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun" + +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +ACP=`ls /usr/share/cloudstack-agent/lib/*.jar | tr '\n' ':' | sed s'/.$//'` +PCP=`ls /usr/share/cloudstack-agent/plugins/*.jar 2>/dev/null | tr '\n' ':' | sed s'/.$//'` + +# We need to append the JSVC daemon JAR to the classpath +# AgentShell implements the JSVC daemon methods +# We also need JNA in the classpath (from the distribution) for the Libvirt Java bindings +export CLASSPATH="/usr/share/java/commons-daemon.jar:/usr/share/java/jna.jar:$ACP:$PCP:/etc/cloudstack/agent" + +wait_for_network() { + i=1 + while [ $i -lt 10 ] + do + # Under Ubuntu and Debian libvirt by default creates a bridge called virbr0. + # That's why we want more then 3 lines back from brctl, so that there is a manually created bridge + if [ "$(brctl show|wc -l)" -gt 2 ]; then + break + else + sleep 1 + let i=$i+1 + continue + fi + done +} + +start() { + if [ -s "$PIDFILE" ] && kill -0 $(cat "$PIDFILE") >/dev/null 2>&1; then + log_daemon_msg "$PROGNAME apparently already running" + log_end_msg 0 + exit 0 + fi + + log_daemon_msg "Starting $PROGNAME" "$SHORTNAME" + if hostname --fqdn >/dev/null 2>&1 ; then + true + else + log_failure_msg "The host name does not resolve properly to an IP address. Cannot start $PROGNAME" + log_end_msg 1 + exit 1 + fi + + wait_for_network + + if start_daemon -p $PIDFILE $DAEMON -cp "$CLASSPATH" -pidfile "$PIDFILE" -errfile SYSLOG $CLASS + RETVAL=$? + then + rc=0 + sleep 1 + if ! kill -0 $(cat "$PIDFILE") >/dev/null 2>&1; then + log_failure_msg "$PROG failed to start" + rc=1 + fi + else + rc=1 + fi + + if [ $rc -eq 0 ]; then + log_end_msg 0 + else + log_end_msg 1 + rm -f "$PIDFILE" + fi +} + +stop() { + count="0" + + log_daemon_msg "Stopping $PROGNAME" "$SHORTNAME" + killproc -p $PIDFILE $DAEMON + + until [ "$count" -gt "$SHUTDOWN_WAIT" ] + do + agentPid=$(ps aux|grep [j]svc|grep $SHORTNAME) + if [ "$?" -gt "0" ];then + break + fi + sleep 1 + let count="${count}+1" + done + + agentPid=$(ps aux|grep [j]svc|grep $SHORTNAME) + if [ "$?" -eq "0" ]; then + agentPid=$(ps aux|grep [j]svc|awk '{print $2}') + if [ "$agentPid" != "" ]; then + log_warning_msg "$PROG still running, forcing kill" + kill -9 $agentPid + fi + fi + + log_end_msg $? + rm -f "$PIDFILE" +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + status) + status_of_proc -p "$PIDFILE" "$PROG" "$SHORTNAME" + RETVAL=$? + ;; + restart | force-reload) + stop + sleep 3 + start + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload|status}" + RETVAL=3 +esac + +exit $RETVAL diff --git a/packaging/debian/init/cloud-management b/packaging/debian/init/cloud-management new file mode 100755 index 00000000000..490bf1e8e68 --- /dev/null +++ b/packaging/debian/init/cloud-management @@ -0,0 +1,244 @@ +#!/bin/sh +# +# /etc/init.d/tomcat6 -- startup script for the Tomcat 6 servlet engine + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +### BEGIN INIT INFO +# Provides: tomcat-vmops +# Required-Start: $local_fs $remote_fs $network +# Required-Stop: $local_fs $remote_fs $network +# Should-Start: $named +# Should-Stop: $named +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start Tomcat (CloudStack). +# Description: Start the Tomcat servlet engine that runs the CloudStack Management Server. +### END INIT INFO + +PATH=/bin:/usr/bin:/sbin:/usr/sbin +NAME=cloud-management +DESC="CloudStack-specific Tomcat servlet engine" +DAEMON=/usr/bin/jsvc +CATALINA_HOME=/usr/share/cloud/management +DEFAULT=/etc/cloud/management/tomcat6.conf +JVM_TMP=/tmp/$NAME-temp + +# We have to explicitly set the HOME variable to the homedir from the user "cloud" +# This is because various scripts run by the management server read the HOME variable +# and fail when this init script is run manually. +HOME=$(echo ~cloud) + +if [ `id -u` -ne 0 ]; then + echo "You need root privileges to run this script" + exit 1 +fi + +# Make sure tomcat is started with system locale +if [ -r /etc/default/locale ]; then + . /etc/default/locale + export LANG +fi + +. /lib/lsb/init-functions +. /etc/default/rcS + + +# The following variables can be overwritten in $DEFAULT + +# Run Tomcat 6 as this user ID +TOMCAT6_USER=tomcat6 + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not +# defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/java-1.6.0-openjdk-amd64/ /usr/lib/jvm/java-1.6.0-openjdk-i386/ /usr/lib/jvm/java-1.6.0-openjdk/ /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun" + +# Look for the right JVM to use +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +# Directory for per-instance configuration files and webapps +CATALINA_BASE=/usr/share/cloud/management + +# Use the Java security manager? (yes/no) +TOMCAT6_SECURITY=no + +# Default Java options +# Set java.awt.headless=true if JAVA_OPTS is not set so the +# Xalan XSL transformer can work without X11 display on JDK 1.4+ +# It also looks like the default heap size of 64M is not enough for most cases +# so the maximum heap size is set to 128M +if [ -z "$JAVA_OPTS" ]; then + JAVA_OPTS="-Djava.awt.headless=true -Xmx128M" +fi + +# End of variables that can be overwritten in $DEFAULT + +# overwrite settings from default file +if [ -f "$DEFAULT" ]; then + . "$DEFAULT" +fi + +if [ ! -f "$CATALINA_HOME/bin/bootstrap.jar" ]; then + log_failure_msg "$NAME is not installed" + exit 1 +fi + +[ -f "$DAEMON" ] || exit 0 + +POLICY_CACHE="$CATALINA_BASE/work/catalina.policy" + +JAVA_OPTS="$JAVA_OPTS -Djava.endorsed.dirs=$CATALINA_HOME/endorsed -Dcatalina.base=$CATALINA_BASE -Dcatalina.home=$CATALINA_HOME -Djava.io.tmpdir=$JVM_TMP" + +# Set the JSP compiler if set in the tomcat6.default file +if [ -n "$JSP_COMPILER" ]; then + JAVA_OPTS="$JAVA_OPTS -Dbuild.compiler=$JSP_COMPILER" +fi + +if [ "$TOMCAT6_SECURITY" = "yes" ]; then + JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djava.security.policy=$POLICY_CACHE" +fi + +# Set juli LogManager if logging.properties is provided +if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then + JAVA_OPTS="$JAVA_OPTS "-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" "-Djava.util.logging.config.file="$CATALINA_BASE/conf/logging.properties" +fi + +# Define other required variables +CATALINA_PID="/var/run/$NAME.pid" +BOOTSTRAP_CLASS=org.apache.catalina.startup.Bootstrap +JSVC_CLASSPATH="/usr/share/java/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar" +JSVC_CLASSPATH=$CLASSPATH:$JSVC_CLASSPATH + +# Look for Java Secure Sockets Extension (JSSE) JARs +if [ -z "${JSSE_HOME}" -a -r "${JAVA_HOME}/jre/lib/jsse.jar" ]; then + JSSE_HOME="${JAVA_HOME}/jre/" +fi +export JSSE_HOME + +case "$1" in + start) + if [ -z "$JAVA_HOME" ]; then + log_failure_msg "no JDK found - please set JAVA_HOME" + exit 1 + fi + + if [ ! -d "$CATALINA_BASE/conf" ]; then + log_failure_msg "invalid CATALINA_BASE: $CATALINA_BASE" + exit 1 + fi + + log_daemon_msg "Starting $DESC" "$NAME" + if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ + --user $TOMCAT6_USER --startas "$JAVA_HOME/bin/java" \ + >/dev/null; then + + # Regenerate POLICY_CACHE file + umask 022 + echo "// AUTO-GENERATED FILE from /etc/tomcat6/policy.d/" \ + > "$POLICY_CACHE" + echo "" >> "$POLICY_CACHE" + if ls $CATALINA_BASE/conf/policy.d/*.policy > /dev/null 2>&1 ; then + cat $CATALINA_BASE/conf/policy.d/*.policy \ + >> "$POLICY_CACHE" + fi + + # Remove / recreate JVM_TMP directory + rm -rf "$JVM_TMP" + mkdir "$JVM_TMP" || { + log_failure_msg "could not create JVM temporary directory" + exit 1 + } + chown $TOMCAT6_USER "$JVM_TMP" + cd "$JVM_TMP" + + + # fix storage issues on nfs mounts + umask 000 + $DAEMON -user "$TOMCAT6_USER" -cp "$JSVC_CLASSPATH" \ + -outfile SYSLOG -errfile SYSLOG \ + -pidfile "$CATALINA_PID" $JAVA_OPTS "$BOOTSTRAP_CLASS" + + sleep 5 + if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ + --user $TOMCAT6_USER --startas "$JAVA_HOME/bin/java" \ + >/dev/null; then + log_end_msg 1 + else + log_end_msg 0 + fi + else + log_progress_msg "(already running)" + log_end_msg 0 + fi + ;; + stop) + log_daemon_msg "Stopping $DESC" "$NAME" + if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ + --user "$TOMCAT6_USER" --startas "$JAVA_HOME/bin/java" \ + >/dev/null; then + log_progress_msg "(not running)" + else + $DAEMON -cp "$JSVC_CLASSPATH" -pidfile "$CATALINA_PID" \ + -stop "$BOOTSTRAP_CLASS" + fi + rm -rf "$JVM_TMP" + log_end_msg 0 + ;; + status) + if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ + --user $TOMCAT6_USER --startas "$JAVA_HOME/bin/java" \ + >/dev/null; then + + if [ -f "$CATALINA_PID" ]; then + log_success_msg "$DESC is not running, but pid file exists." + exit 1 + else + log_success_msg "$DESC is not running." + exit 3 + fi + else + log_success_msg "$DESC is running with pid `cat $CATALINA_PID`" + fi + ;; + restart|force-reload) + if start-stop-daemon --test --stop --pidfile "$CATALINA_PID" \ + --user $TOMCAT6_USER --startas "$JAVA_HOME/bin/java" \ + >/dev/null; then + $0 stop + sleep 1 + fi + $0 start + ;; + try-restart) + if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \ + --user $TOMCAT6_USER --startas "$JAVA_HOME/bin/java" \ + >/dev/null; then + $0 start + fi + ;; + *) + log_success_msg "Usage: $0 {start|stop|restart|try-restart|force-reload|status}" + exit 1 + ;; +esac + +exit 0 diff --git a/packaging/debian/init/cloud-usage b/packaging/debian/init/cloud-usage new file mode 100755 index 00000000000..3421cd1fbd4 --- /dev/null +++ b/packaging/debian/init/cloud-usage @@ -0,0 +1,131 @@ +#!/bin/bash + +### BEGIN INIT INFO +# Provides: cloud usage +# Required-Start: $network $local_fs +# Required-Stop: $network $local_fs +# Default-Start: 3 4 5 +# Default-Stop: 0 1 2 6 +# Short-Description: Start/stop Apache CloudStack Usage Monitor +# Description: This scripts Starts/Stops the Apache CloudStack Usage Monitor +## The CloudStack Usage Monitor is a part of the Apache CloudStack project and is used +## for storing usage statistics from instances. +## JSVC (Java daemonizing) is used for starting and stopping the usage monitor. +### END INIT INFO + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +. /lib/lsb/init-functions + +SHORTNAME="cloud-usage" +PIDFILE=/var/run/"$SHORTNAME".pid +LOGFILE=/var/log/cloud/usage/usage-server.log +PROGNAME="CloudStack Usage Monitor" +CLASS="com.cloud.usage.UsageServer" +PROG="jsvc" +DAEMON="/usr/bin/jsvc" +USER=@MSUSER@ + +unset OPTIONS +[ -r @SYSCONFDIR@/default/"$SHORTNAME" ] && source @SYSCONFDIR@/default/"$SHORTNAME" + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/java-7-openjdk-amd64 /usr/lib/jvm/java-7-openjdk-i386 /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun" + +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +SCP="@SYSTEMCLASSPATH@" +DCP="@DEPSCLASSPATH@" +UCP="@USAGECLASSPATH@" +JCP="/usr/share/java/commons-daemon.jar" + +# We need to append the JSVC daemon JAR to the classpath +# AgentShell implements the JSVC daemon methods +export CLASSPATH="$SCP:$DCP:$UCP:$JCP:@USAGESYSCONFDIR@" + +start() { + if [ -s "$PIDFILE" ] && kill -0 $(cat "$PIDFILE") >/dev/null 2>&1; then + log_daemon_msg "$PROGNAME apparently already running" + log_end_msg 0 + exit 0 + fi + + log_daemon_msg "Starting $PROGNAME" "$SHORTNAME" + if hostname --fqdn >/dev/null 2>&1 ; then + true + else + log_failure_msg "The host name does not resolve properly to an IP address. Cannot start $PROGNAME" + log_end_msg 1 + exit 1 + fi + + if start_daemon -p $PIDFILE $DAEMON -cp "$CLASSPATH" -pidfile "$PIDFILE" -user "$USER" -outfile SYSLOG -errfile SYSLOG -Dpid=$$ $CLASS + RETVAL=$? + then + rc=0 + sleep 1 + if ! kill -0 $(cat "$PIDFILE") >/dev/null 2>&1; then + log_failure_msg "$PROG failed to start" + rc=1 + fi + else + rc=1 + fi + + if [ $rc -eq 0 ]; then + log_end_msg 0 + else + log_end_msg 1 + rm -f "$PIDFILE" + fi +} + +stop() { + log_daemon_msg "Stopping $PROGNAME" "$SHORTNAME" + killproc -p $PIDFILE $DAEMON + log_end_msg $? + rm -f "$PIDFILE" +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + status) + status_of_proc -p "$PIDFILE" "$PROG" "$SHORTNAME" + RETVAL=$? + ;; + restart | force-reload) + stop + sleep 3 + start + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload|status}" + RETVAL=3 +esac + +exit $RETVAL diff --git a/packaging/debian/replace.properties b/packaging/debian/replace.properties index 6520f63e682..fee1defd357 100644 --- a/packaging/debian/replace.properties +++ b/packaging/debian/replace.properties @@ -26,37 +26,37 @@ COMPONENTS-SPEC=components-premium.xml AWSAPILOG=awsapi.log REMOTEHOST=localhost AGENTCLASSPATH= -AGENTLOG=/var/log/cloud/agent/agent.log -AGENTLOGDIR=/var/log/cloud/agent/ -AGENTSYSCONFDIR=/etc/cloud/agent -APISERVERLOG=/var/log/cloud/management/apilog.log -AWSAPILOG=/var/log/cloud/awsapi/awsapi.log +AGENTLOG=/var/log/cloudstack/agent/agent.log +AGENTLOGDIR=/var/log/cloudstack/agent/ +AGENTSYSCONFDIR=/etc/cloudstack/agent +APISERVERLOG=/var/log/cloudstack/management/apilog.log +AWSAPILOG=/var/log/cloudstack/awsapi/awsapi.log BINDIR=/usr/bin -COMMONLIBDIR=/usr/share/java +COMMONLIBDIR=/usr/share/cloudstack-common CONFIGUREVARS= DEPSCLASSPATH= DOCDIR= -IPALOCATORLOG=/var/log/cloud/management/ipallocator.log -JAVADIR=/usr/share/java +IPALOCATORLOG=/var/log/cloudstack/management/ipallocator.log +JAVADIR=/usr/share/cloudstack-management/webapps/client/WEB-INF/lib LIBEXECDIR=/usr/libexec LOCKDIR=/var/lock MSCLASSPATH= -MSCONF=/etc/cloud/management -MSENVIRON=/usr/share/cloud/management -MSLOG=/var/log/cloud/management/management-server.log -MSLOGDIR=/var/log/cloud/management/ +MSCONF=/etc/cloudstack/management +MSENVIRON=/usr/share/cloudstack-management +MSLOG=/var/log/cloudstack/management/management-server.log +MSLOGDIR=/var/log/cloudstack/management/ MSMNTDIR=/var/lib/cloud/mnt MSUSER=cloud PIDDIR=/var/run PLUGINJAVADIR= PREMIUMJAVADIR= PYTHONDIR=/usr/lib/python2.6/site-packages/ -SERVERSYSCONFDIR=/etc/cloud/server -SETUPDATADIR=/usr/share/cloud/setup +SERVERSYSCONFDIR=/etc/cloudstack/server +SETUPDATADIR=/usr/share/cloudstack-management/setup SYSCONFDIR=/etc SYSTEMCLASSPATH= SYSTEMJARS= USAGECLASSPATH= -USAGELOG=/var/log/cloud/usage -USAGESYSCONFDIR=/etc/cloud/usage +USAGELOG=/var/log/cloudstack/usage +USAGESYSCONFDIR=/etc/cloudstack/usage PACKAGE=cloud diff --git a/parent/pom.xml b/parent/pom.xml deleted file mode 100644 index 94ff2364180..00000000000 --- a/parent/pom.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - org.apache - cloudstack - 4.0.0-SNAPSHOT - ../pom.xml - - 4.0.0 - cloud-parent - pom - Apache CloudStack Parent - Apache CloudStack Parent POM - - 1.2.16 - 1.1 - 2.2.2 - 1.4 - 1.6 - 1.6 - 1.8 - 3.0 - 4.10 - 1.46 - 0.1.42 - 1.0.0.Final - 1.9.0 - build213-svnkit-1.3-patch - 1.5.0 - 1.7.1 - 5.6.100-1-SNAPSHOT - 3.1 - 4.0 - 5.1.12 - 1.3.1 - 3.1.3 - 1.4 - 1.4 - 1.5.1 - 1.2.8 - 3.5.1-Final - 2.0.4 - 2.4 - true - - - install - - - org.apache.maven.plugins - maven-compiler-plugin - 2.0.2 - - ${cs.jdk.version} - ${cs.jdk.version} - - - - - - - junit - junit - ${cs.junit.version} - test - - - diff --git a/patches/pom.xml b/patches/pom.xml index a662bcb9791..00eec02ddc9 100644 --- a/patches/pom.xml +++ b/patches/pom.xml @@ -17,7 +17,7 @@ org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT install diff --git a/patches/systemvm/debian/config/etc/init.d/cloud-early-config b/patches/systemvm/debian/config/etc/init.d/cloud-early-config index db2fcc2046e..877ab06009d 100755 --- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config +++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config @@ -108,14 +108,17 @@ get_boot_params() { sed -i "s/%/ /g" /var/cache/cloud/cmdline ;; kvm) - # KVM needs to mount another disk, to get cmdline - mkdir -p $EXTRA_MOUNT - mount /dev/vdb $EXTRA_MOUNT - cp -f $EXTRA_MOUNT/cmdline /var/cache/cloud/cmdline - cp -f $EXTRA_MOUNT/authorized_keys /var/cache/cloud/authorized_keys - privkey=/var/cache/cloud/authorized_keys - umount $EXTRA_MOUNT - cp -f $privkey /root/.ssh/ && chmod go-rwx /root/.ssh/authorized_keys + while read line; do + if [[ $line == cmdline:* ]]; then + cmd=${line//cmdline:/} + echo $cmd > /var/cache/cloud/cmdline + elif [[ $line == pubkey:* ]]; then + pubkey=${line//pubkey:/} + echo $pubkey > /var/cache/cloud/authorized_keys + echo $pubkey > /root/.ssh/authorized_keys + fi + done < /dev/vport0p1 + chmod go-rwx /root/.ssh/authorized_keys ;; vmware) vmtoolsd --cmd 'machine.id.get' > /var/cache/cloud/cmdline @@ -363,6 +366,18 @@ setup_common() { echo "nameserver $NS2" >> /etc/dnsmasq-resolv.conf echo "nameserver $NS2" >> /etc/resolv.conf fi + + if [ -n "$IP6_NS1" ] + then + echo "nameserver $IP6_NS1" >> /etc/dnsmasq-resolv.conf + echo "nameserver $IP6_NS1" >> /etc/resolv.conf + fi + if [ -n "$IP6_NS2" ] + then + echo "nameserver $IP6_NS2" >> /etc/dnsmasq-resolv.conf + echo "nameserver $IP6_NS2" >> /etc/resolv.conf + fi + if [ -n "$MGMTNET" -a -n "$LOCAL_GW" ] then ip route add $MGMTNET via $LOCAL_GW dev eth1 @@ -410,7 +425,6 @@ setup_dnsmasq() { sed -r -i s/^[#]?domain=.*$/domain=$DOMAIN/ /etc/dnsmasq.conf #answer all local domain queries sed -i -e "s/^[#]*local=.*$/local=\/$DOMAIN\//" /etc/dnsmasq.conf - fi if [ -n "$DNS_SEARCH_ORDER" ] @@ -432,6 +446,9 @@ setup_dnsmasq() { if [ $DHCP_RANGE_IP6 ] then sed -i -e "s/^dhcp-range_ip6=.*$/dhcp-range=$DHCP_RANGE_IP6,static/" /etc/dnsmasq.conf + # For nondefault6 tagged host, don't send dns-server information + sed -i /nondefault6/d /etc/dnsmasq.conf + echo "dhcp-option=nondefault6,option6:dns-server" >> /etc/dnsmasq.conf else sed -i -e "s/^dhcp-range_ip6=.*$//" /etc/dnsmasq.conf fi @@ -440,12 +457,36 @@ setup_dnsmasq() { if [ "$RROUTER" == "1" ] then - sed -i -e "/^[#]*dhcp-option=option:router.*$/d" /etc/dnsmasq.conf - echo "dhcp-option=option:router,$GUEST_GW" >> /etc/dnsmasq.conf - sed -i -e "/^[#]*dhcp-option=6.*$/d" /etc/dnsmasq.conf - echo "dhcp-option=6,$GUEST_GW" >> /etc/dnsmasq.conf + DEFAULT_GW=$GUEST_GW + INTERNAL_DNS=$GUEST_GW + else + if [ "$TYPE" == "dhcpsrvr" ] + then + DEFAULT_GW=$GW + else + DEFAULT_GW=$ETH0_IP + fi + INTERNAL_DNS=$ETH0_IP fi + sed -i -e "/^[#]*dhcp-option=option:router.*$/d" /etc/dnsmasq.conf + [ $DEFAULT_GW ] && echo "dhcp-option=option:router,$DEFAULT_GW" >> /etc/dnsmasq.conf + [ $ETH0_IP ] && [ $NS1 ] && NS="$NS1," + [ $ETH0_IP ] && [ $NS2 ] && NS="$NS$NS2," + [ $ETH0_IP6 ] && [ $IP6_NS1 ] && NS6="[$IP6_NS1]," + [ $ETH0_IP6 ] && [ $IP6_NS2 ] && NS6="$NS6[$IP6_NS2]," + #for now set up ourself as the dns server as well + sed -i -e "/^[#]*dhcp-option=6,.*$/d" /etc/dnsmasq.conf + sed -i -e "/^[#]*dhcp-option=option6:dns-server,.*$/d" /etc/dnsmasq.conf + if [ "$USE_EXTERNAL_DNS" != "true" ] + then + [ $ETH0_IP ] && NS="$INTERNAL_DNS,$NS" + [ $ETH0_IP6 ] && NS6="[::],$NS6" + fi + NS=${NS%?} + NS6=${NS6%?} + [ $ETH0_IP ] && echo "dhcp-option=6,$NS" >> /etc/dnsmasq.conf + [ $ETH0_IP6 ] && echo "dhcp-option=option6:dns-server,$NS6" >> /etc/dnsmasq.conf } setup_sshd(){ @@ -606,14 +647,6 @@ setup_router() { setup_dnsmasq - NS=$NS1 - [ -n "$NS2" ] && NS=$NS1,$NS2 - if [ "$USE_EXTERNAL_DNS" == "true" ] - then - sed -i -e "/^[#]*dhcp-option=6.*$/d" /etc/dnsmasq.conf - echo "dhcp-option=6,$NS" >> /etc/dnsmasq.conf - fi - setup_apache2 $ETH0_IP sed -i /gateway/d /etc/hosts @@ -715,28 +748,6 @@ setup_dhcpsrvr() { setup_dnsmasq setup_apache2 $ETH0_IP - NS=$NS1 - [ -n "$NS2" ] && NS=$NS1,$NS2 - if [ "$DEFAULTROUTE" != "false" ] - then - sed -i -e "/^[#]*dhcp-option=option:router.*$/d" /etc/dnsmasq.conf - [ $GW ] && echo "dhcp-option=option:router,$GW" >> /etc/dnsmasq.conf - #for now set up ourself as the dns server as well - sed -i -e "/^[#]*dhcp-option=6.*$/d" /etc/dnsmasq.conf - if [ "$USE_EXTERNAL_DNS" == "true" ] - then - echo "dhcp-option=6,$NS" >> /etc/dnsmasq.conf - else - [ $ETH0_IP ] && echo "dhcp-option=6,$ETH0_IP,$NS" >> /etc/dnsmasq.conf - [ $ETH0_IP6 ] && echo "dhcp-option=option6:dns-server,[::]" >> /etc/dnsmasq.conf - fi - else - sed -i -e "/^[#]*dhcp-option=option:router.*$/d" /etc/dnsmasq.conf - echo "dhcp-option=option:router" >> /etc/dnsmasq.conf - sed -i -e "/^[#]*dhcp-option=6.*$/d" /etc/dnsmasq.conf - echo "dhcp-option=6,$NS" >> /etc/dnsmasq.conf - fi - sed -i /gateway/d /etc/hosts [ $ETH0_IP ] && echo "$ETH0_IP $NAME" >> /etc/hosts [ $ETH0_IP6 ] && echo "$ETH0_IP6 $NAME" >> /etc/hosts @@ -972,6 +983,12 @@ for i in $CMDLINE dns2) NS2=$VALUE ;; + ip6dns1) + IP6_NS1=$VALUE + ;; + ip6dns2) + IP6_NS2=$VALUE + ;; domain) DOMAIN=$VALUE ;; diff --git a/patches/systemvm/debian/config/etc/logrotate.d/dnsmasq b/patches/systemvm/debian/config/etc/logrotate.d/dnsmasq index f448420e176..838415d3049 100644 --- a/patches/systemvm/debian/config/etc/logrotate.d/dnsmasq +++ b/patches/systemvm/debian/config/etc/logrotate.d/dnsmasq @@ -6,7 +6,7 @@ delaycompress sharedscripts postrotate - [ ! -f /var/run/dnsmasq.pid ] || kill -USR2 `cat /var/run/dnsmasq.pid` + [ ! -f /var/run/dnsmasq/dnsmasq.pid ] || kill -USR2 `cat /var/run/dnsmasq/dnsmasq.pid` endscript create 0640 nobody root } diff --git a/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh b/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh index c909cf796d1..31003454ec0 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh @@ -129,6 +129,18 @@ desetup_passwdsvcs() { } create_guest_network() { + # need to wait for eth device to appear before configuring it + timer=0 + while ! `grep -q $dev /proc/net/dev` ; do + logger -t cloud "$(basename $0):Waiting for interface $dev to appear, $timer seconds" + sleep 1; + if [ $timer -gt 15 ]; then + logger -t cloud "$(basename $0):interface $dev never appeared" + break + fi + timer=$[timer + 1] + done + logger -t cloud " $(basename $0): Create network on interface $dev, gateway $gw, network $ip/$mask " # setup ip configuration sudo ip addr add dev $dev $ip/$mask brd + diff --git a/patches/systemvm/debian/config/opt/cloud/bin/vpc_ipassoc.sh b/patches/systemvm/debian/config/opt/cloud/bin/vpc_ipassoc.sh index 53e739d02d6..f2f8a49339e 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_ipassoc.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_ipassoc.sh @@ -56,6 +56,18 @@ remove_routing() { } add_an_ip () { + # need to wait for eth device to appear before configuring it + timer=0 + while ! `grep -q $ethDev /proc/net/dev` ; do + logger -t cloud "$(basename $0):Waiting for interface $ethDev to appear, $timer seconds" + sleep 1; + if [ $timer -gt 15 ]; then + logger -t cloud "$(basename $0):interface $ethDev never appeared" + break + fi + timer=$[timer + 1] + done + logger -t cloud "$(basename $0):Adding ip $pubIp on interface $ethDev" sudo ip link show $ethDev | grep "state DOWN" > /dev/null local old_state=$? diff --git a/patches/systemvm/debian/config/root/edithosts.sh b/patches/systemvm/debian/config/root/edithosts.sh index 3cf27427653..9f21f206172 100755 --- a/patches/systemvm/debian/config/root/edithosts.sh +++ b/patches/systemvm/debian/config/root/edithosts.sh @@ -27,7 +27,7 @@ # $6 : comma separated static routes usage() { - printf "Usage: %s: -m -4 -6 -h -d -n -s -u \n" $(basename $0) >&2 + printf "Usage: %s: -m -4 -6 -h -d -n -s -u [-N]\n" $(basename $0) >&2 } mac= @@ -38,8 +38,9 @@ dflt= dns= routes= duid= +nondefault= -while getopts 'm:4:h:d:n:s:6:u:' OPTION +while getopts 'm:4:h:d:n:s:6:u:N' OPTION do case $OPTION in m) mac="$OPTARG" @@ -58,6 +59,8 @@ do ;; s) routes="$OPTARG" ;; + N) nondefault=1 + ;; ?) usage exit 2 ;; @@ -120,7 +123,12 @@ then fi if [ $ipv6 ] then - echo "id:$duid,[$ipv6],$host,infinite" >>$DHCP_HOSTS + if [ $nondefault ] + then + echo "id:$duid,set:nondefault6,[$ipv6],$host,infinite" >>$DHCP_HOSTS + else + echo "id:$duid,[$ipv6],$host,infinite" >>$DHCP_HOSTS + fi fi #delete leases to supplied mac and ip addresses @@ -173,18 +181,13 @@ then tag=$(echo $ipv4 | tr '.' '_') sed -i /$tag/d $DHCP_OPTS - if [ "$dflt" != "0.0.0.0" ] + if [ "$dflt" == "0.0.0.0" ] then - logger -t cloud "$0: setting default router for $ipv4 to $dflt" - echo "$tag,3,$dflt" >> $DHCP_OPTS - else - logger -t cloud "$0: unset default router for $ipv4" - echo "$tag,3," >> $DHCP_OPTS - fi - if [ "$dns" != "" ] - then - logger -t cloud "$0: setting dns server for $ipv4 to $dns" - echo "$tag,6,$dns" >> $DHCP_OPTS + logger -t cloud "$0: unset default router for $ipv4" + logger -t cloud "$0: unset dns server for $ipv4" + echo "$tag,3" >> $DHCP_OPTS + echo "$tag,6" >> $DHCP_OPTS + echo "$tag,15" >> $DHCP_OPTS fi [ "$routes" != "" ] && echo "$tag,121,$routes" >> $DHCP_OPTS #delete entry we just put in because we need a tag diff --git a/patches/systemvm/debian/config/root/func.sh b/patches/systemvm/debian/config/root/func.sh index 4047a4047a6..8cc96082cc2 100644 --- a/patches/systemvm/debian/config/root/func.sh +++ b/patches/systemvm/debian/config/root/func.sh @@ -23,7 +23,8 @@ # $2 timeout seconds getLockFile() { __locked=0 - __LOCKFILE="/tmp/$1-$$.lock" + __TS=`date +%s%N` + __LOCKFILE="/tmp/$__TS-$$-$1.lock" if [ $2 ] then __TIMEOUT=$2 @@ -42,10 +43,14 @@ getLockFile() { psline=`ps u $$` echo $psline > $__LOCKFILE - + if [ ! -e $__LOCKFILE ] + then + return + fi + for i in `seq 1 $(($__TIMEOUT * 10))` do - currlock=`ls -tr /tmp/$1-*.lock | head -n1` + currlock=`ls /tmp/*-$1.lock | head -n1` if [ $currlock -ef $__LOCKFILE ] then __locked=1 @@ -73,7 +78,7 @@ getLockFile() { # $1 lock filename # $2 locked(1) or not(0) releaseLockFile() { - __LOCKFILE="/tmp/$1-$$.lock" + __LOCKFILE="/tmp/*-$$-$1.lock" __locked=$2 if [ "$__locked" == "1" ] then diff --git a/patches/systemvm/debian/config/root/redundant_router/arping_gateways.sh.templ b/patches/systemvm/debian/config/root/redundant_router/arping_gateways.sh.templ index 176bce22559..931c95901c8 100644 --- a/patches/systemvm/debian/config/root/redundant_router/arping_gateways.sh.templ +++ b/patches/systemvm/debian/config/root/redundant_router/arping_gateways.sh.templ @@ -22,6 +22,8 @@ do while read line do ip=`echo $line|cut -d " " -f 2|cut -d "/" -f 1` - arping -I $i -A $ip -c 2 >> [RROUTER_LOG] 2>&1 + arping -I $i -A $ip -c 1 >> [RROUTER_LOG] 2>&1 + arping -I $i -A $ip -c 1 >> [RROUTER_LOG] 2>&1 done < /tmp/iplist_$i done < /tmp/iflist +sleep 1 diff --git a/patches/systemvm/debian/config/root/redundant_router/backup.sh.templ b/patches/systemvm/debian/config/root/redundant_router/backup.sh.templ index 03111b557a5..7a1bd44584a 100644 --- a/patches/systemvm/debian/config/root/redundant_router/backup.sh.templ +++ b/patches/systemvm/debian/config/root/redundant_router/backup.sh.templ @@ -28,6 +28,7 @@ fi echo To backup called >> [RROUTER_LOG] [RROUTER_BIN_PATH]/disable_pubip.sh >> [RROUTER_LOG] 2>&1 echo Disable public ip $? >> [RROUTER_LOG] +[RROUTER_BIN_PATH]/services.sh stop >> [RROUTER_LOG] 2>&1 [RROUTER_BIN_PATH]/primary-backup.sh backup >> [RROUTER_LOG] 2>&1 echo Switch conntrackd mode backup $? >> [RROUTER_LOG] echo Status: BACKUP >> [RROUTER_LOG] diff --git a/plugins/acl/static-role-based/pom.xml b/plugins/acl/static-role-based/pom.xml index a2e8d05d48e..e40cecb9d65 100644 --- a/plugins/acl/static-role-based/pom.xml +++ b/plugins/acl/static-role-based/pom.xml @@ -26,7 +26,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/api/discovery/pom.xml b/plugins/api/discovery/pom.xml index 1cfc5c2eaf2..5d9ad75ea3a 100644 --- a/plugins/api/discovery/pom.xml +++ b/plugins/api/discovery/pom.xml @@ -26,7 +26,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java old mode 100644 new mode 100755 index 7689ba4b3d8..293a1a47c19 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import javax.annotation.PostConstruct; import javax.ejb.Local; import javax.inject.Inject; @@ -54,19 +55,24 @@ import com.google.gson.annotations.SerializedName; public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); - @Inject protected List s_apiAccessCheckers = null; + @Inject protected List _apiAccessCheckers = null; + @Inject protected List _services = null; private static Map s_apiNameDiscoveryResponseMap = null; - @Inject List _services; - protected ApiDiscoveryServiceImpl() { super(); + } + + @PostConstruct + void init() { if (s_apiNameDiscoveryResponseMap == null) { long startTime = System.nanoTime(); s_apiNameDiscoveryResponseMap = new HashMap(); - //TODO: Fix and use PluggableService to get the classes - Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, - new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); + Set> cmdClasses = new HashSet>(); + for(PluggableService service: _services) { + s_logger.debug(String.format("getting api commands of service: %s", service.getClass().getName())); + cmdClasses.addAll(service.getCommands()); + } cacheResponseMap(cmdClasses); long endTime = System.nanoTime(); s_logger.info("Api Discovery Service: Annotation, docstrings, api relation graph processed in " + (endTime - startTime) / 1000000.0 + " ms"); @@ -180,7 +186,7 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { if (!s_apiNameDiscoveryResponseMap.containsKey(name)) return null; - for (APIChecker apiChecker : s_apiAccessCheckers) { + for (APIChecker apiChecker : _apiAccessCheckers) { try { apiChecker.checkAccess(user, name); } catch (Exception ex) { @@ -192,7 +198,7 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } else { for (String apiName : s_apiNameDiscoveryResponseMap.keySet()) { boolean isAllowed = true; - for (APIChecker apiChecker : s_apiAccessCheckers) { + for (APIChecker apiChecker : _apiAccessCheckers) { try { apiChecker.checkAccess(user, apiName); } catch (Exception ex) { diff --git a/plugins/api/discovery/test/org/apache/cloudstack/discovery/ApiDiscoveryTest.java b/plugins/api/discovery/test/org/apache/cloudstack/discovery/ApiDiscoveryTest.java index 3b526dd485d..afff746c848 100644 --- a/plugins/api/discovery/test/org/apache/cloudstack/discovery/ApiDiscoveryTest.java +++ b/plugins/api/discovery/test/org/apache/cloudstack/discovery/ApiDiscoveryTest.java @@ -22,6 +22,7 @@ import com.cloud.user.UserVO; import java.util.*; import javax.naming.ConfigurationException; +import com.cloud.utils.component.PluggableService; import org.apache.cloudstack.acl.APIChecker; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.command.user.discovery.ListApisCmd; @@ -35,9 +36,9 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class ApiDiscoveryTest { - - private static ApiDiscoveryServiceImpl _discoveryService = new ApiDiscoveryServiceImpl(); private static APIChecker _apiChecker = mock(APIChecker.class); + private static PluggableService _pluggableService = mock(PluggableService.class); + private static ApiDiscoveryServiceImpl _discoveryService = new ApiDiscoveryServiceImpl(); private static Class testCmdClass = ListApisCmd.class; private static User testUser; @@ -54,13 +55,18 @@ public class ApiDiscoveryTest { testApiAsync = false; testUser = new UserVO(); - Set> cmdClasses = new HashSet>(); - cmdClasses.add(ListApisCmd.class); - _discoveryService.cacheResponseMap(cmdClasses); - _discoveryService.s_apiAccessCheckers = (List) mock(List.class); + _discoveryService._apiAccessCheckers = (List) mock(List.class); + _discoveryService._services = (List) mock(List.class); when(_apiChecker.checkAccess(any(User.class), anyString())).thenReturn(true); - when(_discoveryService.s_apiAccessCheckers.iterator()).thenReturn(Arrays.asList(_apiChecker).iterator()); + when(_pluggableService.getCommands()).thenReturn(new ArrayList>()); + when(_discoveryService._apiAccessCheckers.iterator()).thenReturn(Arrays.asList(_apiChecker).iterator()); + when(_discoveryService._services.iterator()).thenReturn(Arrays.asList(_pluggableService).iterator()); + + Set> cmdClasses = new HashSet>(); + cmdClasses.add(ListApisCmd.class); + _discoveryService.init(); + _discoveryService.cacheResponseMap(cmdClasses); } @Test @@ -77,7 +83,7 @@ public class ApiDiscoveryTest { @Test public void verifyListApis() throws Exception { ListResponse responses = (ListResponse) _discoveryService.listApis(testUser, null); - assertTrue("No. of response items > 1", responses.getCount() > 1); + assertTrue("No. of response items > 1", responses.getCount() == 1); for (ApiDiscoveryResponse response: responses.getResponses()) { assertFalse("API name is empty", response.getName().isEmpty()); assertFalse("API description is empty", response.getDescription().isEmpty()); diff --git a/plugins/api/rate-limit/pom.xml b/plugins/api/rate-limit/pom.xml index 1f0330916a9..5645f0b3a32 100644 --- a/plugins/api/rate-limit/pom.xml +++ b/plugins/api/rate-limit/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java b/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java index 5a7ac863abc..7ec53163c91 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/admin/ratelimit/ResetApiLimitCmd.java @@ -29,6 +29,8 @@ import org.apache.cloudstack.api.response.SuccessResponse; import org.apache.cloudstack.ratelimit.ApiRateLimitService; import org.apache.log4j.Logger; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.user.Account; import com.cloud.user.UserContext; @@ -43,6 +45,9 @@ public class ResetApiLimitCmd extends BaseCmd { @Inject ApiRateLimitService _apiLimitService; + @Inject + ConfigurationDao _configDao; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -89,6 +94,10 @@ public class ResetApiLimitCmd extends BaseCmd { @Override public void execute(){ + boolean apiLimitEnabled = Boolean.parseBoolean(_configDao.getValue(Config.ApiLimitEnabled.key())); + if ( !apiLimitEnabled ){ + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "This api is only available when api.throttling.enabled = true."); + } boolean result = _apiLimitService.resetApiLimit(this.accountId); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java b/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java index 1afa9322d75..ba92e8b60c8 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/api/command/user/ratelimit/GetApiLimitCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.cloudstack.api.ACL; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; @@ -35,6 +36,9 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.ratelimit.ApiRateLimitService; + +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; @@ -55,6 +59,9 @@ public class GetApiLimitCmd extends BaseCmd { @Inject ApiRateLimitService _apiLimitService; + @Inject + ConfigurationDao _configDao; + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -76,6 +83,10 @@ public class GetApiLimitCmd extends BaseCmd { @Override public void execute(){ + boolean apiLimitEnabled = Boolean.parseBoolean(_configDao.getValue(Config.ApiLimitEnabled.key())); + if ( !apiLimitEnabled ){ + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "This api is only available when api.throttling.enabled = true."); + } Account caller = UserContext.current().getCaller(); ApiLimitResponse response = _apiLimitService.searchApiLimit(caller); response.setResponseName(getCommandName()); diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitService.java b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitService.java index c5b715019b6..ad421b673cb 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitService.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitService.java @@ -22,7 +22,6 @@ import com.cloud.utils.component.PluggableService; /** * Provide API rate limit service - * @author minc * */ public interface ApiRateLimitService extends PluggableService{ @@ -34,4 +33,6 @@ public interface ApiRateLimitService extends PluggableService{ public void setTimeToLive(int timeToLive); public void setMaxAllowed(int max); + + public void setEnabled(boolean enabled); } diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java index a5726e1d2ac..7d1b43ae6d5 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java @@ -29,10 +29,13 @@ import net.sf.ehcache.CacheManager; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.APIChecker; +import org.apache.cloudstack.api.ApiConstants.LDAPParams; import org.apache.cloudstack.api.command.admin.ratelimit.ResetApiLimitCmd; import org.apache.cloudstack.api.command.user.ratelimit.GetApiLimitCmd; import org.apache.cloudstack.api.response.ApiLimitResponse; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.RequestLimitException; import com.cloud.user.Account; @@ -46,6 +49,11 @@ import org.springframework.stereotype.Component; public class ApiRateLimitServiceImpl extends AdapterBase implements APIChecker, ApiRateLimitService { private static final Logger s_logger = Logger.getLogger(ApiRateLimitServiceImpl.class); + /** + * True if api rate limiting is enabled + */ + private boolean enabled = false; + /** * Fixed time duration where api rate limit is set, in seconds */ @@ -61,29 +69,33 @@ public class ApiRateLimitServiceImpl extends AdapterBase implements APIChecker, @Inject AccountService _accountService; + @Inject + ConfigurationDao _configDao; + @Override public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); if (_store == null) { - // not configured yet, note that since this class is both adapter - // and pluggableService, so this method - // may be invoked twice in ComponentLocator. // get global configured duration and max values - Object duration = params.get("api.throttling.interval"); - if (duration != null) { - timeToLive = Integer.parseInt((String) duration); + String isEnabled = _configDao.getValue(Config.ApiLimitEnabled.key()); + if ( isEnabled != null ){ + enabled = Boolean.parseBoolean(isEnabled); } - Object maxReqs = params.get("api.throttling.max"); + String duration = _configDao.getValue(Config.ApiLimitInterval.key()); + if (duration != null) { + timeToLive = Integer.parseInt(duration); + } + String maxReqs = _configDao.getValue(Config.ApiLimitMax.key()); if (maxReqs != null) { - maxAllowed = Integer.parseInt((String) maxReqs); + maxAllowed = Integer.parseInt(maxReqs); } // create limit store EhcacheLimitStore cacheStore = new EhcacheLimitStore(); int maxElements = 10000; - Object cachesize = params.get("api.throttling.cachesize"); + String cachesize = _configDao.getValue(Config.ApiLimitCacheSize.key()); if ( cachesize != null ){ - maxElements = Integer.parseInt((String)cachesize); + maxElements = Integer.parseInt(cachesize); } CacheManager cm = CacheManager.create(); Cache cache = new Cache("api-limit-cache", maxElements, false, false, timeToLive, timeToLive); @@ -136,7 +148,11 @@ public class ApiRateLimitServiceImpl extends AdapterBase implements APIChecker, @Override - public boolean checkAccess(User user, String apiCommandName) throws PermissionDeniedException, RequestLimitException { + public boolean checkAccess(User user, String apiCommandName) throws PermissionDeniedException { + // check if api rate limiting is enabled or not + if (!enabled){ + return true; + } Long accountId = user.getAccountId(); Account account = _accountService.getAccount(accountId); if ( _accountService.isRootAdmin(account.getType())){ @@ -189,5 +205,11 @@ public class ApiRateLimitServiceImpl extends AdapterBase implements APIChecker, } + @Override + public void setEnabled(boolean enabled) { + this.enabled = enabled; + + } + } diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/EhcacheLimitStore.java b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/EhcacheLimitStore.java index 659cf81b0e6..ee7c528bd07 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/EhcacheLimitStore.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/EhcacheLimitStore.java @@ -23,7 +23,6 @@ import net.sf.ehcache.constructs.blocking.LockTimeoutException; /** * A Limit store implementation using Ehcache. - * @author minc * */ public class EhcacheLimitStore implements LimitStore { diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/LimitStore.java b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/LimitStore.java index a5e086b3029..373d9652ee9 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/LimitStore.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/LimitStore.java @@ -20,7 +20,6 @@ import com.cloud.user.Account; /** * Interface to define how an api limit store should work. - * @author minc * */ public interface LimitStore { diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntry.java b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntry.java index 76e8a2d9281..05a7029dcb0 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntry.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntry.java @@ -18,7 +18,6 @@ package org.apache.cloudstack.ratelimit; /** * Interface for each entry in LimitStore. - * @author minc * */ public interface StoreEntry { diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntryImpl.java b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntryImpl.java index e8143e52370..9f10fe68a41 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntryImpl.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/StoreEntryImpl.java @@ -20,7 +20,6 @@ import java.util.concurrent.atomic.AtomicInteger; /** * Implementation of limit store entry. - * @author minc * */ public class StoreEntryImpl implements StoreEntry { diff --git a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java b/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java index 502b15cf316..3c6cadfc33c 100644 --- a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java +++ b/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java @@ -29,6 +29,8 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.exception.RequestLimitException; import com.cloud.user.Account; import com.cloud.user.AccountService; @@ -43,12 +45,19 @@ public class ApiRateLimitTest { static ApiRateLimitServiceImpl _limitService = new ApiRateLimitServiceImpl(); static AccountService _accountService = mock(AccountService.class); + static ConfigurationDao _configDao = mock(ConfigurationDao.class); private static long acctIdSeq = 5L; private static Account testAccount; @BeforeClass public static void setUp() throws ConfigurationException { + when(_configDao.getValue(Config.ApiLimitInterval.key())).thenReturn(null); + when(_configDao.getValue(Config.ApiLimitMax.key())).thenReturn(null); + when(_configDao.getValue(Config.ApiLimitCacheSize.key())).thenReturn(null); + when(_configDao.getValue(Config.ApiLimitEnabled.key())).thenReturn("true"); // enable api rate limiting + _limitService._configDao = _configDao; + _limitService.configure("ApiRateLimitTest", Collections. emptyMap()); _limitService._accountService = _accountService; @@ -98,6 +107,8 @@ public class ApiRateLimitTest { + " accesses take less than a second to perform", isUnderLimit(key)); } + + @Test public void canDoReasonableNumberOfApiAccessPerSecond() throws Exception { int allowedRequests = 200; @@ -224,4 +235,26 @@ public class ApiRateLimitTest { } + @Test + public void disableApiLimit() throws Exception { + try { + int allowedRequests = 200; + _limitService.setMaxAllowed(allowedRequests); + _limitService.setTimeToLive(1); + _limitService.setEnabled(false); + + User key = createFakeUser(); + + for (int i = 0; i < allowedRequests + 1; i++) { + assertTrue("We should allow more than " + allowedRequests + " requests per second when api throttling is disabled.", + isUnderLimit(key)); + } + } finally { + _limitService.setEnabled(true); // enable api throttling to avoid + // impacting other testcases + } + + } + + } diff --git a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/APITest.java b/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/APITest.java index 7701b1515b0..e75e852f0b7 100644 --- a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/APITest.java +++ b/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/APITest.java @@ -37,8 +37,6 @@ import com.google.gson.Gson; /** * Base class for API Test * - * @author Min Chen - * */ public abstract class APITest { diff --git a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/LoginResponse.java b/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/LoginResponse.java index 719f39c0a5e..61a178033af 100644 --- a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/LoginResponse.java +++ b/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/LoginResponse.java @@ -24,8 +24,6 @@ import com.google.gson.annotations.SerializedName; /** * Login Response object * - * @author Min Chen - * */ public class LoginResponse extends BaseResponse { diff --git a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/RateLimitIntegrationTest.java b/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/RateLimitIntegrationTest.java index 72d354c6c77..f9352333d12 100644 --- a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/RateLimitIntegrationTest.java +++ b/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/integration/RateLimitIntegrationTest.java @@ -34,9 +34,6 @@ import com.cloud.utils.exception.CloudRuntimeException; /** * Test fixture to do integration rate limit test. * Currently we commented out this test suite since it requires a real MS and Db running. - * - * @author Min Chen - * */ public class RateLimitIntegrationTest extends APITest { diff --git a/plugins/deployment-planners/user-concentrated-pod/pom.xml b/plugins/deployment-planners/user-concentrated-pod/pom.xml index 78829356170..df7c660630e 100644 --- a/plugins/deployment-planners/user-concentrated-pod/pom.xml +++ b/plugins/deployment-planners/user-concentrated-pod/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/deployment-planners/user-dispersing/pom.xml b/plugins/deployment-planners/user-dispersing/pom.xml index 33f6582e72f..0e5dbd58eb6 100644 --- a/plugins/deployment-planners/user-dispersing/pom.xml +++ b/plugins/deployment-planners/user-dispersing/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/event-bus/rabbitmq/pom.xml b/plugins/event-bus/rabbitmq/pom.xml index 6a47983a9b5..bd4d0977c04 100644 --- a/plugins/event-bus/rabbitmq/pom.xml +++ b/plugins/event-bus/rabbitmq/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java b/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java index ce0930d115d..1c0c6bef6f2 100644 --- a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java +++ b/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java @@ -40,13 +40,17 @@ import java.util.concurrent.Executors; public class RabbitMQEventBus extends ManagerBase implements EventBus { // details of AMQP server - private static String _amqpHost; - private static Integer _port; - private static String _username; - private static String _password; + private static String amqpHost; + private static Integer port; + private static String username; + private static String password; // AMQP exchange name where all CloudStack events will be published - private static String _amqpExchangeName; + private static String amqpExchangeName; + + private String name; + + private static Integer retryInterval; // hashmap to book keep the registered subscribers private static ConcurrentHashMap> _subscribers; @@ -58,59 +62,76 @@ public class RabbitMQEventBus extends ManagerBase implements EventBus { private static boolean _autoAck = true; private ExecutorService executorService; - private String _name; private static DisconnectHandler disconnectHandler; - private static Integer _retryInterval; private static final Logger s_logger = Logger.getLogger(RabbitMQEventBus.class); @Override public boolean configure(String name, Map params) throws ConfigurationException { - _amqpHost = (String) params.get("server"); - if (_amqpHost == null || _amqpHost.isEmpty()) { - throw new ConfigurationException("Unable to get the AMQP server details"); - } - - _username = (String) params.get("username"); - if (_username == null || _username.isEmpty()) { - throw new ConfigurationException("Unable to get the username details"); - } - - _password = (String) params.get("password"); - if (_password == null || _password.isEmpty()) { - throw new ConfigurationException("Unable to get the password details"); - } - - _amqpExchangeName = (String) params.get("exchangename"); - if (_amqpExchangeName == null || _amqpExchangeName.isEmpty()) { - throw new ConfigurationException("Unable to get the _exchange details on the AMQP server"); - } - try { - String portStr = (String) params.get("port"); - if (portStr == null || portStr.isEmpty()) { + if (amqpHost == null || amqpHost.isEmpty()) { + throw new ConfigurationException("Unable to get the AMQP server details"); + } + + if (username == null || username.isEmpty()) { + throw new ConfigurationException("Unable to get the username details"); + } + + if (password == null || password.isEmpty()) { + throw new ConfigurationException("Unable to get the password details"); + } + + if (amqpExchangeName == null || amqpExchangeName.isEmpty()) { + throw new ConfigurationException("Unable to get the _exchange details on the AMQP server"); + } + + if (port == null) { throw new ConfigurationException("Unable to get the port details of AMQP server"); } - _port = Integer.parseInt(portStr); - String retryIntervalStr = (String) params.get("retryinterval"); - if (retryIntervalStr == null || retryIntervalStr.isEmpty()) { - // default to 10s to try out reconnect - retryIntervalStr = "10000"; + if (retryInterval == null) { + retryInterval = 10000;// default to 10s to try out reconnect } - _retryInterval = Integer.parseInt(retryIntervalStr); + } catch (NumberFormatException e) { throw new ConfigurationException("Invalid port number/retry interval"); } _subscribers = new ConcurrentHashMap>(); - executorService = Executors.newCachedThreadPool(); disconnectHandler = new DisconnectHandler(); - _name = name; + return true; } + public void setServer(String amqpHost) { + this.amqpHost = amqpHost; + } + + public void setUsername(String username) { + this.username = username; + } + + public void setPassword(String password) { + this.password = password; + } + + public void setPort(Integer port) { + this.port = port; + } + + public void setName(String name) { + this.name = name; + } + + public void setExchange(String exchange) { + this.amqpExchangeName = exchange; + } + + public void setRetryInterval(Integer retryInterval) { + this.retryInterval = retryInterval; + } + /** Call to subscribe to interested set of events * * @param topic defines category and type of the events being subscribed to @@ -141,9 +162,9 @@ public class RabbitMQEventBus extends ManagerBase implements EventBus { Channel channel = createChannel(connection); // create a queue and bind it to the exchange with binding key formed from event topic - createExchange(channel, _amqpExchangeName); + createExchange(channel, amqpExchangeName); channel.queueDeclare(queueName, false, false, false, null); - channel.queueBind(queueName, _amqpExchangeName, bindingKey); + channel.queueBind(queueName, amqpExchangeName, bindingKey); // register a callback handler to receive the events that a subscriber subscribed to channel.basicConsume(queueName, _autoAck, queueName, @@ -216,8 +237,8 @@ public class RabbitMQEventBus extends ManagerBase implements EventBus { try { Connection connection = getConnection(); Channel channel = createChannel(connection); - createExchange(channel, _amqpExchangeName); - publishEventToExchange(channel, _amqpExchangeName, routingKey, eventDescription); + createExchange(channel, amqpExchangeName); + publishEventToExchange(channel, amqpExchangeName, routingKey, eventDescription); channel.close(); } catch (AlreadyClosedException e) { closeConnection(); @@ -315,11 +336,11 @@ public class RabbitMQEventBus extends ManagerBase implements EventBus { private synchronized Connection createConnection() throws Exception { try { ConnectionFactory factory = new ConnectionFactory(); - factory.setUsername(_username); - factory.setPassword(_password); + factory.setUsername(username); + factory.setPassword(password); factory.setVirtualHost("/"); - factory.setHost(_amqpHost); - factory.setPort(_port); + factory.setHost(amqpHost); + factory.setPort(port); Connection connection = factory.newConnection(); connection.addShutdownListener(disconnectHandler); _connection = connection; @@ -481,7 +502,7 @@ public class RabbitMQEventBus extends ManagerBase implements EventBus { while (!connected) { try { - Thread.sleep(_retryInterval); + Thread.sleep(retryInterval); } catch (InterruptedException ie) { // ignore timer interrupts } @@ -504,9 +525,9 @@ public class RabbitMQEventBus extends ManagerBase implements EventBus { * with binding key formed from event topic */ Channel channel = createChannel(connection); - createExchange(channel, _amqpExchangeName); + createExchange(channel, amqpExchangeName); channel.queueDeclare(subscriberId, false, false, false, null); - channel.queueBind(subscriberId, _amqpExchangeName, bindingKey); + channel.queueBind(subscriberId, amqpExchangeName, bindingKey); // register a callback handler to receive the events that a subscriber subscribed to channel.basicConsume(subscriberId, _autoAck, subscriberId, diff --git a/plugins/file-systems/netapp/pom.xml b/plugins/file-systems/netapp/pom.xml index e1c8866d15d..0e6f427da36 100644 --- a/plugins/file-systems/netapp/pom.xml +++ b/plugins/file-systems/netapp/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManager.java b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManager.java index 7216c50f428..1ee87f1a817 100644 --- a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManager.java +++ b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManager.java @@ -24,8 +24,9 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceInUseException; import com.cloud.utils.component.Manager; +import com.cloud.utils.component.PluggableService; -public interface NetappManager extends Manager { +public interface NetappManager extends Manager, PluggableService { enum AlgorithmType { RoundRobin, LeastFull diff --git a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java index 90bb9b205fd..8f7b6d8df8d 100644 --- a/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java +++ b/plugins/file-systems/netapp/src/com/cloud/netapp/NetappManagerImpl.java @@ -17,6 +17,7 @@ package com.cloud.netapp; import java.io.IOException; +import java.lang.Override; import java.net.UnknownHostException; import java.rmi.ServerException; import java.util.ArrayList; @@ -40,6 +41,7 @@ import netapp.manage.NaServer; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; +import com.cloud.api.commands.netapp.*; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceInUseException; @@ -123,7 +125,25 @@ public class NetappManagerImpl extends ManagerBase implements NetappManager return s; } - + + @Override + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(CreateLunCmd.class); + cmdList.add(ListLunsCmd.class); + cmdList.add(DissociateLunCmd.class); + cmdList.add(CreateVolumeOnFilerCmd.class); + cmdList.add(ModifyVolumePoolCmd.class); + cmdList.add(ListVolumesOnFilerCmd.class); + cmdList.add(ListVolumePoolsCmd.class); + cmdList.add(DestroyLunCmd.class); + cmdList.add(CreateVolumePoolCmd.class); + cmdList.add(DeleteVolumePoolCmd.class); + cmdList.add(AssociateLunCmd.class); + cmdList.add(DestroyVolumeOnFilerCmd.class); + return cmdList; + } + @Override public void modifyPool(String poolName, String algorithm) throws InvalidParameterValueException { diff --git a/plugins/host-allocators/random/pom.xml b/plugins/host-allocators/random/pom.xml index ba7e1ae1e65..6fc76fe8dad 100644 --- a/plugins/host-allocators/random/pom.xml +++ b/plugins/host-allocators/random/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/hypervisors/baremetal/pom.xml b/plugins/hypervisors/baremetal/pom.xml index 600eedb1440..328bd963c91 100755 --- a/plugins/hypervisors/baremetal/pom.xml +++ b/plugins/hypervisors/baremetal/pom.xml @@ -21,7 +21,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml cloud-plugin-hypervisor-baremetal diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalCmdbVO.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalCmdbVO.java deleted file mode 100755 index ee3848a5e9d..00000000000 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/database/BaremetalCmdbVO.java +++ /dev/null @@ -1,104 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -// -// Automatically generated by addcopyright.py at 01/29/2013 -package com.cloud.baremetal.database; - -import java.util.UUID; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -@Entity -@Table(name="baremetal_cmdb") -public class BaremetalCmdbVO { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - private long id; - - @Column(name="uuid") - private String uuid; - - @Column(name="zone_id") - private long zoneId; - - @Column(name="url") - private String url; - - @Column(name="password") - private String password; - - @Column(name="username") - private String username; - - public BaremetalCmdbVO() { - uuid = UUID.randomUUID().toString(); - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - public long getZoneId() { - return zoneId; - } - - public void setZoneId(long zoneId) { - this.zoneId = zoneId; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } -} diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/AddBaremetalHostCmd.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/AddBaremetalHostCmd.java index 5222d103699..f07b212173f 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/AddBaremetalHostCmd.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/AddBaremetalHostCmd.java @@ -18,17 +18,24 @@ // Automatically generated by addcopyright.py at 01/29/2013 package com.cloud.baremetal.manager; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.command.admin.host.AddHostCmd; - +import org.apache.cloudstack.api.response.HostResponse; +@APICommand(name="addBaremetalHost", description="add a baremetal host", responseObject = HostResponse.class) public class AddBaremetalHostCmd extends AddHostCmd { @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, description="ip address intentionally allocated to this host after provisioning") private String vmIpAddress; public AddBaremetalHostCmd() { + } + + @Override + public void execute(){ this.getFullUrlParams().put(ApiConstants.BAREMETAL_DISCOVER_NAME, BareMetalDiscoverer.class.getName()); + super.execute(); } public String getVmIpAddress() { diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalDiscoverer.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalDiscoverer.java index 9b0a5104889..28c83753c09 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalDiscoverer.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalDiscoverer.java @@ -276,5 +276,13 @@ public class BareMetalDiscoverer extends DiscovererBase implements Discoverer, R return new DeleteHostAnswer(true); } + + @Override + protected HashMap buildConfigParams(HostVO host) { + HashMap params = super.buildConfigParams(host); + params.put("hostId", host.getId()); + params.put("ipaddress", host.getPrivateIpAddress()); + return params; + } } diff --git a/server/src/com/cloud/deploy/BareMetalPlanner.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalPlanner.java similarity index 85% rename from server/src/com/cloud/deploy/BareMetalPlanner.java rename to plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalPlanner.java index 829a4662e12..97b2840f419 100755 --- a/server/src/com/cloud/deploy/BareMetalPlanner.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalPlanner.java @@ -14,7 +14,7 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.deploy; +package com.cloud.baremetal.manager; import java.util.List; import java.util.Map; @@ -23,17 +23,20 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import com.cloud.dc.*; +import com.cloud.dc.ClusterDetailsDao; import org.apache.log4j.Logger; import com.cloud.capacity.CapacityManager; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; -import com.cloud.dc.ClusterVO; -import com.cloud.dc.DataCenter; -import com.cloud.dc.Pod; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.HostPodDao; +import com.cloud.deploy.DeployDestination; +import com.cloud.deploy.DeploymentPlan; +import com.cloud.deploy.DeploymentPlanner; +import com.cloud.deploy.DeploymentPlanner.ExcludeList; import com.cloud.exception.InsufficientServerCapacityException; import com.cloud.host.Host; import com.cloud.host.HostVO; @@ -57,16 +60,14 @@ public class BareMetalPlanner extends AdapterBase implements DeploymentPlanner { @Inject protected ConfigurationDao _configDao; @Inject protected CapacityManager _capacityMgr; @Inject protected ResourceManager _resourceMgr; + @Inject protected ClusterDetailsDao _clusterDetailsDao; @Override public DeployDestination plan(VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid) throws InsufficientServerCapacityException { VirtualMachine vm = vmProfile.getVirtualMachine(); - ServiceOffering offering = vmProfile.getServiceOffering(); + ServiceOffering offering = vmProfile.getServiceOffering(); String hostTag = null; - - String opFactor = _configDao.getValue(Config.CPUOverprovisioningFactor.key()); - float cpuOverprovisioningFactor = NumbersUtil.parseFloat(opFactor, 1); - + String haVmTag = (String)vmProfile.getParameter(VirtualMachineProfile.Param.HaTag); if (vm.getLastHostId() != null && haVmTag == null) { @@ -122,7 +123,13 @@ public class BareMetalPlanner extends AdapterBase implements DeploymentPlanner { return null; } for (HostVO h : hosts) { - if (_capacityMgr.checkIfHostHasCapacity(h.getId(), cpu_requested, ram_requested, false, cpuOverprovisioningFactor, true)) { + long cluster_id = h.getClusterId(); + ClusterDetailsVO cluster_detail_cpu = _clusterDetailsDao.findDetail(cluster_id,"cpuOvercommitRatio") ; + ClusterDetailsVO cluster_detail_ram = _clusterDetailsDao.findDetail(cluster_id,"memoryOvercommitRatio"); + Float cpuOvercommitRatio = Float.parseFloat(cluster_detail_cpu.getValue()); + Float memoryOvercommitRatio = Float.parseFloat(cluster_detail_ram.getValue()); + + if (_capacityMgr.checkIfHostHasCapacity(h.getId(), cpu_requested, ram_requested, false, cpuOvercommitRatio, memoryOvercommitRatio, true)) { s_logger.debug("Find host " + h.getId() + " has enough capacity"); DataCenter dc = _dcDao.findById(h.getDataCenterId()); Pod pod = _podDao.findById(h.getPodId()); diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalTemplateAdapter.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalTemplateAdapter.java index ba5e811eeae..33725f63b1c 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalTemplateAdapter.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BareMetalTemplateAdapter.java @@ -58,6 +58,11 @@ public class BareMetalTemplateAdapter extends TemplateAdapterBase implements Tem private final static Logger s_logger = Logger.getLogger(BareMetalTemplateAdapter.class); @Inject HostDao _hostDao; @Inject ResourceManager _resourceMgr; + + @Override + public String getName() { + return TemplateAdapterType.BareMetal.getName(); + } @Override public TemplateProfile prepare(RegisterTemplateCmd cmd) throws ResourceAllocationException { diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java index 1599050453a..6467c945795 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManager.java @@ -20,8 +20,9 @@ package com.cloud.baremetal.manager; import com.cloud.network.Network.Provider; import com.cloud.utils.component.Manager; +import com.cloud.utils.component.PluggableService; -public interface BaremetalManager extends Manager { +public interface BaremetalManager extends Manager, PluggableService { public static final String EchoSecurityGroupAgent = "EchoSecurityGroupAgent"; public static final String ExternalBaremetalSystemUrl = "ExternalBaremetalSystemUrl"; public static final String DO_PXE = "doPxe"; diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java index b07a6bbf273..b41d6ca0426 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalManagerImpl.java @@ -18,6 +18,8 @@ // Automatically generated by addcopyright.py at 01/29/2013 package com.cloud.baremetal.manager; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import javax.ejb.Local; @@ -110,4 +112,11 @@ public class BaremetalManagerImpl extends ManagerBase implements BaremetalManage return true; } + + @Override + public List> getCommands() { + List> cmds = new ArrayList>(); + cmds.add(AddBaremetalHostCmd.class); + return cmds; + } } diff --git a/server/src/com/cloud/vm/dao/RandomlyIncreasingVMInstanceDaoImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalPlannerSelector.java old mode 100644 new mode 100755 similarity index 57% rename from server/src/com/cloud/vm/dao/RandomlyIncreasingVMInstanceDaoImpl.java rename to plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalPlannerSelector.java index cc5c5368a81..9daee3f3fe7 --- a/server/src/com/cloud/vm/dao/RandomlyIncreasingVMInstanceDaoImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/manager/BaremetalPlannerSelector.java @@ -1,36 +1,39 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.vm.dao; - - -import javax.ejb.Local; - -import org.apache.log4j.Logger; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; - -@Local(value = { UserVmDao.class }) -public class RandomlyIncreasingVMInstanceDaoImpl extends UserVmDaoImpl { - - public static final Logger s_logger = Logger.getLogger(RandomlyIncreasingVMInstanceDaoImpl.class); - - @Override - public K getNextInSequence(final Class clazz, final String name) { - return getRandomlyIncreasingNextInSequence(clazz, name); - } - -} +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.baremetal.manager; + +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.deploy.AbstractDeployPlannerSelector; +import com.cloud.deploy.DeployPlannerSelector; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.vm.UserVmVO; +@Local(value = {DeployPlannerSelector.class}) +public class BaremetalPlannerSelector extends AbstractDeployPlannerSelector{ + + @Override + public String selectPlanner(UserVmVO vm) { + if (vm.getHypervisorType() == HypervisorType.BareMetal) { + return "BareMetalPlanner"; + } + return null; + } + +} diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalDhcpCmd.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalDhcpCmd.java index 8a3d4d74191..c74983222f2 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalDhcpCmd.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalDhcpCmd.java @@ -20,11 +20,14 @@ package com.cloud.baremetal.networkservice; import javax.inject.Inject; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseCmd.CommandType; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; @@ -37,7 +40,7 @@ import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.UserContext; - +@APICommand(name="addBaremetalDhcp", description="adds a baremetal dhcp server", responseObject = BaremetalDhcpResponse.class) public class AddBaremetalDhcpCmd extends BaseAsyncCmd { private static final String s_name = "addexternaldhcpresponse"; public static final Logger s_logger = Logger.getLogger(AddBaremetalDhcpCmd.class); @@ -47,10 +50,10 @@ public class AddBaremetalDhcpCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, required=true, description="the Physical Network ID") private Long physicalNetworkId; - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, required = true, description="Pod Id") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, required = true, description="Pod Id") private Long podId; @Parameter(name=ApiConstants.DHCP_SERVER_TYPE, type=CommandType.STRING, required = true, description="Type of dhcp device") diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalKickStartPxeCmd.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalKickStartPxeCmd.java index 4c3d0b22576..596a86dac8f 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalKickStartPxeCmd.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalKickStartPxeCmd.java @@ -18,10 +18,11 @@ // Automatically generated by addcopyright.py at 01/29/2013 package com.cloud.baremetal.networkservice; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd.CommandType; import org.apache.cloudstack.api.Parameter; - +@APICommand(name="addBaremetalPxeKickStartServer", description="add a baremetal pxe server", responseObject = BaremetalPxeKickStartResponse.class) public class AddBaremetalKickStartPxeCmd extends AddBaremetalPxeCmd { @Parameter(name=ApiConstants.TFTP_DIR, type=CommandType.STRING, required = true, description="Tftp root directory of PXE server") private String tftpDir; diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxeCmd.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxeCmd.java index cd8da4a58b9..63e11478e4c 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxeCmd.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxeCmd.java @@ -20,11 +20,14 @@ package com.cloud.baremetal.networkservice; import javax.inject.Inject; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseCmd.CommandType; +import org.apache.cloudstack.api.response.PhysicalNetworkResponse; +import org.apache.cloudstack.api.response.PodResponse; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; @@ -37,7 +40,6 @@ import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.UserContext; - public class AddBaremetalPxeCmd extends BaseAsyncCmd { private static final String s_name = "addexternalpxeresponse"; public static final Logger s_logger = Logger.getLogger(AddBaremetalPxeCmd.class); @@ -46,10 +48,10 @@ public class AddBaremetalPxeCmd extends BaseAsyncCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID") + @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.UUID, entityType=PhysicalNetworkResponse.class, required=true, description="the Physical Network ID") private Long physicalNetworkId; - @Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="Pod Id") + @Parameter(name=ApiConstants.POD_ID, type=CommandType.UUID, entityType=PodResponse.class, description="Pod Id") private Long podId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the external pxe device") diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxePingServerCmd.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxePingServerCmd.java index 70796f3499f..01cafd435da 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxePingServerCmd.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/AddBaremetalPxePingServerCmd.java @@ -18,9 +18,11 @@ // Automatically generated by addcopyright.py at 01/29/2013 package com.cloud.baremetal.networkservice; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.Parameter; +@APICommand(name="addBaremetalPxePingServer", description="add a baremetal ping pxe server", responseObject = BaremetalPxePingResponse.class) public class AddBaremetalPxePingServerCmd extends AddBaremetalPxeCmd { @Parameter(name=ApiConstants.PING_STORAGE_SERVER_IP, type=CommandType.STRING, required = true, description="PING storage server ip") diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java index 3e21750132e..d6b96a81807 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalPingServiceImpl.java @@ -297,4 +297,10 @@ public class BareMetalPingServiceImpl extends BareMetalPxeServiceBase implements } return responses; } + + + @Override + public String getPxeServiceType() { + return BaremetalPxeManager.BaremetalPxeType.PING.toString(); + } } diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpManagerImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpManagerImpl.java index af9e103f77b..f87bf71ca13 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpManagerImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpManagerImpl.java @@ -319,6 +319,9 @@ public class BaremetalDhcpManagerImpl extends ManagerBase implements BaremetalDh @Override public List> getCommands() { - return null; + List> cmds = new ArrayList>(); + cmds.add(AddBaremetalDhcpCmd.class); + cmds.add(ListBaremetalDhcpCmd.class); + return cmds; } } diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResponse.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResponse.java index 952ac41a701..1875d3947a0 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResponse.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalDhcpResponse.java @@ -18,12 +18,16 @@ // Automatically generated by addcopyright.py at 01/29/2013 package com.cloud.baremetal.networkservice; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.EntityReference; +import com.cloud.baremetal.database.BaremetalDhcpVO; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; +@EntityReference(value=BaremetalDhcpVO.class) public class BaremetalDhcpResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="device id of ") private String id; diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java index 938b3ac1d46..58c6e862d9f 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartPxeResource.java @@ -32,6 +32,7 @@ import com.cloud.agent.api.Command; import com.cloud.agent.api.PingCommand; import com.cloud.agent.api.PingRoutingCommand; import com.cloud.agent.api.routing.VmDataCommand; +import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; import com.cloud.utils.ssh.SSHCmdHelper; import com.cloud.vm.VirtualMachine.State; @@ -70,27 +71,27 @@ public class BaremetalKickStartPxeResource extends BaremetalPxeResourceBase { String prepareScript = "scripts/network/ping/prepare_kickstart_bootfile.py"; String prepareScriptPath = Script.findScript("", prepareScript); if (prepareScriptPath == null) { - throw new ConfigurationException("Can not find prepare_kickstart_bootfile.py at " + prepareScriptPath); + throw new ConfigurationException("Can not find prepare_kickstart_bootfile.py at " + prepareScript); } scp.put(prepareScriptPath, "/usr/bin/", "0755"); String cpScript = "scripts/network/ping/prepare_kickstart_kernel_initrd.py"; String cpScriptPath = Script.findScript("", cpScript); if (cpScriptPath == null) { - throw new ConfigurationException("Can not find prepare_kickstart_kernel_initrd.py at " + cpScriptPath); + throw new ConfigurationException("Can not find prepare_kickstart_kernel_initrd.py at " + cpScript); } scp.put(cpScriptPath, "/usr/bin/", "0755"); String userDataScript = "scripts/network/ping/baremetal_user_data.py"; String userDataScriptPath = Script.findScript("", userDataScript); if (userDataScriptPath == null) { - throw new ConfigurationException("Can not find baremetal_user_data.py at " + userDataScriptPath); + throw new ConfigurationException("Can not find baremetal_user_data.py at " + userDataScript); } scp.put(userDataScriptPath, "/usr/bin/", "0755"); return true; } catch (Exception e) { - throw new ConfigurationException(e.getMessage()); + throw new CloudRuntimeException(e); } finally { if (sshConnection != null) { sshConnection.close(); @@ -174,7 +175,7 @@ public class BaremetalKickStartPxeResource extends BaremetalPxeResourceBase { } String copyTo = String.format("%s/%s", _tftpDir, cmd.getTemplateUuid()); - String script = String.format("python /usr/bin/prepare_kickstart_kernel_initrd.py %s %s", cmd.getRepo(), copyTo); + String script = String.format("python /usr/bin/prepare_kickstart_kernel_initrd.py %s %s %s", cmd.getKernel(), cmd.getInitrd(), copyTo); if (!SSHCmdHelper.sshExecuteCmd(sshConnection, script)) { return new Answer(cmd, false, "prepare kickstart at pxe server " + _ip + " failed, command:" + script); diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java index 617893fc16c..8a5ac78729e 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalKickStartServiceImpl.java @@ -95,11 +95,36 @@ public class BaremetalKickStartServiceImpl extends BareMetalPxeServiceBase imple try { String tpl = profile.getTemplate().getUrl(); assert tpl != null : "How can a null template get here!!!"; - String[] tpls = tpl.split(";"); - assert tpls.length == 2 : "Template is not correctly encoded. " + tpl; + String[] tpls = tpl.split(";"); + CloudRuntimeException err = new CloudRuntimeException(String.format("template url[%s] is not correctly encoded. it must be in format of ks=http_link_to_kickstartfile;kernel=nfs_path_to_pxe_kernel;initrd=nfs_path_to_pxe_initrd", tpl)); + if (tpls.length != 3) { + throw err; + } + + String ks = null; + String kernel = null; + String initrd = null; + + for (String t : tpls) { + String[] kv = t.split("="); + if (kv.length != 2) { + throw err; + } + if (kv[0].equals("ks")) { + ks = kv[1]; + } else if (kv[0].equals("kernel")) { + kernel = kv[1]; + } else if (kv[0].equals("initrd")) { + initrd = kv[1]; + } else { + throw err; + } + } + PrepareKickstartPxeServerCommand cmd = new PrepareKickstartPxeServerCommand(); - cmd.setKsFile(tpls[0]); - cmd.setRepo(tpls[1]); + cmd.setKsFile(ks); + cmd.setInitrd(initrd); + cmd.setKernel(kernel); cmd.setMac(nic.getMacAddress()); cmd.setTemplateUuid(template.getUuid()); Answer aws = _agentMgr.send(pxeVo.getHostId(), cmd); @@ -233,6 +258,11 @@ public class BaremetalKickStartServiceImpl extends BareMetalPxeServiceBase imple responses.add(getApiResponse(vo)); } return responses; + } + + @Override + public String getPxeServiceType() { + return BaremetalPxeManager.BaremetalPxeType.KICK_START.toString(); } } diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java index bc4bcd3d53a..7b8d528b4b4 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeElement.java @@ -166,13 +166,11 @@ public class BaremetalPxeElement extends AdapterBase implements NetworkElement { @Override public boolean destroy(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - return false; + return true; } @Override public boolean verifyServicesCombination(Set services) { - // TODO Auto-generated method stub - return false; + return true; } } diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeKickStartResponse.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeKickStartResponse.java index 09c6cc6769d..64f22e0947e 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeKickStartResponse.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeKickStartResponse.java @@ -19,10 +19,13 @@ package com.cloud.baremetal.networkservice; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.EntityReference; +import com.cloud.baremetal.database.BaremetalPxeVO; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; - + +@EntityReference(value=BaremetalPxeVO.class) public class BaremetalPxeKickStartResponse extends BaremetalPxeResponse { @SerializedName(ApiConstants.TFTP_DIR) @Param(description="Tftp root directory of PXE server") private String tftpDir; diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java index 6e3963def53..6288f918567 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java @@ -23,6 +23,7 @@ package com.cloud.baremetal.networkservice; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -53,7 +54,6 @@ import com.cloud.resource.UnableDeleteHostException; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.uservm.UserVm; import com.cloud.utils.StringUtils; -import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ManagerBase; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.db.SearchCriteria2; @@ -106,12 +106,13 @@ public class BaremetalPxeManagerImpl extends ManagerBase implements BaremetalPxe } protected BaremetalPxeService getServiceByType(String type) { - BaremetalPxeService _service; - _service = AdapterBase.getAdapterByName(_services, type); - if (_service == null) { - throw new CloudRuntimeException("Cannot find PXE service for " + type); - } - return _service; + for (BaremetalPxeService service : _services) { + if (service.getPxeServiceType().equals(type)) { + return service; + } + } + + throw new CloudRuntimeException("Cannot find PXE service for " + type); } @Override @@ -236,7 +237,10 @@ public class BaremetalPxeManagerImpl extends ManagerBase implements BaremetalPxe @Override public List> getCommands() { - // TODO Auto-generated method stub - return null; + List> cmds = new ArrayList>(); + cmds.add(AddBaremetalKickStartPxeCmd.class); + cmds.add(AddBaremetalPxePingServerCmd.class); + cmds.add(ListBaremetalPxePingServersCmd.class); + return cmds; } } diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxePingResponse.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxePingResponse.java index adbf0530e00..81bd2511355 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxePingResponse.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxePingResponse.java @@ -19,10 +19,12 @@ package com.cloud.baremetal.networkservice; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.EntityReference; +import com.cloud.baremetal.database.BaremetalPxeVO; import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; - +@EntityReference(value=BaremetalPxeVO.class) public class BaremetalPxePingResponse extends BaremetalPxeResponse { @SerializedName(ApiConstants.PING_STORAGE_SERVER_IP) @Param(description="PING storage server ip") private String pingStorageServerIp; diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java old mode 100644 new mode 100755 index 8504f82a86f..9fd560f2bc5 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeService.java @@ -46,6 +46,8 @@ public interface BaremetalPxeService extends Adapter { List listPxeServers(ListBaremetalPxePingServersCmd cmd); + String getPxeServiceType(); + public static final String PXE_PARAM_TYPE = "type"; public static final String PXE_PARAM_ZONE = "zone"; public static final String PXE_PARAM_POD = "pod"; diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java index ae582544323..3d9f5819582 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalUserdataElement.java @@ -149,7 +149,7 @@ public class BaremetalUserdataElement extends AdapterBase implements NetworkElem @Override public boolean canEnableIndividualServices() { // TODO Auto-generated method stub - return false; + return true; } @@ -162,14 +162,12 @@ public class BaremetalUserdataElement extends AdapterBase implements NetworkElem @Override public boolean destroy(Network network, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - return false; + return true; } @Override public boolean verifyServicesCombination(Set services) { - // TODO Auto-generated method stub - return false; + return true; } } diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/ListBaremetalDhcpCmd.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/ListBaremetalDhcpCmd.java index 14b74339fbf..1dc46a8f044 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/ListBaremetalDhcpCmd.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/ListBaremetalDhcpCmd.java @@ -22,6 +22,7 @@ import java.util.List; import javax.inject.Inject; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -37,7 +38,7 @@ import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; - +@APICommand(name="listBaremetalDhcp", description="list baremetal dhcp servers", responseObject = BaremetalDhcpResponse.class) public class ListBaremetalDhcpCmd extends BaseListCmd { private static final Logger s_logger = Logger.getLogger(ListBaremetalDhcpCmd.class); private static final String s_name = "listexternaldhcpresponse"; diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/ListBaremetalPxePingServersCmd.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/ListBaremetalPxePingServersCmd.java index b4c569f0969..0b418f01d7a 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/ListBaremetalPxePingServersCmd.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/ListBaremetalPxePingServersCmd.java @@ -22,6 +22,7 @@ import java.util.List; import javax.inject.Inject; +import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; @@ -37,7 +38,7 @@ import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; - +@APICommand(name="listBaremetalPxePingServer", description="list baremetal ping pxe server", responseObject = BaremetalPxePingResponse.class) public class ListBaremetalPxePingServersCmd extends BaseListCmd { private static final Logger s_logger = Logger.getLogger(ListBaremetalPxePingServersCmd.class); private static final String s_name = "listpingpxeserverresponse"; diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/PrepareKickstartPxeServerCommand.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/PrepareKickstartPxeServerCommand.java index 89515475062..25dfeb70d30 100755 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/PrepareKickstartPxeServerCommand.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/PrepareKickstartPxeServerCommand.java @@ -22,10 +22,11 @@ import com.cloud.agent.api.Command; public class PrepareKickstartPxeServerCommand extends Command { private String ksFile; - private String repo; private String templateUuid; private String mac; - private String ksDevice; + private String ksDevice; + private String kernel; + private String initrd; @Override public boolean executeInSequence() { @@ -39,15 +40,23 @@ public class PrepareKickstartPxeServerCommand extends Command { public void setKsFile(String ksFile) { this.ksFile = ksFile; } - - public String getRepo() { - return repo; - } - - public void setRepo(String repo) { - this.repo = repo; - } - + + public String getKernel() { + return kernel; + } + + public void setKernel(String kernel) { + this.kernel = kernel; + } + + public String getInitrd() { + return initrd; + } + + public void setInitrd(String initrd) { + this.initrd = initrd; + } + public String getTemplateUuid() { return templateUuid; } diff --git a/plugins/hypervisors/kvm/pom.xml b/plugins/hypervisors/kvm/pom.xml index 8fc8f739460..013a58d8b7c 100644 --- a/plugins/hypervisors/kvm/pom.xml +++ b/plugins/hypervisors/kvm/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml @@ -41,7 +41,7 @@ org.libvirt libvirt - 0.4.9 + ${cs.libvirt-java.version} @@ -50,68 +50,23 @@ test - maven-assembly-plugin - 2.3 - - kvm-agent - false - - agent-descriptor.xml - - + org.apache.maven.plugins + maven-dependency-plugin + 2.5.1 - make-agent + copy-dependencies package - single + copy-dependencies + + ${project.build.directory}/dependencies + runtime + - - maven-resources-plugin - 2.6 - - - copy-resources - - package - - copy-resources - - - dist - - - target - - kvm-agent.zip - - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - 2.5.1 - - - copy-dependencies - package - - copy-dependencies - - - target/dependencies - runtime - - - - diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java index af89d9b18a9..d067b35902f 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHABase.java @@ -23,6 +23,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import org.apache.log4j.Logger; import org.libvirt.LibvirtException; import org.libvirt.StoragePool; import org.libvirt.StoragePoolInfo; @@ -33,6 +34,7 @@ import com.cloud.utils.script.OutputInterpreter.AllLinesParser; import com.cloud.utils.script.Script; public class KVMHABase { + private static final Logger s_logger = Logger.getLogger(KVMHABase.class); private long _timeout = 60000; /* 1 minutes */ protected static String _heartBeatPath; protected long _heartBeatUpdateTimeout = 60000; @@ -124,14 +126,14 @@ public class KVMHABase { } poolName = pool.getName(); } catch (LibvirtException e) { - + s_logger.debug("Ignoring libvirt error.", e); } finally { try { if (pool != null) { pool.free(); } } catch (LibvirtException e) { - + s_logger.debug("Ignoring libvirt error.", e); } } diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index b36b4c222d5..0a25bab2a10 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -41,6 +41,8 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.HashSet; import java.util.Properties; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -186,6 +188,7 @@ import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InputDef; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InterfaceDef; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InterfaceDef.hostNicType; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.SerialDef; +import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.VirtioSerialDef; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.TermPolicy; import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk; import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk.PhysicalDiskFormat; @@ -211,6 +214,7 @@ import com.cloud.storage.template.TemplateInfo; import com.cloud.storage.template.TemplateLocation; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; +import com.cloud.utils.FileUtil; import com.cloud.utils.PropertiesUtil; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; @@ -251,7 +255,7 @@ ServerResource { private String _modifyVlanPath; private String _versionstringpath; - private String _patchdomrPath; + private String _patchViaSocketPath; private String _createvmPath; private String _manageSnapshotPath; private String _resizeVolumePath; @@ -275,7 +279,11 @@ ServerResource { private String _mountPoint = "/mnt"; StorageLayer _storage; private KVMStoragePoolManager _storagePoolMgr; - private VifDriver _vifDriver; + + private VifDriver _defaultVifDriver; + private Map _trafficTypeVifDrivers; + protected static final String DEFAULT_OVS_VIF_DRIVER_CLASS_NAME = "com.cloud.hypervisor.kvm.resource.OvsVifDriver"; + protected static final String DEFAULT_BRIDGE_VIF_DRIVER_CLASS_NAME = "com.cloud.hypervisor.kvm.resource.BridgeVifDriver"; private static final class KeyValueInterpreter extends OutputInterpreter { private final Map map = new HashMap(); @@ -367,10 +375,6 @@ ServerResource { NATIVE, OPENVSWITCH } - protected enum defineOps { - UNDEFINE_VM, DEFINE_VM - } - protected BridgeType _bridgeType; private String getEndIpFromStartIp(String startIp, int numIps) { @@ -517,10 +521,10 @@ ServerResource { throw new ConfigurationException("Unable to find versions.sh"); } - _patchdomrPath = Script.findScript(kvmScriptsDir + "/patch/", - "rundomrpre.sh"); - if (_patchdomrPath == null) { - throw new ConfigurationException("Unable to find rundomrpre.sh"); + _patchViaSocketPath = Script.findScript(kvmScriptsDir + "/patch/", + "patchviasocket.pl"); + if (_patchViaSocketPath == null) { + throw new ConfigurationException("Unable to find patchviasocket.pl"); } _heartBeatPath = Script.findScript(kvmScriptsDir, "kvmheartbeat.sh"); @@ -688,7 +692,7 @@ ServerResource { _hvVersion = conn.getVersion(); _hvVersion = (_hvVersion % 1000000) / 1000; } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } String[] info = NetUtils.getNetworkParams(_privateNic); @@ -701,10 +705,7 @@ ServerResource { _sysvmISOPath = (String) params.get("systemvm.iso.path"); if (_sysvmISOPath == null) { - String[] isoPaths = { "/usr/lib64/cloud/agent/vms/systemvm.iso", - "/usr/lib/cloud/agent/vms/systemvm.iso", - "/usr/lib64/cloud/common/vms/systemvm.iso", - "/usr/lib/cloud/common/vms/systemvm.iso" }; + String[] isoPaths = {"/usr/share/cloudstack-common/vms/systemvm.iso"}; for (String isoPath : isoPaths) { if (_storage.exists(isoPath)) { _sysvmISOPath = isoPath; @@ -763,8 +764,8 @@ ServerResource { if (tokens.length == 2) { try { _migrateSpeed = Integer.parseInt(tokens[0]); - } catch (Exception e) { - + } catch (NumberFormatException e) { + s_logger.trace("Ignoring migrateSpeed extraction error.", e); } s_logger.debug("device " + _pifs.get("public") + " has speed: " + String.valueOf(_migrateSpeed)); } @@ -781,33 +782,95 @@ ServerResource { params.put("libvirt.host.bridges", bridges); params.put("libvirt.host.pifs", _pifs); - // Load the vif driver - String vifDriverName = (String) params.get("libvirt.vif.driver"); - if (vifDriverName == null) { - if (_bridgeType == BridgeType.OPENVSWITCH) { - s_logger.info("No libvirt.vif.driver specififed. Defaults to OvsVifDriver."); - vifDriverName = "com.cloud.hypervisor.kvm.resource.OvsVifDriver"; - } else { - s_logger.info("No libvirt.vif.driver specififed. Defaults to BridgeVifDriver."); - vifDriverName = "com.cloud.hypervisor.kvm.resource.BridgeVifDriver"; - } - } - params.put("libvirt.computing.resource", this); + configureVifDrivers(params); + + return true; + } + + protected void configureVifDrivers(Map params) + throws ConfigurationException { + final String LIBVIRT_VIF_DRIVER = "libvirt.vif.driver"; + + _trafficTypeVifDrivers = new HashMap(); + + // Load the default vif driver + String defaultVifDriverName = (String) params.get(LIBVIRT_VIF_DRIVER); + if (defaultVifDriverName == null) { + if (_bridgeType == BridgeType.OPENVSWITCH) { + s_logger.info("No libvirt.vif.driver specified. Defaults to OvsVifDriver."); + defaultVifDriverName = DEFAULT_OVS_VIF_DRIVER_CLASS_NAME; + } else { + s_logger.info("No libvirt.vif.driver specified. Defaults to BridgeVifDriver."); + defaultVifDriverName = DEFAULT_BRIDGE_VIF_DRIVER_CLASS_NAME; + } + } + _defaultVifDriver = getVifDriverClass(defaultVifDriverName, params); + + // Load any per-traffic-type vif drivers + for (Map.Entry entry : params.entrySet()) + { + String k = entry.getKey(); + String vifDriverPrefix = LIBVIRT_VIF_DRIVER + "."; + + if(k.startsWith(vifDriverPrefix)){ + // Get trafficType + String trafficTypeSuffix = k.substring(vifDriverPrefix.length()); + + // Does this suffix match a real traffic type? + TrafficType trafficType = TrafficType.getTrafficType(trafficTypeSuffix); + if(!trafficType.equals(TrafficType.None)){ + // Get vif driver class name + String vifDriverClassName = (String) entry.getValue(); + // if value is null, ignore + if(vifDriverClassName != null){ + // add traffic type to vif driver mapping to Map + _trafficTypeVifDrivers.put(trafficType, + getVifDriverClass(vifDriverClassName, params)); + } + } + } + } + } + + protected VifDriver getVifDriverClass(String vifDriverClassName, Map params) + throws ConfigurationException { + VifDriver vifDriver; + try { - Class clazz = Class.forName(vifDriverName); - _vifDriver = (VifDriver) clazz.newInstance(); - _vifDriver.configure(params); + Class clazz = Class.forName(vifDriverClassName); + vifDriver = (VifDriver) clazz.newInstance(); + vifDriver.configure(params); } catch (ClassNotFoundException e) { throw new ConfigurationException("Unable to find class for libvirt.vif.driver " + e); } catch (InstantiationException e) { throw new ConfigurationException("Unable to instantiate class for libvirt.vif.driver " + e); - } catch (Exception e) { - throw new ConfigurationException("Failed to initialize libvirt.vif.driver " + e); + } catch (IllegalAccessException e) { + throw new ConfigurationException("Unable to instantiate class for libvirt.vif.driver " + e); + } + return vifDriver; + } + + protected VifDriver getVifDriver(TrafficType trafficType){ + VifDriver vifDriver = _trafficTypeVifDrivers.get(trafficType); + + if(vifDriver == null){ + vifDriver = _defaultVifDriver; } - return true; + return vifDriver; + } + + protected List getAllVifDrivers(){ + Set vifDrivers = new HashSet(); + + vifDrivers.add(_defaultVifDriver); + vifDrivers.addAll(_trafficTypeVifDrivers.values()); + + ArrayList vifDriverList = new ArrayList(vifDrivers); + + return vifDriverList; } private void getPifs() { @@ -861,7 +924,7 @@ ServerResource { private String getPif(String bridge) { String pif = matchPifFileInDirectory(bridge); - File vlanfile = new File("/proc/net/vlan" + pif); + File vlanfile = new File("/proc/net/vlan/" + pif); if (vlanfile.isFile()) { pif = Script.runSimpleBashScript("grep ^Device\\: /proc/net/vlan/" @@ -951,13 +1014,11 @@ ServerResource { return vnetId; } - private void patchSystemVm(String cmdLine, String dataDiskPath, - String vmName) throws InternalErrorException { + private void passCmdLine(String vmName, String cmdLine) + throws InternalErrorException { + final Script command = new Script(_patchViaSocketPath, _timeout, s_logger); String result; - final Script command = new Script(_patchdomrPath, _timeout, s_logger); - command.add("-l", vmName); - command.add("-t", "all"); - command.add("-d", dataDiskPath); + command.add("-n",vmName); command.add("-p", cmdLine.replaceAll(" ", "%")); result = command.execute(); if (result != null) { @@ -978,76 +1039,21 @@ ServerResource { } } - protected String startDomain(Connect conn, String vmName, String domainXML) + protected String startVM(Connect conn, String vmName, String domainXML) throws LibvirtException, InternalErrorException { - /* No duplicated vm, we will success, or failed */ - boolean failed = false; - Domain dm = null; try { - dm = conn.domainDefineXML(domainXML); + /* + We create a transient domain here. When this method gets + called we receive a full XML specification of the guest, + so no need to define it persistent. + + This also makes sure we never have any old "garbage" defined + in libvirt which might haunt us. + */ + conn.domainCreateXML(domainXML, 0); } catch (final LibvirtException e) { - /* Duplicated defined vm */ - s_logger.warn("Failed to define domain " + vmName + ": " - + e.getMessage()); - failed = true; - } finally { - try { - if (dm != null) { - dm.free(); - } - } catch (final LibvirtException e) { - - } - } - - /* If failed, undefine the vm */ - Domain dmOld = null; - Domain dmNew = null; - try { - if (failed) { - dmOld = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName - .getBytes())); - dmOld.undefine(); - dmNew = conn.domainDefineXML(domainXML); - } - } catch (final LibvirtException e) { - s_logger.warn("Failed to define domain (second time) " + vmName - + ": " + e.getMessage()); - throw e; - } catch (Exception e) { - s_logger.warn("Failed to define domain (second time) " + vmName - + ": " + e.getMessage()); - throw new InternalErrorException(e.toString()); - } finally { - try { - if (dmOld != null) { - dmOld.free(); - } - if (dmNew != null) { - dmNew.free(); - } - } catch (final LibvirtException e) { - - } - } - - /* Start the VM */ - try { - dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName - .getBytes())); - dm.create(); - } catch (LibvirtException e) { - s_logger.warn("Failed to start domain: " + vmName + ": " - + e.getMessage()); - throw e; - } finally { - try { - if (dm != null) { - dm.free(); - } - } catch (final LibvirtException e) { - - } + s_logger.warn("Failed to start domain " + vmName + ": " + + e.getMessage(), e); } return null; } @@ -1058,33 +1064,12 @@ ServerResource { Connect conn = LibvirtConnection.getConnection(); conn.close(); } catch (LibvirtException e) { + s_logger.trace("Ignoring libvirt error.", e); } return true; } - public static void main(String[] args) { - s_logger.addAppender(new org.apache.log4j.ConsoleAppender( - new org.apache.log4j.PatternLayout(), "System.out")); - LibvirtComputingResource test = new LibvirtComputingResource(); - Map params = new HashMap(); - try { - test.configure("test", params); - } catch (ConfigurationException e) { - System.out.println(e.getMessage()); - e.printStackTrace(); - } - String result = null; - // String result = test.startDomainRouter("domr1", - // "/var/lib/images/centos.5-4.x86-64/centos-small.img", 128, "0064", - // "02:00:30:00:01:01", "00:16:3e:77:e2:a1", "02:00:30:00:64:01"); - boolean created = (result == null); - s_logger.info("Domain " + (created ? " " : " not ") + " created"); - - s_logger.info("Rule " + (created ? " " : " not ") + " created"); - test.stop(); - } - @Override public Answer executeRequest(Command cmd) { @@ -1429,6 +1414,8 @@ ServerResource { if (type == null) { return new ResizeVolumeAnswer(cmd, false, "Unsupported volume format: pool type '" + pool.getType() + "' and volume format '" + vol.getFormat() + "'"); + } else if (type.equals("QCOW2") && shrinkOk) { + return new ResizeVolumeAnswer(cmd, false, "Unable to shrink volumes of type " + type); } s_logger.debug("got to the stage where we execute the volume resize, params:" @@ -1471,24 +1458,6 @@ ServerResource { pool.deletePhysicalDisk(vol.getPath()); String vmName = cmd.getVmName(); String poolPath = pool.getLocalPath(); - - /* if vol is a root disk for a system vm, try to remove accompanying patch disk as well - this is a bit tricky since the patchdisk is only a LibvirtComputingResource construct - and not tracked anywhere in cloudstack */ - if (vol.getType() == Volume.Type.ROOT && vmName.matches("^[rsv]-\\d+-.+$")) { - File patchVbd = new File(poolPath + File.separator + vmName + "-patchdisk"); - if(patchVbd.exists()){ - try { - _storagePoolMgr.deleteVbdByPath(vol.getPoolType(),patchVbd.getAbsolutePath()); - } catch(CloudRuntimeException e) { - s_logger.warn("unable to destroy patch disk '" + patchVbd.getAbsolutePath() + - "' while removing root disk for " + vmName + " : " + e); - } - } else { - s_logger.debug("file '" +patchVbd.getAbsolutePath()+ "' not found"); - } - } - return new Answer(cmd, true, "Success"); } catch (CloudRuntimeException e) { s_logger.debug("Failed to delete volume: " + e.toString()); @@ -1522,15 +1491,14 @@ ServerResource { } Domain vm = getDomain(conn, vmName); - vm.attachDevice(_vifDriver.plug(nicTO, "Other PV (32-bit)").toString()); + vm.attachDevice(getVifDriver(nicTO.getType()).plug(nicTO, "Other PV (32-bit)").toString()); } private PlugNicAnswer execute(PlugNicCommand cmd) { - Connect conn; NicTO nic = cmd.getNic(); String vmName = cmd.getVmName(); try { - conn = LibvirtConnection.getConnection(); + Connect conn = LibvirtConnection.getConnection(); Domain vm = getDomain(conn, vmName); List pluggedNics = getInterfaces(conn, vmName); Integer nicnum = 0; @@ -1541,9 +1509,13 @@ ServerResource { } nicnum++; } - vm.attachDevice(_vifDriver.plug(nic, "Other PV (32-bit)").toString()); + vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other PV (32-bit)").toString()); return new PlugNicAnswer(cmd, true, "success"); - } catch (Exception e) { + } catch (LibvirtException e) { + String msg = " Plug Nic failed due to " + e.toString(); + s_logger.warn(msg, e); + return new PlugNicAnswer(cmd, false, msg); + } catch (InternalErrorException e) { String msg = " Plug Nic failed due to " + e.toString(); s_logger.warn(msg, e); return new PlugNicAnswer(cmd, false, msg); @@ -1565,7 +1537,7 @@ ServerResource { } } return new UnPlugNicAnswer(cmd, true, "success"); - } catch (Exception e) { + } catch (LibvirtException e) { String msg = " Unplug Nic failed due to " + e.toString(); s_logger.warn(msg, e); return new UnPlugNicAnswer(cmd, false, msg); @@ -1619,7 +1591,7 @@ ServerResource { return new SetupGuestNetworkAnswer(cmd, false, "Creating guest network failed due to " + result); } return new SetupGuestNetworkAnswer(cmd, true, "success"); - } catch (Exception e) { + } catch (LibvirtException e) { String msg = "Creating guest network failed due to " + e.toString(); s_logger.warn(msg, e); return new SetupGuestNetworkAnswer(cmd, false, msg); @@ -1659,7 +1631,7 @@ ServerResource { } return new SetNetworkACLAnswer(cmd, true, results); - } catch (Exception e) { + } catch (LibvirtException e) { String msg = "SetNetworkACL failed due to " + e.toString(); s_logger.error(msg, e); return new SetNetworkACLAnswer(cmd, false, results); @@ -1704,7 +1676,7 @@ ServerResource { return new SetSourceNatAnswer(cmd, false, "KVM plugin \"vpc_snat\" failed:"+result); } return new SetSourceNatAnswer(cmd, true, "success"); - } catch (Exception e) { + } catch (LibvirtException e) { String msg = "Ip SNAT failure due to " + e.toString(); s_logger.error(msg, e); return new SetSourceNatAnswer(cmd, false, msg); @@ -1749,7 +1721,10 @@ ServerResource { results[i++] = ip.getPublicIp() + " - success"; } - } catch (Exception e) { + } catch (LibvirtException e) { + s_logger.error("Ip Assoc failure on applying one ip due to exception: ", e); + results[i++] = IpAssocAnswer.errorResult; + } catch (InternalErrorException e) { s_logger.error("Ip Assoc failure on applying one ip due to exception: ", e); results[i++] = IpAssocAnswer.errorResult; } @@ -1829,7 +1804,7 @@ ServerResource { vm = getDomain(conn, cmd.getVmName()); state = vm.getInfo().state; } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } @@ -1948,7 +1923,7 @@ ServerResource { vm = getDomain(conn, cmd.getVmName()); state = vm.getInfo().state; } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } @@ -2390,7 +2365,7 @@ ServerResource { Connect conn = LibvirtConnection.getConnection(); Integer vncPort = getVncPort(conn, cmd.getName()); return new GetVncPortAnswer(cmd, _privateIp, 5900 + vncPort); - } catch (Exception e) { + } catch (LibvirtException e) { return new GetVncPortAnswer(cmd, e.toString()); } } @@ -2511,16 +2486,13 @@ ServerResource { } catch (final LibvirtException e) { s_logger.warn("Can't get vm state " + vmName + e.getMessage() + "retry:" + retry); - } catch (Exception e) { - s_logger.warn("Can't get vm state " + vmName + e.getMessage() - + "retry:" + retry); } finally { try { if (vms != null) { vms.free(); } - } catch (final LibvirtException e) { - + } catch (final LibvirtException l) { + s_logger.trace("Ignoring libvirt error.", l); } } } @@ -2613,9 +2585,6 @@ ServerResource { } catch (LibvirtException e) { s_logger.debug("Can't migrate domain: " + e.getMessage()); result = e.getMessage(); - } catch (Exception e) { - s_logger.debug("Can't migrate domain: " + e.getMessage()); - result = e.getMessage(); } finally { try { if (dm != null) { @@ -2628,7 +2597,7 @@ ServerResource { destDomain.free(); } } catch (final LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } @@ -2639,7 +2608,11 @@ ServerResource { } else { destroy_network_rules_for_vm(conn, vmName); for (InterfaceDef iface : ifaces) { - _vifDriver.unplug(iface); + // We don't know which "traffic type" is associated with + // each interface at this point, so inform all vif drivers + for(VifDriver vifDriver : getAllVifDrivers()){ + vifDriver.unplug(iface); + } } cleanupVM(conn, vmName, getVnetId(VirtualMachineName.getVnet(vmName))); @@ -2659,7 +2632,7 @@ ServerResource { try { Connect conn = LibvirtConnection.getConnection(); for (NicTO nic : nics) { - _vifDriver.plug(nic, null); + getVifDriver(nic.getType()).plug(nic, null); } /* setup disks, e.g for iso */ @@ -2801,8 +2774,8 @@ ServerResource { Integer vncPort = null; try { vncPort = getVncPort(conn, cmd.getVmName()); - } catch (Exception e) { - + } catch (LibvirtException e) { + s_logger.trace("Ignoring libvirt error.", e); } get_rule_logs_for_vms(); return new RebootAnswer(cmd, null, vncPort); @@ -2864,7 +2837,7 @@ ServerResource { List ifaces = getInterfaces(conn, vmName); destroy_network_rules_for_vm(conn, vmName); - String result = stopVM(conn, vmName, defineOps.UNDEFINE_VM); + String result = stopVM(conn, vmName); if (result == null) { for (DiskDef disk : disks) { if (disk.getDeviceType() == DiskDef.deviceType.CDROM @@ -2873,7 +2846,11 @@ ServerResource { } } for (InterfaceDef iface: ifaces) { - _vifDriver.unplug(iface); + // We don't know which "traffic type" is associated with + // each interface at this point, so inform all vif drivers + for(VifDriver vifDriver : getAllVifDrivers()){ + vifDriver.unplug(iface); + } } } @@ -3000,12 +2977,34 @@ ServerResource { vm.addComp(guest); GuestResourceDef grd = new GuestResourceDef(); - grd.setMemorySize(vmTO.getMinRam() / 1024); + + if (vmTO.getMinRam() != vmTO.getMaxRam()){ + grd.setMemBalloning(true); + grd.setCurrentMem((int)vmTO.getMinRam()/1024); + grd.setMemorySize((int)vmTO.getMaxRam()/1024); + } + else{ + grd.setMemorySize(vmTO.getMaxRam() / 1024); + } grd.setVcpuNum(vmTO.getCpus()); vm.addComp(grd); CpuTuneDef ctd = new CpuTuneDef(); - ctd.setShares(vmTO.getCpus() * vmTO.getSpeed()); + /** + A 4.0.X/4.1.X management server doesn't send the correct JSON + command for getMinSpeed, it only sends a 'speed' field. + + So if getMinSpeed() returns null we fall back to getSpeed(). + + This way a >4.1 agent can work communicate a <=4.1 management server + + This change is due to the overcommit feature in 4.2 + */ + if (vmTO.getMinSpeed() != null) { + ctd.setShares(vmTO.getCpus() * vmTO.getMinSpeed()); + } else { + ctd.setShares(vmTO.getCpus() * vmTO.getSpeed()); + } vm.addComp(ctd); FeaturesDef features = new FeaturesDef(); @@ -3034,6 +3033,11 @@ ServerResource { SerialDef serial = new SerialDef("pty", null, (short) 0); devices.addDevice(serial); + if (vmTO.getType() != VirtualMachine.Type.User) { + VirtioSerialDef vserial = new VirtioSerialDef(vmTO.getName(), null); + devices.addDevice(vserial); + } + ConsoleDef console = new ConsoleDef("pty", null, null, (short) 0); devices.addDevice(console); @@ -3082,7 +3086,7 @@ ServerResource { createVifs(vmSpec, vm); s_logger.debug("starting " + vmName + ": " + vm.toString()); - startDomain(conn, vmName, vm.toString()); + startVM(conn, vmName, vm.toString()); NicTO[] nics = vmSpec.getNics(); for (NicTO nic : nics) { @@ -3097,10 +3101,27 @@ ServerResource { } } + // pass cmdline info to system vms + if (vmSpec.getType() != VirtualMachine.Type.User) { + passCmdLine(vmName, vmSpec.getBootArgs() ); + } + state = State.Running; return new StartAnswer(cmd); - } catch (Exception e) { - s_logger.warn("Exception ", e); + } catch (LibvirtException e) { + s_logger.warn("LibvirtException ", e); + if (conn != null) { + handleVmStartFailure(conn, vmName, vm); + } + return new StartAnswer(cmd, e.getMessage()); + } catch (InternalErrorException e) { + s_logger.warn("InternalErrorException ", e); + if (conn != null) { + handleVmStartFailure(conn, vmName, vm); + } + return new StartAnswer(cmd, e.getMessage()); + } catch (URISyntaxException e) { + s_logger.warn("URISyntaxException ", e); if (conn != null) { handleVmStartFailure(conn, vmName, vm); } @@ -3212,8 +3233,6 @@ ServerResource { iso.defISODisk(_sysvmISOPath); vm.getDevices().addDevice(iso); } - - createPatchVbd(conn, vmName, vm, vmSpec); } } @@ -3227,68 +3246,10 @@ ServerResource { return null; } - private void createPatchVbd(Connect conn, String vmName, LibvirtVMDef vm, - VirtualMachineTO vmSpec) throws LibvirtException, - InternalErrorException { - - List disks = vm.getDevices().getDisks(); - DiskDef rootDisk = disks.get(0); - VolumeTO rootVol = getVolume(vmSpec, Volume.Type.ROOT); - String patchName = vmName + "-patchdisk"; - KVMStoragePool pool = _storagePoolMgr.getStoragePool( - rootVol.getPoolType(), - rootVol.getPoolUuid()); - String patchDiskPath = pool.getLocalPath() + "/" + patchName; - - List phyDisks = pool.listPhysicalDisks(); - boolean foundDisk = false; - - for (KVMPhysicalDisk phyDisk : phyDisks) { - if (phyDisk.getPath().equals(patchDiskPath)) { - foundDisk = true; - break; - } - } - - if (!foundDisk) { - s_logger.debug("generating new patch disk for " + vmName + " since none was found"); - KVMPhysicalDisk disk = pool.createPhysicalDisk(patchName, KVMPhysicalDisk.PhysicalDiskFormat.RAW, - 10L * 1024 * 1024); - } else { - s_logger.debug("found existing patch disk at " + patchDiskPath + " using it for " + vmName); - } - - /* Format/create fs on this disk */ - final Script command = new Script(_createvmPath, _timeout, s_logger); - command.add("-f", patchDiskPath); - String result = command.execute(); - if (result != null) { - s_logger.debug("Failed to create data disk: " + result); - throw new InternalErrorException("Failed to create data disk: " - + result); - } - - /* add patch disk */ - DiskDef patchDisk = new DiskDef(); - - if (pool.getType() == StoragePoolType.CLVM) { - patchDisk.defBlockBasedDisk(patchDiskPath, 1, rootDisk.getBusType()); - } else { - patchDisk.defFileBasedDisk(patchDiskPath, 1, rootDisk.getBusType(), - DiskDef.diskFmtType.RAW); - } - - disks.add(patchDisk); - - String bootArgs = vmSpec.getBootArgs(); - - patchSystemVm(bootArgs, patchDiskPath, vmName); - } - private void createVif(LibvirtVMDef vm, NicTO nic) throws InternalErrorException, LibvirtException { vm.getDevices().addDevice( - _vifDriver.plug(nic, vm.getGuestOSType()).toString()); + getVifDriver(nic.getType()).plug(nic, vm.getGuestOSType()).toString()); } protected CheckSshAnswer execute(CheckSshCommand cmd) { @@ -3300,14 +3261,10 @@ ServerResource { s_logger.debug("Ping command port, " + privateIp + ":" + cmdPort); } - try { - String result = _virtRouterResource.connect(privateIp, cmdPort); - if (result != null) { - return new CheckSshAnswer(cmd, "Can not ping System vm " - + vmName + "due to:" + result); - } - } catch (Exception e) { - return new CheckSshAnswer(cmd, e); + String result = _virtRouterResource.connect(privateIp, cmdPort); + if (result != null) { + return new CheckSshAnswer(cmd, "Can not ping System vm " + + vmName + "due to:" + result); } if (s_logger.isDebugEnabled()) { @@ -3454,14 +3411,12 @@ ServerResource { + e.getMessage()); } throw e; - } catch (Exception e) { - throw new InternalErrorException(e.toString()); } finally { if (dm != null) { try { dm.free(); } catch (LibvirtException l) { - + s_logger.trace("Ignoring libvirt error.", l); } } } @@ -3679,22 +3634,21 @@ ServerResource { return convertToState(vps); } } catch (final LibvirtException e) { - s_logger.trace(e.getMessage()); - } catch (Exception e) { - s_logger.trace(e.getMessage()); + s_logger.trace("Ignoring libvirt error.", e); } finally { try { if (dm != null) { dm.free(); } - } catch (final LibvirtException e) { - + } catch (final LibvirtException l) { + s_logger.trace("Ignoring libvirt error.", l); } } try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.trace("Ignoring InterruptedException.", e); } } return State.Stopped; @@ -3732,7 +3686,7 @@ ServerResource { dm.free(); } } catch (final LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } } @@ -3787,7 +3741,7 @@ ServerResource { dm.free(); } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } } @@ -3807,15 +3761,13 @@ ServerResource { vmStates.put(vmName, state); } catch (final LibvirtException e) { s_logger.warn("Unable to get vms", e); - } catch (Exception e) { - s_logger.warn("Unable to get vms", e); } finally { try { if (dm != null) { dm.free(); } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } } @@ -3866,7 +3818,7 @@ ServerResource { } } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } if (isSnapshotSupported()) { @@ -3907,13 +3859,13 @@ ServerResource { .getBytes())); String vmDef = dm.getXMLDesc(0); s_logger.debug(vmDef); - msg = stopVM(conn, vmName, defineOps.UNDEFINE_VM); - msg = startDomain(conn, vmName, vmDef); + msg = stopVM(conn, vmName); + msg = startVM(conn, vmName, vmDef); return null; } catch (LibvirtException e) { s_logger.warn("Failed to create vm", e); msg = e.getMessage(); - } catch (Exception e) { + } catch (InternalErrorException e) { s_logger.warn("Failed to create vm", e); msg = e.getMessage(); } finally { @@ -3922,14 +3874,14 @@ ServerResource { dm.free(); } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } return msg; } - protected String stopVM(Connect conn, String vmName, defineOps df) { + protected String stopVM(Connect conn, String vmName) { DomainInfo.DomainState state = null; Domain dm = null; @@ -3952,15 +3904,13 @@ ServerResource { break; } catch (LibvirtException e) { s_logger.debug("Failed to get vm status:" + e.getMessage()); - } catch (Exception e) { - s_logger.debug("Failed to get vm status:" + e.getMessage()); } finally { try { if (dm != null) { dm.free(); } } catch (LibvirtException l) { - + s_logger.trace("Ignoring libvirt error.", l); } } } @@ -3979,23 +3929,6 @@ ServerResource { } } - if (df == defineOps.UNDEFINE_VM) { - try { - dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName - .getBytes())); - dm.undefine(); - } catch (LibvirtException e) { - - } finally { - try { - if (dm != null) { - dm.free(); - } - } catch (LibvirtException l) { - - } - } - } return null; } @@ -4032,15 +3965,13 @@ ServerResource { } catch (InterruptedException ie) { s_logger.debug("Interrupted sleep"); return ie.getMessage(); - } catch (Exception e) { - s_logger.debug("Failed to stop VM :" + vmName + " :", e); - return e.getMessage(); } finally { try { if (dm != null) { dm.free(); } } catch (LibvirtException e) { + s_logger.trace("Ignoring libvirt error.", e); } } @@ -4086,7 +4017,7 @@ ServerResource { dm.free(); } } catch (LibvirtException l) { - + s_logger.trace("Ignoring libvirt error.", l); } } } @@ -4102,7 +4033,7 @@ ServerResource { } } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } return false; } @@ -4127,8 +4058,7 @@ ServerResource { parser.parseDomainXML(xmlDesc); return parser.getDescription(); } catch (LibvirtException e) { - return null; - } catch (Exception e) { + s_logger.trace("Ignoring libvirt error.", e); return null; } finally { try { @@ -4136,7 +4066,7 @@ ServerResource { dm.free(); } } catch (LibvirtException l) { - + s_logger.trace("Ignoring libvirt error.", l); } } } @@ -4234,16 +4164,13 @@ ServerResource { } catch (LibvirtException e) { s_logger.debug("Failed to get dom xml: " + e.toString()); return new ArrayList(); - } catch (Exception e) { - s_logger.debug("Failed to get dom xml: " + e.toString()); - return new ArrayList(); } finally { try { if (dm != null) { dm.free(); } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } } @@ -4260,16 +4187,13 @@ ServerResource { } catch (LibvirtException e) { s_logger.debug("Failed to get dom xml: " + e.toString()); return new ArrayList(); - } catch (Exception e) { - s_logger.debug("Failed to get dom xml: " + e.toString()); - return new ArrayList(); } finally { try { if (dm != null) { dm.free(); } } catch (LibvirtException e) { - + s_logger.trace("Ignoring libvirt error.", e); } } } @@ -4592,20 +4516,20 @@ ServerResource { private Pair getNicStats(String nicName) { double rx = 0.0; - OutputInterpreter.OneLineParser rxParser = new OutputInterpreter.OneLineParser(); - String result = executeBashScript("cat /sys/class/net/" + nicName - + "/statistics/rx_bytes", rxParser); - if (result == null && rxParser.getLine() != null) { - rx = Double.parseDouble(rxParser.getLine()); + String rxFile = "/sys/class/net/" + nicName + "/statistics/rx_bytes"; + String rxContent = FileUtil.readFileAsString(rxFile); + if (rxContent == null) { + s_logger.warn("Failed to read the rx_bytes for " + nicName + " from " + rxFile); } + rx = Double.parseDouble(rxContent); double tx = 0.0; - OutputInterpreter.OneLineParser txParser = new OutputInterpreter.OneLineParser(); - result = executeBashScript("cat /sys/class/net/" + nicName - + "/statistics/tx_bytes", txParser); - if (result == null && txParser.getLine() != null) { - tx = Double.parseDouble(txParser.getLine()); + String txFile = "/sys/class/net/" + nicName + "/statistics/tx_bytes"; + String txContent = FileUtil.readFileAsString(txFile); + if (txContent == null) { + s_logger.warn("Failed to read the tx_bytes for " + nicName + " from " + txFile); } + tx = Double.parseDouble(txContent); return new Pair(rx, tx); } @@ -4617,8 +4541,7 @@ ServerResource { conn = LibvirtConnection.getConnection(); success = default_network_rules_for_systemvm(conn, cmd.getVmName()); } catch (LibvirtException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + s_logger.trace("Ignoring libvirt error.", e); } return new Answer(cmd, success, ""); diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java index acfd9cf1fe8..c93aeeb2dd6 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java @@ -116,6 +116,7 @@ public class LibvirtVMDef { private int _currentMem = -1; private String _memBacking; private int _vcpu = -1; + private boolean _memBalloning= false; public void setMemorySize(long mem) { _mem = mem; @@ -133,6 +134,10 @@ public class LibvirtVMDef { _vcpu = vcpu; } + public void setMemBalloning(boolean turnon){ + _memBalloning = turnon; + } + @Override public String toString() { StringBuilder resBuidler = new StringBuilder(); @@ -145,6 +150,9 @@ public class LibvirtVMDef { resBuidler.append("" + "<" + _memBacking + "/>" + "\n"); } + if (_memBalloning){ + resBuidler.append("\n" + "\n" + "\n"); + } if (_vcpu != -1) { resBuidler.append("" + _vcpu + "\n"); } @@ -838,6 +846,31 @@ public class LibvirtVMDef { } } + public static class VirtioSerialDef { + private final String _name; + private String _path; + + public VirtioSerialDef(String name, String path) { + _name = name; + _path = path; + } + + @Override + public String toString() { + StringBuilder virtioSerialBuilder = new StringBuilder(); + if(_path == null) { + _path = "/var/lib/libvirt/qemu"; + } + virtioSerialBuilder.append("\n"); + virtioSerialBuilder.append("\n"); + virtioSerialBuilder.append("\n"); + virtioSerialBuilder.append("
\n"); + virtioSerialBuilder.append("\n"); + return virtioSerialBuilder.toString(); + } + } + public static class GraphicDef { private final String _type; private short _port = -2; diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java index 3a614037d85..dd0d7724c4a 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtXMLParser.java @@ -19,6 +19,7 @@ package com.cloud.hypervisor.kvm.resource; import java.io.IOException; import java.io.StringReader; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; @@ -40,13 +41,14 @@ public class LibvirtXMLParser extends DefaultHandler { protected boolean _initialized = false; public LibvirtXMLParser() { - try { _sp = s_spf.newSAXParser(); _initialized = true; - } catch (Exception ex) { + } catch (ParserConfigurationException e) { + s_logger.trace("Ignoring xml parser error.", e); + } catch (SAXException e) { + s_logger.trace("Ignoring xml parser error.", e); } - } public boolean parseDomainXML(String domXML) { diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java new file mode 100644 index 00000000000..018f2f5330e --- /dev/null +++ b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java @@ -0,0 +1,184 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package com.cloud.hypervisor.kvm.resource; + +import org.junit.Test; +import com.cloud.agent.api.to.VirtualMachineTO; +import com.cloud.hypervisor.kvm.resource.LibvirtVMDef; +import com.cloud.template.VirtualMachineTemplate.BootloaderType; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachine.Type; +import java.util.Random; +import static org.junit.Assert.assertEquals; + +public class LibvirtComputingResourceTest { + + String _hyperVisorType = "kvm"; + Random _random = new Random(); + + /** + This test tests if the Agent can handle a vmSpec coming + from a <=4.1 management server. + + The overcommit feature has not been merged in there and thus + only 'speed' is set. + */ + @Test + public void testCreateVMFromSpecLegacy() { + int id = _random.nextInt(65534); + String name = "test-instance-1"; + + int cpus = _random.nextInt(7) + 1; + int speed = 1024; + int minRam = 256 * 1024; + int maxRam = 512 * 1024; + + String os = "Ubuntu"; + boolean haEnabled = false; + boolean limitCpuUse = false; + + String vncAddr = "1.2.3.4"; + String vncPassword = "mySuperSecretPassword"; + + LibvirtComputingResource lcr = new LibvirtComputingResource(); + VirtualMachineTO to = new VirtualMachineTO(id, name, VirtualMachine.Type.User, cpus, speed, minRam, maxRam, BootloaderType.HVM, os, false, false, vncPassword); + to.setVncAddr(vncAddr); + + LibvirtVMDef vm = lcr.createVMFromSpec(to); + vm.setHvsType(_hyperVisorType); + + String vmStr = "\n"; + vmStr += "" + name + "\n"; + vmStr += "b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9\n"; + vmStr += "" + os + "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "" + maxRam / 1024 + "\n"; + vmStr += "" + minRam / 1024 + "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "" + cpus + "\n"; + vmStr += "\n"; + vmStr += "hvm\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "" + (cpus * speed) + "\n"; + vmStr += "\n"; + vmStr += "restart\n"; + vmStr += "destroy\n"; + vmStr += "destroy\n"; + vmStr += "\n"; + + assertEquals(vmStr, vm.toString()); + } + + /** + This test tests if the Agent can handle a vmSpec coming + from a >4.1 management server. + + It tests if the Agent can handle a vmSpec with overcommit + data like minSpeed and maxSpeed in there + */ + @Test + public void testCreateVMFromSpec() { + int id = _random.nextInt(65534); + String name = "test-instance-1"; + + int cpus = _random.nextInt(7) + 1; + int minSpeed = 1024; + int maxSpeed = 2048; + int minRam = 256 * 1024; + int maxRam = 512 * 1024; + + String os = "Ubuntu"; + boolean haEnabled = false; + boolean limitCpuUse = false; + + String vncAddr = "1.2.3.4"; + String vncPassword = "mySuperSecretPassword"; + + LibvirtComputingResource lcr = new LibvirtComputingResource(); + VirtualMachineTO to = new VirtualMachineTO(id, name, VirtualMachine.Type.User, cpus, minSpeed, maxSpeed, minRam, maxRam, BootloaderType.HVM, os, false, false, vncPassword); + to.setVncAddr(vncAddr); + + LibvirtVMDef vm = lcr.createVMFromSpec(to); + vm.setHvsType(_hyperVisorType); + + String vmStr = "\n"; + vmStr += "" + name + "\n"; + vmStr += "b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9\n"; + vmStr += "" + os + "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "" + maxRam / 1024 + "\n"; + vmStr += "" + minRam / 1024 + "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "" + cpus + "\n"; + vmStr += "\n"; + vmStr += "hvm\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "\n"; + vmStr += "" + (cpus * minSpeed) + "\n"; + vmStr += "\n"; + vmStr += "restart\n"; + vmStr += "destroy\n"; + vmStr += "destroy\n"; + vmStr += "\n"; + + assertEquals(vmStr, vm.toString()); + } +} \ No newline at end of file diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVifDriverTest.java b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVifDriverTest.java new file mode 100644 index 00000000000..7d47e6e81de --- /dev/null +++ b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVifDriverTest.java @@ -0,0 +1,226 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package com.cloud.hypervisor.kvm.resource; + +import com.cloud.network.Networks.TrafficType; +import com.cloud.hypervisor.kvm.resource.LibvirtComputingResource.BridgeType; + +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.util.HashMap; +import java.util.Map; +import javax.naming.ConfigurationException; + + +import static org.mockito.Mockito.*; + +public class LibvirtVifDriverTest { + private LibvirtComputingResource res; + + private Map assertions; + + final String LIBVIRT_VIF_DRIVER = "libvirt.vif.driver"; + final String FAKE_VIF_DRIVER_CLASS_NAME = "com.cloud.hypervisor.kvm.resource.FakeVifDriver"; + final String NONEXISTENT_VIF_DRIVER_CLASS_NAME = "com.cloud.hypervisor.kvm.resource.NonExistentVifDriver"; + + private VifDriver fakeVifDriver, bridgeVifDriver, ovsVifDriver; + + @Before + public void setUp() { + // Use a spy because we only want to override getVifDriverClass + LibvirtComputingResource resReal = new LibvirtComputingResource(); + res = spy(resReal); + + try{ + bridgeVifDriver = + (VifDriver) Class.forName(LibvirtComputingResource.DEFAULT_BRIDGE_VIF_DRIVER_CLASS_NAME).newInstance(); + ovsVifDriver = + (VifDriver) Class.forName(LibvirtComputingResource.DEFAULT_OVS_VIF_DRIVER_CLASS_NAME).newInstance(); + + // Instantiating bridge vif driver again as the fake vif driver + // is good enough, as this is a separate instance + fakeVifDriver = + (VifDriver) Class.forName(LibvirtComputingResource.DEFAULT_BRIDGE_VIF_DRIVER_CLASS_NAME).newInstance(); + + doReturn(bridgeVifDriver).when(res) + .getVifDriverClass(eq(LibvirtComputingResource.DEFAULT_BRIDGE_VIF_DRIVER_CLASS_NAME), anyMap()); + doReturn(ovsVifDriver).when(res) + .getVifDriverClass(eq(LibvirtComputingResource.DEFAULT_OVS_VIF_DRIVER_CLASS_NAME), anyMap()); + doReturn(fakeVifDriver).when(res) + .getVifDriverClass(eq(FAKE_VIF_DRIVER_CLASS_NAME), anyMap()); + + } catch (final ConfigurationException ex){ + fail("Unexpected ConfigurationException while configuring VIF drivers: " + ex.getMessage()); + } catch (final Exception ex){ + fail("Unexpected Exception while configuring VIF drivers"); + } + + assertions = new HashMap(); + } + + + // Helper function + // Configure LibvirtComputingResource using params + private void configure (Map params) + throws ConfigurationException{ + res.configureVifDrivers(params); + } + + // Helper function + private void checkAssertions(){ + // Check the defined assertions + for (Map.Entry assertion : assertions.entrySet()){ + assertEquals(res.getVifDriver(assertion.getKey()), + assertion.getValue()); + } + } + + // Helper when all answers should be the same + private void checkAllSame(VifDriver vifDriver) + throws ConfigurationException { + + for(TrafficType trafficType : TrafficType.values()){ + assertions.put(trafficType, vifDriver); + } + + checkAssertions(); + } + + @Test + public void testDefaults() + throws ConfigurationException { + // If no special vif driver settings, all traffic types should + // map to the default vif driver for the bridge type + Map params = new HashMap(); + + res._bridgeType = BridgeType.NATIVE; + configure(params); + checkAllSame(bridgeVifDriver); + + res._bridgeType = BridgeType.OPENVSWITCH; + configure(params); + checkAllSame(ovsVifDriver); + } + + @Test + public void testDefaultsWhenExplicitlySet() + throws ConfigurationException { + + Map params = new HashMap(); + + // Switch res' bridge type for test purposes + params.put(LIBVIRT_VIF_DRIVER, LibvirtComputingResource.DEFAULT_BRIDGE_VIF_DRIVER_CLASS_NAME); + res._bridgeType = BridgeType.NATIVE; + configure(params); + checkAllSame(bridgeVifDriver); + + params.clear(); + params.put(LIBVIRT_VIF_DRIVER, LibvirtComputingResource.DEFAULT_OVS_VIF_DRIVER_CLASS_NAME); + res._bridgeType = BridgeType.OPENVSWITCH; + configure(params); + checkAllSame(ovsVifDriver); + } + + @Test + public void testWhenExplicitlySetDifferentDefault() + throws ConfigurationException { + + // Tests when explicitly set vif driver to OVS when using regular bridges and vice versa + Map params = new HashMap(); + + // Switch res' bridge type for test purposes + params.put(LIBVIRT_VIF_DRIVER, LibvirtComputingResource.DEFAULT_OVS_VIF_DRIVER_CLASS_NAME); + res._bridgeType = BridgeType.NATIVE; + configure(params); + checkAllSame(ovsVifDriver); + + params.clear(); + params.put(LIBVIRT_VIF_DRIVER, LibvirtComputingResource.DEFAULT_BRIDGE_VIF_DRIVER_CLASS_NAME); + res._bridgeType = BridgeType.OPENVSWITCH; + configure(params); + checkAllSame(bridgeVifDriver); + } + + @Test + public void testOverrideSomeTrafficTypes() + throws ConfigurationException { + + Map params = new HashMap(); + params.put(LIBVIRT_VIF_DRIVER + "." + "Public", FAKE_VIF_DRIVER_CLASS_NAME); + params.put(LIBVIRT_VIF_DRIVER + "." + "Guest", + LibvirtComputingResource.DEFAULT_OVS_VIF_DRIVER_CLASS_NAME); + res._bridgeType = BridgeType.NATIVE; + configure(params); + + // Initially, set all traffic types to use default + for(TrafficType trafficType : TrafficType.values()){ + assertions.put(trafficType, bridgeVifDriver); + } + + assertions.put(TrafficType.Public, fakeVifDriver); + assertions.put(TrafficType.Guest, ovsVifDriver); + + checkAssertions(); + } + + @Test + public void testBadTrafficType() + throws ConfigurationException { + Map params = new HashMap(); + params.put(LIBVIRT_VIF_DRIVER + "." + "NonExistentTrafficType", FAKE_VIF_DRIVER_CLASS_NAME); + res._bridgeType = BridgeType.NATIVE; + configure(params); + + // Set all traffic types to use default, because bad traffic type should be ignored + for(TrafficType trafficType : TrafficType.values()){ + assertions.put(trafficType, bridgeVifDriver); + } + + checkAssertions(); + } + + @Test + public void testEmptyTrafficType() + throws ConfigurationException { + Map params = new HashMap(); + params.put(LIBVIRT_VIF_DRIVER + ".", FAKE_VIF_DRIVER_CLASS_NAME); + res._bridgeType = BridgeType.NATIVE; + configure(params); + + // Set all traffic types to use default, because bad traffic type should be ignored + for(TrafficType trafficType : TrafficType.values()){ + assertions.put(trafficType, bridgeVifDriver); + } + + checkAssertions(); + } + + @Test(expected=ConfigurationException.class) + public void testBadVifDriverClassName() + throws ConfigurationException { + Map params = new HashMap(); + params.put(LIBVIRT_VIF_DRIVER + "." + "Public", NONEXISTENT_VIF_DRIVER_CLASS_NAME); + res._bridgeType = BridgeType.NATIVE; + configure(params); + } +} diff --git a/plugins/hypervisors/ovm/pom.xml b/plugins/hypervisors/ovm/pom.xml index 5700c14d4eb..84beff0d4eb 100644 --- a/plugins/hypervisors/ovm/pom.xml +++ b/plugins/hypervisors/ovm/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/hypervisors/simulator/pom.xml b/plugins/hypervisors/simulator/pom.xml index a1ab9c08639..ff1664ad85f 100644 --- a/plugins/hypervisors/simulator/pom.xml +++ b/plugins/hypervisors/simulator/pom.xml @@ -22,7 +22,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml org.apache.cloudstack diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java index 2178651403e..8542de3bd9f 100755 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockAgentManagerImpl.java @@ -62,7 +62,9 @@ import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; +import org.springframework.stereotype.Component; +@Component @Local(value = { MockAgentManager.class }) public class MockAgentManagerImpl extends ManagerBase implements MockAgentManager { private static final Logger s_logger = Logger.getLogger(MockAgentManagerImpl.class); diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java index f445bb32900..859acc85958 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockStorageManagerImpl.java @@ -97,7 +97,9 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine.State; +import org.springframework.stereotype.Component; +@Component @Local(value = { MockStorageManager.class }) public class MockStorageManagerImpl extends ManagerBase implements MockStorageManager { private static final Logger s_logger = Logger.getLogger(MockStorageManagerImpl.class); diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java index 60e1a61a0bd..c0ccbe43978 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java @@ -17,58 +17,12 @@ package com.cloud.agent.manager; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.ejb.Local; -import javax.inject.Inject; -import javax.naming.ConfigurationException; - -import org.apache.log4j.Logger; - -import com.cloud.agent.api.Answer; -import com.cloud.agent.api.BumpUpPriorityCommand; -import com.cloud.agent.api.CheckRouterAnswer; -import com.cloud.agent.api.CheckRouterCommand; -import com.cloud.agent.api.CheckVirtualMachineAnswer; -import com.cloud.agent.api.CheckVirtualMachineCommand; -import com.cloud.agent.api.CleanupNetworkRulesCmd; -import com.cloud.agent.api.GetDomRVersionAnswer; -import com.cloud.agent.api.GetDomRVersionCmd; -import com.cloud.agent.api.GetVmStatsAnswer; -import com.cloud.agent.api.GetVmStatsCommand; -import com.cloud.agent.api.GetVncPortAnswer; -import com.cloud.agent.api.GetVncPortCommand; -import com.cloud.agent.api.MigrateAnswer; -import com.cloud.agent.api.MigrateCommand; -import com.cloud.agent.api.NetworkUsageAnswer; -import com.cloud.agent.api.NetworkUsageCommand; -import com.cloud.agent.api.PrepareForMigrationAnswer; -import com.cloud.agent.api.PrepareForMigrationCommand; -import com.cloud.agent.api.RebootAnswer; -import com.cloud.agent.api.RebootCommand; -import com.cloud.agent.api.SecurityGroupRuleAnswer; -import com.cloud.agent.api.SecurityGroupRulesCmd; -import com.cloud.agent.api.StartAnswer; -import com.cloud.agent.api.StartCommand; -import com.cloud.agent.api.StopAnswer; -import com.cloud.agent.api.StopCommand; -import com.cloud.agent.api.VmStatsEntry; +import com.cloud.agent.api.*; import com.cloud.agent.api.check.CheckSshAnswer; import com.cloud.agent.api.check.CheckSshCommand; import com.cloud.agent.api.proxy.CheckConsoleProxyLoadCommand; import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand; -import com.cloud.agent.api.routing.DhcpEntryCommand; -import com.cloud.agent.api.routing.IpAssocCommand; -import com.cloud.agent.api.routing.LoadBalancerConfigCommand; -import com.cloud.agent.api.routing.NetworkElementCommand; -import com.cloud.agent.api.routing.SavePasswordCommand; -import com.cloud.agent.api.routing.SetFirewallRulesCommand; -import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; -import com.cloud.agent.api.routing.SetStaticNatRulesCommand; -import com.cloud.agent.api.routing.VmDataCommand; +import com.cloud.agent.api.routing.*; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.network.Networks.TrafficType; @@ -86,7 +40,18 @@ import com.cloud.utils.component.ManagerBase; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.VirtualMachine.State; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; +import javax.ejb.Local; +import javax.inject.Inject; +import javax.naming.ConfigurationException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Component @Local(value = { MockVmManager.class }) public class MockVmManagerImpl extends ManagerBase implements MockVmManager { private static final Logger s_logger = Logger.getLogger(MockVmManagerImpl.class); @@ -383,7 +348,7 @@ public class MockVmManagerImpl extends ManagerBase implements MockVmManager { @Override public Answer startVM(StartCommand cmd, SimulatorInfo info) { VirtualMachineTO vm = cmd.getVirtualMachine(); - String result = startVM(vm.getName(), vm.getNics(), vm.getCpus()* vm.getSpeed(), vm.getMaxRam(), vm.getBootArgs(), info.getHostUuid()); + String result = startVM(vm.getName(), vm.getNics(), vm.getCpus()* vm.getMaxSpeed(), vm.getMaxRam(), vm.getBootArgs(), info.getHostUuid()); if (result != null) { return new StartAnswer(cmd, result); } else { diff --git a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java index 41443572efd..c234cc5cb2e 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java @@ -16,73 +16,12 @@ // under the License. package com.cloud.agent.manager; -import java.util.HashMap; -import java.util.Map; - -import javax.ejb.Local; -import javax.inject.Inject; -import javax.naming.ConfigurationException; - -import org.apache.log4j.Logger; - -import com.cloud.agent.api.Answer; -import com.cloud.agent.api.AttachIsoCommand; -import com.cloud.agent.api.AttachVolumeCommand; -import com.cloud.agent.api.BackupSnapshotCommand; -import com.cloud.agent.api.BumpUpPriorityCommand; -import com.cloud.agent.api.CheckHealthCommand; -import com.cloud.agent.api.CheckNetworkCommand; -import com.cloud.agent.api.CheckRouterCommand; -import com.cloud.agent.api.CheckVirtualMachineCommand; -import com.cloud.agent.api.CleanupNetworkRulesCmd; -import com.cloud.agent.api.ClusterSyncCommand; -import com.cloud.agent.api.Command; -import com.cloud.agent.api.ComputeChecksumCommand; -import com.cloud.agent.api.CreatePrivateTemplateFromSnapshotCommand; -import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand; -import com.cloud.agent.api.CreateStoragePoolCommand; -import com.cloud.agent.api.CreateVolumeFromSnapshotCommand; -import com.cloud.agent.api.DeleteSnapshotBackupCommand; -import com.cloud.agent.api.DeleteStoragePoolCommand; -import com.cloud.agent.api.GetDomRVersionCmd; -import com.cloud.agent.api.GetHostStatsCommand; -import com.cloud.agent.api.GetStorageStatsCommand; -import com.cloud.agent.api.GetVmStatsCommand; -import com.cloud.agent.api.GetVncPortCommand; -import com.cloud.agent.api.MaintainCommand; -import com.cloud.agent.api.ManageSnapshotCommand; -import com.cloud.agent.api.MigrateCommand; -import com.cloud.agent.api.ModifyStoragePoolCommand; -import com.cloud.agent.api.NetworkUsageCommand; -import com.cloud.agent.api.PingTestCommand; -import com.cloud.agent.api.PrepareForMigrationCommand; -import com.cloud.agent.api.RebootCommand; -import com.cloud.agent.api.SecStorageSetupCommand; -import com.cloud.agent.api.SecStorageVMSetupCommand; -import com.cloud.agent.api.SecurityGroupRulesCmd; -import com.cloud.agent.api.StartCommand; -import com.cloud.agent.api.StopCommand; -import com.cloud.agent.api.StoragePoolInfo; +import com.cloud.agent.api.*; import com.cloud.agent.api.check.CheckSshCommand; import com.cloud.agent.api.proxy.CheckConsoleProxyLoadCommand; import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand; -import com.cloud.agent.api.routing.DhcpEntryCommand; -import com.cloud.agent.api.routing.IpAssocCommand; -import com.cloud.agent.api.routing.LoadBalancerConfigCommand; -import com.cloud.agent.api.routing.SavePasswordCommand; -import com.cloud.agent.api.routing.SetFirewallRulesCommand; -import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; -import com.cloud.agent.api.routing.SetStaticNatRulesCommand; -import com.cloud.agent.api.routing.VmDataCommand; -import com.cloud.agent.api.storage.CopyVolumeCommand; -import com.cloud.agent.api.storage.CreateCommand; -import com.cloud.agent.api.storage.DeleteTemplateCommand; -import com.cloud.agent.api.storage.DestroyCommand; -import com.cloud.agent.api.storage.DownloadCommand; -import com.cloud.agent.api.storage.DownloadProgressCommand; -import com.cloud.agent.api.storage.ListTemplateCommand; -import com.cloud.agent.api.storage.ListVolumeCommand; -import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; +import com.cloud.agent.api.routing.*; +import com.cloud.agent.api.storage.*; import com.cloud.simulator.MockConfigurationVO; import com.cloud.simulator.MockHost; import com.cloud.simulator.MockVMVO; @@ -95,7 +34,16 @@ import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.VirtualMachine.State; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; +import javax.ejb.Local; +import javax.inject.Inject; +import javax.naming.ConfigurationException; +import java.util.HashMap; +import java.util.Map; + +@Component @Local(value = { SimulatorManager.class }) public class SimulatorManagerImpl extends ManagerBase implements SimulatorManager { private static final Logger s_logger = Logger.getLogger(SimulatorManagerImpl.class); diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java b/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java index 721e5f70222..46df50c2133 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java +++ b/plugins/hypervisors/simulator/src/com/cloud/resource/AgentRoutingResource.java @@ -184,7 +184,7 @@ public class AgentRoutingResource extends AgentStorageResource { throws IllegalArgumentException { VirtualMachineTO vmSpec = cmd.getVirtualMachine(); String vmName = vmSpec.getName(); - if (this.totalCpu < (vmSpec.getCpus() * vmSpec.getSpeed() + this.usedCpu) || + if (this.totalCpu < (vmSpec.getCpus() * vmSpec.getMaxSpeed() + this.usedCpu) || this.totalMem < (vmSpec.getMaxRam() + this.usedMem)) { return new StartAnswer(cmd, "Not enough resource to start the vm"); } @@ -199,9 +199,9 @@ public class AgentRoutingResource extends AgentStorageResource { return new StartAnswer(cmd, result.getDetails()); } - this.usedCpu += vmSpec.getCpus() * vmSpec.getSpeed(); + this.usedCpu += vmSpec.getCpus() * vmSpec.getMaxSpeed(); this.usedMem += vmSpec.getMaxRam(); - _runningVms.put(vmName, new Pair(Long.valueOf(vmSpec.getCpus() * vmSpec.getSpeed()), vmSpec.getMaxRam())); + _runningVms.put(vmName, new Pair(Long.valueOf(vmSpec.getCpus() * vmSpec.getMaxSpeed()), vmSpec.getMaxRam())); state = State.Running; } finally { diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java index 5cb094184ba..00fe356103b 100755 --- a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java +++ b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java @@ -53,7 +53,7 @@ import com.cloud.storage.VMTemplateZoneVO; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VMTemplateZoneDao; - +import org.springframework.stereotype.Component; @Local(value = Discoverer.class) public class SimulatorDiscoverer extends DiscovererBase implements Discoverer, Listener, ResourceStateAdapter { diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java index cd0cd2725c9..1dd71c5c27f 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java +++ b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java @@ -42,7 +42,9 @@ import com.cloud.storage.SnapshotVO; import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.secondary.SecondaryStorageDiscoverer; import com.cloud.utils.exception.CloudRuntimeException; +import org.springframework.stereotype.Component; +@Component @Local(value=Discoverer.class) public class SimulatorSecondaryDiscoverer extends SecondaryStorageDiscoverer implements ResourceStateAdapter, Listener { private static final Logger s_logger = Logger.getLogger(SimulatorSecondaryDiscoverer.class); diff --git a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java index db4b619e6ca..728271c41f0 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java @@ -21,7 +21,7 @@ import java.util.List; import com.cloud.api.commands.ConfigureSimulator; -public class ManagementServerSimulatorImpl extends ManagementServerExtImpl { +public class ManagementServerSimulatorImpl extends ManagementServerImpl { @Override public List> getCommands() { List> cmdList = super.getCommands(); diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java index c9d308023ed..57a38f1d3d8 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java @@ -16,9 +16,6 @@ // under the License. package com.cloud.simulator; -import javax.ejb.Local; -import javax.inject.Inject; - import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorGuru; @@ -28,6 +25,10 @@ import com.cloud.storage.dao.GuestOSDao; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; +import javax.ejb.Local; +import javax.inject.Inject; + + @Local(value=HypervisorGuru.class) public class SimulatorGuru extends HypervisorGuruBase implements HypervisorGuru { @Inject GuestOSDao _guestOsDao; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java index bd1b48dfde8..fd825b751ed 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java @@ -16,18 +16,19 @@ // under the License. package com.cloud.simulator.dao; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.util.Formatter; - -import javax.ejb.Local; - import com.cloud.simulator.MockConfigurationVO; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; +import org.springframework.stereotype.Component; +import javax.ejb.Local; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.Formatter; + +@Component @Local(value={MockConfigurationDao.class}) public class MockConfigurationDaoImpl extends GenericDaoBase implements MockConfigurationDao { private SearchBuilder _searchByDcIdName; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDaoImpl.java index 8a566d79ed2..4b60bc02d47 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDaoImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDaoImpl.java @@ -16,14 +16,16 @@ // under the License. package com.cloud.simulator.dao; -import javax.ejb.Local; - import com.cloud.simulator.MockHost; import com.cloud.simulator.MockHostVO; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import org.springframework.stereotype.Component; +import javax.ejb.Local; + +@Component @Local(value={MockHostDao.class}) public class MockHostDaoImpl extends GenericDaoBase implements MockHostDao { protected final SearchBuilder GuidSearch; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDaoImpl.java index 65a375f5843..d4903244179 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDaoImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDaoImpl.java @@ -16,13 +16,15 @@ // under the License. package com.cloud.simulator.dao; -import javax.ejb.Local; - import com.cloud.simulator.MockSecStorageVO; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import org.springframework.stereotype.Component; +import javax.ejb.Local; + +@Component @Local(value={MockSecStorageDao.class}) public class MockSecStorageDaoImpl extends GenericDaoBase implements MockSecStorageDao { protected final SearchBuilder urlSearch; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java index 8831efef2ec..d35607e0ebc 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java @@ -16,16 +16,18 @@ // under the License. package com.cloud.simulator.dao; -import java.util.List; -import java.util.Map; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - import com.cloud.simulator.MockSecurityRulesVO; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import org.springframework.stereotype.Component; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.util.List; +import java.util.Map; + +@Component @Local(value={MockSecurityRulesDao.class}) public class MockSecurityRulesDaoImpl extends GenericDaoBase implements MockSecurityRulesDao { protected SearchBuilder vmIdSearch; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java index 3a64d27e30d..0fc41abdc4c 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java @@ -16,14 +16,16 @@ // under the License. package com.cloud.simulator.dao; -import javax.ejb.Local; - import com.cloud.simulator.MockStoragePoolVO; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import org.springframework.stereotype.Component; +import javax.ejb.Local; + +@Component @Local(value={MockStoragePoolDao.class}) public class MockStoragePoolDaoImpl extends GenericDaoBase implements MockStoragePoolDao { protected final SearchBuilder uuidSearch; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java index be7a98859e2..5a8c66d69ef 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java @@ -16,14 +16,6 @@ // under the License. package com.cloud.simulator.dao; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.ejb.Local; -import javax.inject.Inject; -import javax.naming.ConfigurationException; - import com.cloud.simulator.MockHostVO; import com.cloud.simulator.MockVMVO; import com.cloud.utils.db.GenericDaoBase; @@ -31,7 +23,16 @@ import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.vm.VirtualMachine; +import org.springframework.stereotype.Component; +import javax.ejb.Local; +import javax.inject.Inject; +import javax.naming.ConfigurationException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component @Local(value={MockVMDao.class}) public class MockVMDaoImpl extends GenericDaoBase implements MockVMDao { protected SearchBuilder GuidSearch; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVolumeDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVolumeDaoImpl.java index a3a35179337..5d64a9fa246 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVolumeDaoImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVolumeDaoImpl.java @@ -16,10 +16,6 @@ // under the License. package com.cloud.simulator.dao; -import java.util.List; - -import javax.ejb.Local; - import com.cloud.simulator.MockVolumeVO; import com.cloud.simulator.MockVolumeVO.MockVolumeType; import com.cloud.utils.db.GenericDaoBase; @@ -27,7 +23,12 @@ import com.cloud.utils.db.GenericSearchBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Func; +import org.springframework.stereotype.Component; +import javax.ejb.Local; +import java.util.List; + +@Component @Local(value={MockVolumeDao.class}) public class MockVolumeDaoImpl extends GenericDaoBase implements MockVolumeDao { protected final SearchBuilder idTypeSearch; diff --git a/plugins/hypervisors/ucs/pom.xml b/plugins/hypervisors/ucs/pom.xml index aecace85fce..24bdc948e73 100755 --- a/plugins/hypervisors/ucs/pom.xml +++ b/plugins/hypervisors/ucs/pom.xml @@ -1,17 +1,36 @@ - - + 4.0.0 org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml org.apache.cloudstack cloud-plugin-hypervisor-ucs - 4.1.0-SNAPSHOT - cloud-plugin-hypervisor-ucs + 4.2.0-SNAPSHOT + Apache CloudStack Plugin - Hypervisor UCS http://maven.apache.org UTF-8 diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDao.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDao.java old mode 100755 new mode 100644 index de7c6192dc6..581096d07e7 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDao.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDao.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.database; import com.cloud.utils.db.GenericDao; diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDaoImpl.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDaoImpl.java old mode 100755 new mode 100644 index ebeecf8e9a0..ae0980c85a9 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDaoImpl.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeDaoImpl.java @@ -1,10 +1,29 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.database; import javax.ejb.Local; + +import org.springframework.stereotype.Component; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; -@Local(value = { UcsBladeDao.class }) +@Local(value = { UcsBladeDao.class }) @DB(txn = false) public class UcsBladeDaoImpl extends GenericDaoBase implements UcsBladeDao { diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeVO.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeVO.java index 64c1a721f17..a8c6fd7fb3f 100755 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeVO.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsBladeVO.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.database; import javax.persistence.Column; @@ -6,10 +23,13 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; + +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; @Entity @Table(name="ucs_blade") -public class UcsBladeVO { +public class UcsBladeVO implements InternalIdentity, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") @@ -25,8 +45,11 @@ public class UcsBladeVO { private Long hostId; @Column(name="dn") - private String dn; - + private String dn; + + @Column(name="profile_dn") + private String profileDn; + public long getId() { return id; } @@ -65,5 +88,13 @@ public class UcsBladeVO { public void setUuid(String uuid) { this.uuid = uuid; - } + } + + public String getProfileDn() { + return profileDn; + } + + public void setProfileDn(String profileDn) { + this.profileDn = profileDn; + } } diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDao.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDao.java old mode 100755 new mode 100644 index eb4c2573d94..84fe29cac8b --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDao.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDao.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.database; import java.util.List; diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDaoImpl.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDaoImpl.java old mode 100755 new mode 100644 index f1475ab6581..39f978221f8 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDaoImpl.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerDaoImpl.java @@ -1,11 +1,30 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.database; import javax.ejb.Local; + +import org.springframework.stereotype.Component; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; -@Local(value = { UcsManagerDao.class }) +@Local(value = { UcsManagerDao.class }) @DB(txn = false) public class UcsManagerDaoImpl extends GenericDaoBase implements UcsManagerDao { } diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerVO.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerVO.java old mode 100755 new mode 100644 index 7c451beeec8..cd8371ba7be --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerVO.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/database/UcsManagerVO.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.database; import javax.persistence.Column; @@ -6,10 +23,13 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; - + +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + @Entity @Table(name="ucs_manager") -public class UcsManagerVO { +public class UcsManagerVO implements InternalIdentity, Identity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerCmd.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerCmd.java index 1e405c142e4..ce8e40e7d65 100755 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerCmd.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerCmd.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.manager; import javax.inject.Inject; @@ -9,6 +26,7 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseCmd.CommandType; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import com.cloud.exception.ConcurrentOperationException; @@ -19,33 +37,33 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.server.ManagementService; import com.cloud.user.Account; -@APICommand(description="Adds a Ucs manager", responseObject=AddUcsManagerResponse.class) +@APICommand(name="addUcsManager", description="Adds a Ucs manager", responseObject=UcsManagerResponse.class) public class AddUcsManagerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddUcsManagerCmd.class); @Inject private UcsManager mgr; - @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone id for the ucs manager", required=true) + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, description="the Zone id for the ucs manager", entityType=ZoneResponse.class, required=true) private Long zoneId; @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of UCS manager") private String name; - @Parameter(name=ApiConstants.URL, type=CommandType.STRING, description="the name of UCS url") + @Parameter(name=ApiConstants.URL, type=CommandType.STRING, description="the name of UCS url", required=true) private String url; - @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, description="the username of UCS") + @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, description="the username of UCS", required=true) private String username; - @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, description="the password of UCS") + @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, description="the password of UCS", required=true) private String password; @Override public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { try { - AddUcsManagerResponse rsp = mgr.addUcsManager(this); + UcsManagerResponse rsp = mgr.addUcsManager(this); rsp.setObjectName("ucsmanager"); rsp.setResponseName(getCommandName()); this.setResponseObject(rsp); diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladeCmd.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladeCmd.java index 7de9f78b713..c4638281a46 100755 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladeCmd.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladeCmd.java @@ -1,10 +1,29 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.manager; import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; @@ -14,25 +33,26 @@ import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; -@APICommand(description="associate a profile to a blade", responseObject=AssociateUcsProfileToBladesInClusterResponse.class) +@APICommand(name="associatesUscProfileToBlade", description="associate a profile to a blade", responseObject=UcsBladeResponse.class) public class AssociateUcsProfileToBladeCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AssociateUcsProfileToBladeCmd.class); @Inject private UcsManager mgr; - + + @Parameter(name=ApiConstants.UCS_MANAGER_ID, type=CommandType.UUID, description="ucs manager id", entityType=UcsManagerResponse.class, required=true) private Long ucsManagerId; + @Parameter(name=ApiConstants.UCS_PROFILE_DN, type=CommandType.STRING, description="profile dn", required=true) private String profileDn; + @Parameter(name=ApiConstants.UCS_BLADE_ID, type=CommandType.UUID, entityType=UcsBladeResponse.class, description="blade id", required=true) private Long bladeId; @Override public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { try { - mgr.associateProfileToBlade(this); - AssociateUcsProfileToBladesInClusterResponse rsp = new AssociateUcsProfileToBladesInClusterResponse(); + UcsBladeResponse rsp = mgr.associateProfileToBlade(this); rsp.setResponseName(getCommandName()); - rsp.setObjectName("associateucsprofiletobalde"); this.setResponseObject(rsp); } catch (Exception e) { s_logger.warn("Exception: ", e); diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladesInClusterResponse.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladesInClusterResponse.java deleted file mode 100755 index eedd9fc2841..00000000000 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladesInClusterResponse.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.cloud.ucs.manager; - -import org.apache.cloudstack.api.BaseResponse; - -public class AssociateUcsProfileToBladesInClusterResponse extends BaseResponse { -} diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsBladeCmd.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsBladeCmd.java new file mode 100755 index 00000000000..5440e4faee0 --- /dev/null +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsBladeCmd.java @@ -0,0 +1,87 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.ucs.manager; + +import javax.inject.Inject; + +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.log4j.Logger; + +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.NetworkRuleConflictException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.user.Account; + +@APICommand(name="listUcsBlade", description="List ucs blades", responseObject=UcsBladeResponse.class) +public class ListUcsBladeCmd extends BaseListCmd { + public static final Logger s_logger = Logger.getLogger(ListUcsBladeCmd.class); + + @Inject + private UcsManager mgr; + + @Parameter(name=ApiConstants.UCS_MANAGER_ID, type=CommandType.UUID, description="ucs manager id", entityType=UcsManagerResponse.class, required=true) + private Long ucsManagerId; + + public UcsManager getMgr() { + return mgr; + } + + public void setMgr(UcsManager mgr) { + this.mgr = mgr; + } + + public Long getUcsManagerId() { + return ucsManagerId; + } + + public void setUcsManagerId(Long ucsManagerId) { + this.ucsManagerId = ucsManagerId; + } + + @Override + public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, + ResourceAllocationException, NetworkRuleConflictException { + try { + ListResponse response = mgr.listUcsBlades(this); + response.setResponseName(getCommandName()); + response.setObjectName("ucsblade"); + this.setResponseObject(response); + } catch (Exception e) { + s_logger.warn(e.getMessage(), e); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); + } + } + + @Override + public String getCommandName() { + return "listucsbladeresponse"; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } +} diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerCmd.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerCmd.java index 53b09a25c40..862f6314338 100755 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerCmd.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerCmd.java @@ -1,3 +1,28 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// +// Automatically generated by addcopyright.py at 02/28/2013 +// regarding copyright ownership. The ASF licenses this file +// "License"); you may not use this file except in compliance +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY package com.cloud.ucs.manager; import javax.inject.Inject; @@ -6,6 +31,7 @@ import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; @@ -18,8 +44,8 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.server.ManagementService; import com.cloud.user.Account; -@APICommand(description="List ucs manager", responseObject=ListUcsManagerResponse.class) -public class ListUcsManagerCmd extends BaseCmd { +@APICommand(description="List ucs manager", responseObject=UcsManagerResponse.class) +public class ListUcsManagerCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListUcsManagerCmd.class); @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the zone id", required=true) @@ -32,7 +58,7 @@ public class ListUcsManagerCmd extends BaseCmd { public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { try { - ListResponse response = mgr.listUcsManager(this); + ListResponse response = mgr.listUcsManager(this); response.setResponseName(getCommandName()); response.setObjectName("ucsmanager"); this.setResponseObject(response); diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerResponse.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerResponse.java deleted file mode 100755 index d45aec58e61..00000000000 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerResponse.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.cloud.ucs.manager; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseResponse; - -import com.cloud.serializer.Param; -import com.google.gson.annotations.SerializedName; - -public class ListUcsManagerResponse extends BaseResponse { - @SerializedName(ApiConstants.ID) @Param(description="id of ucs manager") - private String id; - - @SerializedName(ApiConstants.NAME) @Param(description="name of ucs manager") - private String name; - - @SerializedName(ApiConstants.ZONE_ID) @Param(description="zone id the ucs manager belongs to") - private String zoneId; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getZoneId() { - return zoneId; - } - - public void setZoneId(String zoneId) { - this.zoneId = zoneId; - } -} diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileCmd.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileCmd.java index 4d69c74ff7d..c8a2cc57378 100755 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileCmd.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileCmd.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.manager; import javax.inject.Inject; @@ -7,6 +24,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseCmd.CommandType; +import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.ListResponse; @@ -19,13 +37,13 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.server.ManagementService; import com.cloud.user.Account; -@APICommand(description="List profile in ucs manager", responseObject=ListUcsProfileResponse.class) -public class ListUcsProfileCmd extends BaseCmd { +@APICommand(name="listUcsProfile", description="List profile in ucs manager", responseObject=UcsProfileResponse.class) +public class ListUcsProfileCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListUcsProfileCmd.class); @Inject UcsManager mgr; - @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id for the ucs manager", required=true) + @Parameter(name=ApiConstants.UCS_MANAGER_ID, type=CommandType.UUID, entityType=UcsManagerResponse.class, description="the id for the ucs manager", required=true) private Long ucsManagerId; public Long getUcsManagerId() { @@ -40,9 +58,9 @@ public class ListUcsProfileCmd extends BaseCmd { public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { try { - ListResponse response = mgr.listUcsProfiles(this); + ListResponse response = mgr.listUcsProfiles(this); response.setResponseName(getCommandName()); - response.setObjectName("ucsprofile"); + response.setObjectName("ucsprofiles"); this.setResponseObject(response); } catch (Exception e) { s_logger.warn("Exception: ", e); diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileResponse.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileResponse.java deleted file mode 100755 index 846ac278cf6..00000000000 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileResponse.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.cloud.ucs.manager; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseResponse; - -import com.cloud.serializer.Param; -import com.google.gson.annotations.SerializedName; - -public class ListUcsProfileResponse extends BaseResponse { - @SerializedName(ApiConstants.UCS_DN) @Param(description="the dn of ucs profile") - private String dn; - - public String getDn() { - return dn; - } - - public void setDn(String dn) { - this.dn = dn; - } -} diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/StringTemplate.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/StringTemplate.java old mode 100755 new mode 100644 index f7cd31564f2..72bbfcb6f21 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/StringTemplate.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/StringTemplate.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.manager; import java.util.Map; diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsBladeResponse.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsBladeResponse.java new file mode 100755 index 00000000000..862b206a507 --- /dev/null +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsBladeResponse.java @@ -0,0 +1,84 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.ucs.manager; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.EntityReference; + +import com.cloud.serializer.Param; +import com.cloud.ucs.database.UcsBladeVO; +import com.google.gson.annotations.SerializedName; +@EntityReference(value=UcsBladeVO.class) +public class UcsBladeResponse extends BaseResponse { + @SerializedName(ApiConstants.ID) + @Param(description = "ucs blade id") + private String id; + @SerializedName(ApiConstants.UCS_MANAGER_ID) + @Param(description = "ucs manager id") + private String ucsManagerId; + @SerializedName(ApiConstants.HOST_ID) + @Param(description = "cloudstack host id this blade associates to") + private String hostId; + @SerializedName(ApiConstants.UCS_BLADE_DN) + @Param(description = "ucs blade dn") + private String dn; + @SerializedName(ApiConstants.UCS_PROFILE_DN) + @Param(description = "associated ucs profile dn") + private String associatedProfileDn; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getUcsManagerId() { + return ucsManagerId; + } + + public void setUcsManagerId(String ucsManagerId) { + this.ucsManagerId = ucsManagerId; + } + + public String getHostId() { + return hostId; + } + + public void setHostId(String hostId) { + this.hostId = hostId; + } + + public String getDn() { + return dn; + } + + public void setDn(String dn) { + this.dn = dn; + } + + public String getAssociatedProfileDn() { + return associatedProfileDn; + } + + public void setAssociatedProfileDn(String associatedProfileDn) { + this.associatedProfileDn = associatedProfileDn; + } + +} diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsCommands.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsCommands.java old mode 100755 new mode 100644 index b6f22c75dbe..eb999910992 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsCommands.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsCommands.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.manager; import com.cloud.utils.xmlobject.XmlObject; @@ -67,7 +84,7 @@ public class UcsCommands { .putElement("statsPolicyName", "default") .putElement("status", "") .putElement("usrLbl", "") - .putElement("", "") + .putElement("uuid", "") .putElement("vconProfileName", "") .putElement("lsBinding", new XmlObject("lsBinding") .putElement("pnDn", bladeDn) diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsHttpClient.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsHttpClient.java old mode 100755 new mode 100644 index 978f67afb05..5c60601275e --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsHttpClient.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsHttpClient.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.manager; import org.apache.commons.httpclient.HttpClient; @@ -23,7 +40,12 @@ public class UcsHttpClient { if (result != 200) { throw new CloudRuntimeException("Call failed: " + post.getResponseBodyAsString()); } - return post.getResponseBodyAsString(); + String res = post.getResponseBodyAsString(); + if (res.contains("errorCode")) { + String err = String.format("ucs call failed:\nsubmitted doc:%s\nresponse:%s\n", xml, res); + throw new CloudRuntimeException(err); + } + return res; } catch (Exception e) { throw new CloudRuntimeException(e.getMessage(), e); } finally { diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManager.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManager.java index 56837606916..aa45f8c09fd 100755 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManager.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManager.java @@ -1,15 +1,35 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.manager; import org.apache.cloudstack.api.response.ListResponse; import com.cloud.utils.component.Manager; +import com.cloud.utils.component.PluggableService; -public interface UcsManager extends Manager { - AddUcsManagerResponse addUcsManager(AddUcsManagerCmd cmd); +public interface UcsManager extends Manager, PluggableService { + UcsManagerResponse addUcsManager(AddUcsManagerCmd cmd); - ListResponse listUcsProfiles(ListUcsProfileCmd cmd); + ListResponse listUcsProfiles(ListUcsProfileCmd cmd); - ListResponse listUcsManager(ListUcsManagerCmd cmd); + ListResponse listUcsManager(ListUcsManagerCmd cmd); - void associateProfileToBlade(AssociateUcsProfileToBladeCmd cmd); + UcsBladeResponse associateProfileToBlade(AssociateUcsProfileToBladeCmd cmd); + + ListResponse listUcsBlades(ListUcsBladeCmd cmd); } diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java index 03a28dd8985..f428e03b7c1 100755 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.manager; import java.io.File; @@ -26,8 +43,11 @@ import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.dc.ClusterDetailsDao; +import com.cloud.dc.DataCenterVO; import com.cloud.dc.dao.ClusterDao; +import com.cloud.dc.dao.DataCenterDao; import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.org.Cluster; import com.cloud.resource.ResourceService; @@ -48,7 +68,6 @@ import com.cloud.utils.xmlobject.XmlObject; import com.cloud.utils.xmlobject.XmlObjectParser; @Local(value = { UcsManager.class }) -@Component public class UcsManagerImpl implements UcsManager { public static final Logger s_logger = Logger.getLogger(UcsManagerImpl.class); @@ -62,8 +81,15 @@ public class UcsManagerImpl implements UcsManager { private ClusterDetailsDao clusterDetailsDao; @Inject private UcsBladeDao bladeDao; + @Inject + private HostDao hostDao; + @Inject + private DataCenterDao dcDao; - private Map cookies = new HashMap(); + private Map cookies = new HashMap(); + private String name; + private int runLevel; + private Map params; @Override public boolean configure(String name, Map params) throws ConfigurationException { @@ -82,7 +108,7 @@ public class UcsManagerImpl implements UcsManager { @Override public String getName() { - return "UcsManager"; + return name; } private void discoverBlades(UcsManagerVO ucsMgrVo) { @@ -98,7 +124,7 @@ public class UcsManagerImpl implements UcsManager { @Override @DB - public AddUcsManagerResponse addUcsManager(AddUcsManagerCmd cmd) { + public UcsManagerResponse addUcsManager(AddUcsManagerCmd cmd) { UcsManagerVO vo = new UcsManagerVO(); vo.setUuid(UUID.randomUUID().toString()); vo.setPassword(cmd.getPassword()); @@ -111,7 +137,7 @@ public class UcsManagerImpl implements UcsManager { txn.start(); ucsDao.persist(vo); txn.commit(); - AddUcsManagerResponse rsp = new AddUcsManagerResponse(); + UcsManagerResponse rsp = new UcsManagerResponse(); rsp.setId(String.valueOf(vo.getId())); rsp.setName(vo.getName()); rsp.setUrl(vo.getUrl()); @@ -129,7 +155,9 @@ public class UcsManagerImpl implements UcsManager { UcsManagerVO mgrvo = ucsDao.findById(ucsMgrId); UcsHttpClient client = new UcsHttpClient(mgrvo.getUrl()); String login = UcsCommands.loginCmd(mgrvo.getUsername(), mgrvo.getPassword()); - cookie = client.call(login); + String ret = client.call(login); + XmlObject xo = XmlObjectParser.parseFromString(ret); + cookie = xo.get("outCookie"); cookies.put(ucsMgrId, cookie); } @@ -159,12 +187,12 @@ public class UcsManagerImpl implements UcsManager { } @Override - public ListResponse listUcsProfiles(ListUcsProfileCmd cmd) { + public ListResponse listUcsProfiles(ListUcsProfileCmd cmd) { List profiles = getUcsProfiles(cmd.getUcsManagerId()); - ListResponse response = new ListResponse(); - List rs = new ArrayList(); + ListResponse response = new ListResponse(); + List rs = new ArrayList(); for (UcsProfile p : profiles) { - ListUcsProfileResponse r = new ListUcsProfileResponse(); + UcsProfileResponse r = new UcsProfileResponse(); r.setObjectName("ucsprofile"); r.setDn(p.getDn()); rs.add(r); @@ -180,7 +208,7 @@ public class UcsManagerImpl implements UcsManager { String cmd = UcsCommands.cloneProfile(cookie, srcDn, newProfileName); String res = client.call(cmd); XmlObject xo = XmlObjectParser.parseFromString(res); - return xo.get("lsClone.outConfig.lsServer.dn"); + return xo.get("outConfig.lsServer.dn"); } private boolean isProfileAssociated(Long ucsMgrId, String dn) { @@ -190,11 +218,11 @@ public class UcsManagerImpl implements UcsManager { String cmd = UcsCommands.configResolveDn(cookie, dn); String res = client.call(cmd); XmlObject xo = XmlObjectParser.parseFromString(res); - return xo.get("outConfig.lsServer.assocState").equals("associated"); + return xo.get("outConfig.computeBlade.association").equals("associated"); } - + @Override - public void associateProfileToBlade(AssociateUcsProfileToBladeCmd cmd) { + public UcsBladeResponse associateProfileToBlade(AssociateUcsProfileToBladeCmd cmd) { SearchCriteriaService q = SearchCriteria2.create(UcsBladeVO.class); q.addAnd(q.getEntity().getUcsManagerId(), Op.EQ, cmd.getUcsManagerId()); q.addAnd(q.getEntity().getId(), Op.EQ, cmd.getBladeId()); @@ -232,57 +260,115 @@ public class UcsManagerImpl implements UcsManager { if (count >= timeout) { throw new CloudRuntimeException(String.format("associating profile[%s] to balde[%s] timeout after 600 seconds", pdn, bvo.getDn())); } + + bvo.setProfileDn(pdn); + bladeDao.update(bvo.getId(), bvo); + + UcsBladeResponse rsp = bladeVOToResponse(bvo); - s_logger.debug(String.format("successfully associated profile[%s] to blade[%s]", pdn, bvo.getDn())); - } + s_logger.debug(String.format("successfully associated profile[%s] to blade[%s]", pdn, bvo.getDn())); + return rsp; + } + + private String hostIdToUuid(Long hostId) { + if (hostId == null) { + return null; + } + HostVO vo = hostDao.findById(hostId); + return vo.getUuid(); + } + + private String zoneIdToUuid(Long zoneId) { + DataCenterVO vo = dcDao.findById(zoneId); + return vo.getUuid(); + } + + private String ucsManagerIdToUuid(Long ucsMgrId) { + UcsManagerVO vo = ucsDao.findById(ucsMgrId); + return vo.getUuid(); + } @Override - public ListResponse listUcsManager(ListUcsManagerCmd cmd) { + public ListResponse listUcsManager(ListUcsManagerCmd cmd) { SearchCriteriaService serv = SearchCriteria2.create(UcsManagerVO.class); serv.addAnd(serv.getEntity().getZoneId(), Op.EQ, cmd.getZoneId()); List vos = serv.list(); - List rsps = new ArrayList(vos.size()); + List rsps = new ArrayList(vos.size()); for (UcsManagerVO vo : vos) { - ListUcsManagerResponse rsp = new ListUcsManagerResponse(); + UcsManagerResponse rsp = new UcsManagerResponse(); rsp.setObjectName("ucsmanager"); - rsp.setId(String.valueOf(vo.getId())); - rsp.setName(vo.getName()); - rsp.setZoneId(String.valueOf(vo.getZoneId())); + rsp.setId(vo.getUuid()); + rsp.setName(vo.getName()); + rsp.setUrl(vo.getUrl()); + rsp.setZoneId(zoneIdToUuid(vo.getZoneId())); rsps.add(rsp); } - ListResponse response = new ListResponse(); + ListResponse response = new ListResponse(); response.setResponses(rsps); return response; + } + + private UcsBladeResponse bladeVOToResponse(UcsBladeVO vo) { + UcsBladeResponse rsp = new UcsBladeResponse(); + rsp.setObjectName("ucsblade"); + rsp.setId(vo.getUuid()); + rsp.setDn(vo.getDn()); + rsp.setHostId(hostIdToUuid(vo.getHostId())); + rsp.setUcsManagerId(ucsManagerIdToUuid(vo.getUcsManagerId())); + return rsp; + } + + public ListResponse listUcsBlades(ListUcsBladeCmd cmd) { + SearchCriteriaService serv = SearchCriteria2.create(UcsBladeVO.class); + serv.addAnd(serv.getEntity().getUcsManagerId(), Op.EQ, cmd.getUcsManagerId()); + List vos = serv.list(); + + List rsps = new ArrayList(vos.size()); + for (UcsBladeVO vo : vos) { + UcsBladeResponse rsp = bladeVOToResponse(vo); + rsps.add(rsp); + } + + ListResponse response = new ListResponse(); + response.setResponses(rsps); + + return response; } @Override - public void setName(String name) { - // TODO Auto-generated method stub - + public void setName(String name) { + this.name = name; } @Override - public void setConfigParams(Map params) { - // TODO Auto-generated method stub - + public void setConfigParams(Map params) { + this.params = params; } @Override public Map getConfigParams() { - // TODO Auto-generated method stub - return null; + return this.params; } @Override public int getRunLevel() { - // TODO Auto-generated method stub - return 0; + return runLevel; } @Override - public void setRunLevel(int level) { - // TODO Auto-generated method stub - + public void setRunLevel(int level) { + this.runLevel = level; + } + + @Override + public List> getCommands() { + List> cmds = new ArrayList>(); + cmds.add(ListUcsBladeCmd.class); + cmds.add(ListUcsManagerCmd.class); + cmds.add(ListUcsProfileCmd.class); + cmds.add(AddUcsManagerCmd.class); + cmds.add(AssociateUcsProfileToBladeCmd.class); + return cmds; } } diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerResponse.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerResponse.java similarity index 53% rename from plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerResponse.java rename to plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerResponse.java index eff30b955f7..6a82daea816 100755 --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerResponse.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerResponse.java @@ -1,12 +1,32 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.manager; -import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.EntityReference; + import org.apache.cloudstack.api.BaseResponse; import com.cloud.serializer.Param; +import com.cloud.ucs.database.UcsManagerVO; import com.google.gson.annotations.SerializedName; - -public class AddUcsManagerResponse extends BaseResponse { +@EntityReference(value=UcsManagerVO.class) +public class UcsManagerResponse extends BaseResponse { @SerializedName(ApiConstants.ID) @Param(description="the ID of the ucs manager") private String id; diff --git a/server/src/com/cloud/baremetal/DhcpServerResponse.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsProfileResponse.java old mode 100644 new mode 100755 similarity index 75% rename from server/src/com/cloud/baremetal/DhcpServerResponse.java rename to plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsProfileResponse.java index db46ccd1a1d..0621f6fa983 --- a/server/src/com/cloud/baremetal/DhcpServerResponse.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsProfileResponse.java @@ -5,31 +5,33 @@ // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.baremetal; - -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseResponse; -import com.cloud.serializer.Param; -import com.google.gson.annotations.SerializedName; - -public class DhcpServerResponse extends BaseResponse { - @SerializedName(ApiConstants.ID) @Param(description="the ID of the Dhcp server") - private String id; - - public String getId() { - return id; +// +package com.cloud.ucs.manager; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseResponse; + +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; + +public class UcsProfileResponse extends BaseResponse { + @SerializedName(ApiConstants.UCS_DN) @Param(description="ucs profile dn") + private String dn; + + public String getDn() { + return dn; + } + + public void setDn(String dn) { + this.dn = dn; } - - public void setId(String id) { - this.id = id; - } -} +} diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/ComputeBlade.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/ComputeBlade.java old mode 100755 new mode 100644 index 6251ecf23b2..e3b1cfda35c --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/ComputeBlade.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/ComputeBlade.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.structure; import java.util.ArrayList; @@ -29,7 +46,7 @@ public class ComputeBlade { public static List fromXmString(String xmlstr) { XmlObject root = XmlObjectParser.parseFromString(xmlstr); - List lst = root.getAsList("configResolveClass.outConfigs.computeBlade"); + List lst = root.getAsList("outConfigs.computeBlade"); List blades = new ArrayList(); if (lst == null) { return blades; diff --git a/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/UcsProfile.java b/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/UcsProfile.java old mode 100755 new mode 100644 index b8b2646e13e..16cf35d539f --- a/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/UcsProfile.java +++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/structure/UcsProfile.java @@ -1,3 +1,20 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// package com.cloud.ucs.structure; import java.util.ArrayList; @@ -20,7 +37,9 @@ public class UcsProfile { List xos = xo.getAsList("outDns.dn"); if (xos != null) { for (XmlObject x : xos) { - UcsProfile p = UcsProfile.fromXmlObject(x); + //UcsProfile p = UcsProfile.fromXmlObject(x); + UcsProfile p = new UcsProfile(); + p.setDn(x.get("value").toString()); ps.add(p); } } diff --git a/plugins/hypervisors/vmware/pom.xml b/plugins/hypervisors/vmware/pom.xml index d990e89b388..468e0a50599 100644 --- a/plugins/hypervisors/vmware/pom.xml +++ b/plugins/hypervisors/vmware/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml @@ -38,18 +38,6 @@ ${cs.vmware.api.version} compile - - com.cloud.com.vmware - vmware-vim - ${cs.vmware.api.version} - compile - - - com.cloud.com.vmware - vmware-apputils - ${cs.vmware.api.version} - compile - org.apache.axis axis diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java index 819d3999f92..bb7c29745d9 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java @@ -1,3 +1,4 @@ + // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information @@ -129,6 +130,17 @@ public class VMwareGuru extends HypervisorGuruBase implements HypervisorGuru { } } } + + String diskDeviceType = details.get(VmDetailConstants.ROOK_DISK_CONTROLLER); + if (!(vm.getVirtualMachine() instanceof DomainRouterVO || vm.getVirtualMachine() instanceof ConsoleProxyVO + || vm.getVirtualMachine() instanceof SecondaryStorageVmVO)){ + // user vm + if (diskDeviceType != null){ + details.remove(VmDetailConstants.ROOK_DISK_CONTROLLER); + } + details.put(VmDetailConstants.ROOK_DISK_CONTROLLER, _vmwareMgr.getRootDiskController()); + } + to.setDetails(details); if(vm.getVirtualMachine() instanceof DomainRouterVO) { diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java index ac0f6f46518..94ba97d96a1 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.hypervisor.vmware; @@ -23,15 +23,19 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import javax.annotation.PostConstruct; import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.ApiConstants; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.alert.AlertManager; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterDetailsDao; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenter.NetworkType; @@ -40,17 +44,23 @@ import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.exception.DiscoveredWithErrorException; import com.cloud.exception.DiscoveryException; +import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao; import com.cloud.hypervisor.vmware.manager.VmwareManager; import com.cloud.hypervisor.vmware.mo.ClusterMO; import com.cloud.hypervisor.vmware.mo.HostMO; +import com.cloud.hypervisor.vmware.mo.VirtualSwitchType; import com.cloud.hypervisor.vmware.resource.VmwareContextFactory; import com.cloud.hypervisor.vmware.resource.VmwareResource; import com.cloud.hypervisor.vmware.util.VmwareContext; import com.cloud.network.NetworkModel; +import com.cloud.network.Networks.TrafficType; +import com.cloud.network.PhysicalNetwork; +import com.cloud.network.VmwareTrafficLabel; import com.cloud.network.dao.CiscoNexusVSMDeviceDao; import com.cloud.resource.Discoverer; import com.cloud.resource.DiscovererBase; @@ -68,6 +78,7 @@ import com.cloud.utils.UriUtils; import com.vmware.vim25.ClusterDasConfigInfo; import com.vmware.vim25.ManagedObjectReference; + @Local(value = Discoverer.class) public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer, ResourceStateAdapter { @@ -94,73 +105,158 @@ public class VmwareServerDiscoverer extends DiscovererBase implements CiscoNexusVSMDeviceDao _nexusDao; @Inject NetworkModel _netmgr; + @Inject + HypervisorCapabilitiesDao _hvCapabilitiesDao; + protected Map _urlParams; + protected boolean useDVS = false; + protected boolean nexusDVS = false; + public VmwareServerDiscoverer() { + s_logger.info("VmwareServerDiscoverer is constructed"); + } + @Override - public Map> find(long dcId, - Long podId, Long clusterId, URI url, String username, - String password, List hostTags) throws DiscoveryException { + public Map> find(long dcId, Long podId, Long clusterId, URI url, + String username, String password, List hostTags) throws DiscoveryException { - if (s_logger.isInfoEnabled()) - s_logger.info("Discover host. dc: " + dcId + ", pod: " + podId - + ", cluster: " + clusterId + ", uri host: " - + url.getHost()); + if(s_logger.isInfoEnabled()) + s_logger.info("Discover host. dc: " + dcId + ", pod: " + podId + ", cluster: " + clusterId + ", uri host: " + url.getHost()); - if (podId == null) { - if (s_logger.isInfoEnabled()) + if(podId == null) { + if(s_logger.isInfoEnabled()) s_logger.info("No pod is assigned, assuming that it is not for vmware and skip it to next discoverer"); return null; } ClusterVO cluster = _clusterDao.findById(clusterId); - if (cluster == null - || cluster.getHypervisorType() != HypervisorType.VMware) { - if (s_logger.isInfoEnabled()) + if(cluster == null || cluster.getHypervisorType() != HypervisorType.VMware) { + if(s_logger.isInfoEnabled()) s_logger.info("invalid cluster id or cluster is not for VMware hypervisors"); return null; } List hosts = _resourceMgr.listAllHostsInCluster(clusterId); - if (hosts.size() >= _vmwareMgr.getMaxHostsPerCluster()) { - String msg = "VMware cluster " - + cluster.getName() - + " is too big to add new host now. (current configured cluster size: " - + _vmwareMgr.getMaxHostsPerCluster() + ")"; + if (hosts != null && hosts.size() > 0) { + int maxHostsPerCluster = _hvCapabilitiesDao.getMaxHostsPerCluster(hosts.get(0).getHypervisorType(), hosts.get(0).getHypervisorVersion()); + if (hosts.size() > maxHostsPerCluster) { + String msg = "VMware cluster " + cluster.getName() + " is too big to add new host now. (current configured cluster size: " + maxHostsPerCluster + ")"; s_logger.error(msg); throw new DiscoveredWithErrorException(msg); } + } String privateTrafficLabel = null; String publicTrafficLabel = null; String guestTrafficLabel = null; Map vsmCredentials = null; - privateTrafficLabel = _netmgr.getDefaultManagementTrafficLabel(dcId, - HypervisorType.VMware); + VirtualSwitchType defaultVirtualSwitchType = VirtualSwitchType.StandardVirtualSwitch; + + String paramGuestVswitchType = null; + String paramGuestVswitchName = null; + String paramPublicVswitchType = null; + String paramPublicVswitchName = null; + + VmwareTrafficLabel guestTrafficLabelObj = new VmwareTrafficLabel(TrafficType.Guest); + VmwareTrafficLabel publicTrafficLabelObj = new VmwareTrafficLabel(TrafficType.Public); + Map clusterDetails = _clusterDetailsDao.findDetails(clusterId); + DataCenterVO zone = _dcDao.findById(dcId); + NetworkType zoneType = zone.getNetworkType(); + _readGlobalConfigParameters(); + + // Set default physical network end points for public and guest traffic + // Private traffic will be only on standard vSwitch for now. + if (useDVS) { + // Parse url parameters for type of vswitch and name of vswitch specified at cluster level + paramGuestVswitchType = _urlParams.get(ApiConstants.VSWITCH_TYPE_GUEST_TRAFFIC); + paramGuestVswitchName = _urlParams.get(ApiConstants.VSWITCH_NAME_GUEST_TRAFFIC); + paramPublicVswitchType = _urlParams.get(ApiConstants.VSWITCH_TYPE_PUBLIC_TRAFFIC); + paramPublicVswitchName = _urlParams.get(ApiConstants.VSWITCH_NAME_PUBLIC_TRAFFIC); + defaultVirtualSwitchType = getDefaultVirtualSwitchType(); + } + + // Zone level vSwitch Type depends on zone level traffic labels + // + // User can override Zone wide vswitch type (for public and guest) by providing following optional parameters in addClusterCmd + // param "guestvswitchtype" with valid values vmwaredvs, vmwaresvs, nexusdvs + // param "publicvswitchtype" with valid values vmwaredvs, vmwaresvs, nexusdvs + // + // Format of label is ,, + // If a field OR is not present leave it empty. + // Ex: 1) vswitch0 + // 2) dvswitch0,200,vmwaredvs + // 3) nexusepp0,300,nexusdvs + // 4) vswitch1,400,vmwaresvs + // 5) vswitch0 + // default vswitchtype is 'vmwaresvs'. + // 'vmwaresvs' is for vmware standard vswitch + // 'vmwaredvs' is for vmware distributed virtual switch + // 'nexusdvs' is for cisco nexus distributed virtual switch + // Get zone wide traffic labels for Guest traffic and Public traffic + guestTrafficLabel = _netmgr.getDefaultGuestTrafficLabel(dcId, HypervisorType.VMware); + + // Process traffic label information provided at zone level and cluster level + guestTrafficLabelObj = getTrafficInfo(TrafficType.Guest, guestTrafficLabel, defaultVirtualSwitchType, paramGuestVswitchType, paramGuestVswitchName, clusterId); + + if (zoneType == NetworkType.Advanced) { + // Get zone wide traffic label for Public traffic + publicTrafficLabel = _netmgr.getDefaultPublicTrafficLabel(dcId, HypervisorType.VMware); + + // Process traffic label information provided at zone level and cluster level + publicTrafficLabelObj = getTrafficInfo(TrafficType.Public, publicTrafficLabel, defaultVirtualSwitchType, paramPublicVswitchType, paramPublicVswitchName, clusterId); + + // Configuration Check: A physical network cannot be shared by different types of virtual switches. + // + // Check if different vswitch types are chosen for same physical network + // 1. Get physical network for guest traffic - multiple networks + // 2. Get physical network for public traffic - single network + // See if 2 is in 1 + // if no - pass + // if yes - compare publicTrafficLabelObj.getVirtualSwitchType() == guestTrafficLabelObj.getVirtualSwitchType() + // true - pass + // false - throw exception - fail cluster add operation + + List pNetworkListGuestTraffic = _netmgr.getPhysicalNtwksSupportingTrafficType(dcId, TrafficType.Guest); + List pNetworkListPublicTraffic = _netmgr.getPhysicalNtwksSupportingTrafficType(dcId, TrafficType.Public); + // Public network would be on single physical network hence getting first object of the list would suffice. + PhysicalNetwork pNetworkPublic = pNetworkListPublicTraffic.get(0); + if (pNetworkListGuestTraffic.contains(pNetworkPublic)) { + if (publicTrafficLabelObj.getVirtualSwitchType() != guestTrafficLabelObj.getVirtualSwitchType()) { + String msg = "Both public traffic and guest traffic is over same physical network " + pNetworkPublic + + ". And virtual switch type chosen for each traffic is different" + + ". A physical network cannot be shared by different types of virtual switches."; + s_logger.error(msg); + throw new InvalidParameterValueException(msg); + } + } + } else { + // Distributed virtual switch is not supported in Basic zone for now. + // Private / Management network traffic is not yet supported over distributed virtual switch. + if (guestTrafficLabelObj.getVirtualSwitchType() != VirtualSwitchType.StandardVirtualSwitch) { + String msg = "Detected that Guest traffic is over Distributed virtual switch in Basic zone. Only Standard vSwitch is supported in Basic zone."; + s_logger.error(msg); + throw new DiscoveredWithErrorException(msg); + } + } + + privateTrafficLabel = _netmgr.getDefaultManagementTrafficLabel(dcId, HypervisorType.VMware); if (privateTrafficLabel != null) { - s_logger.info("Detected private network label : " - + privateTrafficLabel); + s_logger.info("Detected private network label : " + privateTrafficLabel); } - if (_vmwareMgr.getNexusVSwitchGlobalParameter()) { - DataCenterVO zone = _dcDao.findById(dcId); - NetworkType zoneType = zone.getNetworkType(); + if (nexusDVS) { if (zoneType != NetworkType.Basic) { - publicTrafficLabel = _netmgr.getDefaultPublicTrafficLabel(dcId, - HypervisorType.VMware); + publicTrafficLabel = _netmgr.getDefaultPublicTrafficLabel(dcId, HypervisorType.VMware); if (publicTrafficLabel != null) { - s_logger.info("Detected public network label : " - + publicTrafficLabel); + s_logger.info("Detected public network label : " + publicTrafficLabel); } } // Get physical network label - guestTrafficLabel = _netmgr.getDefaultGuestTrafficLabel(dcId, - HypervisorType.VMware); + guestTrafficLabel = _netmgr.getDefaultGuestTrafficLabel(dcId, HypervisorType.VMware); if (guestTrafficLabel != null) { - s_logger.info("Detected guest network label : " - + guestTrafficLabel); + s_logger.info("Detected guest network label : " + guestTrafficLabel); } - vsmCredentials = _vmwareMgr - .getNexusVSMCredentialsByClusterId(clusterId); + vsmCredentials = _vmwareMgr.getNexusVSMCredentialsByClusterId(clusterId); } VmwareContext context = null; @@ -171,7 +267,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements context.registerStockObject("privateTrafficLabel", privateTrafficLabel); - if (_vmwareMgr.getNexusVSwitchGlobalParameter()) { + if (nexusDVS) { if (vsmCredentials != null) { s_logger.info("Stocking credentials of Nexus VSM"); context.registerStockObject("vsmcredentials", @@ -193,8 +289,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements } ManagedObjectReference morCluster = null; - Map clusterDetails = _clusterDetailsDao - .findDetails(clusterId); + clusterDetails = _clusterDetailsDao.findDetails(clusterId); if (clusterDetails.get("url") != null) { URI uriFromCluster = new URI( UriUtils.encodeURIComponent(clusterDetails.get("url"))); @@ -210,8 +305,8 @@ public class VmwareServerDiscoverer extends DiscovererBase implements } else { ClusterMO clusterMo = new ClusterMO(context, morCluster); ClusterDasConfigInfo dasConfig = clusterMo.getDasConfig(); - if (dasConfig != null && dasConfig.getEnabled() != null - && dasConfig.getEnabled().booleanValue()) { + if (dasConfig != null && dasConfig.isEnabled() != null + && dasConfig.isEnabled().booleanValue()) { clusterDetails.put("NativeHA", "true"); _clusterDetailsDao.persist(clusterId, clusterDetails); } @@ -235,7 +330,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements details.put("url", hostMo.getHostName()); details.put("username", username); details.put("password", password); - String guid = morHost.getType() + ":" + morHost.get_value() + String guid = morHost.getType() + ":" + morHost.getValue() + "@" + url.getHost(); details.put("guid", guid); @@ -250,13 +345,8 @@ public class VmwareServerDiscoverer extends DiscovererBase implements params.put("private.network.vswitch.name", privateTrafficLabel); } - if (publicTrafficLabel != null) { - params.put("public.network.vswitch.name", - publicTrafficLabel); - } - if (guestTrafficLabel != null) { - params.put("guest.network.vswitch.name", guestTrafficLabel); - } + params.put("guestTrafficInfo", guestTrafficLabelObj); + params.put("publicTrafficInfo", publicTrafficLabelObj); VmwareResource resource = new VmwareResource(); try { @@ -296,7 +386,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements if (morCluster == null) { for (ManagedObjectReference morHost : morHosts) { ManagedObjectReference morParent = (ManagedObjectReference) context - .getServiceUtil().getDynamicProperty(morHost, "parent"); + .getVimClient().getDynamicProperty(morHost, "parent"); if (morParent.getType().equalsIgnoreCase( "ClusterComputeResource")) return false; @@ -304,12 +394,12 @@ public class VmwareServerDiscoverer extends DiscovererBase implements } else { for (ManagedObjectReference morHost : morHosts) { ManagedObjectReference morParent = (ManagedObjectReference) context - .getServiceUtil().getDynamicProperty(morHost, "parent"); + .getVimClient().getDynamicProperty(morHost, "parent"); if (!morParent.getType().equalsIgnoreCase( "ClusterComputeResource")) return false; - if (!morParent.get_value().equals(morCluster.get_value())) + if (!morParent.getValue().equals(morCluster.getValue())) return false; } } @@ -375,6 +465,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements } } + @Override public HostVO createHostVOForConnectedAgent(HostVO host, StartupCommand[] cmd) { @@ -410,6 +501,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements _resourceMgr.deleteRoutingHost(host, isForced, isForceDeleteStorage); return new DeleteHostAnswer(true); + } @Override @@ -418,4 +510,158 @@ public class VmwareServerDiscoverer extends DiscovererBase implements .getSimpleName()); return super.stop(); } + + private VmwareTrafficLabel getTrafficInfo(TrafficType trafficType, String zoneWideTrafficLabel, VirtualSwitchType defaultVirtualSwitchType, String vSwitchType, String vSwitchName, Long clusterId) { + VmwareTrafficLabel trafficLabelObj = null; + Map clusterDetails = null; + try { + trafficLabelObj = new VmwareTrafficLabel(zoneWideTrafficLabel, trafficType, defaultVirtualSwitchType); + } catch (InvalidParameterValueException e) { + s_logger.error("Failed to recognize virtual switch type specified for " + trafficType + + " traffic due to " + e.getMessage()); + throw e; + } + + if (defaultVirtualSwitchType.equals(VirtualSwitchType.StandardVirtualSwitch)|| (vSwitchType == null && vSwitchName == null)) { + // Case of no cluster level override configuration defined. + // Depend only on zone wide traffic label + // If global param for dvSwitch is false return default traffic info object with vmware standard vswitch + return trafficLabelObj; + } else { + // Need to persist cluster level override configuration to db + clusterDetails = _clusterDetailsDao.findDetails(clusterId); + } + + if (vSwitchName != null) { + trafficLabelObj.setVirtualSwitchName(vSwitchName); + if (trafficType == TrafficType.Guest) { + clusterDetails.put(ApiConstants.VSWITCH_NAME_GUEST_TRAFFIC, vSwitchName); + } else { + clusterDetails.put(ApiConstants.VSWITCH_NAME_PUBLIC_TRAFFIC, vSwitchName); + } + } + + if (vSwitchType != null) { + validateVswitchType(vSwitchType); + trafficLabelObj.setVirtualSwitchType(VirtualSwitchType.getType(vSwitchType)); + if (trafficType == TrafficType.Guest) { + clusterDetails.put(ApiConstants.VSWITCH_TYPE_GUEST_TRAFFIC, vSwitchType); + } else { + clusterDetails.put(ApiConstants.VSWITCH_TYPE_PUBLIC_TRAFFIC, vSwitchType); + } + } + + // Save cluster level override configuration to cluster details + _clusterDetailsDao.persist(clusterId, clusterDetails); + + return trafficLabelObj; + } + + private VmwareTrafficLabel getTrafficInfo(TrafficType trafficType, String zoneWideTrafficLabel, Map clusterDetails, VirtualSwitchType defVirtualSwitchType) { + VmwareTrafficLabel trafficLabelObj = null; + try { + trafficLabelObj = new VmwareTrafficLabel(zoneWideTrafficLabel, trafficType, defVirtualSwitchType); + } catch (InvalidParameterValueException e) { + s_logger.error("Failed to recognize virtual switch type specified for " + trafficType + + " traffic due to " + e.getMessage()); + throw e; + } + + if(defVirtualSwitchType.equals(VirtualSwitchType.StandardVirtualSwitch)) { + return trafficLabelObj; + } + + if (trafficType == TrafficType.Guest) { + if(clusterDetails.containsKey(ApiConstants.VSWITCH_NAME_GUEST_TRAFFIC)) { + trafficLabelObj.setVirtualSwitchName(clusterDetails.get(ApiConstants.VSWITCH_NAME_GUEST_TRAFFIC)); + } + if(clusterDetails.containsKey(ApiConstants.VSWITCH_TYPE_GUEST_TRAFFIC)) { + trafficLabelObj.setVirtualSwitchType(VirtualSwitchType.getType(clusterDetails.get(ApiConstants.VSWITCH_TYPE_GUEST_TRAFFIC))); + } + } else if (trafficType == TrafficType.Public) { + if(clusterDetails.containsKey(ApiConstants.VSWITCH_NAME_PUBLIC_TRAFFIC)) { + trafficLabelObj.setVirtualSwitchName(clusterDetails.get(ApiConstants.VSWITCH_NAME_PUBLIC_TRAFFIC)); + } + if(clusterDetails.containsKey(ApiConstants.VSWITCH_TYPE_PUBLIC_TRAFFIC)) { + trafficLabelObj.setVirtualSwitchType(VirtualSwitchType.getType(clusterDetails.get(ApiConstants.VSWITCH_TYPE_PUBLIC_TRAFFIC))); + } + } + + return trafficLabelObj; + } + + private void _readGlobalConfigParameters() { + String value; + if (_configDao != null) { + value = _configDao.getValue(Config.VmwareUseDVSwitch.key()); + useDVS = Boolean.parseBoolean(value); + value = _configDao.getValue(Config.VmwareUseNexusVSwitch.key()); + nexusDVS = Boolean.parseBoolean(value); + } + } + + @Override + protected HashMap buildConfigParams(HostVO host) { + HashMap params = super.buildConfigParams(host); + + Map clusterDetails = _clusterDetailsDao.findDetails(host.getClusterId()); + // Get zone wide traffic labels from guest traffic and public traffic + String guestTrafficLabel = _netmgr.getDefaultGuestTrafficLabel(host.getDataCenterId(), HypervisorType.VMware); + String publicTrafficLabel = _netmgr.getDefaultPublicTrafficLabel(host.getDataCenterId(), HypervisorType.VMware); + _readGlobalConfigParameters(); + VirtualSwitchType defaultVirtualSwitchType = getDefaultVirtualSwitchType(); + + params.put("guestTrafficInfo", getTrafficInfo(TrafficType.Guest, guestTrafficLabel, clusterDetails, defaultVirtualSwitchType)); + params.put("publicTrafficInfo", getTrafficInfo(TrafficType.Public, publicTrafficLabel, clusterDetails, defaultVirtualSwitchType)); + + return params; + } + + private VirtualSwitchType getDefaultVirtualSwitchType() { + if (nexusDVS) + return VirtualSwitchType.NexusDistributedVirtualSwitch; + else if(useDVS) + return VirtualSwitchType.VMwareDistributedVirtualSwitch; + else + return VirtualSwitchType.StandardVirtualSwitch; + } + + @Override + public ServerResource reloadResource(HostVO host) { + String resourceName = host.getResource(); + ServerResource resource = getResource(resourceName); + + if (resource != null) { + _hostDao.loadDetails(host); + + HashMap params = buildConfigParams(host); + try { + resource.configure(host.getName(), params); + } catch (ConfigurationException e) { + s_logger.warn("Unable to configure resource due to " + e.getMessage()); + return null; + } + if (!resource.start()) { + s_logger.warn("Unable to start the resource"); + return null; + } + } + return resource; + } + + private void validateVswitchType(String inputVswitchType) { + VirtualSwitchType vSwitchType = VirtualSwitchType.getType(inputVswitchType); + if (vSwitchType == VirtualSwitchType.None) { + s_logger.error("Unable to resolve " + inputVswitchType + " to a valid virtual switch type in VMware environment."); + throw new InvalidParameterValueException("Invalid virtual switch type : " + inputVswitchType); + } + } + + @Override + public void putParam(Map params) { + if (_urlParams == null) { + _urlParams = new HashMap(); + } + _urlParams.putAll(params); + } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java index e1ca6ccac03..fb6d3d6667f 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.hypervisor.vmware.manager.VmwareStorageManager; import com.cloud.hypervisor.vmware.mo.HostMO; import com.cloud.hypervisor.vmware.util.VmwareContext; import com.cloud.utils.Pair; @@ -29,10 +30,6 @@ import com.vmware.vim25.ManagedObjectReference; public interface VmwareManager { public final String CONTEXT_STOCK_NAME = "vmwareMgr"; - // this limitation comes from the fact that we are using linked clone on shared VMFS storage, - // we need to limit the size of vCenter cluster, http://en.wikipedia.org/wiki/VMware_VMFS - public final int MAX_HOSTS_PER_CLUSTER = 8; - String composeWorkerName(); String getSystemVMIsoFileNameOnDatastore(); @@ -57,19 +54,16 @@ public interface VmwareManager { Pair getAddiionalVncPortRange(); - int getMaxHostsPerCluster(); int getRouterExtraPublicNics(); boolean beginExclusiveOperation(int timeOutSeconds); void endExclusiveOperation(); - boolean getNexusVSwitchGlobalParameter(); + boolean getFullCloneFlag(); Map getNexusVSMCredentialsByClusterId(Long clusterId); String getPrivateVSwitchName(long dcId, HypervisorType hypervisorType); - - String getPublicVSwitchName(long dcId, HypervisorType hypervisorType); - - String getGuestVSwitchName(long dcId, HypervisorType hypervisorType); + + public String getRootDiskController(); } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 79396208212..9d29abf8d35 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.hypervisor.vmware.manager; @@ -58,6 +58,7 @@ import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao; import com.cloud.hypervisor.vmware.VmwareCleanupMaid; import com.cloud.hypervisor.vmware.mo.DiskControllerType; import com.cloud.hypervisor.vmware.mo.HostFirewallSystemMO; @@ -66,6 +67,8 @@ import com.cloud.hypervisor.vmware.mo.HypervisorHostHelper; import com.cloud.hypervisor.vmware.mo.TaskMO; import com.cloud.hypervisor.vmware.mo.VirtualEthernetCardType; import com.cloud.hypervisor.vmware.mo.VmwareHostType; +import com.cloud.utils.ssh.SshHelper; +import com.cloud.hypervisor.vmware.util.VmwareClient; import com.cloud.hypervisor.vmware.util.VmwareContext; import com.cloud.network.CiscoNexusVSMDeviceVO; import com.cloud.network.NetworkModel; @@ -90,10 +93,11 @@ import com.cloud.utils.script.Script; import com.cloud.utils.ssh.SshHelper; import com.cloud.vm.DomainRouterVO; import com.google.gson.Gson; -import com.vmware.apputils.vim25.ServiceUtil; +import com.vmware.vim25.AboutInfo; import com.vmware.vim25.HostConnectSpec; import com.vmware.vim25.ManagedObjectReference; + @Local(value = {VmwareManager.class}) public class VmwareManagerImpl extends ManagerBase implements VmwareManager, VmwareStorageMount, Listener { private static final Logger s_logger = Logger.getLogger(VmwareManagerImpl.class); @@ -119,27 +123,25 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw @Inject ClusterVSMMapDao _vsmMapDao; @Inject ConfigurationDao _configDao; @Inject ConfigurationServer _configServer; + @Inject HypervisorCapabilitiesDao _hvCapabilitiesDao; String _mountParent; StorageLayer _storage; + String _privateNetworkVSwitchName = "vSwitch0"; - String _privateNetworkVSwitchName; - String _publicNetworkVSwitchName; - String _guestNetworkVSwitchName; + int _portsPerDvPortGroup = 256; boolean _nexusVSwitchActive; + boolean _fullCloneFlag; String _serviceConsoleName; String _managemetPortGroupName; String _defaultSystemVmNicAdapterType = VirtualEthernetCardType.E1000.toString(); String _recycleHungWorker = "false"; int _additionalPortRangeStart; int _additionalPortRangeSize; - int _maxHostsPerCluster; int _routerExtraPublicNics = 2; - String _cpuOverprovisioningFactor = "1"; String _reserveCpu = "false"; - String _memOverprovisioningFactor = "1"; String _reserveMem = "false"; String _rootDiskController = DiskControllerType.ide.toString(); @@ -193,43 +195,12 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw _storage = new JavaStorageLayer(); _storage.configure("StorageLayer", params); } - value = _configDao.getValue(Config.VmwareUseNexusVSwitch.key()); - if(value == null) { - _nexusVSwitchActive = false; - } - else - { - _nexusVSwitchActive = Boolean.parseBoolean(value); - } - _privateNetworkVSwitchName = _configDao.getValue(Config.VmwarePrivateNetworkVSwitch.key()); - - if (_privateNetworkVSwitchName == null) { - if (_nexusVSwitchActive) { - _privateNetworkVSwitchName = "privateEthernetPortProfile"; - } else { - _privateNetworkVSwitchName = "vSwitch0"; - } - } - - _publicNetworkVSwitchName = _configDao.getValue(Config.VmwarePublicNetworkVSwitch.key()); - - if (_publicNetworkVSwitchName == null) { - if (_nexusVSwitchActive) { - _publicNetworkVSwitchName = "publicEthernetPortProfile"; - } else { - _publicNetworkVSwitchName = "vSwitch0"; - } - } - - _guestNetworkVSwitchName = _configDao.getValue(Config.VmwareGuestNetworkVSwitch.key()); - - if (_guestNetworkVSwitchName == null) { - if (_nexusVSwitchActive) { - _guestNetworkVSwitchName = "guestEthernetPortProfile"; - } else { - _guestNetworkVSwitchName = "vSwitch0"; - } + value = _configDao.getValue(Config.VmwareCreateFullClone.key()); + if (value == null) { + _fullCloneFlag = false; + } else { + _fullCloneFlag = Boolean.parseBoolean(value); } _serviceConsoleName = _configDao.getValue(Config.VmwareServiceConsole.key()); @@ -260,15 +231,6 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw _routerExtraPublicNics = NumbersUtil.parseInt(_configDao.getValue(Config.RouterExtraPublicNics.key()), 2); - _maxHostsPerCluster = NumbersUtil.parseInt(_configDao.getValue(Config.VmwarePerClusterHostMax.key()), VmwareManager.MAX_HOSTS_PER_CLUSTER); - _cpuOverprovisioningFactor = _configDao.getValue(Config.CPUOverprovisioningFactor.key()); - if(_cpuOverprovisioningFactor == null || _cpuOverprovisioningFactor.isEmpty()) - _cpuOverprovisioningFactor = "1"; - - _memOverprovisioningFactor = _configDao.getValue(Config.MemOverprovisioningFactor.key()); - if(_memOverprovisioningFactor == null || _memOverprovisioningFactor.isEmpty()) - _memOverprovisioningFactor = "1"; - _reserveCpu = _configDao.getValue(Config.VmwareReserveCpu.key()); if(_reserveCpu == null || _reserveCpu.isEmpty()) _reserveCpu = "false"; @@ -320,8 +282,8 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw } @Override - public boolean getNexusVSwitchGlobalParameter() { - return _nexusVSwitchActive; + public boolean getFullCloneFlag() { + return _fullCloneFlag; } @Override @@ -334,14 +296,29 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw return _netMgr.getDefaultManagementTrafficLabel(dcId, hypervisorType); } - @Override - public String getPublicVSwitchName(long dcId, HypervisorType hypervisorType) { - return _netMgr.getDefaultPublicTrafficLabel(dcId, hypervisorType); - } - @Override - public String getGuestVSwitchName(long dcId, HypervisorType hypervisorType) { - return _netMgr.getDefaultGuestTrafficLabel(dcId, hypervisorType); + private void prepareHost(HostMO hostMo, String privateTrafficLabel) throws Exception { + // For ESX host, we need to enable host firewall to allow VNC access + HostFirewallSystemMO firewallMo = hostMo.getHostFirewallSystemMO(); + if(firewallMo != null) { + if(hostMo.getHostType() == VmwareHostType.ESX) { + firewallMo.enableRuleset("vncServer"); + firewallMo.refreshFirewall(); + } + } + + // prepare at least one network on the vswitch to enable OVF importing + String vSwitchName = privateTrafficLabel; + String vlanId = null; + String[] tokens = privateTrafficLabel.split(","); + if(tokens.length == 2) { + vSwitchName = tokens[0].trim(); + vlanId = tokens[1].trim(); + } + + s_logger.info("Preparing network on host " + hostMo.getContext().toString() + " for " + privateTrafficLabel); + HypervisorHostHelper.prepareNetwork(vSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false); + } @Override @@ -360,108 +337,45 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw List returnedHostList = new ArrayList(); if(mor.getType().equals("ComputeResource")) { - ManagedObjectReference[] hosts = (ManagedObjectReference[])serviceContext.getServiceUtil().getDynamicProperty(mor, "host"); - assert(hosts != null); + List hosts = (List)serviceContext.getVimClient().getDynamicProperty(mor, "host"); + assert(hosts != null && hosts.size() > 0); // For ESX host, we need to enable host firewall to allow VNC access - HostMO hostMo = new HostMO(serviceContext, hosts[0]); - HostFirewallSystemMO firewallMo = hostMo.getHostFirewallSystemMO(); - if(firewallMo != null) { - if(hostMo.getHostType() == VmwareHostType.ESX) { + HostMO hostMo = new HostMO(serviceContext, hosts.get(0)); - firewallMo.enableRuleset("vncServer"); - firewallMo.refreshFirewall(); - } - } - - // prepare at least one network on the vswitch to enable OVF importing - String vlanId = null; - if(privateTrafficLabel != null) { - String[] tokens = privateTrafficLabel.split(","); - if(tokens.length == 2) - vlanId = tokens[1]; - } - - if(!_nexusVSwitchActive) { - HypervisorHostHelper.prepareNetwork(_privateNetworkVSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false); - } - else { - s_logger.info("Preparing Network on " + privateTrafficLabel); - HypervisorHostHelper.prepareNetwork(privateTrafficLabel, "cloud.private", hostMo, vlanId, null, null, 180000); - } - returnedHostList.add(hosts[0]); + prepareHost(hostMo, privateTrafficLabel); + returnedHostList.add(hosts.get(0)); return returnedHostList; } else if(mor.getType().equals("ClusterComputeResource")) { - ManagedObjectReference[] hosts = (ManagedObjectReference[])serviceContext.getServiceUtil().getDynamicProperty(mor, "host"); + List hosts = (List)serviceContext.getVimClient().getDynamicProperty(mor, "host"); assert(hosts != null); - if(hosts.length > _maxHostsPerCluster) { - String msg = "vCenter cluster size is too big (current configured cluster size: " + _maxHostsPerCluster + ")"; + if (hosts.size() > 0) { + AboutInfo about = (AboutInfo)(serviceContext.getVimClient().getDynamicProperty(hosts.get(0), "config.product")); + String version = about.getApiVersion(); + int maxHostsPerCluster = _hvCapabilitiesDao.getMaxHostsPerCluster(HypervisorType.VMware, version); + if (hosts.size() > maxHostsPerCluster) { + String msg = "vCenter cluster size is too big (current configured cluster size: " + maxHostsPerCluster + ")"; s_logger.error(msg); throw new DiscoveredWithErrorException(msg); } + } for(ManagedObjectReference morHost: hosts) { // For ESX host, we need to enable host firewall to allow VNC access HostMO hostMo = new HostMO(serviceContext, morHost); - HostFirewallSystemMO firewallMo = hostMo.getHostFirewallSystemMO(); - if(firewallMo != null) { - if(hostMo.getHostType() == VmwareHostType.ESX) { - firewallMo.enableRuleset("vncServer"); - firewallMo.refreshFirewall(); - } - } - - String vlanId = null; - if(privateTrafficLabel != null) { - String[] tokens = privateTrafficLabel.split(","); - if(tokens.length == 2) - vlanId = tokens[1]; - } - - - s_logger.info("Calling prepareNetwork : " + hostMo.getContext().toString()); - // prepare at least one network on the vswitch to enable OVF importing - if(!_nexusVSwitchActive) { - HypervisorHostHelper.prepareNetwork(_privateNetworkVSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false); - } - else { - s_logger.info("Preparing Network on " + privateTrafficLabel); - HypervisorHostHelper.prepareNetwork(privateTrafficLabel, "cloud.private", hostMo, vlanId, null, null, 180000); - } + prepareHost(hostMo, privateTrafficLabel); returnedHostList.add(morHost); } return returnedHostList; } else if(mor.getType().equals("HostSystem")) { // For ESX host, we need to enable host firewall to allow VNC access HostMO hostMo = new HostMO(serviceContext, mor); - HostFirewallSystemMO firewallMo = hostMo.getHostFirewallSystemMO(); - if(firewallMo != null) { - if(hostMo.getHostType() == VmwareHostType.ESX) { - firewallMo.enableRuleset("vncServer"); - firewallMo.refreshFirewall(); - } - } - - String vlanId = null; - if(privateTrafficLabel != null) { - String[] tokens = privateTrafficLabel.split(","); - if(tokens.length == 2) - vlanId = tokens[1]; - } - - // prepare at least one network on the vswitch to enable OVF importing - if(!_nexusVSwitchActive) { - HypervisorHostHelper.prepareNetwork(_privateNetworkVSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false); - } - else { - s_logger.info("Preparing Network on " + privateTrafficLabel); - HypervisorHostHelper.prepareNetwork(privateTrafficLabel, "cloud.private", hostMo, vlanId, null, null, 180000); - } + prepareHost(hostMo, privateTrafficLabel); returnedHostList.add(mor); return returnedHostList; } else { - s_logger.error("Unsupport host type " + mor.getType() + ":" + mor.get_value() + " from inventory path: " + hostInventoryPath); + s_logger.error("Unsupport host type " + mor.getType() + ":" + mor.getValue() + " from inventory path: " + hostInventoryPath); return null; } } @@ -474,8 +388,8 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw private ManagedObjectReference addHostToVCenterCluster(VmwareContext serviceContext, ManagedObjectReference morCluster, String host, String userName, String password) throws Exception { - ServiceUtil serviceUtil = serviceContext.getServiceUtil(); - ManagedObjectReference morHost = serviceUtil.getDecendentMoRef(morCluster, "HostSystem", host); + VmwareClient vclient = serviceContext.getVimClient(); + ManagedObjectReference morHost = vclient.getDecendentMoRef(morCluster, "HostSystem", host); if(morHost == null) { HostConnectSpec hostSpec = new HostConnectSpec(); hostSpec.setUserName(userName); @@ -483,16 +397,16 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw hostSpec.setHostName(host); hostSpec.setForce(true); // forcely take over the host - ManagedObjectReference morTask = serviceContext.getService().addHost_Task(morCluster, hostSpec, true, null, null); - String taskResult = serviceUtil.waitForTask(morTask); - if(!taskResult.equals("sucess")) { + ManagedObjectReference morTask = serviceContext.getService().addHostTask(morCluster, hostSpec, true, null, null); + boolean taskResult = vclient.waitForTask(morTask); + if(!taskResult) { s_logger.error("Unable to add host " + host + " to vSphere cluster due to " + TaskMO.getTaskFailureInfo(serviceContext, morTask)); throw new CloudRuntimeException("Unable to add host " + host + " to vSphere cluster due to " + taskResult); } serviceContext.waitForTaskProgressDone(morTask); // init morHost after it has been created - morHost = serviceUtil.getDecendentMoRef(morCluster, "HostSystem", host); + morHost = vclient.getDecendentMoRef(morCluster, "HostSystem", host); if(morHost == null) { throw new CloudRuntimeException("Successfully added host into vSphere but unable to find it later on?!. Please make sure you are either using IP address or full qualified domain name for host"); } @@ -510,6 +424,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw @Override public String getSecondaryStorageStoreUrl(long dcId) { + List secStorageHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId); if(secStorageHosts.size() > 0) return secStorageHosts.get(0).getStorageUrl(); @@ -536,18 +451,14 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw @Override public void setupResourceStartupParams(Map params) { - params.put("private.network.vswitch.name", _privateNetworkVSwitchName); - params.put("public.network.vswitch.name", _publicNetworkVSwitchName); - params.put("guest.network.vswitch.name", _guestNetworkVSwitchName); - params.put("vmware.use.nexus.vswitch", _nexusVSwitchActive); + params.put("vmware.create.full.clone", _fullCloneFlag); params.put("service.console.name", _serviceConsoleName); params.put("management.portgroup.name", _managemetPortGroupName); - params.put("cpu.overprovisioning.factor", _cpuOverprovisioningFactor); params.put("vmware.reserve.cpu", _reserveCpu); - params.put("mem.overprovisioning.factor", _memOverprovisioningFactor); params.put("vmware.reserve.mem", _reserveMem); params.put("vmware.root.disk.controller", _rootDiskController); params.put("vmware.recycle.hung.wokervm", _recycleHungWorker); + params.put("ports.per.dvportgroup", _portsPerDvPortGroup); } @Override @@ -584,6 +495,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw s_logger.info("Inject SSH key pairs before copying systemvm.iso into secondary storage"); _configServer.updateKeyPairs(); + try { FileUtil.copyfile(srcIso, destIso); } catch(IOException e) { @@ -620,29 +532,36 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw private File getSystemVMPatchIsoFile() { // locate systemvm.iso - URL url = this.getClass().getProtectionDomain().getCodeSource().getLocation(); - File file = new File(url.getFile()); - File isoFile = new File(file.getParent() + "/vms/systemvm.iso"); - if (!isoFile.exists()) { - isoFile = new File("/usr/lib64/cloud/common/" + "/vms/systemvm.iso"); - if (!isoFile.exists()) { - isoFile = new File("/usr/lib/cloud/common/" + "/vms/systemvm.iso"); - } + URL url = this.getClass().getClassLoader().getResource("vms/systemvm.iso"); + File isoFile = null; + if (url != null) { + isoFile = new File(url.getPath()); + } + + if(isoFile == null || !isoFile.exists()) { + isoFile = new File("/usr/share/cloudstack-common/vms/systemvm.iso"); + } + + assert(isoFile != null); + if(!isoFile.exists()) { + s_logger.error("Unable to locate systemvm.iso in your setup at " + isoFile.toString()); } return isoFile; } @Override public File getSystemVMKeyFile() { - URL url = this.getClass().getProtectionDomain().getCodeSource().getLocation(); - File file = new File(url.getFile()); - - File keyFile = new File(file.getParent(), "/scripts/vm/systemvm/id_rsa.cloud"); - if (!keyFile.exists()) { - keyFile = new File("/usr/lib64/cloud/common" + "/scripts/vm/systemvm/id_rsa.cloud"); - if (!keyFile.exists()) { - keyFile = new File("/usr/lib/cloud/common" + "/scripts/vm/systemvm/id_rsa.cloud"); - } + URL url = this.getClass().getClassLoader().getResource("scripts/vm/systemvm/id_rsa.cloud"); + File keyFile = null; + if ( url != null ){ + keyFile = new File(url.getPath()); + } + if (keyFile == null || !keyFile.exists()) { + keyFile = new File("/usr/share/cloudstack-common/scripts/vm/systemvm/id_rsa.cloud"); + } + assert(keyFile != null); + if(!keyFile.exists()) { + s_logger.error("Unable to locate id_rsa.cloud in your setup at " + keyFile.toString()); } return keyFile; } @@ -909,11 +828,6 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw return new Pair(_additionalPortRangeStart, _additionalPortRangeSize); } - @Override - public int getMaxHostsPerCluster() { - return this._maxHostsPerCluster; - } - @Override public int getRouterExtraPublicNics() { return this._routerExtraPublicNics; @@ -927,7 +841,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw vsmMapVO = _vsmMapDao.findByClusterId(clusterId); long vsmId = 0; if (vsmMapVO != null) { - vsmId = vsmMapVO.getVsmId(); + vsmId = vsmMapVO.getVsmId(); s_logger.info("vsmId is " + vsmId); nexusVSM = _nexusDao.findById(vsmId); s_logger.info("Fetching nexus vsm credentials from database."); @@ -935,7 +849,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw else { s_logger.info("Found empty vsmMapVO."); return null; - } + } Map nexusVSMCredentials = new HashMap(); if (nexusVSM != null) { @@ -946,4 +860,9 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw } return nexusVSMCredentials; } + + @Override + public String getRootDiskController() { + return _rootDiskController; + } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManager.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManager.java index f27e0269a64..a2e517d1fdb 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManager.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManager.java @@ -20,15 +20,21 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.BackupSnapshotCommand; import com.cloud.agent.api.CreatePrivateTemplateFromSnapshotCommand; import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand; +import com.cloud.agent.api.CreateVMSnapshotCommand; import com.cloud.agent.api.CreateVolumeFromSnapshotCommand; +import com.cloud.agent.api.DeleteVMSnapshotCommand; +import com.cloud.agent.api.RevertToVMSnapshotCommand; import com.cloud.agent.api.storage.CopyVolumeCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; public interface VmwareStorageManager { Answer execute(VmwareHostService hostService, PrimaryStorageDownloadCommand cmd); - Answer execute(VmwareHostService hostService, BackupSnapshotCommand cmd); - Answer execute(VmwareHostService hostService, CreatePrivateTemplateFromVolumeCommand cmd); - Answer execute(VmwareHostService hostService, CreatePrivateTemplateFromSnapshotCommand cmd); - Answer execute(VmwareHostService hostService, CopyVolumeCommand cmd); - Answer execute(VmwareHostService hostService, CreateVolumeFromSnapshotCommand cmd); + Answer execute(VmwareHostService hostService, BackupSnapshotCommand cmd); + Answer execute(VmwareHostService hostService, CreatePrivateTemplateFromVolumeCommand cmd); + Answer execute(VmwareHostService hostService, CreatePrivateTemplateFromSnapshotCommand cmd); + Answer execute(VmwareHostService hostService, CopyVolumeCommand cmd); + Answer execute(VmwareHostService hostService, CreateVolumeFromSnapshotCommand cmd); + Answer execute(VmwareHostService hostService, CreateVMSnapshotCommand cmd); + Answer execute(VmwareHostService hostService, DeleteVMSnapshotCommand cmd); + Answer execute(VmwareHostService hostService, RevertToVMSnapshotCommand cmd); } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java index 8650274719e..8be76e8fff2 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.hypervisor.vmware.manager; @@ -22,6 +22,7 @@ import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.rmi.RemoteException; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; @@ -32,18 +33,27 @@ import com.cloud.agent.api.BackupSnapshotAnswer; import com.cloud.agent.api.BackupSnapshotCommand; import com.cloud.agent.api.CreatePrivateTemplateFromSnapshotCommand; import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand; +import com.cloud.agent.api.CreateVMSnapshotAnswer; +import com.cloud.agent.api.CreateVMSnapshotCommand; import com.cloud.agent.api.CreateVolumeFromSnapshotAnswer; import com.cloud.agent.api.CreateVolumeFromSnapshotCommand; +import com.cloud.agent.api.DeleteVMSnapshotAnswer; +import com.cloud.agent.api.DeleteVMSnapshotCommand; +import com.cloud.agent.api.RevertToVMSnapshotAnswer; +import com.cloud.agent.api.RevertToVMSnapshotCommand; import com.cloud.agent.api.storage.CopyVolumeAnswer; import com.cloud.agent.api.storage.CopyVolumeCommand; import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.agent.api.to.VolumeTO; import com.cloud.hypervisor.vmware.mo.CustomFieldConstants; import com.cloud.hypervisor.vmware.mo.DatacenterMO; import com.cloud.hypervisor.vmware.mo.DatastoreMO; +import com.cloud.hypervisor.vmware.mo.HostMO; import com.cloud.hypervisor.vmware.mo.HypervisorHostHelper; +import com.cloud.hypervisor.vmware.mo.TaskMO; import com.cloud.hypervisor.vmware.mo.VirtualMachineMO; import com.cloud.hypervisor.vmware.mo.VmwareHypervisorHost; import com.cloud.hypervisor.vmware.util.VmwareContext; @@ -57,7 +67,11 @@ import com.cloud.utils.Pair; import com.cloud.utils.StringUtils; import com.cloud.utils.Ternary; import com.cloud.utils.script.Script; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.snapshot.VMSnapshot; import com.vmware.vim25.ManagedObjectReference; +import com.vmware.vim25.TaskEvent; +import com.vmware.vim25.TaskInfo; import com.vmware.vim25.VirtualDeviceConfigSpec; import com.vmware.vim25.VirtualDeviceConfigSpecOperation; import com.vmware.vim25.VirtualDisk; @@ -69,24 +83,24 @@ import com.vmware.vim25.VirtualSCSISharing; public class VmwareStorageManagerImpl implements VmwareStorageManager { private static final Logger s_logger = Logger.getLogger(VmwareStorageManagerImpl.class); - + private final VmwareStorageMount _mountService; private final StorageLayer _storage = new JavaStorageLayer(); - + private int _timeout; - + public VmwareStorageManagerImpl(VmwareStorageMount mountService) { assert(mountService != null); _mountService = mountService; } - + public void configure(Map params) { s_logger.info("Configure VmwareStorageManagerImpl"); - + String value = (String)params.get("scripts.timeout"); _timeout = NumbersUtil.parseInt(value, 1440) * 1000; } - + @Override public Answer execute(VmwareHostService hostService, PrimaryStorageDownloadCommand cmd) { String secondaryStorageUrl = cmd.getSecondaryStorageUrl(); @@ -116,18 +130,18 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { } templateName = cmd.getName(); } - + VmwareContext context = hostService.getServiceContext(cmd); try { VmwareHypervisorHost hyperHost = hostService.getHyperHost(context, cmd); - - String templateUuidName = UUID.nameUUIDFromBytes((templateName + "@" + cmd.getPoolUuid() + "-" + hyperHost.getMor().get_value()).getBytes()).toString(); + + String templateUuidName = UUID.nameUUIDFromBytes((templateName + "@" + cmd.getPoolUuid() + "-" + hyperHost.getMor().getValue()).getBytes()).toString(); // truncate template name to 32 chars to ensure they work well with vSphere API's. - templateUuidName = templateUuidName.replace("-", ""); - + templateUuidName = templateUuidName.replace("-", ""); + DatacenterMO dcMo = new DatacenterMO(context, hyperHost.getHyperHostDatacenter()); VirtualMachineMO templateMo = VmwareHelper.pickOneVmOnRunningHost(dcMo.findVmByNameAndLabel(templateUuidName), true); - + if (templateMo == null) { if(s_logger.isInfoEnabled()) s_logger.info("Template " + templateName + " is not setup yet, setup template from secondary storage with uuid name: " + templateUuidName); @@ -153,7 +167,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { return new PrimaryStorageDownloadAnswer(msg); } } - + @Override public Answer execute(VmwareHostService hostService, BackupSnapshotCommand cmd) { Long accountId = cmd.getAccountId(); @@ -184,15 +198,15 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { if (vmMo == null) { if(s_logger.isDebugEnabled()) s_logger.debug("Unable to find owner VM for BackupSnapshotCommand on host " + hyperHost.getHyperHostName() + ", will try within datacenter"); - + vmMo = hyperHost.findVmOnPeerHyperHost(cmd.getVmName()); if(vmMo == null) { dsMo = new DatastoreMO(hyperHost.getContext(), morDs); - + workerVMName = hostService.getWorkerName(context, cmd, 0); - + // attach a volume to dummay wrapper VM for taking snapshot and exporting the VM for backup - if (!hyperHost.createBlankVm(workerVMName, 1, 512, 0, false, 4, 0, VirtualMachineGuestOsIdentifier._otherGuest.toString(), morDs, false)) { + if (!hyperHost.createBlankVm(workerVMName, 1, 512, 0, false, 4, 0, VirtualMachineGuestOsIdentifier.OTHER_GUEST.value(), morDs, false)) { String msg = "Unable to create worker VM to execute BackupSnapshotCommand"; s_logger.error(msg); throw new Exception(msg); @@ -202,17 +216,17 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { throw new Exception("Failed to find the newly create or relocated VM. vmName: " + workerVMName); } workerVm = vmMo; - + // attach volume to worker VM String datastoreVolumePath = String.format("[%s] %s.vmdk", dsMo.getName(), volumePath); vmMo.attachDisk(new String[] { datastoreVolumePath }, morDs); - } - } - + } + } + if (!vmMo.createSnapshot(snapshotUuid, "Snapshot taken for " + cmd.getSnapshotName(), false, false)) { throw new Exception("Failed to take snapshot " + cmd.getSnapshotName() + " on vm: " + cmd.getVmName()); } - + snapshotBackupUuid = backupSnapshotToSecondaryStorage(vmMo, accountId, volumeId, cmd.getVolumePath(), snapshotUuid, secondaryStorageUrl, prevSnapshotUuid, prevBackupUuid, hostService.getWorkerName(context, cmd, 1)); @@ -220,11 +234,15 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { if (success) { details = "Successfully backedUp the snapshotUuid: " + snapshotUuid + " to secondary storage."; } - + } finally { - if(vmMo != null) - vmMo.removeAllSnapshots(); - + if(vmMo != null){ + ManagedObjectReference snapshotMor = vmMo.getSnapshotMor(snapshotUuid); + if (snapshotMor != null){ + vmMo.removeSnapshot(snapshotUuid, false); + } + } + try { if (workerVm != null) { // detach volume and destroy worker vm @@ -233,7 +251,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { } } catch (Throwable e) { s_logger.warn("Failed to destroy worker VM: " + workerVMName); - } + } } } catch (Throwable e) { if (e instanceof RemoteException) { @@ -260,7 +278,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { VmwareContext context = hostService.getServiceContext(cmd); try { VmwareHypervisorHost hyperHost = hostService.getHyperHost(context, cmd); - + VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(cmd.getVmName()); if (vmMo == null) { if(s_logger.isDebugEnabled()) @@ -276,7 +294,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { Ternary result = createTemplateFromVolume(vmMo, accountId, templateId, cmd.getUniqueName(), - secondaryStoragePoolURL, volumePath, + secondaryStoragePoolURL, volumePath, hostService.getWorkerName(context, cmd, 0)); return new CreatePrivateTemplateAnswer(cmd, true, null, @@ -326,7 +344,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { return new CreatePrivateTemplateAnswer(cmd, false, details); } } - + @Override public Answer execute(VmwareHostService hostService, CopyVolumeCommand cmd) { Long volumeId = cmd.getVolumeId(); @@ -375,7 +393,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { return new CopyVolumeAnswer(cmd, false, "CopyVolumeCommand failed due to exception: " + StringUtils.getExceptionStackInfo(e), null, null); } } - + @Override public Answer execute(VmwareHostService hostService, CreateVolumeFromSnapshotCommand cmd) { @@ -392,8 +410,8 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { VmwareContext context = hostService.getServiceContext(cmd); try { VmwareHypervisorHost hyperHost = hostService.getHyperHost(context, cmd); - - ManagedObjectReference morPrimaryDs = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, primaryStorageNameLabel); + ManagedObjectReference morPrimaryDs = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, + primaryStorageNameLabel); if (morPrimaryDs == null) { String msg = "Unable to find datastore: " + primaryStorageNameLabel; s_logger.error(msg); @@ -417,22 +435,22 @@ 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, String templateUuid) throws Exception { - - s_logger.info("Executing copyTemplateFromSecondaryToPrimary. secondaryStorage: " + + s_logger.info("Executing copyTemplateFromSecondaryToPrimary. secondaryStorage: " + secondaryStorageUrl + ", templatePathAtSecondaryStorage: " + templatePathAtSecondaryStorage + ", templateName: " + templateName); - + String secondaryMountPoint = _mountService.getMountPoint(secondaryStorageUrl); s_logger.info("Secondary storage mount point: " + secondaryMountPoint); - - String srcOVAFileName = secondaryMountPoint + "/" + templatePathAtSecondaryStorage + + + String srcOVAFileName = secondaryMountPoint + "/" + templatePathAtSecondaryStorage + templateName + "." + ImageFormat.OVA.getFileExtension(); - + String srcFileName = getOVFFilePath(srcOVAFileName); if(srcFileName == null) { Script command = new Script("tar", 0, s_logger); @@ -447,40 +465,40 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { throw new Exception(msg); } } - + srcFileName = getOVFFilePath(srcOVAFileName); - if(srcFileName == null) { - String msg = "Unable to locate OVF file in template package directory: " + 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 = templateUuid; hyperHost.importVmFromOVF(srcFileName, vmName, datastoreMo, "thin"); - + VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(vmName); if(vmMo == null) { - String msg = "Failed to import OVA template. secondaryStorage: " + String msg = "Failed to import OVA template. secondaryStorage: " + secondaryStorageUrl + ", templatePathAtSecondaryStorage: " + templatePathAtSecondaryStorage + ", 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, templateUuid); vmMo.markAsTemplate(); } else { vmMo.destroy(); - String msg = "Unable to create base snapshot for template, templateName: " + templateName + ", templateUuid: " + templateUuid; + String msg = "Unable to create base snapshot for template, templateName: " + templateName + ", templateUuid: " + templateUuid; s_logger.error(msg); throw new Exception(msg); } } - - private Ternary createTemplateFromVolume(VirtualMachineMO vmMo, long accountId, long templateId, String templateUniqueName, + + private Ternary createTemplateFromVolume(VirtualMachineMO vmMo, long accountId, long templateId, String templateUniqueName, String secStorageUrl, String volumePath, String workerVmName) throws Exception { - + String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl); String installPath = getTemplateRelativeDirInSecStorage(accountId, templateId); String installFullPath = secondaryMountPoint + "/" + installPath; @@ -488,16 +506,16 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { Script command = new Script(false, "mkdir", _timeout, s_logger); command.add("-p"); command.add(installFullPath); - + String result = command.execute(); if(result != null) { - String msg = "unable to prepare template directory: " + String msg = "unable to prepare template directory: " + installPath + ", storage: " + secStorageUrl + ", error msg: " + result; s_logger.error(msg); throw new Exception(msg); } } - + VirtualMachineMO clonedVm = null; try { Pair volumeDeviceInfo = vmMo.getDiskDevice(volumePath, false); @@ -506,15 +524,15 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { s_logger.error(msg); throw new Exception(msg); } - + if(!vmMo.createSnapshot(templateUniqueName, "Temporary snapshot for template creation", false, false)) { String msg = "Unable to take snapshot for creating template from volume. volume path: " + volumePath; s_logger.error(msg); throw new Exception(msg); } - + // 4 MB is the minimum requirement for VM memory in VMware - vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), + vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first())); clonedVm = vmMo.getRunningHost().findVmOnHyperHost(workerVmName); if(clonedVm == null) { @@ -522,9 +540,9 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { s_logger.error(msg); throw new Exception(msg); } - + clonedVm.exportVm(secondaryMountPoint + "/" + installPath, templateUniqueName, true, false); - + long physicalSize = new File(installFullPath + "/" + templateUniqueName + ".ova").length(); VmdkProcessor processor = new VmdkProcessor(); Map params = new HashMap(); @@ -534,54 +552,54 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { postCreatePrivateTemplate(installFullPath, templateId, templateUniqueName, physicalSize, virtualSize); return new Ternary(installPath + "/" + templateUniqueName + ".ova", physicalSize, virtualSize); - + } finally { if(clonedVm != null) { clonedVm.detachAllDisks(); clonedVm.destroy(); } - + vmMo.removeSnapshot(templateUniqueName, false); } } - - private Ternary createTemplateFromSnapshot(long accountId, long templateId, String templateUniqueName, + + private Ternary createTemplateFromSnapshot(long accountId, long templateId, String templateUniqueName, String secStorageUrl, long volumeId, String backedUpSnapshotUuid) throws Exception { - + String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl); String installPath = getTemplateRelativeDirInSecStorage(accountId, templateId); String installFullPath = secondaryMountPoint + "/" + installPath; String installFullName = installFullPath + "/" + templateUniqueName + ".ova"; - String snapshotFullName = secondaryMountPoint + "/" + getSnapshotRelativeDirInSecStorage(accountId, volumeId) + String snapshotFullName = secondaryMountPoint + "/" + getSnapshotRelativeDirInSecStorage(accountId, volumeId) + "/" + backedUpSnapshotUuid + ".ova"; String result; Script command; - + synchronized(installPath.intern()) { command = new Script(false, "mkdir", _timeout, s_logger); command.add("-p"); command.add(installFullPath); - + result = command.execute(); if(result != null) { - String msg = "unable to prepare template directory: " + String msg = "unable to prepare template directory: " + installPath + ", storage: " + secStorageUrl + ", error msg: " + result; s_logger.error(msg); throw new Exception(msg); } } - + try { command = new Script(false, "cp", _timeout, s_logger); command.add(snapshotFullName); command.add(installFullName); result = command.execute(); if(result != null) { - String msg = "unable to copy snapshot " + snapshotFullName + " to " + installFullPath; + String msg = "unable to copy snapshot " + snapshotFullName + " to " + installFullPath; s_logger.error(msg); throw new Exception(msg); } - + // untar OVA file at template directory command = new Script("tar", 0, s_logger); command.add("--no-same-owner"); @@ -590,12 +608,12 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { s_logger.info("Executing command: " + command.toString()); result = command.execute(); if(result != null) { - String msg = "unable to untar snapshot " + snapshotFullName + " to " - + installFullPath; + String msg = "unable to untar snapshot " + snapshotFullName + " to " + + installFullPath; s_logger.error(msg); throw new Exception(msg); } - + long physicalSize = new File(installFullPath + "/" + templateUniqueName + ".ova").length(); VmdkProcessor processor = new VmdkProcessor(); Map params = new HashMap(); @@ -605,45 +623,45 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { postCreatePrivateTemplate(installFullPath, templateId, templateUniqueName, physicalSize, virtualSize); return new Ternary(installPath + "/" + templateUniqueName + ".ova", physicalSize, virtualSize); - + } catch(Exception e) { // TODO, clean up left over files throw e; } } - - private void postCreatePrivateTemplate(String installFullPath, long templateId, + + private void postCreatePrivateTemplate(String installFullPath, long templateId, String templateName, long size, long virtualSize) throws Exception { // TODO a bit ugly here BufferedWriter out = null; try { out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(installFullPath + "/template.properties"))); - out.write("filename=" + templateName + ".ova"); + out.write("filename=" + templateName + ".ova"); out.newLine(); - out.write("description="); + out.write("description="); out.newLine(); - out.write("checksum="); + out.write("checksum="); out.newLine(); - out.write("hvm=false"); + out.write("hvm=false"); out.newLine(); - out.write("size=" + size); + out.write("size=" + size); out.newLine(); - out.write("ova=true"); + out.write("ova=true"); out.newLine(); - out.write("id=" + templateId); + out.write("id=" + templateId); out.newLine(); - out.write("public=false"); + out.write("public=false"); out.newLine(); - out.write("ova.filename=" + templateName + ".ova"); + out.write("ova.filename=" + templateName + ".ova"); out.newLine(); out.write("uniquename=" + templateName); out.newLine(); - out.write("ova.virtualsize=" + virtualSize); + out.write("ova.virtualsize=" + virtualSize); out.newLine(); - out.write("virtualsize=" + virtualSize); + out.write("virtualsize=" + virtualSize); out.newLine(); - out.write("ova.size=" + size); + out.write("ova.size=" + size); out.newLine(); } finally { if(out != null) @@ -651,21 +669,21 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { } } - private String createVolumeFromSnapshot(VmwareHypervisorHost hyperHost, DatastoreMO primaryDsMo, String newVolumeName, + private String createVolumeFromSnapshot(VmwareHypervisorHost hyperHost, DatastoreMO primaryDsMo, String newVolumeName, long accountId, long volumeId, String secStorageUrl, String snapshotBackupUuid) throws Exception { - - restoreVolumeFromSecStorage(hyperHost, primaryDsMo, newVolumeName, + + restoreVolumeFromSecStorage(hyperHost, primaryDsMo, newVolumeName, secStorageUrl, getSnapshotRelativeDirInSecStorage(accountId, volumeId), snapshotBackupUuid); return null; } - - private void restoreVolumeFromSecStorage(VmwareHypervisorHost hyperHost, DatastoreMO primaryDsMo, String newVolumeName, + + private void restoreVolumeFromSecStorage(VmwareHypervisorHost hyperHost, DatastoreMO primaryDsMo, String newVolumeName, String secStorageUrl, String secStorageDir, String backupName) throws Exception { - + String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl); - String srcOVAFileName = secondaryMountPoint + "/" + secStorageDir + "/" + String srcOVAFileName = secondaryMountPoint + "/" + secStorageDir + "/" + backupName + "." + ImageFormat.OVA.getFileExtension(); - + String srcFileName = getOVFFilePath(srcOVAFileName); if(srcFileName == null) { Script command = new Script("tar", 0, s_logger); @@ -680,21 +698,21 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { throw new Exception(msg); } } - + srcFileName = getOVFFilePath(srcOVAFileName); if(srcFileName == null) { - String msg = "Unable to locate OVF file in template package directory: " + srcOVAFileName; + String msg = "Unable to locate OVF file in template package directory: " + srcOVAFileName; s_logger.error(msg); throw new Exception(msg); } - + VirtualMachineMO clonedVm = null; try { hyperHost.importVmFromOVF(srcFileName, newVolumeName, primaryDsMo, "thin"); clonedVm = hyperHost.findVmOnHyperHost(newVolumeName); if(clonedVm == null) throw new Exception("Unable to create container VM for volume creation"); - + clonedVm.moveAllVmDiskFiles(primaryDsMo, "", false); clonedVm.detachAllDisks(); } finally { @@ -704,24 +722,24 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { } } } - - private String backupSnapshotToSecondaryStorage(VirtualMachineMO vmMo, long accountId, long volumeId, - String volumePath, String snapshotUuid, String secStorageUrl, + + private String backupSnapshotToSecondaryStorage(VirtualMachineMO vmMo, long accountId, long volumeId, + String volumePath, String snapshotUuid, String secStorageUrl, String prevSnapshotUuid, String prevBackupUuid, String workerVmName) throws Exception { - + String backupUuid = UUID.randomUUID().toString(); - exportVolumeToSecondaryStroage(vmMo, volumePath, secStorageUrl, + exportVolumeToSecondaryStroage(vmMo, volumePath, secStorageUrl, getSnapshotRelativeDirInSecStorage(accountId, volumeId), backupUuid, workerVmName); return backupUuid; } - - private void exportVolumeToSecondaryStroage(VirtualMachineMO vmMo, String volumePath, + + private void exportVolumeToSecondaryStroage(VirtualMachineMO vmMo, String volumePath, String secStorageUrl, String secStorageDir, String exportName, String workerVmName) throws Exception { - + String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl); String exportPath = secondaryMountPoint + "/" + secStorageDir; - + synchronized(exportPath.intern()) { if(!new File(exportPath).exists()) { Script command = new Script(false, "mkdir", _timeout, s_logger); @@ -734,16 +752,16 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { VirtualMachineMO clonedVm = null; try { - + Pair volumeDeviceInfo = vmMo.getDiskDevice(volumePath, false); if(volumeDeviceInfo == null) { String msg = "Unable to find related disk device for volume. volume path: " + volumePath; s_logger.error(msg); throw new Exception(msg); } - + // 4 MB is the minimum requirement for VM memory in VMware - vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), + vmMo.cloneFromCurrentSnapshot(workerVmName, 0, 4, volumeDeviceInfo.second(), VmwareHelper.getDiskDeviceDatastore(volumeDeviceInfo.first())); clonedVm = vmMo.getRunningHost().findVmOnHyperHost(workerVmName); if(clonedVm == null) { @@ -751,7 +769,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { s_logger.error(msg); throw new Exception(msg); } - + clonedVm.exportVm(exportPath, exportName, true, true); } finally { if(clonedVm != null) { @@ -760,7 +778,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { } } } - + private String deleteSnapshotOnSecondaryStorge(long accountId, long volumeId, String secStorageUrl, String backupUuid) throws Exception { String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl); @@ -769,18 +787,18 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { if(file.exists()) { if(file.delete()) return null; - + } else { return "Backup file does not exist. backupUuid: " + backupUuid; } - + return "Failed to delete snapshot backup file, backupUuid: " + backupUuid; } - - private Pair copyVolumeToSecStorage(VmwareHostService hostService, VmwareHypervisorHost hyperHost, CopyVolumeCommand cmd, - String vmName, long volumeId, String poolId, String volumePath, + + private Pair copyVolumeToSecStorage(VmwareHostService hostService, VmwareHypervisorHost hyperHost, CopyVolumeCommand cmd, + String vmName, long volumeId, String poolId, String volumePath, String secStorageUrl, String workerVmName) throws Exception { - + String volumeFolder = String.valueOf(volumeId) + "/"; VirtualMachineMO workerVm=null; VirtualMachineMO vmMo=null; @@ -804,21 +822,21 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { vmConfig.setName(workerVmName); vmConfig.setMemoryMB((long) 4); vmConfig.setNumCPUs(1); - vmConfig.setGuestId(VirtualMachineGuestOsIdentifier._otherGuest.toString()); + vmConfig.setGuestId(VirtualMachineGuestOsIdentifier.OTHER_GUEST.value()); VirtualMachineFileInfo fileInfo = new VirtualMachineFileInfo(); fileInfo.setVmPathName(String.format("[%s]", dsMo.getName())); vmConfig.setFiles(fileInfo); // Scsi controller VirtualLsiLogicController scsiController = new VirtualLsiLogicController(); - scsiController.setSharedBus(VirtualSCSISharing.noSharing); + scsiController.setSharedBus(VirtualSCSISharing.NO_SHARING); scsiController.setBusNumber(0); scsiController.setKey(1); VirtualDeviceConfigSpec scsiControllerSpec = new VirtualDeviceConfigSpec(); scsiControllerSpec.setDevice(scsiController); - scsiControllerSpec.setOperation(VirtualDeviceConfigSpecOperation.add); - vmConfig.setDeviceChange(new VirtualDeviceConfigSpec[] { scsiControllerSpec }); - + scsiControllerSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD); + vmConfig.getDeviceChange().add(scsiControllerSpec); + hyperHost.createVm(vmConfig); workerVm = hyperHost.findVmOnHyperHost(workerVmName); if (workerVm == null) { @@ -826,7 +844,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { s_logger.error(msg); throw new Exception(msg); } - + //attach volume to worker VM String datastoreVolumePath = String.format("[%s] %s.vmdk", dsMo.getName(), volumePath); workerVm.attachDisk(new String[] { datastoreVolumePath }, morDs); @@ -835,7 +853,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { vmMo.createSnapshot(exportName, "Temporary snapshot for copy-volume command", false, false); - exportVolumeToSecondaryStroage(vmMo, volumePath, secStorageUrl, "volumes/" + volumeFolder, exportName, + exportVolumeToSecondaryStroage(vmMo, volumePath, secStorageUrl, "volumes/" + volumeFolder, exportName, hostService.getWorkerName(hyperHost.getContext(), cmd, 1)); return new Pair(volumeFolder, exportName); @@ -849,16 +867,16 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { } } - private Pair copyVolumeFromSecStorage(VmwareHypervisorHost hyperHost, long volumeId, + private Pair copyVolumeFromSecStorage(VmwareHypervisorHost hyperHost, long volumeId, DatastoreMO dsMo, String secStorageUrl, String exportName) throws Exception { String volumeFolder = String.valueOf(volumeId) + "/"; String newVolume = UUID.randomUUID().toString().replaceAll("-", ""); restoreVolumeFromSecStorage(hyperHost, dsMo, newVolume, secStorageUrl, "volumes/" + volumeFolder, exportName); - + return new Pair(volumeFolder, newVolume); } - + private String getOVFFilePath(String srcOVAFileName) { File file = new File(srcOVAFileName); assert(_storage != null); @@ -873,12 +891,252 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { } return null; } - + private static String getTemplateRelativeDirInSecStorage(long accountId, long templateId) { return "template/tmpl/" + accountId + "/" + templateId; } - + private static String getSnapshotRelativeDirInSecStorage(long accountId, long volumeId) { return "snapshots/" + accountId + "/" + volumeId; } + + @Override + public CreateVMSnapshotAnswer execute(VmwareHostService hostService, CreateVMSnapshotCommand cmd) { + List volumeTOs = cmd.getVolumeTOs(); + String vmName = cmd.getVmName(); + String vmSnapshotName = cmd.getTarget().getSnapshotName(); + String vmSnapshotDesc = cmd.getTarget().getDescription(); + boolean snapshotMemory = cmd.getTarget().getType() == VMSnapshot.Type.DiskAndMemory; + VirtualMachineMO vmMo = null; + VmwareContext context = hostService.getServiceContext(cmd); + Map mapNewDisk = new HashMap(); + try { + VmwareHypervisorHost hyperHost = hostService.getHyperHost(context, cmd); + + // wait if there are already VM snapshot task running + ManagedObjectReference taskmgr = context.getServiceContent().getTaskManager(); + ManagedObjectReference[] tasks = (ManagedObjectReference[]) context.getVimClient().getDynamicProperty(taskmgr, "recentTask"); + for (ManagedObjectReference taskMor : tasks) { + TaskInfo info = (TaskInfo) (context.getVimClient().getDynamicProperty(taskMor, "info")); + if(info.getEntityName().equals(cmd.getVmName()) && info.getName().equalsIgnoreCase("CreateSnapshot_Task")){ + s_logger.debug("There is already a VM snapshot task running, wait for it"); + context.getVimClient().waitForTask(taskMor); + } + } + + vmMo = hyperHost.findVmOnHyperHost(vmName); + if(vmMo == null) + vmMo = hyperHost.findVmOnPeerHyperHost(vmName); + if (vmMo == null) { + String msg = "Unable to find VM for CreateVMSnapshotCommand"; + s_logger.debug(msg); + return new CreateVMSnapshotAnswer(cmd, false, msg); + } else { + if (vmMo.getSnapshotMor(vmSnapshotName) != null){ + s_logger.debug("VM snapshot " + vmSnapshotName + " already exists"); + }else if (!vmMo.createSnapshot(vmSnapshotName, vmSnapshotDesc, snapshotMemory, true)) { + return new CreateVMSnapshotAnswer(cmd, false, + "Unable to create snapshot due to esxi internal failed"); + } + // find VM disk file path after creating snapshot + VirtualDisk[] vdisks = vmMo.getAllDiskDevice(); + for (int i = 0; i < vdisks.length; i ++){ + @SuppressWarnings("deprecation") + List> vmdkFiles = vmMo.getDiskDatastorePathChain(vdisks[i], false); + for(Pair fileItem : vmdkFiles) { + String vmdkName = fileItem.first().split(" ")[1]; + if ( vmdkName.endsWith(".vmdk")){ + vmdkName = vmdkName.substring(0, vmdkName.length() - (".vmdk").length()); + } + String[] s = vmdkName.split("-"); + mapNewDisk.put(s[0], vmdkName); + } + } + + // update volume path using maps + for (VolumeTO volumeTO : volumeTOs) { + String parentUUID = volumeTO.getPath(); + String[] s = parentUUID.split("-"); + String key = s[0]; + volumeTO.setPath(mapNewDisk.get(key)); + } + return new CreateVMSnapshotAnswer(cmd, cmd.getTarget(), volumeTOs); + } + } catch (Exception e) { + String msg = e.getMessage(); + s_logger.error("failed to create snapshot for vm:" + vmName + " due to " + msg); + try { + if (vmMo.getSnapshotMor(vmSnapshotName) != null) { + vmMo.removeSnapshot(vmSnapshotName, false); + } + } catch (Exception e1) { + } + return new CreateVMSnapshotAnswer(cmd, false, e.getMessage()); + } + } + + @Override + public DeleteVMSnapshotAnswer execute(VmwareHostService hostService, DeleteVMSnapshotCommand cmd) { + List listVolumeTo = cmd.getVolumeTOs(); + VirtualMachineMO vmMo = null; + VmwareContext context = hostService.getServiceContext(cmd); + Map mapNewDisk = new HashMap(); + String vmName = cmd.getVmName(); + String vmSnapshotName = cmd.getTarget().getSnapshotName(); + try { + VmwareHypervisorHost hyperHost = hostService.getHyperHost(context, cmd); + vmMo = hyperHost.findVmOnHyperHost(vmName); + if(vmMo == null) + vmMo = hyperHost.findVmOnPeerHyperHost(vmName); + if (vmMo == null) { + String msg = "Unable to find VM for RevertToVMSnapshotCommand"; + s_logger.debug(msg); + return new DeleteVMSnapshotAnswer(cmd, false, msg); + } else { + if (vmMo.getSnapshotMor(vmSnapshotName) == null) { + s_logger.debug("can not find the snapshot " + vmSnapshotName + ", assume it is already removed"); + } else { + if (!vmMo.removeSnapshot(vmSnapshotName, false)) { + String msg = "delete vm snapshot " + vmSnapshotName + " due to error occured in vmware"; + s_logger.error(msg); + return new DeleteVMSnapshotAnswer(cmd, false, msg); + } + } + s_logger.debug("snapshot: " + vmSnapshotName + " is removed"); + // after removed snapshot, the volumes' paths have been changed for the VM, needs to report new paths to manager + VirtualDisk[] vdisks = vmMo.getAllDiskDevice(); + for (int i = 0; i < vdisks.length; i++) { + @SuppressWarnings("deprecation") + List> vmdkFiles = vmMo.getDiskDatastorePathChain(vdisks[i], false); + for (Pair fileItem : vmdkFiles) { + String vmdkName = fileItem.first().split(" ")[1]; + if (vmdkName.endsWith(".vmdk")) { + vmdkName = vmdkName.substring(0, vmdkName.length() - (".vmdk").length()); + } + String[] s = vmdkName.split("-"); + mapNewDisk.put(s[0], vmdkName); + } + } + for (VolumeTO volumeTo : listVolumeTo) { + String key = null; + String parentUUID = volumeTo.getPath(); + String[] s = parentUUID.split("-"); + key = s[0]; + volumeTo.setPath(mapNewDisk.get(key)); + } + return new DeleteVMSnapshotAnswer(cmd, listVolumeTo); + } + } catch (Exception e) { + String msg = e.getMessage(); + s_logger.error("failed to delete vm snapshot " + vmSnapshotName + " of vm " + vmName + " due to " + msg); + return new DeleteVMSnapshotAnswer(cmd, false, msg); + } + } + + @Override + public RevertToVMSnapshotAnswer execute(VmwareHostService hostService, RevertToVMSnapshotCommand cmd) { + String snapshotName = cmd.getTarget().getSnapshotName(); + String vmName = cmd.getVmName(); + Boolean snapshotMemory = cmd.getTarget().getType() == VMSnapshot.Type.DiskAndMemory; + List listVolumeTo = cmd.getVolumeTOs(); + VirtualMachine.State vmState = VirtualMachine.State.Running; + VirtualMachineMO vmMo = null; + VmwareContext context = hostService.getServiceContext(cmd); + Map mapNewDisk = new HashMap(); + try { + VmwareHypervisorHost hyperHost = hostService.getHyperHost(context, cmd); + + // wait if there are already VM revert task running + ManagedObjectReference taskmgr = context.getServiceContent().getTaskManager(); + ManagedObjectReference[] tasks = (ManagedObjectReference[]) context.getVimClient().getDynamicProperty(taskmgr, "recentTask"); + for (ManagedObjectReference taskMor : tasks) { + TaskInfo info = (TaskInfo) (context.getVimClient().getDynamicProperty(taskMor, "info")); + if(info.getEntityName().equals(cmd.getVmName()) && info.getName().equalsIgnoreCase("RevertToSnapshot_Task")){ + s_logger.debug("There is already a VM snapshot task running, wait for it"); + context.getVimClient().waitForTask(taskMor); + } + } + + HostMO hostMo = (HostMO) hyperHost; + vmMo = hyperHost.findVmOnHyperHost(vmName); + if(vmMo == null) + vmMo = hyperHost.findVmOnPeerHyperHost(vmName); + if (vmMo == null) { + String msg = "Unable to find VM for RevertToVMSnapshotCommand"; + s_logger.debug(msg); + return new RevertToVMSnapshotAnswer(cmd, false, msg); + } else { + boolean result = false; + if (snapshotName != null) { + ManagedObjectReference morSnapshot = vmMo.getSnapshotMor(snapshotName); + result = hostMo.revertToSnapshot(morSnapshot); + } else { + return new RevertToVMSnapshotAnswer(cmd, false, "Unable to find the snapshot by name " + snapshotName); + } + + if (result) { + VirtualDisk[] vdisks = vmMo.getAllDiskDevice(); + // build a map + for (int i = 0; i < vdisks.length; i++) { + @SuppressWarnings("deprecation") + List> vmdkFiles = vmMo.getDiskDatastorePathChain( + vdisks[i], false); + for (Pair fileItem : vmdkFiles) { + String vmdkName = fileItem.first().split(" ")[1]; + if (vmdkName.endsWith(".vmdk")) { + vmdkName = vmdkName.substring(0, vmdkName.length() - (".vmdk").length()); + } + String[] s = vmdkName.split("-"); + mapNewDisk.put(s[0], vmdkName); + } + } + String key = null; + for (VolumeTO volumeTo : listVolumeTo) { + String parentUUID = volumeTo.getPath(); + String[] s = parentUUID.split("-"); + key = s[0]; + volumeTo.setPath(mapNewDisk.get(key)); + } + if (!snapshotMemory) { + vmState = VirtualMachine.State.Stopped; + } + return new RevertToVMSnapshotAnswer(cmd, listVolumeTo, vmState); + } else { + return new RevertToVMSnapshotAnswer(cmd, false, + "Error while reverting to snapshot due to execute in esxi"); + } + } + } catch (Exception e) { + String msg = "revert vm " + vmName + " to snapshot " + snapshotName + " failed due to " + e.getMessage(); + s_logger.error(msg); + return new RevertToVMSnapshotAnswer(cmd, false, msg); + } + } + + + private VirtualMachineMO createWorkingVM(DatastoreMO dsMo, VmwareHypervisorHost hyperHost) throws Exception { + String uniqueName = UUID.randomUUID().toString(); + VirtualMachineMO workingVM = null; + VirtualMachineConfigSpec vmConfig = new VirtualMachineConfigSpec(); + vmConfig.setName(uniqueName); + vmConfig.setMemoryMB((long) 4); + vmConfig.setNumCPUs(1); + vmConfig.setGuestId(VirtualMachineGuestOsIdentifier.OTHER_GUEST.toString()); + VirtualMachineFileInfo fileInfo = new VirtualMachineFileInfo(); + fileInfo.setVmPathName(String.format("[%s]", dsMo.getName())); + vmConfig.setFiles(fileInfo); + + VirtualLsiLogicController scsiController = new VirtualLsiLogicController(); + scsiController.setSharedBus(VirtualSCSISharing.NO_SHARING); + scsiController.setBusNumber(0); + scsiController.setKey(1); + VirtualDeviceConfigSpec scsiControllerSpec = new VirtualDeviceConfigSpec(); + scsiControllerSpec.setDevice(scsiController); + scsiControllerSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD); + + vmConfig.getDeviceChange().add(scsiControllerSpec); + hyperHost.createVm(vmConfig); + workingVM = hyperHost.findVmOnHyperHost(uniqueName); + return workingVM; + } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java index ab10e5e5ef1..5db9da3c02d 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareContextFactory.java @@ -11,32 +11,41 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.hypervisor.vmware.resource; +import javax.annotation.PostConstruct; +import javax.inject.Inject; + import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.hypervisor.vmware.manager.VmwareManager; -import com.cloud.hypervisor.vmware.manager.VmwareManagerImpl; +import com.cloud.hypervisor.vmware.util.VmwareClient; import com.cloud.hypervisor.vmware.util.VmwareContext; import com.cloud.utils.StringUtils; -import com.cloud.utils.component.ComponentContext; - -import com.vmware.apputils.version.ExtendedAppUtil; +@Component public class VmwareContextFactory { - + private static final Logger s_logger = Logger.getLogger(VmwareContextFactory.class); - + private static volatile int s_seq = 1; private static VmwareManager s_vmwareMgr; - + + @Inject VmwareManager _vmwareMgr; + static { // skip certificate check System.setProperty("axis.socketSecureFactory", "org.apache.axis.components.net.SunFakeTrustSocketFactory"); - s_vmwareMgr = ComponentContext.inject(VmwareManagerImpl.class); + //s_vmwareMgr = ComponentContext.inject(VmwareManagerImpl.class); + } + + @PostConstruct + void init() { + s_vmwareMgr = _vmwareMgr; } public static VmwareContext create(String vCenterAddress, String vCenterUserName, String vCenterPassword) throws Exception { @@ -45,17 +54,17 @@ public class VmwareContextFactory { assert(vCenterPassword != null); String serviceUrl = "https://" + vCenterAddress + "/sdk/vimService"; - String[] params = new String[] {"--url", serviceUrl, "--username", vCenterUserName, "--password", vCenterPassword }; + //String[] params = new String[] {"--url", serviceUrl, "--username", vCenterUserName, "--password", vCenterPassword }; if(s_logger.isDebugEnabled()) s_logger.debug("initialize VmwareContext. url: " + serviceUrl + ", username: " + vCenterUserName + ", password: " + StringUtils.getMaskedPasswordForDisplay(vCenterPassword)); - - ExtendedAppUtil appUtil = ExtendedAppUtil.initialize(vCenterAddress + "-" + s_seq++, params); - - appUtil.connect(); - VmwareContext context = new VmwareContext(appUtil, vCenterAddress); + + VmwareClient vimClient = new VmwareClient(vCenterAddress + "-" + s_seq++); + vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword); + + VmwareContext context = new VmwareContext(vimClient, vCenterAddress); context.registerStockObject(VmwareManager.CONTEXT_STOCK_NAME, s_vmwareMgr); - + context.registerStockObject("serviceconsole", s_vmwareMgr.getServiceConsolePortGroupName()); context.registerStockObject("manageportgroup", s_vmwareMgr.getManagementPortGroupName()); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index a1b1336a2c9..155d6d9718f 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.hypervisor.vmware.resource; @@ -24,6 +24,7 @@ import java.net.URI; import java.nio.channels.SocketChannel; import java.rmi.RemoteException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -65,9 +66,13 @@ import com.cloud.agent.api.Command; import com.cloud.agent.api.CreatePrivateTemplateFromSnapshotCommand; import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand; import com.cloud.agent.api.CreateStoragePoolCommand; +import com.cloud.agent.api.CreateVMSnapshotAnswer; +import com.cloud.agent.api.CreateVMSnapshotCommand; import com.cloud.agent.api.CreateVolumeFromSnapshotAnswer; import com.cloud.agent.api.CreateVolumeFromSnapshotCommand; import com.cloud.agent.api.DeleteStoragePoolCommand; +import com.cloud.agent.api.DeleteVMSnapshotAnswer; +import com.cloud.agent.api.DeleteVMSnapshotCommand; import com.cloud.agent.api.GetDomRVersionAnswer; import com.cloud.agent.api.GetDomRVersionCmd; import com.cloud.agent.api.GetHostStatsAnswer; @@ -103,6 +108,8 @@ import com.cloud.agent.api.ReadyCommand; import com.cloud.agent.api.RebootAnswer; import com.cloud.agent.api.RebootCommand; import com.cloud.agent.api.RebootRouterCommand; +import com.cloud.agent.api.RevertToVMSnapshotAnswer; +import com.cloud.agent.api.RevertToVMSnapshotCommand; import com.cloud.agent.api.SetupAnswer; import com.cloud.agent.api.SetupCommand; import com.cloud.agent.api.SetupGuestNetworkAnswer; @@ -153,6 +160,8 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; +import com.cloud.agent.api.storage.ResizeVolumeCommand; import com.cloud.agent.api.to.FirewallRuleTO; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.NicTO; @@ -184,6 +193,7 @@ import com.cloud.hypervisor.vmware.mo.VirtualSwitchType; import com.cloud.hypervisor.vmware.mo.VmwareHypervisorHost; import com.cloud.hypervisor.vmware.mo.VmwareHypervisorHostNetworkSummary; import com.cloud.hypervisor.vmware.mo.VmwareHypervisorHostResourceSummary; +import com.cloud.hypervisor.vmware.resource.VmwareContextFactory; import com.cloud.hypervisor.vmware.util.VmwareContext; import com.cloud.hypervisor.vmware.util.VmwareGuestOsMapper; import com.cloud.hypervisor.vmware.util.VmwareHelper; @@ -191,6 +201,8 @@ import com.cloud.network.HAProxyConfigurator; import com.cloud.network.LoadBalancerConfigurator; import com.cloud.network.Networks; import com.cloud.network.Networks.BroadcastDomainType; +import com.cloud.network.Networks.TrafficType; +import com.cloud.network.VmwareTrafficLabel; import com.cloud.network.rules.FirewallRule; import com.cloud.resource.ServerResource; import com.cloud.serializer.GsonHelper; @@ -236,7 +248,9 @@ import com.vmware.vim25.PerfMetricSeries; import com.vmware.vim25.PerfQuerySpec; import com.vmware.vim25.PerfSampleInfo; import com.vmware.vim25.RuntimeFault; +import com.vmware.vim25.RuntimeFaultFaultMsg; import com.vmware.vim25.ToolsUnavailable; +import com.vmware.vim25.ToolsUnavailableFaultMsg; import com.vmware.vim25.VimPortType; import com.vmware.vim25.VirtualDevice; import com.vmware.vim25.VirtualDeviceConfigSpec; @@ -252,13 +266,15 @@ import com.vmware.vim25.VirtualMachinePowerState; import com.vmware.vim25.VirtualMachineRuntimeInfo; import com.vmware.vim25.VirtualSCSISharing; + public class VmwareResource implements StoragePoolResource, ServerResource, VmwareHostService { private static final Logger s_logger = Logger.getLogger(VmwareResource.class); protected String _name; protected final long _ops_timeout = 900000; // 15 minutes time out to time - protected final int _shutdown_waitMs = 300000; // wait up to 5 minutes for shutdown + + protected final int _shutdown_waitMs = 300000; // wait up to 5 minutes for shutdown // out an operation protected final int _retry = 24; @@ -276,18 +292,16 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa protected String _vCenterAddress; protected String _privateNetworkVSwitchName; - protected String _publicNetworkVSwitchName; - protected String _guestNetworkVSwitchName; - protected VirtualSwitchType _vSwitchType = VirtualSwitchType.StandardVirtualSwitch; - protected boolean _nexusVSwitch = false; + protected VmwareTrafficLabel _guestTrafficInfo = new VmwareTrafficLabel(TrafficType.Guest); + protected VmwareTrafficLabel _publicTrafficInfo = new VmwareTrafficLabel(TrafficType.Public); + protected int _portsPerDvPortGroup; + protected boolean _fullCloneFlag = false; - protected float _cpuOverprovisioningFactor = 1; protected boolean _reserveCpu = false; - protected float _memOverprovisioningFactor = 1; protected boolean _reserveMem = false; protected boolean _recycleHungWorker = false; - protected DiskControllerType _rootDiskController = DiskControllerType.ide; + protected DiskControllerType _rootDiskController = DiskControllerType.ide; protected ManagedObjectReference _morHyperHost; protected VmwareContext _serviceContext; @@ -303,9 +317,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa protected static HashMap s_statesTable; static { s_statesTable = new HashMap(); - s_statesTable.put(VirtualMachinePowerState.poweredOn, State.Running); - s_statesTable.put(VirtualMachinePowerState.poweredOff, State.Stopped); - s_statesTable.put(VirtualMachinePowerState.suspended, State.Stopped); + s_statesTable.put(VirtualMachinePowerState.POWERED_ON, State.Running); + s_statesTable.put(VirtualMachinePowerState.POWERED_OFF, State.Stopped); + s_statesTable.put(VirtualMachinePowerState.SUSPENDED, State.Stopped); } public VmwareResource() { @@ -314,6 +328,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa @Override public Answer executeRequest(Command cmd) { + if(s_logger.isTraceEnabled()) s_logger.trace("Begin executeRequest(), cmd: " + cmd.getClass().getSimpleName()); @@ -443,12 +458,20 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa answer = execute((SetSourceNatCommand) cmd); } else if (clz == SetNetworkACLCommand.class) { answer = execute((SetNetworkACLCommand) cmd); - } else if (clz == SetPortForwardingRulesVpcCommand.class) { + } else if (cmd instanceof CreateVMSnapshotCommand) { + return execute((CreateVMSnapshotCommand)cmd); + } else if(cmd instanceof DeleteVMSnapshotCommand){ + return execute((DeleteVMSnapshotCommand)cmd); + } else if(cmd instanceof RevertToVMSnapshotCommand){ + return execute((RevertToVMSnapshotCommand)cmd); + }else if (clz == SetPortForwardingRulesVpcCommand.class) { answer = execute((SetPortForwardingRulesVpcCommand) cmd); } else if (clz == Site2SiteVpnCfgCommand.class) { answer = execute((Site2SiteVpnCfgCommand) cmd); } else if (clz == CheckS2SVpnConnectionsCommand.class) { answer = execute((CheckS2SVpnConnectionsCommand) cmd); + } else if (clz == ResizeVolumeCommand.class) { + return execute((ResizeVolumeCommand) cmd); } else { answer = Answer.createUnsupportedCommandAnswer(cmd); } @@ -463,14 +486,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa synchronized (this) { try { - JmxUtil.registerMBean("VMware " + _morHyperHost.get_value(), "Command " + cmdSequence + "-" + cmd.getClass().getSimpleName(), mbean); + JmxUtil.registerMBean("VMware " + _morHyperHost.getValue(), "Command " + cmdSequence + "-" + cmd.getClass().getSimpleName(), mbean); _cmdMBeans.add(mbean); if (_cmdMBeans.size() >= MAX_CMD_MBEAN) { PropertyMapDynamicBean mbeanToRemove = _cmdMBeans.get(0); _cmdMBeans.remove(0); - JmxUtil.unregisterMBean("VMware " + _morHyperHost.get_value(), "Command " + mbeanToRemove.getProp("Sequence") + "-" + mbeanToRemove.getProp("Name")); + JmxUtil.unregisterMBean("VMware " + _morHyperHost.getValue(), "Command " + mbeanToRemove.getProp("Sequence") + "-" + mbeanToRemove.getProp("Name")); } } catch (Exception e) { if(s_logger.isTraceEnabled()) @@ -482,12 +505,61 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa NDC.pop(); } + if(s_logger.isTraceEnabled()) s_logger.trace("End executeRequest(), cmd: " + cmd.getClass().getSimpleName()); return answer; } + private Answer execute(ResizeVolumeCommand cmd) { + String path = cmd.getPath(); + String vmName = cmd.getInstanceName(); + long newSize = cmd.getNewSize()/1024; + + try { + VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); + ManagedObjectReference morDc = hyperHost.getHyperHostDatacenter(); + // find VM through datacenter (VM is not at the target host yet) + VirtualMachineMO vmMo = hyperHost.findVmOnPeerHyperHost(vmName); + if (vmMo == null) { + String msg = "VM " + vmName + " does not exist in VMware datacenter"; + s_logger.error(msg); + throw new Exception(msg); + } + + Pair vdisk = vmMo.getDiskDevice(path, false); + if(vdisk == null) { + if(s_logger.isTraceEnabled()) + s_logger.trace("resize volume done (failed)"); + throw new Exception("No such disk device: " + path); + } + VirtualDisk disk = vdisk.first(); + long oldSize = disk.getCapacityInKB(); + if (newSize < oldSize){ + throw new Exception("VMware doesn't support shrinking volume from larger size: " + oldSize+ " MB to a smaller size: " + newSize + " MB"); + } else if(newSize == oldSize){ + return new ResizeVolumeAnswer(cmd, true, "success", newSize*1024); + } + disk.setCapacityInKB(newSize); + + VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); + VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec(); + deviceConfigSpec.setDevice(disk); + deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.EDIT); + vmConfigSpec.getDeviceChange().add(deviceConfigSpec); + if (!vmMo.configureVm(vmConfigSpec)) { + throw new Exception("Failed to configure VM to resize disk. vmName: " + vmName); + } + + return new ResizeVolumeAnswer(cmd, true, "success", newSize*1024); + } catch (Exception e) { + s_logger.error("Unable to resize volume",e); + String error = "failed to resize volume:" +e; + return new ResizeVolumeAnswer(cmd, false, error ); + } + } + protected Answer execute(CheckNetworkCommand cmd) { if (s_logger.isInfoEnabled()) { s_logger.info("Executing resource CheckNetworkCommand " + _gson.toJson(cmd)); @@ -547,6 +619,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (!resultPair.first()) { throw new Exception(" vpc network usage plugin call failed "); + } if (option.equals("get") || option.equals("vpn")) { @@ -567,7 +640,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } return new NetworkUsageAnswer(cmd, "success", 0L, 0L); } catch (Throwable e) { - s_logger.error("Unable to execute NetworkUsage command on DomR (" + privateIp + "), domR may not be ready yet. failure due to " + + s_logger.error("Unable to execute NetworkUsage command on DomR (" + privateIp + "), domR may not be ready yet. failure due to " + VmwareHelper.getExceptionMessage(e), e); } return new NetworkUsageAnswer(cmd, "success", 0L, 0L); @@ -664,6 +738,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } + if (!result.first()) { s_logger.error("SetFirewallRulesCommand failure on setting one rule. args: " + args); @@ -673,7 +748,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } return new SetFirewallRulesAnswer(cmd, false, results); - } + } } catch (Throwable e) { s_logger.error("SetFirewallRulesCommand(args: " + args + ") failed on setting one rule due to " @@ -683,10 +758,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa results[i] = "Failed"; } return new SetFirewallRulesAnswer(cmd, false, results); - } + } return new SetFirewallRulesAnswer(cmd, true, results); - } + } protected Answer execute(SetStaticNatRulesCommand cmd) { if (s_logger.isInfoEnabled()) { @@ -1254,7 +1329,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa NicTO nicTo = cmd.getNic(); VirtualDevice nic; Pair networkInfo = prepareNetworkFromNicInfo(vmMo.getRunningHost(), nicTo); - if (mgr.getNexusVSwitchGlobalParameter()) { + if (VmwareHelper.isDvPortGroup(networkInfo.first())) { String dvSwitchUuid; ManagedObjectReference dcMor = hyperHost.getHyperHostDatacenter(); DatacenterMO dataCenterMo = new DatacenterMO(context, dcMor); @@ -1270,12 +1345,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); - VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[1]; - deviceConfigSpecArray[0] = new VirtualDeviceConfigSpec(); - deviceConfigSpecArray[0].setDevice(nic); - deviceConfigSpecArray[0].setOperation(VirtualDeviceConfigSpecOperation.add); + //VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[1]; + VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec(); + deviceConfigSpec.setDevice(nic); + deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD); - vmConfigSpec.setDeviceChange(deviceConfigSpecArray); + vmConfigSpec.getDeviceChange().add(deviceConfigSpec); if(!vmMo.configureVm(vmConfigSpec)) { throw new Exception("Failed to configure devices when running PlugNicCommand"); } @@ -1318,12 +1393,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return new UnPlugNicAnswer(cmd, true, "success"); } VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); - VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[1]; - deviceConfigSpecArray[0] = new VirtualDeviceConfigSpec(); - deviceConfigSpecArray[0].setDevice(nic); - deviceConfigSpecArray[0].setOperation(VirtualDeviceConfigSpecOperation.remove); + //VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[1]; + VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec(); + deviceConfigSpec.setDevice(nic); + deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.REMOVE); - vmConfigSpec.setDeviceChange(deviceConfigSpecArray); + vmConfigSpec.getDeviceChange().add(deviceConfigSpec); if(!vmMo.configureVm(vmConfigSpec)) { throw new Exception("Failed to configure devices when running unplugNicCommand"); } @@ -1461,6 +1536,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (removeVif) { + String nicMasksStr = vmMo.getCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK); int nicMasks = Integer.parseInt(nicMasksStr); nicMasks &= ~(1 << publicNicInfo.first().intValue()); @@ -1485,13 +1561,16 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa private void plugPublicNic(VirtualMachineMO vmMo, final String vlanId, final String vifMacAddress) throws Exception { // TODO : probably need to set traffic shaping Pair networkInfo = null; - - if (!_nexusVSwitch) { - networkInfo = HypervisorHostHelper.prepareNetwork(this._publicNetworkVSwitchName, "cloud.public", + VirtualSwitchType vSwitchType = VirtualSwitchType.StandardVirtualSwitch; + if (_publicTrafficInfo != null) { + vSwitchType = _publicTrafficInfo.getVirtualSwitchType(); + } + if (VirtualSwitchType.StandardVirtualSwitch == vSwitchType) { + networkInfo = HypervisorHostHelper.prepareNetwork(this._publicTrafficInfo.getVirtualSwitchName(), "cloud.public", vmMo.getRunningHost(), vlanId, null, null, this._ops_timeout, true); } else { - networkInfo = HypervisorHostHelper.prepareNetwork(this._publicNetworkVSwitchName, "cloud.public", - vmMo.getRunningHost(), vlanId, null, null, this._ops_timeout); + networkInfo = HypervisorHostHelper.prepareNetwork(this._publicTrafficInfo.getVirtualSwitchName(), "cloud.public", + vmMo.getRunningHost(), vlanId, null, null, this._ops_timeout, vSwitchType, _portsPerDvPortGroup); } int nicIndex = allocPublicNicIndex(vmMo); @@ -1501,7 +1580,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VirtualEthernetCard device = (VirtualEthernetCard) nicDevices[nicIndex]; - if (!_nexusVSwitch) { + if (VirtualSwitchType.StandardVirtualSwitch == vSwitchType) { VirtualEthernetCardNetworkBackingInfo nicBacking = new VirtualEthernetCardNetworkBackingInfo(); nicBacking.setDeviceName(networkInfo.second()); nicBacking.setNetwork(networkInfo.first()); @@ -1513,12 +1592,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); - VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[1]; - deviceConfigSpecArray[0] = new VirtualDeviceConfigSpec(); - deviceConfigSpecArray[0].setDevice(device); - deviceConfigSpecArray[0].setOperation(VirtualDeviceConfigSpecOperation.edit); - vmConfigSpec.setDeviceChange(deviceConfigSpecArray); + //VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[1]; + VirtualDeviceConfigSpec deviceConfigSpec = new VirtualDeviceConfigSpec(); + deviceConfigSpec.setDevice(device); + deviceConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.EDIT); + + vmConfigSpec.getDeviceChange().add(deviceConfigSpec); if(!vmMo.configureVm(vmConfigSpec)) { throw new Exception("Failed to configure devices when plugPublicNic"); } @@ -1605,7 +1685,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa protected Answer execute(SavePasswordCommand cmd) { if (s_logger.isInfoEnabled()) { - s_logger.info("Executing resource SavePasswordCommand. vmName: " + cmd.getVmName() + ", vmIp: " + cmd.getVmIpAddress() + ", password: " + + s_logger.info("Executing resource SavePasswordCommand. vmName: " + cmd.getVmName() + ", vmIp: " + cmd.getVmIpAddress() + ", password: " + StringUtils.getMaskedPasswordForDisplay(cmd.getPassword())); } @@ -1651,6 +1732,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } // ssh -p 3922 -o StrictHostKeyChecking=no -i $cert root@$domr "/root/edithosts.sh $mac $ip $vm $dfltrt $ns $staticrt" >/dev/null + String args = " -m " + cmd.getVmMac(); if (cmd.getVmIpAddress() != null) { args += " -4 " + cmd.getVmIpAddress(); @@ -1668,12 +1750,16 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (cmd.getStaticRoutes() != null) { args += " -s " + cmd.getStaticRoutes(); } - + if (cmd.getVmIp6Address() != null) { args += " -6 " + cmd.getVmIp6Address(); args += " -u " + cmd.getDuid(); } - + + if (!cmd.isDefault()) { + args += " -N"; + } + if (s_logger.isDebugEnabled()) { s_logger.debug("Run command on domR " + cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP) + ", /root/edithosts.sh " + args); } @@ -2025,10 +2111,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } - assert (vmSpec.getSpeed() != null) && (rootDiskDataStoreDetails != null); - if (!hyperHost.createBlankVm(vmName, vmSpec.getCpus(), vmSpec.getSpeed().intValue(), - getReserveCpuMHz(vmSpec.getSpeed().intValue()), vmSpec.getLimitCpuUse(), ramMb, getReserveMemMB(ramMb), - translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).toString(), rootDiskDataStoreDetails.first(), false)) { + assert (vmSpec.getMinSpeed() != null) && (rootDiskDataStoreDetails != null); + if (!hyperHost.createBlankVm(vmName, vmSpec.getCpus(), vmSpec.getMaxSpeed().intValue(), + vmSpec.getMinSpeed(), vmSpec.getLimitCpuUse(),(int)(vmSpec.getMaxRam()/(1024*1024)), ramMb, + translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).value(), rootDiskDataStoreDetails.first(), false)) { throw new Exception("Failed to create VM. vmName: " + vmName); } } @@ -2058,9 +2144,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); int ramMb = (int) (vmSpec.getMinRam() / (1024 * 1024)); - VmwareHelper.setBasicVmConfig(vmConfigSpec, vmSpec.getCpus(), vmSpec.getSpeed().intValue(), - getReserveCpuMHz(vmSpec.getSpeed().intValue()), ramMb, getReserveMemMB(ramMb), - translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).toString(), vmSpec.getLimitCpuUse()); + VmwareHelper.setBasicVmConfig(vmConfigSpec, vmSpec.getCpus(), vmSpec.getMaxSpeed(), + vmSpec.getMinSpeed(),(int) (vmSpec.getMaxRam()/(1024*1024)), ramMb, + translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).value(), vmSpec.getLimitCpuUse()); VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[totalChangeDevices]; int i = 0; @@ -2087,17 +2173,17 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa DatastoreMO secDsMo = new DatastoreMO(hyperHost.getContext(), morSecDs); deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec(); - Pair isoInfo = VmwareHelper.prepareIsoDevice(vmMo, String.format("[%s] systemvm/%s", secDsMo.getName(), mgr.getSystemVMIsoFileNameOnDatastore()), + Pair isoInfo = VmwareHelper.prepareIsoDevice(vmMo, String.format("[%s] systemvm/%s", secDsMo.getName(), mgr.getSystemVMIsoFileNameOnDatastore()), secDsMo.getMor(), true, true, i, i + 1); deviceConfigSpecArray[i].setDevice(isoInfo.first()); if (isoInfo.second()) { if(s_logger.isDebugEnabled()) s_logger.debug("Prepare ISO volume at new device " + _gson.toJson(isoInfo.first())); - deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.ADD); } else { if(s_logger.isDebugEnabled()) s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); - deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.edit); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.EDIT); } i++; } else { @@ -2113,11 +2199,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (isoInfo.second()) { if(s_logger.isDebugEnabled()) s_logger.debug("Prepare ISO volume at new device " + _gson.toJson(isoInfo.first())); - deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.ADD); } else { if(s_logger.isDebugEnabled()) s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); - deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.edit); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.EDIT); } } else { deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec(); @@ -2127,12 +2213,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if(s_logger.isDebugEnabled()) s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); - deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.ADD); } else { if(s_logger.isDebugEnabled()) s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); - deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.edit); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.EDIT); } } i++; @@ -2184,7 +2270,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa device = VmwareHelper.prepareDiskDevice(vmMo, controllerKey, new String[] { datastoreDiskPath }, volumeDsDetails.first(), i, i + 1); } deviceConfigSpecArray[i].setDevice(device); - deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.ADD); + if(s_logger.isDebugEnabled()) s_logger.debug("Prepare volume at new device " + _gson.toJson(device)); @@ -2200,7 +2287,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_logger.info("Prepare NIC device based on NicTO: " + _gson.toJson(nicTo)); Pair networkInfo = prepareNetworkFromNicInfo(vmMo.getRunningHost(), nicTo); - if (mgr.getNexusVSwitchGlobalParameter()) { + if (VmwareHelper.isDvPortGroup(networkInfo.first())) { String dvSwitchUuid; ManagedObjectReference dcMor = hyperHost.getHyperHostDatacenter(); DatacenterMO dataCenterMo = new DatacenterMO(context, dcMor); @@ -2215,7 +2302,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec(); deviceConfigSpecArray[i].setDevice(nic); - deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.ADD); if(s_logger.isDebugEnabled()) s_logger.debug("Prepare NIC at new device " + _gson.toJson(deviceConfigSpecArray[i])); @@ -2228,7 +2315,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa nicCount++; } - vmConfigSpec.setDeviceChange(deviceConfigSpecArray); + vmConfigSpec.getDeviceChange().addAll(Arrays.asList(deviceConfigSpecArray)); // pass boot arguments through machine.id & perform customized options to VMX @@ -2253,7 +2340,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String keyboardLayout = null; if(vmSpec.getDetails() != null) keyboardLayout = vmSpec.getDetails().get(VmDetailConstants.KEYBOARD); - vmConfigSpec.setExtraConfig(configureVnc(extraOptions, hyperHost, vmName, vmSpec.getVncPassword(), keyboardLayout)); + vmConfigSpec.getExtraConfig().addAll(Arrays.asList(configureVnc(extraOptions, hyperHost, vmName, vmSpec.getVncPassword(), keyboardLayout))); if (!vmMo.configureVm(vmConfigSpec)) { throw new Exception("Failed to configure VM before start. vmName: " + vmName); @@ -2288,6 +2375,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } private Map validateVmDetails(Map vmDetails) { + Map validatedDetails = new HashMap(); if(vmDetails != null && vmDetails.size() > 0) { @@ -2311,21 +2399,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return validatedDetails; } - private int getReserveCpuMHz(int cpuMHz) { - if(this._reserveCpu) { - return (int)(cpuMHz / this._cpuOverprovisioningFactor); - } - return 0; - } - - private int getReserveMemMB(int memMB) { - if(this._reserveMem) { - return (int)(memMB / this._memOverprovisioningFactor); - } - - return 0; - } private NicTO[] sortNicsByDeviceId(NicTO[] nics) { @@ -2413,21 +2487,36 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } private Pair prepareNetworkFromNicInfo(HostMO hostMo, NicTO nicTo) throws Exception { + Pair switchName; + TrafficType trafficType; + VirtualSwitchType switchType; + + switchName = getTargetSwitch(nicTo); + trafficType = nicTo.getType(); + // Get switch type from resource property which is dictated by cluster property + // If a virtual switch type is specified while adding cluster that will be used. + // Else If virtual switch type is specified in physical traffic label that will be used + // Else use standard vSwitch + switchType = VirtualSwitchType.StandardVirtualSwitch; + if (trafficType == TrafficType.Guest && _guestTrafficInfo != null) { + switchType = _guestTrafficInfo.getVirtualSwitchType(); + } else if (trafficType == TrafficType.Public && _publicTrafficInfo != null) { + switchType = _publicTrafficInfo.getVirtualSwitchType(); + } - Pair switchName = getTargetSwitch(nicTo); String namePrefix = getNetworkNamePrefix(nicTo); Pair networkInfo = null; - s_logger.info("Prepare network on vSwitch: " + switchName + " with name prefix: " + namePrefix); + s_logger.info("Prepare network on " + switchType + " " + switchName + " with name prefix: " + namePrefix); - if(!_nexusVSwitch) { - networkInfo = HypervisorHostHelper.prepareNetwork(switchName.first(), namePrefix, hostMo, getVlanInfo(nicTo, switchName.second()), - nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout, + if (VirtualSwitchType.StandardVirtualSwitch == switchType) { + networkInfo = HypervisorHostHelper.prepareNetwork(switchName.first(), namePrefix, hostMo, getVlanInfo(nicTo, switchName.second()), + nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout, !namePrefix.startsWith("cloud.private")); } else { - networkInfo = HypervisorHostHelper.prepareNetwork(switchName.first(), namePrefix, hostMo, getVlanInfo(nicTo, switchName.second()), - nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout); + networkInfo = HypervisorHostHelper.prepareNetwork(switchName.first(), namePrefix, hostMo, getVlanInfo(nicTo, switchName.second()), + nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout, switchType, _portsPerDvPortGroup); } return networkInfo; @@ -2437,8 +2526,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa private Pair getTargetSwitch(NicTO nicTo) throws Exception { if(nicTo.getName() != null && !nicTo.getName().isEmpty()) { String[] tokens = nicTo.getName().split(","); - - if(tokens.length == 2) { + // Format of network traffic label is ,, + // If all 3 fields are mentioned then number of tokens would be 3. + // If only , are mentioned then number of tokens would be 2. + if(tokens.length == 2 || tokens.length == 3) { return new Pair(tokens[0], tokens[1]); } else { return new Pair(nicTo.getName(), Vlan.UNTAGGED); @@ -2446,11 +2537,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } if (nicTo.getType() == Networks.TrafficType.Guest) { - return new Pair(this._guestNetworkVSwitchName, Vlan.UNTAGGED); + return new Pair(this._guestTrafficInfo.getVirtualSwitchName(), Vlan.UNTAGGED); } else if (nicTo.getType() == Networks.TrafficType.Control || nicTo.getType() == Networks.TrafficType.Management) { return new Pair(this._privateNetworkVSwitchName, Vlan.UNTAGGED); } else if (nicTo.getType() == Networks.TrafficType.Public) { - return new Pair(this._publicNetworkVSwitchName, Vlan.UNTAGGED); + return new Pair(this._publicTrafficInfo.getVirtualSwitchName(), Vlan.UNTAGGED); } else if (nicTo.getType() == Networks.TrafficType.Storage) { return new Pair(this._privateNetworkVSwitchName, Vlan.UNTAGGED); } else if (nicTo.getType() == Networks.TrafficType.Vpn) { @@ -2747,7 +2838,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa // before we stop VM, remove all possible snapshots on the VM to let // disk chain be collapsed s_logger.info("Remove all snapshot before stopping VM " + cmd.getVmName()); - vmMo.removeAllSnapshots(); if (vmMo.safePowerOff(_shutdown_waitMs)) { state = State.Stopped; return new StopAnswer(cmd, "Stop VM " + cmd.getVmName() + " Succeed", 0, true); @@ -2821,7 +2911,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa try { vmMo.rebootGuest(); return new RebootAnswer(cmd, "reboot succeeded", true); - } catch(ToolsUnavailable e) { + } catch(ToolsUnavailableFaultMsg e) { s_logger.warn("VMware tools is not installed at guest OS, we will perform hard reset for reboot"); } catch(Exception e) { s_logger.warn("We are not able to perform gracefull guest reboot due to " + VmwareHelper.getExceptionMessage(e)); @@ -3006,8 +3096,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VmwareManager mgr = dcMo.getContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); - ObjectContent[] ocs = dcMo.getHostPropertiesOnDatacenterHostFolder(new String[] { "name", "parent" }); - if (ocs != null && ocs.length > 0) { + List ocs = dcMo.getHostPropertiesOnDatacenterHostFolder(new String[] { "name", "parent" }); + if (ocs != null && ocs.size() > 0) { for (ObjectContent oc : ocs) { HostMO hostMo = new HostMO(dcMo.getContext(), oc.getObj()); VmwareHypervisorHostNetworkSummary netSummary = hostMo.getHyperHostNetworkSummary(mgr.getManagementPortGroupByHost(hostMo)); @@ -3040,7 +3130,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa ManagedObjectReference morDatastore = null; morDatastore = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, pool.getUuid()); if(morDatastore == null) - morDatastore = hyperHost.mountDatastore(pool.getType() == StoragePoolType.VMFS, pool.getHost(), + morDatastore = hyperHost.mountDatastore(pool.getType() == StoragePoolType.VMFS, pool.getHost(), pool.getPort(), pool.getPath(), pool.getUuid().replace("-", "")); assert (morDatastore != null); @@ -3299,7 +3389,42 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } + protected Answer execute(CreateVMSnapshotCommand cmd) { + try { + VmwareContext context = getServiceContext(); + VmwareManager mgr = context + .getStockObject(VmwareManager.CONTEXT_STOCK_NAME); + return mgr.getStorageManager().execute(this, cmd); + } catch (Exception e) { + e.printStackTrace(); + return new CreateVMSnapshotAnswer(cmd, false, ""); + } + } + + protected Answer execute(DeleteVMSnapshotCommand cmd) { + try { + VmwareContext context = getServiceContext(); + VmwareManager mgr = context + .getStockObject(VmwareManager.CONTEXT_STOCK_NAME); + + return mgr.getStorageManager().execute(this, cmd); + } catch (Exception e) { + e.printStackTrace(); + return new DeleteVMSnapshotAnswer(cmd, false, ""); + } + } + + protected Answer execute(RevertToVMSnapshotCommand cmd){ + try{ + VmwareContext context = getServiceContext(); + VmwareManager mgr = context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME); + return mgr.getStorageManager().execute(this, cmd); + }catch (Exception e){ + e.printStackTrace(); + return new RevertToVMSnapshotAnswer(cmd,false,""); + } + } protected Answer execute(CreateVolumeFromSnapshotCommand cmd) { if (s_logger.isInfoEnabled()) { s_logger.info("Executing resource CreateVolumeFromSnapshotCommand: " + _gson.toJson(cmd)); @@ -3492,7 +3617,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if(result.first()) return new Answer(cmd); } catch (Exception e) { - s_logger.error("Unable to execute ping command on DomR (" + controlIp + "), domR may not be ready yet. failure due to " + s_logger.error("Unable to execute ping command on DomR (" + controlIp + "), domR may not be ready yet. failure due to " + VmwareHelper.getExceptionMessage(e), e); } return new Answer(cmd,false,"PingTestCommand failed"); @@ -3553,11 +3678,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa /* * DestroyCommand content example - * + * * {"volume": {"id":5,"name":"Volume1", "mountPoint":"/export/home/kelven/vmware-test/primary", * "path":"6bb8762f-c34c-453c-8e03-26cc246ceec4", "size":0,"type":"DATADISK","resourceType": * "STORAGE_POOL","storagePoolType":"NetworkFilesystem", "poolId":0,"deviceId":0 } } - * + * * {"volume": {"id":1, "name":"i-2-1-KY-ROOT", "mountPoint":"/export/home/kelven/vmware-test/primary", * "path":"i-2-1-KY-ROOT","size":0,"type":"ROOT", "resourceType":"STORAGE_POOL", "storagePoolType":"NetworkFilesystem", * "poolId":0,"deviceId":0 } } @@ -3606,16 +3731,24 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } } - } + } if (s_logger.isInfoEnabled()) s_logger.info("Destroy volume by original name: " + cmd.getVolume().getPath() + ".vmdk"); dsMo.deleteFile(cmd.getVolume().getPath() + ".vmdk", morDc, true); // root volume may be created via linked-clone, delete the delta disk as well - if (s_logger.isInfoEnabled()) + if (_fullCloneFlag) { + if (s_logger.isInfoEnabled()) { + s_logger.info("Destroy volume by derived name: " + cmd.getVolume().getPath() + "-flat.vmdk"); + } + dsMo.deleteFile(cmd.getVolume().getPath() + "-flat.vmdk", morDc, true); + } else { + if (s_logger.isInfoEnabled()) { s_logger.info("Destroy volume by derived name: " + cmd.getVolume().getPath() + "-delta.vmdk"); + } dsMo.deleteFile(cmd.getVolume().getPath() + "-delta.vmdk", morDc, true); + } return new Answer(cmd, true, "Success"); } @@ -3689,7 +3822,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa * NetworkMO(hostMo.getContext(), netDetails.getNetworkMor()); ManagedObjectReference[] vms = * networkMo.getVMsOnNetwork(); if(vms == null || vms.length == 0) { if(s_logger.isInfoEnabled()) { * s_logger.info("Cleanup network as it is currently not in use: " + netDetails.getName()); } - * + * * hostMo.deletePortGroup(netDetails.getName()); } } } catch(Throwable e) { * s_logger.warn("Unable to cleanup network due to exception, skip for next time"); } */ @@ -3717,6 +3850,70 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } + + + private boolean createVMFullClone(VirtualMachineMO vmTemplate, DatacenterMO dcMo, DatastoreMO dsMo, + String vmdkName, ManagedObjectReference morDatastore, ManagedObjectReference morPool) throws Exception { + + if(dsMo.folderExists(String.format("[%s]", dsMo.getName()), vmdkName)) + dsMo.deleteFile(String.format("[%s] %s/", dsMo.getName(), vmdkName), dcMo.getMor(), false); + + s_logger.info("creating full clone from template"); + if (!vmTemplate.createFullClone(vmdkName, dcMo.getVmFolder(), morPool, morDatastore)) { + String msg = "Unable to create full clone from the template"; + s_logger.error(msg); + throw new Exception(msg); + } + + // we can't rely on un-offical API (VirtualMachineMO.moveAllVmDiskFiles() any more, use hard-coded disk names that we know + // to move files + s_logger.info("Move volume out of volume-wrapper VM "); + dsMo.moveDatastoreFile(String.format("[%s] %s/%s.vmdk", dsMo.getName(), vmdkName, vmdkName), + dcMo.getMor(), dsMo.getMor(), + String.format("[%s] %s.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); + + dsMo.moveDatastoreFile(String.format("[%s] %s/%s-flat.vmdk", dsMo.getName(), vmdkName, vmdkName), + dcMo.getMor(), dsMo.getMor(), + String.format("[%s] %s-flat.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); + + return true; + } + + private boolean createVMLinkedClone(VirtualMachineMO vmTemplate, DatacenterMO dcMo, DatastoreMO dsMo, + String vmdkName, ManagedObjectReference morDatastore, ManagedObjectReference morPool) throws Exception { + + ManagedObjectReference morBaseSnapshot = vmTemplate.getSnapshotMor("cloud.template.base"); + if (morBaseSnapshot == null) { + String msg = "Unable to find template base snapshot, invalid template"; + s_logger.error(msg); + throw new Exception(msg); + } + + if(dsMo.folderExists(String.format("[%s]", dsMo.getName()), vmdkName)) + dsMo.deleteFile(String.format("[%s] %s/", dsMo.getName(), vmdkName), dcMo.getMor(), false); + + s_logger.info("creating linked clone from template"); + if (!vmTemplate.createLinkedClone(vmdkName, morBaseSnapshot, dcMo.getVmFolder(), morPool, morDatastore)) { + String msg = "Unable to clone from the template"; + s_logger.error(msg); + throw new Exception(msg); + } + + // we can't rely on un-offical API (VirtualMachineMO.moveAllVmDiskFiles() any more, use hard-coded disk names that we know + // to move files + s_logger.info("Move volume out of volume-wrapper VM "); + dsMo.moveDatastoreFile(String.format("[%s] %s/%s.vmdk", dsMo.getName(), vmdkName, vmdkName), + dcMo.getMor(), dsMo.getMor(), + String.format("[%s] %s.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); + + dsMo.moveDatastoreFile(String.format("[%s] %s/%s-delta.vmdk", dsMo.getName(), vmdkName, vmdkName), + dcMo.getMor(), dsMo.getMor(), + String.format("[%s] %s-delta.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); + + return true; + } + + @Override public synchronized CreateAnswer execute(CreateCommand cmd) { if (s_logger.isInfoEnabled()) { @@ -3776,37 +3973,16 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa ManagedObjectReference morPool = hyperHost.getHyperHostOwnerResourcePool(); ManagedObjectReference morCluster = hyperHost.getHyperHostCluster(); - ManagedObjectReference morBaseSnapshot = vmTemplate.getSnapshotMor("cloud.template.base"); - if (morBaseSnapshot == null) { - String msg = "Unable to find template base snapshot, invalid template"; - s_logger.error(msg); - throw new Exception(msg); - } - - if(dsMo.folderExists(String.format("[%s]", dsMo.getName()), vmdkName)) - dsMo.deleteFile(String.format("[%s] %s/", dsMo.getName(), vmdkName), dcMo.getMor(), false); - - s_logger.info("create linked clone from template"); - if (!vmTemplate.createLinkedClone(vmdkName, morBaseSnapshot, dcMo.getVmFolder(), morPool, morDatastore)) { - String msg = "Unable to clone from the template"; - s_logger.error(msg); - throw new Exception(msg); + //createVMLinkedClone(vmTemplate, dcMo, dsMo, vmdkName, morDatastore, morPool); + if (!_fullCloneFlag) { + createVMLinkedClone(vmTemplate, dcMo, dsMo, vmdkName, morDatastore, morPool); + } else { + createVMFullClone(vmTemplate, dcMo, dsMo, vmdkName, morDatastore, morPool); } VirtualMachineMO vmMo = new ClusterMO(context, morCluster).findVmOnHyperHost(vmdkName); assert (vmMo != null); - // we can't rely on un-offical API (VirtualMachineMO.moveAllVmDiskFiles() any more, use hard-coded disk names that we know - // to move files - s_logger.info("Move volume out of volume-wrapper VM "); - dsMo.moveDatastoreFile(String.format("[%s] %s/%s.vmdk", dsMo.getName(), vmdkName, vmdkName), - dcMo.getMor(), dsMo.getMor(), - String.format("[%s] %s.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); - - dsMo.moveDatastoreFile(String.format("[%s] %s/%s-delta.vmdk", dsMo.getName(), vmdkName, vmdkName), - dcMo.getMor(), dsMo.getMor(), - String.format("[%s] %s-delta.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); - s_logger.info("detach disks from volume-wrapper VM " + vmdkName); vmMo.detachAllDisks(); @@ -3867,21 +4043,21 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa vmConfig.setName(vmName); vmConfig.setMemoryMB((long) 4); // vmware request minimum of 4 MB vmConfig.setNumCPUs(1); - vmConfig.setGuestId(VirtualMachineGuestOsIdentifier._otherGuest.toString()); + vmConfig.setGuestId(VirtualMachineGuestOsIdentifier.OTHER_GUEST.value()); VirtualMachineFileInfo fileInfo = new VirtualMachineFileInfo(); fileInfo.setVmPathName(String.format("[%s]", dsMo.getName())); vmConfig.setFiles(fileInfo); // Scsi controller VirtualLsiLogicController scsiController = new VirtualLsiLogicController(); - scsiController.setSharedBus(VirtualSCSISharing.noSharing); + scsiController.setSharedBus(VirtualSCSISharing.NO_SHARING); scsiController.setBusNumber(0); scsiController.setKey(1); VirtualDeviceConfigSpec scsiControllerSpec = new VirtualDeviceConfigSpec(); scsiControllerSpec.setDevice(scsiController); - scsiControllerSpec.setOperation(VirtualDeviceConfigSpecOperation.add); + scsiControllerSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD); - vmConfig.setDeviceChange(new VirtualDeviceConfigSpec[] { scsiControllerSpec }); + vmConfig.getDeviceChange().add(scsiControllerSpec ); hyperHost.createVm(vmConfig); vmMo = hyperHost.findVmOnHyperHost(vmName); return vmMo; @@ -3920,11 +4096,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa new String[] {"name", "config.template", "runtime.powerState", "runtime.bootTime"}); if(ocs != null) { for(ObjectContent oc : ocs) { - DynamicProperty[] props = oc.getPropSet(); + List props = oc.getPropSet(); if(props != null) { String name = null; boolean template = false; - VirtualMachinePowerState powerState = VirtualMachinePowerState.poweredOff; + VirtualMachinePowerState powerState = VirtualMachinePowerState.POWERED_OFF; GregorianCalendar bootTime = null; for(DynamicProperty prop : props) { @@ -3934,7 +4110,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa template = (Boolean)prop.getVal(); else if(prop.getName().equals("runtime.powerState")) powerState = (VirtualMachinePowerState)prop.getVal(); - else if(prop.getName().equals("runtime.bootTime")) + else if(prop.getName().equals("runtime.bootTime")) bootTime = (GregorianCalendar)prop.getVal(); } @@ -3942,7 +4118,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa boolean recycle = false; // recycle stopped worker VM and VM that has been running for too long (hard-coded 10 hours for now) - if(powerState == VirtualMachinePowerState.poweredOff) + if(powerState == VirtualMachinePowerState.POWERED_OFF) recycle = true; else if(bootTime != null && (new Date().getTime() - bootTime.getTimeInMillis() > 10*3600*1000)) recycle = true; @@ -4046,7 +4222,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa DatastoreSummary dsSummary = dsMo.getSummary(); String address = hostMo.getHostName(); - StoragePoolInfo pInfo = new StoragePoolInfo(poolUuid, address, dsMo.getMor().get_value(), "", StoragePoolType.LVM, dsSummary.getCapacity(), dsSummary.getFreeSpace()); + StoragePoolInfo pInfo = new StoragePoolInfo(poolUuid, address, dsMo.getMor().getValue(), "", StoragePoolType.LVM, dsSummary.getCapacity(), dsSummary.getFreeSpace()); StartupStorageCommand cmd = new StartupStorageCommand(); cmd.setName(poolUuid); cmd.setPoolInfo(pInfo); @@ -4084,7 +4260,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa fillHostHardwareInfo(serviceContext, cmd); fillHostNetworkInfo(serviceContext, cmd); fillHostDetailsInfo(serviceContext, details); - } catch (RuntimeFault e) { + } catch (RuntimeFaultFaultMsg e) { s_logger.error("RuntimeFault while retrieving host info: " + e.toString(), e); throw new CloudRuntimeException("RuntimeFault while retrieving host info"); } catch (RemoteException e) { @@ -4106,7 +4282,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa cmd.setVersion(VmwareResource.class.getPackage().getImplementationVersion()); } - private void fillHostHardwareInfo(VmwareContext serviceContext, StartupRoutingCommand cmd) throws RuntimeFault, RemoteException, Exception { + private void fillHostHardwareInfo(VmwareContext serviceContext, StartupRoutingCommand cmd) throws RuntimeFaultFaultMsg, RemoteException, Exception { VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); VmwareHypervisorHostResourceSummary summary = hyperHost.getHyperHostResourceSummary(); @@ -4122,7 +4298,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa cmd.setMemory(summary.getMemoryBytes()); } - private void fillHostNetworkInfo(VmwareContext serviceContext, StartupRoutingCommand cmd) throws RuntimeFault, RemoteException { + private void fillHostNetworkInfo(VmwareContext serviceContext, StartupRoutingCommand cmd) throws RuntimeFaultFaultMsg, RemoteException { try { VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); @@ -4158,7 +4334,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); ClusterDasConfigInfo dasConfig = hyperHost.getDasConfig(); - if (dasConfig != null && dasConfig.getEnabled() != null && dasConfig.getEnabled().booleanValue()) { + if (dasConfig != null && dasConfig.isEnabled() != null && dasConfig.isEnabled().booleanValue()) { details.put("NativeHA", "true"); } } @@ -4276,7 +4452,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return hyperHost.findVmOnPeerHyperHost(vmName) != null; } - protected OptionValue[] configureVnc(OptionValue[] optionsToMerge, VmwareHypervisorHost hyperHost, String vmName, + protected OptionValue[] configureVnc(OptionValue[] optionsToMerge, VmwareHypervisorHost hyperHost, String vmName, String vncPassword, String keyboardLayout) throws Exception { VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(vmName); @@ -4362,9 +4538,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } if (cpuArchitecture.equalsIgnoreCase("x86_64")) { - return VirtualMachineGuestOsIdentifier.otherGuest64; + return VirtualMachineGuestOsIdentifier.OTHER_GUEST_64; } - return VirtualMachineGuestOsIdentifier.otherGuest; + return VirtualMachineGuestOsIdentifier.OTHER_GUEST; } private void prepareNetworkForVmTargetHost(HostMO hostMo, VirtualMachineMO vmMo) throws Exception { @@ -4383,7 +4559,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String[] tokens = networkName.split("\\."); if (tokens.length == 3) { Integer networkRateMbps = null; - if (shapingPolicy != null && shapingPolicy.getEnabled() != null && shapingPolicy.getEnabled().booleanValue()) { + if (shapingPolicy != null && shapingPolicy.isEnabled() != null && shapingPolicy.isEnabled().booleanValue()) { networkRateMbps = (int) (shapingPolicy.getPeakBandwidth().longValue() / (1024 * 1024)); } String vlanId = null; @@ -4399,14 +4575,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String[] tokens = networkName.split("\\."); if (tokens.length == 3) { Integer networkRateMbps = null; - if (shapingPolicy != null && shapingPolicy.getEnabled() != null && shapingPolicy.getEnabled().booleanValue()) { + if (shapingPolicy != null && shapingPolicy.isEnabled() != null && shapingPolicy.isEnabled().booleanValue()) { networkRateMbps = (int) (shapingPolicy.getPeakBandwidth().longValue() / (1024 * 1024)); } String vlanId = null; if(!"untagged".equalsIgnoreCase(tokens[2])) vlanId = tokens[2]; - HypervisorHostHelper.prepareNetwork(this._publicNetworkVSwitchName, "cloud.public", + HypervisorHostHelper.prepareNetwork(_publicTrafficInfo.getVirtualSwitchName(), "cloud.public", hostMo, vlanId, networkRateMbps, null, this._ops_timeout, false); } else { s_logger.info("Skip suspecious cloud network " + networkName); @@ -4415,7 +4591,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String[] tokens = networkName.split("\\."); if (tokens.length >= 3) { Integer networkRateMbps = null; - if (shapingPolicy != null && shapingPolicy.getEnabled() != null && shapingPolicy.getEnabled().booleanValue()) { + if (shapingPolicy != null && shapingPolicy.isEnabled() != null && shapingPolicy.isEnabled().booleanValue()) { networkRateMbps = (int) (shapingPolicy.getPeakBandwidth().longValue() / (1024 * 1024)); } @@ -4423,7 +4599,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if(!"untagged".equalsIgnoreCase(tokens[2])) vlanId = tokens[2]; - HypervisorHostHelper.prepareNetwork(this._guestNetworkVSwitchName, "cloud.guest", + HypervisorHostHelper.prepareNetwork(_guestTrafficInfo.getVirtualSwitchName(), "cloud.guest", hostMo, vlanId, networkRateMbps, null, this._ops_timeout, false); } else { s_logger.info("Skip suspecious cloud network " + networkName); @@ -4441,12 +4617,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa HashMap newStates = new HashMap(); if (ocs != null && ocs.length > 0) { for (ObjectContent oc : ocs) { - DynamicProperty[] objProps = oc.getPropSet(); + List objProps = oc.getPropSet(); if (objProps != null) { boolean isTemplate = false; String name = null; - VirtualMachinePowerState powerState = VirtualMachinePowerState.poweredOff; + VirtualMachinePowerState powerState = VirtualMachinePowerState.POWERED_OFF; for (DynamicProperty objProp : objProps) { if (objProp.getName().equals("config.template")) { if (objProp.getVal().toString().equalsIgnoreCase("true")) { @@ -4473,19 +4649,19 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa private HashMap getVmStats(List vmNames) throws Exception { VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); HashMap vmResponseMap = new HashMap(); - ManagedObjectReference perfMgr = getServiceContext().getServiceConnection().getServiceContent().getPerfManager(); - VimPortType service = getServiceContext().getServiceConnection().getService(); + ManagedObjectReference perfMgr = getServiceContext().getServiceContent().getPerfManager(); + VimPortType service = getServiceContext().getService(); PerfCounterInfo rxPerfCounterInfo = null; PerfCounterInfo txPerfCounterInfo = null; - PerfCounterInfo[] cInfo = (PerfCounterInfo[]) getServiceContext().getServiceUtil().getDynamicProperty(perfMgr, "perfCounter"); - for(int i=0; i cInfo = (List) getServiceContext().getVimClient().getDynamicProperty(perfMgr, "perfCounter"); + for(PerfCounterInfo info : cInfo) { + if ("net".equalsIgnoreCase(info.getGroupInfo().getKey())) { + if ("transmitted".equalsIgnoreCase(info.getNameInfo().getKey())) { + txPerfCounterInfo = info; } - if ("received".equalsIgnoreCase(cInfo[i].getNameInfo().getKey())) { - rxPerfCounterInfo = cInfo[i]; + if ("received".equalsIgnoreCase(info.getNameInfo().getKey())) { + rxPerfCounterInfo = info; } } } @@ -4493,7 +4669,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa ObjectContent[] ocs = hyperHost.getVmPropertiesOnHyperHost(new String[] {"name", "summary.config.numCpu", "summary.quickStats.overallCpuUsage"}); if (ocs != null && ocs.length > 0) { for (ObjectContent oc : ocs) { - DynamicProperty[] objProps = oc.getPropSet(); + List objProps = oc.getPropSet(); if (objProps != null) { String name = null; String numberCPUs = null; @@ -4517,13 +4693,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa assert(vmMor!=null); ArrayList vmNetworkMetrics = new ArrayList(); - // get all the metrics from the available sample period - PerfMetricId[] perfMetrics = service.queryAvailablePerfMetric(perfMgr, vmMor, null, null, null); + // get all the metrics from the available sample period + List perfMetrics = service.queryAvailablePerfMetric(perfMgr, vmMor, null, null, null); if(perfMetrics != null) { - for(int index=0; index < perfMetrics.length; ++index) { - if ( ((rxPerfCounterInfo != null) && (perfMetrics[index].getCounterId() == rxPerfCounterInfo.getKey())) || - ((txPerfCounterInfo != null) && (perfMetrics[index].getCounterId() == txPerfCounterInfo.getKey())) ) { - vmNetworkMetrics.add(perfMetrics[index]); + for(int index=0; index < perfMetrics.size(); ++index) { + if ( ((rxPerfCounterInfo != null) && (perfMetrics.get(index).getCounterId() == rxPerfCounterInfo.getKey())) || + ((txPerfCounterInfo != null) && (perfMetrics.get(index).getCounterId() == txPerfCounterInfo.getKey())) ) { + vmNetworkMetrics.add(perfMetrics.get(index)); } } } @@ -4536,23 +4712,26 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa PerfQuerySpec qSpec = new PerfQuerySpec(); qSpec.setEntity(vmMor); PerfMetricId[] availableMetricIds = (PerfMetricId[]) vmNetworkMetrics.toArray(new PerfMetricId[0]); - qSpec.setMetricId(availableMetricIds); - PerfQuerySpec[] qSpecs = new PerfQuerySpec[] {qSpec}; - PerfEntityMetricBase[] values = service.queryPerf(perfMgr, qSpecs); + qSpec.getMetricId().addAll(Arrays.asList(availableMetricIds)); + List qSpecs = new ArrayList(); + qSpecs.add(qSpec); + List values = service.queryPerf(perfMgr, qSpecs); - for(int i=0; i infos = ((PerfEntityMetric)values.get(i)).getSampleInfo(); + int endMs = infos.get(infos.size()-1).getTimestamp().getSecond() * 1000 + infos.get(infos.size()-1).getTimestamp().getMillisecond(); + int beginMs = infos.get(0).getTimestamp().getSecond() * 1000 + infos.get(0).getTimestamp().getMillisecond(); + sampleDuration = (endMs - beginMs) /1000; + List vals = ((PerfEntityMetric)values.get(i)).getValue(); + for(int vi = 0; ((vals!= null) && (vi < vals.size())); ++vi){ + if(vals.get(vi) instanceof PerfMetricIntSeries) { + PerfMetricIntSeries val = (PerfMetricIntSeries)vals.get(vi); + List perfValues = val.getValue(); + if (vals.get(vi).getId().getCounterId() == rxPerfCounterInfo.getKey()) { + networkReadKBs = sampleDuration * perfValues.get(3); //get the average RX rate multiplied by sampled duration } - if (vals[vi].getId().getCounterId() == txPerfCounterInfo.getKey()) { - networkWriteKBs = sampleDuration * perfValues[3];//get the average TX rate multiplied by sampled duration + if (vals.get(vi).getId().getCounterId() == txPerfCounterInfo.getKey()) { + networkWriteKBs = sampleDuration * perfValues.get(3);//get the average TX rate multiplied by sampled duration } } } @@ -4562,8 +4741,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } } - return vmResponseMap; - } + return vmResponseMap; + } protected String networkUsage(final String privateIpAddress, final String option, final String ethName) { String args = null; @@ -4596,7 +4775,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return result.second(); } catch (Throwable e) { - s_logger.error("Unable to execute NetworkUsage command on DomR (" + privateIpAddress + "), domR may not be ready yet. failure due to " + s_logger.error("Unable to execute NetworkUsage command on DomR (" + privateIpAddress + "), domR may not be ready yet. failure due to " + VmwareHelper.getExceptionMessage(e), e); } @@ -4737,8 +4916,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa _morHyperHost = new ManagedObjectReference(); String[] hostTokens = tokens[0].split(":"); _morHyperHost.setType(hostTokens[0]); - _morHyperHost.set_value(hostTokens[1]); + _morHyperHost.setValue(hostTokens[1]); + _guestTrafficInfo = (VmwareTrafficLabel) params.get("guestTrafficInfo"); + _publicTrafficInfo = (VmwareTrafficLabel) params.get("publicTrafficInfo"); VmwareContext context = getServiceContext(); try { VmwareManager mgr = context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME); @@ -4746,12 +4927,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa CustomFieldsManagerMO cfmMo = new CustomFieldsManagerMO(context, context.getServiceContent().getCustomFieldsManager()); cfmMo.ensureCustomFieldDef("Datastore", CustomFieldConstants.CLOUD_UUID); - if (mgr.getNexusVSwitchGlobalParameter()) { + if (_publicTrafficInfo != null && _publicTrafficInfo.getVirtualSwitchType() != VirtualSwitchType.StandardVirtualSwitch || + _guestTrafficInfo != null && _guestTrafficInfo.getVirtualSwitchType() != VirtualSwitchType.StandardVirtualSwitch) { cfmMo.ensureCustomFieldDef("DistributedVirtualPortgroup", CustomFieldConstants.CLOUD_GC_DVP); - } else { - cfmMo.ensureCustomFieldDef("Network", CustomFieldConstants.CLOUD_GC); } - + cfmMo.ensureCustomFieldDef("Network", CustomFieldConstants.CLOUD_GC); cfmMo.ensureCustomFieldDef("VirtualMachine", CustomFieldConstants.CLOUD_UUID); cfmMo.ensureCustomFieldDef("VirtualMachine", CustomFieldConstants.CLOUD_NIC_MASK); @@ -4759,15 +4939,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa _hostName = hostMo.getHyperHostName(); Map vsmCredentials; - if (mgr.getNexusVSwitchGlobalParameter()) { + if (_guestTrafficInfo.getVirtualSwitchType() == VirtualSwitchType.NexusDistributedVirtualSwitch || + _publicTrafficInfo.getVirtualSwitchType() == VirtualSwitchType.NexusDistributedVirtualSwitch) { vsmCredentials = mgr.getNexusVSMCredentialsByClusterId(Long.parseLong(_cluster)); if (vsmCredentials != null) { s_logger.info("Stocking credentials while configuring resource."); context.registerStockObject("vsmcredentials", vsmCredentials); } _privateNetworkVSwitchName = mgr.getPrivateVSwitchName(Long.parseLong(_dcId), HypervisorType.VMware); - _publicNetworkVSwitchName = mgr.getPublicVSwitchName(Long.parseLong(_dcId), HypervisorType.VMware); - _guestNetworkVSwitchName = mgr.getGuestVSwitchName(Long.parseLong(_dcId), HypervisorType.VMware); } } catch (Exception e) { @@ -4776,19 +4955,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if(_privateNetworkVSwitchName == null) { _privateNetworkVSwitchName = (String) params.get("private.network.vswitch.name"); - } - if(_publicNetworkVSwitchName == null) { - _publicNetworkVSwitchName = (String) params.get("public.network.vswitch.name"); - } - if(_guestNetworkVSwitchName == null) { - _guestNetworkVSwitchName = (String) params.get("guest.network.vswitch.name"); } - String value = (String) params.get("cpu.overprovisioning.factor"); - if(value != null) - _cpuOverprovisioningFactor = Float.parseFloat(value); - - value = (String) params.get("vmware.reserve.cpu"); + String value = (String) params.get("vmware.reserve.cpu"); if(value != null && value.equalsIgnoreCase("true")) _reserveCpu = true; @@ -4796,10 +4965,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if(value != null && value.equalsIgnoreCase("true")) _recycleHungWorker = true; - value = (String) params.get("mem.overprovisioning.factor"); - if(value != null) - _memOverprovisioningFactor = Float.parseFloat(value); - value = (String) params.get("vmware.reserve.mem"); if(value != null && value.equalsIgnoreCase("true")) _reserveMem = true; @@ -4810,12 +4975,22 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa else _rootDiskController = DiskControllerType.ide; - value = params.get("vmware.use.nexus.vswitch").toString(); - if(value != null && value.equalsIgnoreCase("true")) - _nexusVSwitch = true; + Integer intObj = (Integer) params.get("ports.per.dvportgroup"); + if (intObj != null) + _portsPerDvPortGroup = intObj.intValue(); - s_logger.info("VmwareResource network configuration info. private vSwitch: " + _privateNetworkVSwitchName + ", public vSwitch: " + _publicNetworkVSwitchName + ", guest network: " - + _guestNetworkVSwitchName); + s_logger.info("VmwareResource network configuration info." + + " private traffic over vSwitch: " + _privateNetworkVSwitchName + ", public traffic over " + + this._publicTrafficInfo.getVirtualSwitchType() + " : " + this._publicTrafficInfo.getVirtualSwitchName() + + ", guest traffic over " + this._guestTrafficInfo.getVirtualSwitchType() + " : " + + this._guestTrafficInfo.getVirtualSwitchName()); + + value = params.get("vmware.create.full.clone").toString(); + if (value != null && value.equalsIgnoreCase("true")) { + _fullCloneFlag = true; + } else { + _fullCloneFlag = false; + } return true; } @@ -4914,13 +5089,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa @Override public void setName(String name) { // TODO Auto-generated method stub - + } @Override public void setConfigParams(Map params) { // TODO Auto-generated method stub - + } @Override @@ -4938,6 +5113,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa @Override public void setRunLevel(int level) { // TODO Auto-generated method stub - + } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/VmwareTrafficLabel.java b/plugins/hypervisors/vmware/src/com/cloud/network/VmwareTrafficLabel.java new file mode 100644 index 00000000000..90a42781e29 --- /dev/null +++ b/plugins/hypervisors/vmware/src/com/cloud/network/VmwareTrafficLabel.java @@ -0,0 +1,118 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network; + +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.hypervisor.vmware.mo.VirtualSwitchType; +import com.cloud.network.Networks.TrafficType; + +public class VmwareTrafficLabel implements TrafficLabel { + public static final String DEFAULT_VSWITCH_NAME = "vSwitch0"; + public static final String DEFAULT_DVSWITCH_NAME = "dvSwitch0"; + public static final String DEFAULT_NDVSWITCH_NAME = "epp0"; + public static final int MAX_FIELDS_VMWARE_LABEL = 3; + public static final int VMWARE_LABEL_FIELD_INDEX_NAME = 0; + public static final int VMWARE_LABEL_FIELD_INDEX_VLANID = 1; + public static final int VMWARE_LABEL_FIELD_INDEX_VSWITCH_TYPE = 2; + + TrafficType _trafficType = TrafficType.None; + VirtualSwitchType _vSwitchType = VirtualSwitchType.StandardVirtualSwitch; + String _vSwitchName = DEFAULT_VSWITCH_NAME; + String _vlanId = null; + + public VmwareTrafficLabel(String networkLabel, TrafficType trafficType, VirtualSwitchType defVswitchType) { + _trafficType = trafficType; + _parseLabel(networkLabel, defVswitchType); + } + + public VmwareTrafficLabel(String networkLabel, TrafficType trafficType) { + _trafficType = trafficType; + _parseLabel(networkLabel, VirtualSwitchType.StandardVirtualSwitch); + } + + public VmwareTrafficLabel(TrafficType trafficType, VirtualSwitchType defVswitchType) { + _trafficType = trafficType; // Define traffic label with specific traffic type + _parseLabel(null, defVswitchType); + } + + public VmwareTrafficLabel(TrafficType trafficType) { + _trafficType = trafficType; // Define traffic label with specific traffic type + _parseLabel(null, VirtualSwitchType.StandardVirtualSwitch); + } + + public VmwareTrafficLabel() { + } + + private void _parseLabel(String networkLabel, VirtualSwitchType defVswitchType) { + if (networkLabel == null || networkLabel.isEmpty()) { + // Set defaults for label in case of distributed vSwitch + if (defVswitchType.equals(VirtualSwitchType.VMwareDistributedVirtualSwitch)) { + _vSwitchName = DEFAULT_DVSWITCH_NAME; + _vSwitchType = VirtualSwitchType.VMwareDistributedVirtualSwitch; + } else if (defVswitchType.equals(VirtualSwitchType.NexusDistributedVirtualSwitch)) { + _vSwitchName = DEFAULT_NDVSWITCH_NAME; + _vSwitchType = VirtualSwitchType.NexusDistributedVirtualSwitch; + } + return; + } + String[] tokens = networkLabel.split(","); + if (tokens.length > VMWARE_LABEL_FIELD_INDEX_NAME) { + _vSwitchName = tokens[VMWARE_LABEL_FIELD_INDEX_NAME].trim(); + } + if (tokens.length > VMWARE_LABEL_FIELD_INDEX_VLANID) { + _vlanId = tokens[VMWARE_LABEL_FIELD_INDEX_VLANID].trim(); + } + if (tokens.length > VMWARE_LABEL_FIELD_INDEX_VSWITCH_TYPE) { + _vSwitchType = VirtualSwitchType.getType(tokens[VMWARE_LABEL_FIELD_INDEX_VSWITCH_TYPE].trim()); + if(VirtualSwitchType.None == _vSwitchType) { + throw new InvalidParameterValueException("Invalid virtual switch type : " + tokens[VMWARE_LABEL_FIELD_INDEX_VSWITCH_TYPE].trim()); + } + } + if (tokens.length > MAX_FIELDS_VMWARE_LABEL ) { + throw new InvalidParameterValueException("Found extraneous fields in vmware traffic label : " + networkLabel); + } + } + + @Override + public TrafficType getTrafficType() { + return _trafficType; + } + + @Override + public String getNetworkLabel() { + return null; + } + + public VirtualSwitchType getVirtualSwitchType() { + return _vSwitchType; + } + + public String getVirtualSwitchName() { + return _vSwitchName; + } + + public String getVlanId() { + return _vlanId; + } + public void setVirtualSwitchName(String vSwitchName) { + _vSwitchName = vSwitchName; + } + + public void setVirtualSwitchType(VirtualSwitchType vSwitchType) { + _vSwitchType = vSwitchType; + } +} diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java index fc298c895c8..646ef633fc7 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java +++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageContextFactory.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.storage.resource; @@ -20,45 +20,44 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import com.cloud.hypervisor.vmware.util.VmwareClient; import com.cloud.hypervisor.vmware.util.VmwareContext; -import com.vmware.apputils.version.ExtendedAppUtil; public class VmwareSecondaryStorageContextFactory { private static volatile int s_seq = 1; - + private static Map s_contextMap = new HashMap(); - + public static void initFactoryEnvironment() { System.setProperty("axis.socketSecureFactory", "org.apache.axis.components.net.SunFakeTrustSocketFactory"); } - + public static VmwareContext create(String vCenterAddress, String vCenterUserName, String vCenterPassword) throws Exception { assert(vCenterAddress != null); assert(vCenterUserName != null); assert(vCenterPassword != null); - + VmwareContext context = null; - + synchronized(s_contextMap) { context = s_contextMap.get(vCenterAddress); if(context == null) { String serviceUrl = "https://" + vCenterAddress + "/sdk/vimService"; - String[] params = new String[] {"--url", serviceUrl, "--username", vCenterUserName, "--password", vCenterPassword }; - ExtendedAppUtil appUtil = ExtendedAppUtil.initialize(vCenterAddress + "-" + s_seq++, params); - - appUtil.connect(); - context = new VmwareContext(appUtil, vCenterAddress); + //String[] params = new String[] {"--url", serviceUrl, "--username", vCenterUserName, "--password", vCenterPassword }; + VmwareClient vimClient = new VmwareClient(vCenterAddress + "-" + s_seq++); + vimClient.connect(serviceUrl, vCenterUserName, vCenterPassword); + context = new VmwareContext(vimClient, vCenterAddress); context.registerStockObject("username", vCenterUserName); context.registerStockObject("password", vCenterPassword); - + s_contextMap.put(vCenterAddress, context); } } - + assert(context != null); return context; } - + public static void invalidate(VmwareContext context) { synchronized(s_contextMap) { for(Iterator> entryIter = s_contextMap.entrySet().iterator(); entryIter.hasNext();) { @@ -68,7 +67,7 @@ public class VmwareSecondaryStorageContextFactory { } } } - + context.close(); } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java index 2abed160dfc..566e750c3fe 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java +++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareSecondaryStorageResourceHandler.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.storage.resource; @@ -85,11 +85,11 @@ public class VmwareSecondaryStorageResourceHandler implements SecondaryStorageRe if(cmd.getContextParam("execid") != null) { answer.setContextParam("execid", cmd.getContextParam("execid")); } - + if(cmd.getContextParam("checkpoint") != null) { answer.setContextParam("checkpoint", cmd.getContextParam("checkpoint")); } - + if(cmd.getContextParam("checkpoint2") != null) { answer.setContextParam("checkpoint2", cmd.getContextParam("checkpoint2")); } @@ -219,23 +219,23 @@ public class VmwareSecondaryStorageResourceHandler implements SecondaryStorageRe } morHyperHost.setType(hostTokens[0]); - morHyperHost.set_value(hostTokens[1]); + morHyperHost.setValue(hostTokens[1]); if(morHyperHost.getType().equalsIgnoreCase("HostSystem")) { HostMO hostMo = new HostMO(context, morHyperHost); try { - + ManagedObjectReference mor = hostMo.getHyperHostCluster(); ClusterMO clusterMo = new ClusterMO(hostMo.getContext(), mor); List> hostsInCluster = clusterMo.getClusterHosts(); for(Pair hostPair : hostsInCluster) { HostMO hostIteratorMo = new HostMO(hostMo.getContext(), hostPair.first()); - + VmwareHypervisorHostNetworkSummary netSummary = hostIteratorMo.getHyperHostNetworkSummary( hostIteratorMo.getHostType() == VmwareHostType.ESXi ? cmd.getContextParam("manageportgroup") : cmd.getContextParam("serviceconsole")); _resource.ensureOutgoingRuleForAddress(netSummary.getHostIp()); - + s_logger.info("Setup firewall rule for host: " + netSummary.getHostIp()); } } catch(Throwable e) { @@ -253,7 +253,7 @@ public class VmwareSecondaryStorageResourceHandler implements SecondaryStorageRe public String getWorkerName(VmwareContext context, Command cmd, int workerSequence) { assert(cmd.getContextParam("worker") != null); assert(workerSequence < 2); - + if(workerSequence == 0) return cmd.getContextParam("worker"); return cmd.getContextParam("worker2"); @@ -276,7 +276,7 @@ public class VmwareSecondaryStorageResourceHandler implements SecondaryStorageRe assert(hostTokens.length == 2); morHyperHost.setType(hostTokens[0]); - morHyperHost.set_value(hostTokens[1]); + morHyperHost.setValue(hostTokens[1]); if(morHyperHost.getType().equalsIgnoreCase("HostSystem")) { HostMO hostMo = new HostMO(context, morHyperHost); diff --git a/plugins/hypervisors/xen/pom.xml b/plugins/hypervisors/xen/pom.xml index 0a57afca284..72d32f3029c 100644 --- a/plugins/hypervisors/xen/pom.xml +++ b/plugins/hypervisors/xen/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java index 65a97a8de31..89bc1cf5708 100755 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java @@ -79,9 +79,9 @@ import com.cloud.resource.ResourceManager; import com.cloud.resource.ResourceStateAdapter; import com.cloud.resource.ServerResource; import com.cloud.resource.UnableDeleteHostException; +import com.cloud.storage.VMTemplateVO; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.TemplateType; -import com.cloud.storage.VMTemplateVO; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.user.Account; @@ -315,6 +315,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L params.put("wait", Integer.toString(_wait)); details.put("wait", Integer.toString(_wait)); params.put("migratewait", _configDao.getValue(Config.MigrateWait.toString())); + params.put(Config.XenMaxNics.toString().toLowerCase(), _configDao.getValue(Config.XenMaxNics.toString())); params.put(Config.InstanceName.toString().toLowerCase(), _instance); details.put(Config.InstanceName.toString().toLowerCase(), _instance); try { @@ -426,8 +427,8 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L prodVersion = prodVersion.trim(); } - if(prodBrand.equals("XCP") && (prodVersion.equals("1.0.0") || prodVersion.equals("1.1.0") || prodVersion.equals("5.6.100") || prodVersion.startsWith("1.4") )) - return new XcpServerResource(); + if(prodBrand.equals("XCP") && (prodVersion.equals("1.0.0") || prodVersion.equals("1.1.0") || prodVersion.equals("5.6.100") || prodVersion.startsWith("1.4") || prodVersion.startsWith("1.6"))) + return new XcpServerResource(); if(prodBrand.equals("XenServer") && prodVersion.equals("5.6.0")) return new XenServer56Resource(); @@ -454,7 +455,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L return new XcpOssResource(); } - String msg = "Only support XCP 1.0.0, 1.1.0, 1.5 beta; XenServer 5.6, XenServer 5.6 FP1, XenServer 5.6 SP2, Xenserver 6.0, 6.0.2, 6.1.0 but this one is " + prodBrand + " " + prodVersion; + String msg = "Only support XCP 1.0.0, 1.1.0, 1.4.x, 1.5 beta, 1.6.x; XenServer 5.6, XenServer 5.6 FP1, XenServer 5.6 SP2, Xenserver 6.0, 6.0.2, 6.1.0 but this one is " + prodBrand + " " + prodVersion; _alertMgr.sendAlert(AlertManager.ALERT_TYPE_HOST, dcId, podId, msg, msg); s_logger.debug(msg); throw new RuntimeException(msg); @@ -582,7 +583,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L String prodBrand = details.get("product_brand").trim(); String prodVersion = details.get("product_version").trim(); - if(prodBrand.equals("XCP") && (prodVersion.equals("1.0.0") || prodVersion.equals("1.1.0") || prodVersion.equals("5.6.100") || prodVersion.startsWith("1.4"))) { + if(prodBrand.equals("XCP") && (prodVersion.equals("1.0.0") || prodVersion.equals("1.1.0") || prodVersion.equals("5.6.100") || prodVersion.startsWith("1.4") || prodVersion.startsWith("1.6"))) { resource = XcpServerResource.class.getName(); } else if(prodBrand.equals("XenServer") && prodVersion.equals("5.6.0")) { resource = XenServer56Resource.class.getName(); @@ -604,7 +605,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L } if( resource == null ){ - String msg = "Only support XCP 1.0.0, 1.1.0, 1.5 beta; XenServer 5.6, 5.6 FP1, 5.6 SP2 and Xenserver 6.0 , 6.0.2, 6.1.0 but this one is " + prodBrand + " " + prodVersion; + String msg = "Only support XCP 1.0.0, 1.1.0, 1.4.x, 1.5 beta, 1.6.x; XenServer 5.6, 5.6 FP1, 5.6 SP2 and Xenserver 6.0 , 6.0.2, 6.1.0 but this one is " + prodBrand + " " + prodVersion; s_logger.debug(msg); throw new RuntimeException(msg); } diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 71f2002b83a..886fc6f04fa 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -90,9 +90,13 @@ import com.cloud.agent.api.Command; import com.cloud.agent.api.CreatePrivateTemplateFromSnapshotCommand; import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand; import com.cloud.agent.api.CreateStoragePoolCommand; +import com.cloud.agent.api.CreateVMSnapshotAnswer; +import com.cloud.agent.api.CreateVMSnapshotCommand; import com.cloud.agent.api.CreateVolumeFromSnapshotAnswer; import com.cloud.agent.api.CreateVolumeFromSnapshotCommand; import com.cloud.agent.api.DeleteStoragePoolCommand; +import com.cloud.agent.api.DeleteVMSnapshotAnswer; +import com.cloud.agent.api.DeleteVMSnapshotCommand; import com.cloud.agent.api.GetDomRVersionAnswer; import com.cloud.agent.api.GetDomRVersionCmd; import com.cloud.agent.api.GetHostStatsAnswer; @@ -129,6 +133,8 @@ import com.cloud.agent.api.ReadyCommand; import com.cloud.agent.api.RebootAnswer; import com.cloud.agent.api.RebootCommand; import com.cloud.agent.api.RebootRouterCommand; +import com.cloud.agent.api.RevertToVMSnapshotAnswer; +import com.cloud.agent.api.RevertToVMSnapshotCommand; import com.cloud.agent.api.SecurityGroupRuleAnswer; import com.cloud.agent.api.SecurityGroupRulesCmd; import com.cloud.agent.api.SetupAnswer; @@ -237,6 +243,7 @@ import com.cloud.utils.net.NetUtils; import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State; +import com.cloud.vm.snapshot.VMSnapshot; import com.trilead.ssh2.SCPClient; import com.xensource.xenapi.Bond; import com.xensource.xenapi.Connection; @@ -256,6 +263,10 @@ import com.xensource.xenapi.Types; import com.xensource.xenapi.Types.BadServerResponse; import com.xensource.xenapi.Types.ConsoleProtocol; import com.xensource.xenapi.Types.IpConfigurationMode; +import com.xensource.xenapi.Types.OperationNotAllowed; +import com.xensource.xenapi.Types.SrFull; +import com.xensource.xenapi.Types.VbdType; +import com.xensource.xenapi.Types.VmBadPowerState; import com.xensource.xenapi.Types.VmPowerState; import com.xensource.xenapi.Types.XenAPIException; import com.xensource.xenapi.VBD; @@ -320,6 +331,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe protected boolean _isOvs = false; protected List _tmpDom0Vif = new ArrayList(); protected XenServerStorageResource storageResource; + protected int _maxNics = 7; public enum SRType { NFS, LVM, ISCSI, ISO, LVMOISCSI, LVMOHBA, EXT, FILE; @@ -579,11 +591,109 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return execute((CheckS2SVpnConnectionsCommand) cmd); } else if (cmd instanceof StorageSubSystemCommand) { return this.storageResource.handleStorageCommands((StorageSubSystemCommand)cmd); + } else if (clazz == CreateVMSnapshotCommand.class) { + return execute((CreateVMSnapshotCommand)cmd); + } else if (clazz == DeleteVMSnapshotCommand.class) { + return execute((DeleteVMSnapshotCommand)cmd); + } else if (clazz == RevertToVMSnapshotCommand.class) { + return execute((RevertToVMSnapshotCommand)cmd); } else { return Answer.createUnsupportedCommandAnswer(cmd); } } + + + private Answer execute(RevertToVMSnapshotCommand cmd) { + String vmName = cmd.getVmName(); + List listVolumeTo = cmd.getVolumeTOs(); + VMSnapshot.Type vmSnapshotType = cmd.getTarget().getType(); + Boolean snapshotMemory = vmSnapshotType == VMSnapshot.Type.DiskAndMemory; + Connection conn = getConnection(); + VirtualMachine.State vmState = null; + VM vm = null; + try { + + // remove vm from s_vms, for delta sync + s_vms.remove(_cluster, _name, vmName); + + Set vmSnapshots = VM.getByNameLabel(conn, cmd.getTarget().getSnapshotName()); + if(vmSnapshots.size() == 0) + return new RevertToVMSnapshotAnswer(cmd, false, "Cannot find vmSnapshot with name: " + cmd.getTarget().getSnapshotName()); + + VM vmSnapshot = vmSnapshots.iterator().next(); + + // find target VM or creating a work VM + try { + vm = getVM(conn, vmName); + } catch (Exception e) { + vm = createWorkingVM(conn, vmName, cmd.getGuestOSType(), listVolumeTo); + } + + if (vm == null) { + return new RevertToVMSnapshotAnswer(cmd, false, + "Revert to VM Snapshot Failed due to can not find vm: " + vmName); + } + + // call plugin to execute revert + revertToSnapshot(conn, vmSnapshot, vmName, vm.getUuid(conn), snapshotMemory, _host.uuid); + vm = getVM(conn, vmName); + Set vbds = vm.getVBDs(conn); + Map vdiMap = new HashMap(); + // get vdi:vbdr to a map + for (VBD vbd : vbds) { + VBD.Record vbdr = vbd.getRecord(conn); + if (vbdr.type == Types.VbdType.DISK) { + VDI vdi = vbdr.VDI; + vdiMap.put(vbdr.userdevice, vdi); + } + } + + if (!snapshotMemory) { + vm.destroy(conn); + vmState = VirtualMachine.State.Stopped; + } else { + s_vms.put(_cluster, _name, vmName, State.Running); + vmState = VirtualMachine.State.Running; + } + + // after revert, VM's volumes path have been changed, need to report to manager + for (VolumeTO volumeTo : listVolumeTo) { + Long deviceId = volumeTo.getDeviceId(); + VDI vdi = vdiMap.get(deviceId.toString()); + volumeTo.setPath(vdi.getUuid(conn)); + } + + return new RevertToVMSnapshotAnswer(cmd, listVolumeTo,vmState); + } catch (Exception e) { + s_logger.error("revert vm " + vmName + + " to snapshot " + cmd.getTarget().getSnapshotName() + " failed due to " + e.getMessage()); + return new RevertToVMSnapshotAnswer(cmd, false, e.getMessage()); + } + } + + private String revertToSnapshot(Connection conn, VM vmSnapshot, + String vmName, String oldVmUuid, Boolean snapshotMemory, String hostUUID) + throws XenAPIException, XmlRpcException { + + String results = callHostPluginAsync(conn, "vmopsSnapshot", + "revert_memory_snapshot", 10 * 60 * 1000, "snapshotUUID", + vmSnapshot.getUuid(conn), "vmName", vmName, "oldVmUuid", + oldVmUuid, "snapshotMemory", snapshotMemory.toString(), "hostUUID", hostUUID); + String errMsg = null; + if (results == null || results.isEmpty()) { + errMsg = "revert_memory_snapshot return null"; + } else { + if (results.equals("0")) { + return results; + } else { + errMsg = "revert_memory_snapshot exception"; + } + } + s_logger.warn(errMsg); + throw new CloudRuntimeException(errMsg); + } + protected XsLocalNetwork getNativeNetworkForTraffic(Connection conn, TrafficType type, String name) throws XenAPIException, XmlRpcException { if (name != null) { if (s_logger.isDebugEnabled()) { @@ -1004,13 +1114,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe vm.setAffinity(conn, host); vm.removeFromOtherConfig(conn, "disks"); vm.setNameLabel(conn, vmSpec.getName()); - setMemory(conn, vm, vmSpec.getMinRam()); + setMemory(conn, vm, vmSpec.getMinRam(),vmSpec.getMaxRam()); vm.setVCPUsMax(conn, (long)vmSpec.getCpus()); vm.setVCPUsAtStartup(conn, (long)vmSpec.getCpus()); Map vcpuParams = new HashMap(); - Integer speed = vmSpec.getSpeed(); + Integer speed = vmSpec.getMinSpeed(); if (speed != null) { int cpuWeight = _maxWeight; //cpu_weight @@ -1780,6 +1890,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe args += " -u " + cmd.getDuid(); } + if (!cmd.isDefault()) { + args += " -z"; + } + String result = callHostPlugin(conn, "vmops", "saveDhcpEntry", "args", args); if (result == null || result.isEmpty()) { return new Answer(cmd, false, "DhcpEntry failed"); @@ -3143,8 +3257,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } } - protected void setMemory(Connection conn, VM vm, long memsize) throws XmlRpcException, XenAPIException { - vm.setMemoryLimits(conn, memsize, memsize, memsize, memsize); + protected void setMemory(Connection conn, VM vm, long minMemsize, long maxMemsize) throws XmlRpcException, XenAPIException { + vm.setMemoryLimits(conn, maxMemsize, maxMemsize, minMemsize, maxMemsize); } private void waitForTask(Connection c, Task task, long pollInterval, long timeout) throws XenAPIException, XmlRpcException { @@ -3733,22 +3847,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe throw new CloudRuntimeException("Could not find an available slot in VM with name to attach a new disk."); } - - protected String getUnusedVIFNum(Connection conn, VM vm) { - String vmName = ""; - try { - vmName = vm.getNameLabel(conn); - Set allowedVIFDevices = vm.getAllowedVIFDevices(conn); - if (allowedVIFDevices.size() > 0) { - return allowedVIFDevices.iterator().next(); - } - } catch (Exception e) { - String msg = "getUnusedVIFNum failed due to " + e.toString(); - s_logger.warn(msg, e); - } - throw new CloudRuntimeException("Could not find available VIF slot in VM with name: " + vmName + " to plug a VIF"); - } - protected String callHostPlugin(Connection conn, String plugin, String cmd, String... params) { Map args = new HashMap(); String msg; @@ -3880,22 +3978,29 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } protected String getLowestAvailableVIFDeviceNum(Connection conn, VM vm) { + String vmName = ""; try { - Set availableDeviceNums = vm.getAllowedVIFDevices(conn); - Iterator deviceNumsIterator = availableDeviceNums.iterator(); - List sortedDeviceNums = new ArrayList(); - - while (deviceNumsIterator.hasNext()) { - try { - sortedDeviceNums.add(Integer.valueOf(deviceNumsIterator.next())); + vmName = vm.getNameLabel(conn); + List usedDeviceNums = new ArrayList(); + Set vifs = vm.getVIFs(conn); + Iterator vifIter = vifs.iterator(); + while(vifIter.hasNext()){ + VIF vif = vifIter.next(); + try{ + usedDeviceNums.add(Integer.valueOf(vif.getDevice(conn))); } catch (NumberFormatException e) { - s_logger.debug("Obtained an invalid value for an available VIF device number for VM: " + vm.getNameLabel(conn)); - return null; + String msg = "Obtained an invalid value for an allocated VIF device number for VM: " + vmName; + s_logger.debug(msg, e); + throw new CloudRuntimeException(msg); } } - Collections.sort(sortedDeviceNums); - return String.valueOf(sortedDeviceNums.get(0)); + for(Integer i=0; i< _maxNics; i++){ + if(!usedDeviceNums.contains(i)){ + s_logger.debug("Lowest available Vif device number: "+i+" for VM: " + vmName); + return i.toString(); + } + } } catch (XmlRpcException e) { String msg = "Caught XmlRpcException: " + e.getMessage(); s_logger.warn(msg, e); @@ -3904,7 +4009,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe s_logger.warn(msg, e); } - return null; + throw new CloudRuntimeException("Could not find available VIF slot in VM with name: " + vmName); } protected VDI mount(Connection conn, StoragePoolType pooltype, String volumeFolder, String volumePath) { @@ -4713,6 +4818,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe throw new CloudRuntimeException("Unable to authenticate"); } + com.trilead.ssh2.Session session = sshConnection.openSession(); SCPClient scp = new SCPClient(sshConnection); List files = getPatchFiles(); @@ -4761,6 +4867,12 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (s_logger.isDebugEnabled()) { s_logger.debug("Copying " + f + " to " + d + " on " + hr.address + " with permission " + p); } + try { + session.execCommand("mkdir -m 700 -p " + d); + } catch (IOException e) { + s_logger.debug("Unable to create destination path: " + d + " on " + hr.address + " but trying anyway"); + + } scp.put(f, d, p); } @@ -5539,6 +5651,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe value = (String) params.get("migratewait"); _migratewait = NumbersUtil.parseInt(value, 3600); + _maxNics = NumbersUtil.parseInt((String) params.get("xen.nics.max"), 7); + if (_pod == null) { throw new ConfigurationException("Unable to get the pod"); } @@ -6160,6 +6274,199 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } + protected Answer execute(final CreateVMSnapshotCommand cmd) { + String vmName = cmd.getVmName(); + String vmSnapshotName = cmd.getTarget().getSnapshotName(); + List listVolumeTo = cmd.getVolumeTOs(); + VirtualMachine.State vmState = cmd.getVmState(); + String guestOSType = cmd.getGuestOSType(); + + boolean snapshotMemory = cmd.getTarget().getType() == VMSnapshot.Type.DiskAndMemory; + long timeout = 600; + + Connection conn = getConnection(); + VM vm = null; + VM vmSnapshot = null; + boolean success = false; + + try { + // check if VM snapshot already exists + Set vmSnapshots = VM.getByNameLabel(conn, cmd.getTarget().getSnapshotName()); + if(vmSnapshots.size() > 0) + return new CreateVMSnapshotAnswer(cmd, cmd.getTarget(), cmd.getVolumeTOs()); + + // check if there is already a task for this VM snapshot + Task task = null; + Set tasks = Task.getByNameLabel(conn, "Async.VM.snapshot"); + tasks.addAll(Task.getByNameLabel(conn, "Async.VM.checkpoint")); + for (Task taskItem : tasks) { + if(taskItem.getOtherConfig(conn).containsKey("CS_VM_SNAPSHOT_KEY")){ + String vmSnapshotTaskName = taskItem.getOtherConfig(conn).get("CS_VM_SNAPSHOT_KEY"); + if(vmSnapshotTaskName != null && vmSnapshotTaskName.equals(cmd.getTarget().getSnapshotName())){ + task = taskItem; + } + } + } + + // create a new task if there is no existing task for this VM snapshot + if(task == null){ + try { + vm = getVM(conn, vmName); + } catch (Exception e) { + if (!snapshotMemory) { + vm = createWorkingVM(conn, vmName, guestOSType, listVolumeTo); + } + } + + if (vm == null) { + return new CreateVMSnapshotAnswer(cmd, false, + "Creating VM Snapshot Failed due to can not find vm: " + + vmName); + } + + // call Xenserver API + if (!snapshotMemory) { + task = vm.snapshotAsync(conn, vmSnapshotName); + } else { + Set vbds = vm.getVBDs(conn); + Pool pool = Pool.getByUuid(conn, _host.pool); + for (VBD vbd: vbds){ + VBD.Record vbdr = vbd.getRecord(conn); + if (vbdr.userdevice.equals("0")){ + VDI vdi = vbdr.VDI; + SR sr = vdi.getSR(conn); + // store memory image on the same SR with ROOT volume + pool.setSuspendImageSR(conn, sr); + } + } + task = vm.checkpointAsync(conn, vmSnapshotName); + } + task.addToOtherConfig(conn, "CS_VM_SNAPSHOT_KEY", vmSnapshotName); + } + + waitForTask(conn, task, 1000, timeout * 1000); + checkForSuccess(conn, task); + String result = task.getResult(conn); + + // extract VM snapshot ref from result + String ref = result.substring("".length(), result.length() - "".length()); + vmSnapshot = Types.toVM(ref); + + success = true; + return new CreateVMSnapshotAnswer(cmd, cmd.getTarget(), cmd.getVolumeTOs()); + } catch (Exception e) { + String msg = e.getMessage(); + s_logger.error("Creating VM Snapshot " + cmd.getTarget().getSnapshotName() + " failed due to: " + msg); + return new CreateVMSnapshotAnswer(cmd, false, msg); + } finally { + try { + if (!success) { + if (vmSnapshot != null) { + s_logger.debug("Delete exsisting VM Snapshot " + + vmSnapshotName + + " after making VolumeTO failed"); + Set vbds = vmSnapshot.getVBDs(conn); + for (VBD vbd : vbds) { + VBD.Record vbdr = vbd.getRecord(conn); + if (vbdr.type == VbdType.DISK) { + VDI vdi = vbdr.VDI; + vdi.destroy(conn); + } + } + vmSnapshot.destroy(conn); + } + } + if (vmState == VirtualMachine.State.Stopped) { + if (vm != null) { + vm.destroy(conn); + } + } + } catch (Exception e2) { + s_logger.error("delete snapshot error due to " + + e2.getMessage()); + } + } + } + + private VM createWorkingVM(Connection conn, String vmName, + String guestOSType, List listVolumeTo) + throws BadServerResponse, VmBadPowerState, SrFull, + OperationNotAllowed, XenAPIException, XmlRpcException { + String guestOsTypeName = getGuestOsType(guestOSType, false); + if (guestOsTypeName == null) { + String msg = " Hypervisor " + this.getClass().getName() + + " doesn't support guest OS type " + guestOSType + + ". you can choose 'Other install media' to run it as HVM"; + s_logger.warn(msg); + throw new CloudRuntimeException(msg); + } + VM template = getVM(conn, guestOsTypeName); + VM vm = template.createClone(conn, vmName); + vm.setIsATemplate(conn, false); + Map vdiMap = new HashMap(); + for (VolumeTO volume : listVolumeTo) { + String vdiUuid = volume.getPath(); + try { + VDI vdi = VDI.getByUuid(conn, vdiUuid); + vdiMap.put(vdi, volume); + } catch (Types.UuidInvalid e) { + s_logger.warn("Unable to find vdi by uuid: " + vdiUuid + + ", skip it"); + } + } + for (VDI vdi : vdiMap.keySet()) { + VolumeTO volumeTO = vdiMap.get(vdi); + VBD.Record vbdr = new VBD.Record(); + vbdr.VM = vm; + vbdr.VDI = vdi; + if (volumeTO.getType() == Volume.Type.ROOT) { + vbdr.bootable = true; + vbdr.unpluggable = false; + } else { + vbdr.bootable = false; + vbdr.unpluggable = true; + } + vbdr.userdevice = new Long(volumeTO.getDeviceId()).toString(); + vbdr.mode = Types.VbdMode.RW; + vbdr.type = Types.VbdType.DISK; + VBD.create(conn, vbdr); + } + return vm; + } + + protected Answer execute(final DeleteVMSnapshotCommand cmd) { + String snapshotName = cmd.getTarget().getSnapshotName(); + Connection conn = getConnection(); + + try { + List vdiList = new ArrayList(); + Set snapshots = VM.getByNameLabel(conn, snapshotName); + if(snapshots.size() == 0){ + s_logger.warn("VM snapshot with name " + snapshotName + " does not exist, assume it is already deleted"); + return new DeleteVMSnapshotAnswer(cmd, cmd.getVolumeTOs()); + } + VM snapshot = snapshots.iterator().next(); + Set vbds = snapshot.getVBDs(conn); + for (VBD vbd : vbds) { + if (vbd.getType(conn) == VbdType.DISK) { + VDI vdi = vbd.getVDI(conn); + vdiList.add(vdi); + } + } + if(cmd.getTarget().getType() == VMSnapshot.Type.DiskAndMemory) + vdiList.add(snapshot.getSuspendVDI(conn)); + snapshot.destroy(conn); + for (VDI vdi : vdiList) { + vdi.destroy(conn); + } + return new DeleteVMSnapshotAnswer(cmd, cmd.getVolumeTOs()); + } catch (Exception e) { + s_logger.warn("Catch Exception: " + e.getClass().toString() + + " due to " + e.toString(), e); + return new DeleteVMSnapshotAnswer(cmd, false, e.getMessage()); + } + } + protected Answer execute(final AttachIsoCommand cmd) { Connection conn = getConnection(); boolean attach = cmd.isAttach(); @@ -7456,7 +7763,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe s_logger.warn(msg); return new PlugNicAnswer(cmd, false, msg); } - String deviceId = getUnusedVIFNum(conn, vm); + String deviceId = getLowestAvailableVIFDeviceNum(conn, vm); nic.setDeviceId(Integer.parseInt(deviceId)); vif = createVif(conn, vmName, vm, nic); vif.plug(conn); diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java index 0ce91bc58e2..7a958708e76 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpServerResource.java @@ -72,17 +72,17 @@ public class XcpServerResource extends CitrixResourceBase { } @Override - protected void setMemory(Connection conn, VM vm, long memsize) throws XmlRpcException, XenAPIException { + protected void setMemory(Connection conn, VM vm, long minMemsize, long maxMemsize) throws XmlRpcException, XenAPIException { vm.setMemoryStaticMin(conn, 33554432L); - vm.setMemoryDynamicMin(conn, 33554432L); - vm.setMemoryDynamicMax(conn, 33554432L); + //vm.setMemoryDynamicMin(conn, 33554432L); + //vm.setMemoryDynamicMax(conn, 33554432L); vm.setMemoryStaticMax(conn, 33554432L); - vm.setMemoryStaticMax(conn, memsize); - vm.setMemoryDynamicMax(conn, memsize); - vm.setMemoryDynamicMin(conn, memsize); - vm.setMemoryStaticMin(conn, memsize); + //vm.setMemoryStaticMax(conn, maxMemsize ); + vm.setMemoryDynamicMax(conn, maxMemsize ); + vm.setMemoryDynamicMin(conn, minMemsize ); + //vm.setMemoryStaticMin(conn, maxMemsize ); } @@ -99,7 +99,7 @@ public class XcpServerResource extends CitrixResourceBase { return answer; } catch (Exception ex) { s_logger.warn("Failed to get network usage stats due to ", ex); - return new NetworkUsageAnswer(cmd, ex); + return new NetworkUsageAnswer(cmd, ex); } } diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java index 58b8a035171..7040311d04e 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java @@ -136,9 +136,9 @@ public class XenServer56FP1Resource extends XenServer56Resource { record.nameLabel = vmSpec.getName(); record.actionsAfterCrash = Types.OnCrashBehaviour.DESTROY; record.actionsAfterShutdown = Types.OnNormalExit.DESTROY; - record.memoryDynamicMax = vmSpec.getMinRam(); + record.memoryDynamicMax = vmSpec.getMaxRam(); record.memoryDynamicMin = vmSpec.getMinRam(); - record.memoryStaticMax = vmSpec.getMinRam(); + record.memoryStaticMax = vmSpec.getMaxRam(); record.memoryStaticMin = vmSpec.getMinRam(); record.VCPUsMax = (long) vmSpec.getCpus(); record.VCPUsAtStartup = (long) vmSpec.getCpus(); @@ -152,7 +152,7 @@ public class XenServer56FP1Resource extends XenServer56Resource { Map vcpuParams = new HashMap(); - Integer speed = vmSpec.getSpeed(); + Integer speed = vmSpec.getMinSpeed(); if (speed != null) { int cpuWeight = _maxWeight; // cpu_weight diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java index 70660d2bb69..9c291491114 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java @@ -144,6 +144,7 @@ public class XenServerStorageResource { try { obj = Decoder.decode(uriString); + DecodedDataStore store = obj.getStore(); if (obj.getObjType().equalsIgnoreCase("template") && store.getRole().equalsIgnoreCase("image")) { return getTemplateSize(cmd, obj.getPath()); @@ -224,6 +225,7 @@ public class XenServerStorageResource { } protected SR getNfsSR(Connection conn, DecodedDataStore store) { + Map deviceConfig = new HashMap(); String uuid = store.getUuid(); @@ -410,6 +412,7 @@ public class XenServerStorageResource { try { DecodedDataObject obj = Decoder.decode(storeUrl); DecodedDataStore store = obj.getStore(); + if (store.getScheme().equalsIgnoreCase("nfs")) { SR sr = getNfsSR(conn, store); } else if (store.getScheme().equalsIgnoreCase("iscsi")) { @@ -570,7 +573,9 @@ public class XenServerStorageResource { Connection conn = hypervisorResource.getConnection(); try { DecodedDataObject obj = Decoder.decode(dataStoreUri); + DecodedDataStore store = obj.getStore(); + SR sr = hypervisorResource.getStorageRepository(conn, store.getUuid()); hypervisorResource.setupHeartbeatSr(conn, sr, false); long capacity = sr.getPhysicalSize(conn); diff --git a/plugins/network-elements/bigswitch-vns/pom.xml b/plugins/network-elements/bigswitch-vns/pom.xml index 32650f31497..95a7692ce75 100644 --- a/plugins/network-elements/bigswitch-vns/pom.xml +++ b/plugins/network-elements/bigswitch-vns/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/AddBigSwitchVnsDeviceCmd.java b/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/AddBigSwitchVnsDeviceCmd.java index c4c4ba9aa80..30f631dd5d6 100644 --- a/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/AddBigSwitchVnsDeviceCmd.java +++ b/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/AddBigSwitchVnsDeviceCmd.java @@ -37,7 +37,7 @@ import com.cloud.network.element.BigSwitchVnsElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(name = "addBigSwitchVnsDevice", responseObject=BigSwitchVnsDeviceResponse.class, description="Adds a BigSwitch VNS device") +@APICommand(name = "addBigSwitchVnsDevice", responseObject=BigSwitchVnsDeviceResponse.class, description="Adds a BigSwitch VNS device", since = "4.1.0") public class AddBigSwitchVnsDeviceCmd extends BaseAsyncCmd { private static final String s_name = "addbigswitchvnsdeviceresponse"; @Inject BigSwitchVnsElementService _bigswitchVnsElementService; diff --git a/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/DeleteBigSwitchVnsDeviceCmd.java b/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/DeleteBigSwitchVnsDeviceCmd.java index 06eee15f614..f26bddedcb0 100644 --- a/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/DeleteBigSwitchVnsDeviceCmd.java +++ b/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/DeleteBigSwitchVnsDeviceCmd.java @@ -35,7 +35,7 @@ import com.cloud.network.element.BigSwitchVnsElementService; import com.cloud.user.UserContext; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(name = "deleteBigSwitchVnsDevice", responseObject=SuccessResponse.class, description=" delete a bigswitch vns device") +@APICommand(name = "deleteBigSwitchVnsDevice", responseObject=SuccessResponse.class, description=" delete a bigswitch vns device", since = "4.1.0") public class DeleteBigSwitchVnsDeviceCmd extends BaseAsyncCmd { private static final String s_name = "deletebigswitchvnsdeviceresponse"; @Inject BigSwitchVnsElementService _bigswitchVnsElementService; diff --git a/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/ListBigSwitchVnsDevicesCmd.java b/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/ListBigSwitchVnsDevicesCmd.java index c0710ea7537..002d750604d 100644 --- a/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/ListBigSwitchVnsDevicesCmd.java +++ b/plugins/network-elements/bigswitch-vns/src/com/cloud/api/commands/ListBigSwitchVnsDevicesCmd.java @@ -41,7 +41,7 @@ import com.cloud.network.BigSwitchVnsDeviceVO; import com.cloud.network.element.BigSwitchVnsElementService; import com.cloud.utils.exception.CloudRuntimeException; -@APICommand(name = "listBigSwitchVnsDevices", responseObject=BigSwitchVnsDeviceResponse.class, description="Lists BigSwitch Vns devices") +@APICommand(name = "listBigSwitchVnsDevices", responseObject=BigSwitchVnsDeviceResponse.class, description="Lists BigSwitch Vns devices", since = "4.1.0") public class ListBigSwitchVnsDevicesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListBigSwitchVnsDevicesCmd.class.getName()); private static final String s_name = "listbigswitchvnsdeviceresponse"; diff --git a/plugins/network-elements/bigswitch-vns/src/com/cloud/network/element/BigSwitchVnsElement.java b/plugins/network-elements/bigswitch-vns/src/com/cloud/network/element/BigSwitchVnsElement.java index 67d0d8df86a..95c9e18304a 100644 --- a/plugins/network-elements/bigswitch-vns/src/com/cloud/network/element/BigSwitchVnsElement.java +++ b/plugins/network-elements/bigswitch-vns/src/com/cloud/network/element/BigSwitchVnsElement.java @@ -88,7 +88,9 @@ import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; +import org.springframework.stereotype.Component; +@Component @Local(value = {NetworkElement.class, ConnectivityProvider.class}) public class BigSwitchVnsElement extends AdapterBase implements BigSwitchVnsElementService, ConnectivityProvider, ResourceStateAdapter { diff --git a/plugins/network-elements/dns-notifier/pom.xml b/plugins/network-elements/dns-notifier/pom.xml index ea35d788653..1dea4b933d1 100644 --- a/plugins/network-elements/dns-notifier/pom.xml +++ b/plugins/network-elements/dns-notifier/pom.xml @@ -22,7 +22,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml org.apache.cloudstack diff --git a/plugins/network-elements/dns-notifier/resources/components-example.xml b/plugins/network-elements/dns-notifier/resources/components-example.xml index 412da0e289e..36441bd667b 100755 --- a/plugins/network-elements/dns-notifier/resources/components-example.xml +++ b/plugins/network-elements/dns-notifier/resources/components-example.xml @@ -29,7 +29,7 @@ under the License. - + true diff --git a/plugins/network-elements/elastic-loadbalancer/pom.xml b/plugins/network-elements/elastic-loadbalancer/pom.xml index dac500d8fd2..4d02a61e93e 100644 --- a/plugins/network-elements/elastic-loadbalancer/pom.xml +++ b/plugins/network-elements/elastic-loadbalancer/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/f5/pom.xml b/plugins/network-elements/f5/pom.xml index bf40332cfbb..d0f8133f2b4 100644 --- a/plugins/network-elements/f5/pom.xml +++ b/plugins/network-elements/f5/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/juniper-srx/pom.xml b/plugins/network-elements/juniper-srx/pom.xml index 6040720da6e..28f2c29eda7 100644 --- a/plugins/network-elements/juniper-srx/pom.xml +++ b/plugins/network-elements/juniper-srx/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/netscaler/pom.xml b/plugins/network-elements/netscaler/pom.xml index b11009d8b1a..1eb73a236dc 100644 --- a/plugins/network-elements/netscaler/pom.xml +++ b/plugins/network-elements/netscaler/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/nicira-nvp/pom.xml b/plugins/network-elements/nicira-nvp/pom.xml index 70f85607e4a..4e05a4f9fae 100644 --- a/plugins/network-elements/nicira-nvp/pom.xml +++ b/plugins/network-elements/nicira-nvp/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java index 3ba6167a47d..b78d165ddd6 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java @@ -151,7 +151,12 @@ public class NiciraNvpGuestNetworkGuru extends GuestNetworkGuru { long dcId = dest.getDataCenter().getId(); //get physical network id - long physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); + Long physicalNetworkId = network.getPhysicalNetworkId(); + + // physical network id can be null in Guest Network in Basic zone, so locate the physical network + if (physicalNetworkId == null) { + physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); + } NetworkVO implemented = new NetworkVO(network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated, network.getDataCenterId(), physicalNetworkId); diff --git a/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java b/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java index f86e705336c..0e4f8fd4f84 100644 --- a/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java +++ b/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java @@ -252,6 +252,7 @@ public class NiciraNvpGuestNetworkGuruTest { NetworkVO network = mock(NetworkVO.class); when(network.getName()).thenReturn("testnetwork"); when(network.getState()).thenReturn(State.Implementing); + when(network.getPhysicalNetworkId()).thenReturn(42L); DeployDestination dest = mock(DeployDestination.class); @@ -308,7 +309,7 @@ public class NiciraNvpGuestNetworkGuruTest { when(network.getState()).thenReturn(State.Implementing); when(network.getGateway()).thenReturn("10.1.1.1"); when(network.getCidr()).thenReturn("10.1.1.0/24"); - + when(network.getPhysicalNetworkId()).thenReturn(42L); DeployDestination dest = mock(DeployDestination.class); @@ -365,6 +366,7 @@ public class NiciraNvpGuestNetworkGuruTest { NetworkVO network = mock(NetworkVO.class); when(network.getName()).thenReturn("testnetwork"); when(network.getState()).thenReturn(State.Implementing); + when(network.getPhysicalNetworkId()).thenReturn(42L); DeployDestination dest = mock(DeployDestination.class); diff --git a/plugins/network-elements/ovs/pom.xml b/plugins/network-elements/ovs/pom.xml index ab7ffab8465..7964b931e19 100644 --- a/plugins/network-elements/ovs/pom.xml +++ b/plugins/network-elements/ovs/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/pom.xml b/plugins/pom.xml index 02459b4c1b5..88f617b4560 100755 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT install diff --git a/plugins/storage-allocators/random/pom.xml b/plugins/storage-allocators/random/pom.xml index b476d1de49f..6b91908271a 100644 --- a/plugins/storage-allocators/random/pom.xml +++ b/plugins/storage-allocators/random/pom.xml @@ -16,14 +16,22 @@ specific language governing permissions and limitations under the License. --> - + 4.0.0 cloud-plugin-storage-allocator-random Apache CloudStack Plugin - Storage Allocator Random org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml + + + org.apache.cloudstack + cloud-engine-storage + ${project.version} + + diff --git a/plugins/storage-allocators/random/src/com/cloud/storage/allocator/RandomStoragePoolAllocator.java b/plugins/storage-allocators/random/src/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java similarity index 73% rename from plugins/storage-allocators/random/src/com/cloud/storage/allocator/RandomStoragePoolAllocator.java rename to plugins/storage-allocators/random/src/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java index 812867ee69d..cbe6647ded8 100644 --- a/plugins/storage-allocators/random/src/com/cloud/storage/allocator/RandomStoragePoolAllocator.java +++ b/plugins/storage-allocators/random/src/org/apache/cloudstack/storage/allocator/RandomStoragePoolAllocator.java @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.cloud.storage.allocator; +package org.apache.cloudstack.storage.allocator; import java.util.ArrayList; import java.util.Collections; @@ -21,44 +21,32 @@ import java.util.List; import javax.ejb.Local; +import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType; +import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator; +import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.deploy.DeploymentPlan; import com.cloud.deploy.DeploymentPlanner.ExcludeList; -import com.cloud.server.StatsCollector; import com.cloud.storage.StoragePool; -import com.cloud.storage.StoragePoolVO; -import com.cloud.storage.VMTemplateVO; import com.cloud.vm.DiskProfile; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; -@Component @Local(value=StoragePoolAllocator.class) public class RandomStoragePoolAllocator extends AbstractStoragePoolAllocator { private static final Logger s_logger = Logger.getLogger(RandomStoragePoolAllocator.class); @Override - public boolean allocatorIsCorrectType(DiskProfile dskCh) { - return true; - } - - @Override - public List allocateToPool(DiskProfile dskCh, VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo) { + public List select(DiskProfile dskCh, VirtualMachineProfile vmProfile, DeploymentPlan plan, ExcludeList avoid, int returnUpTo) { List suitablePools = new ArrayList(); - VMTemplateVO template = (VMTemplateVO)vmProfile.getTemplate(); - // Check that the allocator type is correct - if (!allocatorIsCorrectType(dskCh)) { - return suitablePools; - } long dcId = plan.getDataCenterId(); Long podId = plan.getPodId(); Long clusterId = plan.getClusterId(); s_logger.debug("Looking for pools in dc: " + dcId + " pod:" + podId + " cluster:" + clusterId); - List pools = _storagePoolDao.listBy(dcId, podId, clusterId); + List pools = _storagePoolDao.listBy(dcId, podId, clusterId, ScopeType.CLUSTER); if (pools.size() == 0) { if (s_logger.isDebugEnabled()) { s_logger.debug("No storage pools available for allocation, returning"); @@ -66,8 +54,6 @@ public class RandomStoragePoolAllocator extends AbstractStoragePoolAllocator { return suitablePools; } - StatsCollector sc = StatsCollector.getInstance(); - Collections.shuffle(pools); if (s_logger.isDebugEnabled()) { s_logger.debug("RandomStoragePoolAllocator has " + pools.size() + " pools to check for allocation"); @@ -76,8 +62,10 @@ public class RandomStoragePoolAllocator extends AbstractStoragePoolAllocator { if(suitablePools.size() == returnUpTo){ break; } - if (checkPool(avoid, pool, dskCh, template, null, sc, plan)) { - suitablePools.add(pool); + StoragePool pol = (StoragePool)this.dataStoreMgr.getPrimaryDataStore(pool.getId()); + + if (filter(avoid, pol, dskCh, plan)) { + suitablePools.add(pol); } } diff --git a/plugins/storage/image/s3/pom.xml b/plugins/storage/image/s3/pom.xml index 4ea6517527b..7ab0d3e9301 100644 --- a/plugins/storage/image/s3/pom.xml +++ b/plugins/storage/image/s3/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../../pom.xml diff --git a/plugins/storage/volume/solidfire/pom.xml b/plugins/storage/volume/solidfire/pom.xml index cbbc54c368d..9db0685e91b 100644 --- a/plugins/storage/volume/solidfire/pom.xml +++ b/plugins/storage/volume/solidfire/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../../pom.xml diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java index 3244c7aa4ed..f31126c2aeb 100644 --- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java +++ b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java @@ -24,9 +24,9 @@ import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver; +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo; import org.apache.cloudstack.framework.async.AsyncCompletionCallback; -import org.apache.cloudstack.storage.snapshot.SnapshotInfo; -import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver; public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver { @@ -72,17 +72,25 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver { return false; } - @Override - public void takeSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback callback) { - // TODO Auto-generated method stub - - } - @Override public void revertSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback callback) { // TODO Auto-generated method stub } + @Override + public void resize(DataObject data, + AsyncCompletionCallback callback) { + // TODO Auto-generated method stub + + } + + @Override + public void takeSnapshot(SnapshotInfo snapshot, + AsyncCompletionCallback callback) { + // TODO Auto-generated method stub + + } + } diff --git a/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java b/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java index 6f0b2e73d3a..91c446fe5ae 100644 --- a/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java +++ b/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java @@ -79,7 +79,7 @@ public class VolumeTest { public void setUp() { //create data center DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", - null, null, NetworkType.Basic, null, null, true, true); + null, null, NetworkType.Basic, null, null, true, true, null, null); dc = dcDao.persist(dc); dcId = dc.getId(); //create pod @@ -148,4 +148,4 @@ public class VolumeTest { public void createPrimaryDataStoreTest() { createPrimaryDataStore(); } -} \ No newline at end of file +} diff --git a/plugins/user-authenticators/ldap/pom.xml b/plugins/user-authenticators/ldap/pom.xml index 05e9466d825..5c45f1177b6 100644 --- a/plugins/user-authenticators/ldap/pom.xml +++ b/plugins/user-authenticators/ldap/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java b/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java index fb0273e6ea3..61eebe5fc93 100644 --- a/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java +++ b/plugins/user-authenticators/ldap/src/com/cloud/server/auth/LDAPUserAuthenticator.java @@ -66,7 +66,7 @@ public class LDAPUserAuthenticator extends DefaultUserAuthenticator { String port = _configDao.getValue(LDAPParams.port.toString()); String queryFilter = _configDao.getValue(LDAPParams.queryfilter.toString()); String searchBase = _configDao.getValue(LDAPParams.searchbase.toString()); - String useSSL = _configDao.getValue(LDAPParams.usessl.toString()); + Boolean useSSL = Boolean.valueOf(_configDao.getValue(LDAPParams.usessl.toString())); String bindDN = _configDao.getValue(LDAPParams.dn.toString()); String bindPasswd = _configDao.getValue(LDAPParams.passwd.toString()); String trustStore = _configDao.getValue(LDAPParams.truststore.toString()); @@ -77,7 +77,7 @@ public class LDAPUserAuthenticator extends DefaultUserAuthenticator { Hashtable env = new Hashtable(11); env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); String protocol = "ldap://" ; - if (new Boolean(useSSL)){ + if (useSSL){ env.put(Context.SECURITY_PROTOCOL, "ssl"); protocol="ldaps://" ; System.setProperty("javax.net.ssl.trustStore", trustStore); @@ -123,7 +123,7 @@ public class LDAPUserAuthenticator extends DefaultUserAuthenticator { env = new Hashtable(11); env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); protocol = "ldap://" ; - if (new Boolean(useSSL)){ + if (useSSL){ env.put(Context.SECURITY_PROTOCOL, "ssl"); protocol="ldaps://" ; } @@ -135,8 +135,7 @@ public class LDAPUserAuthenticator extends DefaultUserAuthenticator { ctx.close(); } catch (NamingException ne) { - ne.printStackTrace(); - s_logger.warn("Authentication failed due to " + ne.getMessage()); + s_logger.warn("Authentication Failed ! " + ne.getMessage() + (ne.getCause() != null ? ("; Caused by:" + ne.getCause().getMessage()) : "")); return false; } catch (Exception e){ diff --git a/plugins/user-authenticators/md5/pom.xml b/plugins/user-authenticators/md5/pom.xml index f358f8f1c21..605014ff953 100644 --- a/plugins/user-authenticators/md5/pom.xml +++ b/plugins/user-authenticators/md5/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/user-authenticators/plain-text/pom.xml b/plugins/user-authenticators/plain-text/pom.xml index 6406fa92489..60336ebb22d 100644 --- a/plugins/user-authenticators/plain-text/pom.xml +++ b/plugins/user-authenticators/plain-text/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java b/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java index d2f43471366..52e7cb3e297 100644 --- a/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java +++ b/plugins/user-authenticators/plain-text/src/com/cloud/server/auth/PlainTextUserAuthenticator.java @@ -25,16 +25,13 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; -import com.cloud.server.ManagementServer; import com.cloud.user.UserAccount; import com.cloud.user.dao.UserAccountDao; import com.cloud.utils.exception.CloudRuntimeException; -@Component @Local(value={UserAuthenticator.class}) public class PlainTextUserAuthenticator extends DefaultUserAuthenticator { public static final Logger s_logger = Logger.getLogger(PlainTextUserAuthenticator.class); diff --git a/plugins/user-authenticators/sha256salted/pom.xml b/plugins/user-authenticators/sha256salted/pom.xml index 3f530f76e17..22e97632e3d 100644 --- a/plugins/user-authenticators/sha256salted/pom.xml +++ b/plugins/user-authenticators/sha256salted/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT ../../pom.xml diff --git a/pom.xml b/pom.xml index 5a1f66eded5..6b0a9ccfeac 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ org.apache.cloudstack cloudstack - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT pom Apache CloudStack Apache CloudStack is an IaaS (“Infrastracture as a Serviceâ€) cloud orchestration platform. @@ -82,14 +82,16 @@ 2.4 1.2 1.0-20081010.060147 + 5.1 3.1.2.RELEASE - 4.1 1.9.5 1.3.21.1 2.6 1.4 0.9.8 - 0.8 + 0.10 + build/replace.properties + 0.4.9 @@ -156,18 +158,18 @@ api agent - console-proxy core server usage utils deps/XenServerJava + engine plugins patches - client - test - engine framework + services + test + client @@ -343,6 +345,7 @@ **/*.patch **/.classpath **/.project + **/.idea/** **/*.iml **/.settings/** .metadata/** @@ -360,8 +363,9 @@ **/*.zip **/target/** **/.vagrant + awsapi/overlays/** build/build.number - console-proxy/js/jquery.js + services/console-proxy/server/js/jquery.js debian/compat debian/control debian/dirs @@ -372,6 +376,15 @@ dist/console-proxy/js/jquery.js scripts/vm/systemvm/id_rsa.cloud tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf + tools/appliance/definitions/systemvmtemplate/base.sh + tools/appliance/definitions/systemvmtemplate/cleanup.sh + tools/appliance/definitions/systemvmtemplate/definition.rb + tools/appliance/definitions/systemvmtemplate/preseed.cfg + tools/appliance/definitions/systemvmtemplate/zerodisk.sh + tools/cli/cloudmonkey.egg-info/* + tools/devcloud/src/deps/boxes/basebox-build/definition.rb + tools/devcloud/src/deps/boxes/basebox-build/preseed.cfg + tools/marvin/Marvin.egg-info/* ui/lib/flot/jquery.colorhelpers.js ui/lib/flot/jquery.flot.crosshair.js ui/lib/flot/jquery.flot.fillbetween.js @@ -395,6 +408,7 @@ ui/lib/qunit/qunit.css ui/lib/qunit/qunit.js ui/lib/reset.css + ui/lib/require.js waf patches/systemvm/debian/systemvm.vmx patches/systemvm/debian/config/root/.ssh/authorized_keys @@ -406,16 +420,13 @@ patches/systemvm/debian/config/etc/dnsmasq.conf patches/systemvm/debian/config/etc/vpcdnsmasq.conf patches/systemvm/debian/config/etc/ssh/sshd_config - patches/systemvm/debian/config/etc/rsyslog.conf - patches/systemvm/debian/config/etc/logrotate.conf patches/systemvm/debian/config/etc/logrotate.d/* patches/systemvm/debian/config/etc/sysctl.conf patches/systemvm/debian/config/root/redundant_router/keepalived.conf.templ patches/systemvm/debian/config/root/redundant_router/arping_gateways.sh.templ patches/systemvm/debian/config/root/redundant_router/conntrackd.conf.templ - patches/systemvm/debian/vpn/etc/ipsec.conf patches/systemvm/debian/vpn/etc/ppp/options.xl2tpd patches/systemvm/debian/vpn/etc/xl2tpd/xl2tpd.conf @@ -427,7 +438,6 @@ patches/systemvm/debian/config/var/www/html/userdata/.htaccess patches/systemvm/debian/config/var/www/html/latest/.htaccess patches/systemvm/debian/vpn/etc/ipsec.d/l2tp.conf - @@ -440,7 +450,8 @@ ${cs.jdk.version} true 128m - 512m + 512m + -XDignore.symbol.file=true @@ -500,13 +511,12 @@ developer + + tools/devcloud/devcloud.cfg + developer - tools/apidoc - tools/devcloud - tools/devcloud-kvm - tools/marvin - tools/cli + tools @@ -520,5 +530,113 @@ vmware-base + + simulator + + + deploydb-simulator + + + + + + org.codehaus.mojo + properties-maven-plugin + 1.0-alpha-2 + + + initialize + + read-project-properties + + + + ${project.basedir}/utils/conf/db.properties + ${project.basedir}/utils/conf/db.properties.override + + true + + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + + mysql + mysql-connector-java + ${cs.mysql.version} + + + commons-dbcp + commons-dbcp + ${cs.dbcp.version} + + + commons-pool + commons-pool + ${cs.pool.version} + + + org.jasypt + jasypt + ${cs.jasypt.version} + + + org.apache.cloudstack + cloud-utils + ${project.version} + + + org.apache.cloudstack + cloud-server + ${project.version} + + + + + process-resources + create-schema + + java + + + + + false + true + + org.apache.cloudstack + cloud-server + + com.cloud.upgrade.DatabaseCreator + + + ${project.basedir}/utils/conf/db.properties + ${project.basedir}/utils/conf/db.properties.override + + ${basedir}/target/db/create-schema-simulator.sql + ${basedir}/target/db/templates.simulator.sql + + com.cloud.upgrade.DatabaseUpgradeChecker + --database=simulator + --rootpassword=${db.root.password} + + + + + catalina.home + ${project.basedir}/utils + + + + + + + diff --git a/python/lib/cloudutils/serviceConfig.py b/python/lib/cloudutils/serviceConfig.py index 6b211eb5074..1e32d0f3b0f 100755 --- a/python/lib/cloudutils/serviceConfig.py +++ b/python/lib/cloudutils/serviceConfig.py @@ -54,9 +54,9 @@ class serviceCfgBase(object): except: logging.debug(formatExceptionInfo()) if self.syscfg.env.mode == "Server": - raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloud/setupManagement.log for detail"%self.serviceName) + raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloudstack/setupManagement.log for detail"%self.serviceName) else: - raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloud/setupAgent.log for detail"%self.serviceName) + raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloudstack/setupAgent.log for detail"%self.serviceName) def backup(self): if self.status is None: @@ -386,7 +386,7 @@ class securityPolicyConfigUbuntu(serviceCfgBase): return True except: - raise CloudRuntimeException("Failed to configure apparmor, please see the /var/log/cloud/setupAgent.log for detail, \ + raise CloudRuntimeException("Failed to configure apparmor, please see the /var/log/cloudstack/setupAgent.log for detail, \ or you can manually disable it before starting myCloud") def restore(self): @@ -416,7 +416,7 @@ class securityPolicyConfigRedhat(serviceCfgBase): cfo.replace_line("SELINUX=", "SELINUX=permissive") return True except: - raise CloudRuntimeException("Failed to configure selinux, please see the /var/log/cloud/setupAgent.log for detail, \ + raise CloudRuntimeException("Failed to configure selinux, please see the /var/log/cloudstack/setupAgent.log for detail, \ or you can manually disable it before starting myCloud") else: return True @@ -602,7 +602,7 @@ class cloudAgentConfig(serviceCfgBase): def configMyCloud(self): try: - cfo = configFileOps("/etc/cloud/agent/agent.properties", self) + cfo = configFileOps("/etc/cloudstack/agent/agent.properties", self) cfo.addEntry("host", self.syscfg.env.mgtSvr) cfo.addEntry("zone", self.syscfg.env.zone) cfo.addEntry("port", "443") @@ -624,7 +624,7 @@ class cloudAgentConfig(serviceCfgBase): def configAgent(self): try: - cfo = configFileOps("/etc/cloud/agent/agent.properties", self) + cfo = configFileOps("/etc/cloudstack/agent/agent.properties", self) cfo.addEntry("host", self.syscfg.env.mgtSvr) cfo.addEntry("zone", self.syscfg.env.zone) cfo.addEntry("pod", self.syscfg.env.pod) @@ -639,16 +639,16 @@ class cloudAgentConfig(serviceCfgBase): cfo.addEntry("resource", "com.cloud.hypervisor.kvm.resource.LibvirtComputingResource") cfo.save() - self.syscfg.svo.stopService("cloud-agent") + self.syscfg.svo.stopService("cloudstack-agent") bash("sleep 30") - self.syscfg.svo.enableService("cloud-agent") + self.syscfg.svo.enableService("cloudstack-agent") return True except: raise def configConsole(self): try: - cfo = configFileOps("/etc/cloud/agent/agent.properties", self) + cfo = configFileOps("/etc/cloudstack/agent/agent.properties", self) cfo.addEntry("host", self.syscfg.env.mgtSvr) cfo.addEntry("zone", self.syscfg.env.zone) cfo.addEntry("pod", self.syscfg.env.pod) @@ -661,8 +661,8 @@ class cloudAgentConfig(serviceCfgBase): cfo.addEntry("resource", "com.cloud.agent.resource.computing.consoleProxyResource") cfo.save() - self.syscfg.svo.stopService("cloud-agent") - self.syscfg.svo.enableService("cloud-agent") + self.syscfg.svo.stopService("cloudstack-agent") + self.syscfg.svo.enableService("cloudstack-agent") return True except: raise diff --git a/python/lib/cloudutils/serviceConfigServer.py b/python/lib/cloudutils/serviceConfigServer.py index 3fb973986e4..a08ce02d766 100644 --- a/python/lib/cloudutils/serviceConfigServer.py +++ b/python/lib/cloudutils/serviceConfigServer.py @@ -73,39 +73,39 @@ class cloudManagementConfig(serviceCfgBase): bash("iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-port 8250 ") #generate keystore - keyPath = "/var/lib/cloud/management/web.keystore" + keyPath = "/var/cloudstack/management/web.keystore" if not os.path.exists(keyPath): cmd = bash("keytool -genkey -keystore %s -storepass \"cloud.com\" -keypass \"cloud.com\" -validity 3650 -dname cn=\"Cloudstack User\",ou=\"mycloud.cloud.com\",o=\"mycloud.cloud.com\",c=\"Unknown\""%keyPath) if not cmd.isSuccess(): raise CloudInternalException(cmd.getErrMsg()) - cfo = configFileOps("/etc/cloud/management/tomcat6.conf", self) + cfo = configFileOps("/etc/cloudstack/management/tomcat6.conf", self) cfo.add_lines("JAVA_OPTS+=\" -Djavax.net.ssl.trustStore=%s \""%keyPath) elif self.syscfg.env.svrMode == "HttpsServer": - if not os.path.exists("/etc/cloud/management/server-ssl.xml") or not os.path.exists("/etc/cloud/management/tomcat6-ssl.conf"): - raise CloudRuntimeException("Cannot find /etc/cloud/management/server-ssl.xml or /etc/cloud/management/tomcat6-ssl.conf, https enables failed") - if os.path.exists("/etc/cloud/management/server.xml"): - bash("rm -f /etc/cloud/management/server.xml") - if os.path.exists("/etc/cloud/management/tomcat6.conf"): - bash("rm -f /etc/cloud/management/tomcat6.conf") - bash("ln -s /etc/cloud/management/server-ssl.xml /etc/cloud/management/server.xml") - bash("ln -s /etc/cloud/management/tomcat6-ssl.conf /etc/cloud/management/tomcat6.conf") + if not os.path.exists("/etc/cloudstack/management/server-ssl.xml") or not os.path.exists("/etc/cloudstack/management/tomcat6-ssl.conf"): + raise CloudRuntimeException("Cannot find /etc/cloudstack/management/server-ssl.xml or /etc/cloudstack/management/tomcat6-ssl.conf, https enables failed") + if os.path.exists("/etc/cloudstack/management/server.xml"): + bash("rm -f /etc/cloudstack/management/server.xml") + if os.path.exists("/etc/cloudstack/management/tomcat6.conf"): + bash("rm -f /etc/cloudstack/management/tomcat6.conf") + bash("ln -s /etc/cloudstack/management/server-ssl.xml /etc/cloudstack/management/server.xml") + bash("ln -s /etc/cloudstack/management/tomcat6-ssl.conf /etc/cloudstack/management/tomcat6.conf") if not bash("iptables-save |grep PREROUTING | grep 6443").isSuccess(): bash("iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-port 6443") else: - if not os.path.exists("/etc/cloud/management/server-nonssl.xml") or not os.path.exists("/etc/cloud/management/tomcat6-nonssl.conf"): - raise CloudRuntimeException("Cannot find /etc/cloud/management/server-nonssl.xml or /etc/cloud/management/tomcat6-nonssl.conf, https enables failed") - if os.path.exists("/etc/cloud/management/server.xml"): - bash("rm -f /etc/cloud/management/server.xml") - if os.path.exists("/etc/cloud/management/tomcat6.conf"): - bash("rm -f /etc/cloud/management/tomcat6.conf") - bash("ln -s /etc/cloud/management/server-nonssl.xml /etc/cloud/management/server.xml") - bash("ln -s /etc/cloud/management/tomcat6-nonssl.conf /etc/cloud/management/tomcat6.conf") + if not os.path.exists("/etc/cloudstack/management/server-nonssl.xml") or not os.path.exists("/etc/cloudstack/management/tomcat6-nonssl.conf"): + raise CloudRuntimeException("Cannot find /etc/cloudstack/management/server-nonssl.xml or /etc/cloudstack/management/tomcat6-nonssl.conf, https enables failed") + if os.path.exists("/etc/cloudstack/management/server.xml"): + bash("rm -f /etc/cloudstack/management/server.xml") + if os.path.exists("/etc/cloudstack/management/tomcat6.conf"): + bash("rm -f /etc/cloudstack/management/tomcat6.conf") + bash("ln -s /etc/cloudstack/management/server-nonssl.xml /etc/cloudstack/management/server.xml") + bash("ln -s /etc/cloudstack/management/tomcat6-nonssl.conf /etc/cloudstack/management/tomcat6.conf") #distro like sl 6.1 needs this folder, or tomcat6 failed to start checkHostName() - bash("mkdir /var/log/cloud-management/") + bash("mkdir /var/log/cloudstack-management/") #set max process per account is unlimited if os.path.exists("/etc/security/limits.conf"): cfo = configFileOps("/etc/security/limits.conf") @@ -118,9 +118,8 @@ class cloudManagementConfig(serviceCfgBase): except: pass - self.syscfg.svo.stopService("cloud-management") - if self.syscfg.svo.enableService("cloud-management"): + self.syscfg.svo.stopService("cloudstack-management") + if self.syscfg.svo.enableService("cloudstack-management"): return True else: - raise CloudRuntimeException("Failed to configure %s, please see the /var/log/cloud/setupManagement.log for detail"%self.serviceName) - + raise CloudRuntimeException("Failed to configure %s, please see the /var/log/cloudstack/setupManagement.log for detail"%self.serviceName) diff --git a/python/lib/cloudutils/utilities.py b/python/lib/cloudutils/utilities.py index c9d1e339f72..739a48385a0 100755 --- a/python/lib/cloudutils/utilities.py +++ b/python/lib/cloudutils/utilities.py @@ -122,7 +122,14 @@ class Distribution: if kernel.find("2.6.32") != -1: self.release = "10.04" self.arch = bash("uname -m").getStdout() - + elif os.path.exists("/usr/bin/lsb_release"): + o = bash("/usr/bin/lsb_release -i") + distributor = o.getStdout().split(":\t")[1] + if "Debian" in distributor: + # This obviously needs a rewrite at some point + self.distro = "Ubuntu" + else: + raise UnknownSystemException(distributor) else: raise UnknownSystemException diff --git a/scripts/network/domr/dhcp_entry.sh b/scripts/network/domr/dhcp_entry.sh index e417f7273a2..fb5a1669e72 100755 --- a/scripts/network/domr/dhcp_entry.sh +++ b/scripts/network/domr/dhcp_entry.sh @@ -22,7 +22,7 @@ # @VERSION@ usage() { - printf "Usage: %s: -r -m -v -n -s -d -N -6 -u \n" $(basename $0) >&2 + printf "Usage: %s: -r -m -v -n -s -d -N -6 -u [-z]\n" $(basename $0) >&2 exit 2 } @@ -40,7 +40,7 @@ duid= opts= -while getopts 'r:m:v:n:d:s:N:6:u:' OPTION +while getopts 'r:m:v:n:d:s:N:6:u:z' OPTION do case $OPTION in r) domrIp="$OPTARG" @@ -69,6 +69,8 @@ do u) duid="$OPTARG" opts="$opts -u $duid" ;; + z) opts="$opts -N" + ;; ?) usage exit 1 ;; diff --git a/scripts/network/ping/baremetal_user_data.py b/scripts/network/ping/baremetal_user_data.py new file mode 100755 index 00000000000..a8ce32cb3ba --- /dev/null +++ b/scripts/network/ping/baremetal_user_data.py @@ -0,0 +1,104 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +''' +Created on Jul 2, 2012 + +@author: frank +''' +import sys +import os +import os.path +import base64 + +HTML_ROOT = "/var/www/html/" + +def writeIfNotHere(fileName, texts): + if not os.path.exists(fileName): + entries = [] + else: + f = open(fileName, 'r') + entries = f.readlines() + f.close() + + texts = [ "%s\n" % t for t in texts ] + need = False + for t in texts: + if not t in entries: + entries.append(t) + need = True + + if need: + f = open(fileName, 'w') + f.write(''.join(entries)) + f.close() + +def createRedirectEntry(vmIp, folder, filename): + entry = "RewriteRule ^%s$ ../%s/%%{REMOTE_ADDR}/%s [L,NC,QSA]" % (filename, folder, filename) + htaccessFolder="/var/www/html/latest" + htaccessFile=os.path.join(htaccessFolder, ".htaccess") + if not os.path.exists(htaccessFolder): + os.makedirs(htaccessFolder) + writeIfNotHere(htaccessFile, ["Options +FollowSymLinks", "RewriteEngine On", entry]) + + htaccessFolder = os.path.join("/var/www/html/", folder, vmIp) + if not os.path.exists(htaccessFolder): + os.makedirs(htaccessFolder) + htaccessFile=os.path.join(htaccessFolder, ".htaccess") + entry="Options -Indexes\nOrder Deny,Allow\nDeny from all\nAllow from %s" % vmIp + f = open(htaccessFile, 'w') + f.write(entry) + f.close() + + if folder in ['metadata', 'meta-data']: + entry1="RewriteRule ^meta-data/(.+)$ ../%s/%%{REMOTE_ADDR}/$1 [L,NC,QSA]" % folder + htaccessFolder="/var/www/html/latest" + htaccessFile=os.path.join(htaccessFolder, ".htaccess") + entry2="RewriteRule ^meta-data/$ ../%s/%%{REMOTE_ADDR}/meta-data [L,NC,QSA]" % folder + writeIfNotHere(htaccessFile, [entry1, entry2]) + + +def addUserData(vmIp, folder, fileName, contents): + + baseFolder = os.path.join(HTML_ROOT, folder, vmIp) + if not os.path.exists(baseFolder): + os.makedirs(baseFolder) + + createRedirectEntry(vmIp, folder, fileName) + + datafileName = os.path.join(HTML_ROOT, folder, vmIp, fileName) + metaManifest = os.path.join(HTML_ROOT, folder, vmIp, "meta-data") + if folder == "userdata": + if contents != "none": + contents = base64.urlsafe_b64decode(contents) + else: + contents = "" + + f = open(datafileName, 'w') + f.write(contents) + f.close() + + if folder == "metadata" or folder == "meta-data": + writeIfNotHere(metaManifest, fileName) + +if __name__ == '__main__': + string = sys.argv[1] + allEntires = string.split(";") + for entry in allEntires: + (vmIp, folder, fileName, contents) = entry.split(',', 3) + addUserData(vmIp, folder, fileName, contents) + sys.exit(0) diff --git a/scripts/network/ping/prepare_kickstart_bootfile.py b/scripts/network/ping/prepare_kickstart_bootfile.py new file mode 100755 index 00000000000..4378293b43a --- /dev/null +++ b/scripts/network/ping/prepare_kickstart_bootfile.py @@ -0,0 +1,78 @@ +#!/usr/bin/python +# Copyright 2012 Citrix Systems, Inc. Licensed under the +# Apache License, Version 2.0 (the "License"); you may not use this +# file except in compliance with the License. Citrix Systems, Inc. +# reserves all rights not expressly granted by the License. +# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Automatically generated by addcopyright.py at 04/03/2012 + + + + + +# Usage: prepare_tftp_bootfile.py tftp_dir mac cifs_server share directory image_to_restore cifs_username cifs_password +import os, sys +from sys import exit +from os import makedirs +from os.path import exists, join + +fmt1 = '''DEFAULT default +PROMPT 1 +TIMEOUT 26 +DISPLAY boot.msg +LABEL default +KERNEL %s +APPEND ramdisk_size=66000 initrd=%s ksdevice=%s ks=%s +''' +fmt2 = '''DEFAULT default +PROMPT 1 +TIMEOUT 26 +DISPLAY boot.msg +LABEL default +KERNEL %s +APPEND ramdisk_size=66000 initrd=%s ks=%s +''' + +tftp_dir = '' +mac = '' +kernel = '' +initrd = '' +ks_file = '' +ks_device = '' + +def prepare(): + try: + pxelinux = join(tftp_dir, "pxelinux.cfg") + if exists(pxelinux) == False: + makedirs(pxelinux) + + cfg_name = "01-" + mac.replace(':','-').lower() + cfg_path = join(pxelinux, cfg_name) + f = open(cfg_path, "w") + if ks_device == '': + stuff = fmt2 % (kernel, initrd, ks_file) + else: + stuff = fmt1 % (kernel, initrd, ks_device, ks_file) + f.write(stuff) + f.close() + return 0 + except Exception, e: + print e + return 1 + + +if __name__ == "__main__": + if len(sys.argv) < 7: + print "Usage: prepare_kickstart_bootfile.py tftp_dir mac kernel initrd ks_file ks_device" + exit(1) + + (tftp_dir, mac, kernel, initrd, ks_file, ks_device) = sys.argv[1:] + + ret = prepare() + exit(ret) diff --git a/scripts/network/ping/prepare_kickstart_kernel_initrd.py b/scripts/network/ping/prepare_kickstart_kernel_initrd.py new file mode 100755 index 00000000000..ff618480e69 --- /dev/null +++ b/scripts/network/ping/prepare_kickstart_kernel_initrd.py @@ -0,0 +1,75 @@ +#!/usr/bin/python +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +import sys +import tempfile +import os.path +import os + +kernel = None +initrd = None +copy_to = None + +def cmd(cmdstr, err=True): + print cmdstr + if os.system(cmdstr) != 0 and err: + raise Exception("Failed to run shell command: %s" % cmdstr) + +def prepare(): + global kernel, initrd, copy_to + try: + k = os.path.join(copy_to, "vmlinuz") + i = os.path.join(copy_to, "initrd.img") + if os.path.exists(k) and os.path.exists(i): + print "Having template(%s) prepared already, skip copying" % copy_to + return 0 + else: + if not os.path.exists(copy_to): + os.makedirs(copy_to) + + + def copy_from_nfs(src, dst): + mnt_path = tempfile.mkdtemp() + try: + nfs_path = os.path.dirname(src) + filename = os.path.basename(src) + t = os.path.join(mnt_path, filename) + mnt = "mount %s %s" % (nfs_path, mnt_path) + cmd(mnt) + cp = "cp -f %s %s" % (t, dst) + cmd(cp) + finally: + umnt = "umount %s" % mnt_path + cmd(umnt, False) + rm = "rm -r %s" % mnt_path + cmd(rm, False) + + copy_from_nfs(kernel, copy_to) + copy_from_nfs(initrd, copy_to) + except Exception, e: + print e + return 1 + +if __name__ == "__main__": + if len(sys.argv) < 4: + print "Usage: prepare_kickstart_kerneal_initrd.py path_to_kernel path_to_initrd path_kernel_initrd_copy_to" + sys.exit(1) + + (kernel, initrd, copy_to) = sys.argv[1:] + sys.exit(prepare()) + diff --git a/scripts/storage/qcow2/resizevolume.sh b/scripts/storage/qcow2/resizevolume.sh index 2de1f9ec5ca..d15513e250f 100755 --- a/scripts/storage/qcow2/resizevolume.sh +++ b/scripts/storage/qcow2/resizevolume.sh @@ -177,7 +177,7 @@ resizeqcow2() { fi ##### end sanity ##### - $actualsize=`qemu-img info $path | grep "virtual size" | sed -re 's/^.*\(([0-9]+).*$/\1/g'` + actualsize=`qemu-img info $path | grep "virtual size" | sed -re 's/^.*\(([0-9]+).*$/\1/g'` if [ $actualsize -ne $currentsize ] then diff --git a/scripts/storage/secondary/cloud-install-sys-tmplt b/scripts/storage/secondary/cloud-install-sys-tmplt index 63a04d8cb07..2172b287848 100755 --- a/scripts/storage/secondary/cloud-install-sys-tmplt +++ b/scripts/storage/secondary/cloud-install-sys-tmplt @@ -20,7 +20,7 @@ usage() { - printf "Usage: %s: -m -f [-h ] [ -s ][-u ] [-F ] [-e