Return-Path: X-Original-To: apmail-cloudstack-commits-archive@www.apache.org Delivered-To: apmail-cloudstack-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id BC98211A4E for ; Sat, 11 May 2013 09:59:53 +0000 (UTC) Received: (qmail 8060 invoked by uid 500); 11 May 2013 09:59:40 -0000 Delivered-To: apmail-cloudstack-commits-archive@cloudstack.apache.org Received: (qmail 7825 invoked by uid 500); 11 May 2013 09:59:37 -0000 Mailing-List: contact commits-help@cloudstack.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cloudstack.apache.org Delivered-To: mailing list commits@cloudstack.apache.org Received: (qmail 4706 invoked by uid 99); 11 May 2013 09:59:29 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 11 May 2013 09:59:29 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 708DE88C0E5; Sat, 11 May 2013 09:59:27 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: nitin@apache.org To: commits@cloudstack.apache.org Date: Sat, 11 May 2013 09:59:46 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [21/51] [partial] merge master http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/core/test/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java ---------------------------------------------------------------------- diff --git a/core/test/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java b/core/test/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java new file mode 100644 index 0000000..1b68276 --- /dev/null +++ b/core/test/org/apache/cloudstack/api/agent/test/CheckOnHostCommandTest.java @@ -0,0 +1,483 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.agent.test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.junit.Test; + +import com.cloud.agent.api.CheckOnHostCommand; +import com.cloud.agent.api.to.HostTO; +import com.cloud.host.Host; +import com.cloud.host.Status; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.resource.ResourceState; + +public class CheckOnHostCommandTest { + public Host host = new Host() { + public Status getState() { + return Status.Up; + }; + + public long getId() { + return 101L; + }; + + + @Override + public String getUuid() { + return "101"; + } + + public String getName() { + return "hostName"; + }; + + public Type getType() { + return Host.Type.Storage; + }; + + public Date getCreated() { + Date date = null; + try { + date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("01/01/1970 12:12:12"); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + public Status getStatus() { + return Status.Up; + }; + + public String getPrivateIpAddress() { + return "10.1.1.1"; + }; + + public String getStorageIpAddress() { + return "10.1.1.2"; + }; + + public String getGuid() { + return "bed9f83e-cac3-11e1-ac8a-0050568b007e"; + }; + + public Long getTotalMemory() { + return 100000000000L; + }; + + public Integer getCpus() { + return 16; + }; + + public Long getSpeed() { + return 2000000000L; + }; + + public Integer getProxyPort() { + return 22; + }; + + public Long getPodId() { + return 16L; + }; + + public long getDataCenterId() { + return 17L; + }; + + public String getParent() { + return "parent"; + }; + + public String getStorageIpAddressDeux() { + return "10.1.1.3"; + }; + + public HypervisorType getHypervisorType() { + return HypervisorType.XenServer; + }; + + public Date getDisconnectedOn() { + Date date = null; + try { + date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("01/01/2012 12:12:12"); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + public String getVersion() { + return "4.0.1"; + }; + + public long getTotalSize() { + return 100000000000L; + }; + + public String getCapabilities() { + return "capabilities"; + }; + + public long getLastPinged() { + return 1L; + }; + + public Long getManagementServerId() { + return 2L; + }; + + public Date getRemoved() { + Date date = null; + try { + date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("02/01/2012 12:12:12"); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + }; + + public Long getClusterId() { + return 3L; + }; + + public String getPublicIpAddress() { + return "10.1.1.4"; + }; + + public String getPublicNetmask() { + return "255.255.255.8"; + }; + + public String getPrivateNetmask() { + return "255.255.255.16"; + }; + + public String getStorageNetmask() { + return "255.255.255.24"; + }; + + public String getStorageMacAddress() { + return "01:f4:17:38:0e:26"; + }; + + public String getPublicMacAddress() { + return "02:f4:17:38:0e:26"; + }; + + public String getPrivateMacAddress() { + return "03:f4:17:38:0e:26"; + }; + + public String getStorageNetmaskDeux() { + return "255.255.255.25"; + }; + + public String getStorageMacAddressDeux() { + return "01:f4:17:38:0e:27"; + }; + + public String getHypervisorVersion() { + return "1.2.3.0"; + }; + + public boolean isInMaintenanceStates() { + return false; + }; + + public ResourceState getResourceState() { + return ResourceState.Enabled; + }; + }; + + CheckOnHostCommand cohc = new CheckOnHostCommand(host); + + @Test + public void testGetHost() { + HostTO h = cohc.getHost(); + assertNotNull(h); + } + + @Test + public void testGetState() { + Status s = host.getState(); + assertTrue(s == Status.Up); + } + + @Test + public void testGetId() { + Long id = host.getId(); + assertTrue(101L == id); + } + + @Test + public void testGetName() { + String name = host.getName(); + assertTrue(name.equals("hostName")); + } + + @Test + public void testGetType() { + Host.Type t = host.getType(); + assertTrue(t == Host.Type.Storage); + } + + @Test + public void testGetCreated() { + try { + Date date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("01/01/1970 12:12:12"); + Date d = host.getCreated(); + assertTrue(d.compareTo(date) == 0); + } catch (ParseException e) { + e.printStackTrace(); + } + } + + @Test + public void testGetStatus() { + Status s = host.getStatus(); + assertTrue(s == Status.Up); + } + + @Test + public void testGetPrivateIpAddress() { + String addr = host.getPrivateIpAddress(); + assertTrue(addr.equals("10.1.1.1")); + } + + @Test + public void testGetStorageIpAddress() { + String addr = host.getStorageIpAddress(); + assertTrue(addr.equals("10.1.1.2")); + } + + @Test + public void testGetGuid() { + String guid = host.getGuid(); + assertTrue(guid.equals("bed9f83e-cac3-11e1-ac8a-0050568b007e")); + } + + @Test + public void testGetTotalMemory() { + Long m = host.getTotalMemory(); + assertTrue(m == 100000000000L); + } + + @Test + public void testGetCpus() { + int cpus = host.getCpus(); + assertTrue(cpus == 16); + } + + @Test + public void testGetSpeed() { + Long spped = host.getSpeed(); + assertTrue(spped == 2000000000L); + } + + @Test + public void testGetProxyPort() { + Integer port = host.getProxyPort(); + assertTrue(port == 22); + } + + @Test + public void testGetPodId() { + Long pID = host.getPodId(); + assertTrue(pID == 16L); + } + + @Test + public void testGetDataCenterId() { + long dcID = host.getDataCenterId(); + assertTrue(dcID == 17L); + } + + @Test + public void testGetParent() { + String p = host.getParent(); + assertTrue(p.equals("parent")); + } + + @Test + public void testGetStorageIpAddressDeux() { + String addr = host.getStorageIpAddressDeux(); + assertTrue(addr.equals("10.1.1.3")); + } + + @Test + public void testGetHypervisorType() { + HypervisorType type = host.getHypervisorType(); + assertTrue(type == HypervisorType.XenServer); + } + + @Test + public void testGetDisconnectedOn() { + try { + Date date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("01/01/2012 12:12:12"); + Date d = host.getDisconnectedOn(); + assertTrue(d.compareTo(date) == 0); + } catch (ParseException e) { + e.printStackTrace(); + } + } + + @Test + public void testGetVersion() { + String v = host.getVersion(); + assertTrue(v.equals("4.0.1")); + } + + @Test + public void testGetTotalSize() { + long size = host.getTotalSize(); + assertTrue(size == 100000000000L); + } + + @Test + public void testGetCapabilities() { + String c = host.getCapabilities(); + assertTrue(c.equals("capabilities")); + } + + @Test + public void testGetLastPinged() { + long lp = host.getLastPinged(); + assertTrue(lp == 1L); + } + + @Test + public void testGetManagementServerId() { + Long msID = host.getManagementServerId(); + assertTrue(msID == 2L); + } + + @Test + public void testGetRemoved() { + try { + Date date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("02/01/2012 12:12:12"); + Date d = host.getRemoved(); + assertTrue(d.compareTo(date) == 0); + } catch (ParseException e) { + e.printStackTrace(); + } + } + + @Test + public void testGetClusterId() { + Long cID = host.getClusterId(); + assertTrue(cID == 3L); + } + + @Test + public void testGetPublicIpAddress() { + String pipAddr = host.getPublicIpAddress(); + assertTrue(pipAddr.equals("10.1.1.4")); + } + + @Test + public void testGetPublicNetmask() { + String pMask = host.getPublicNetmask(); + assertTrue(pMask.equals("255.255.255.8")); + } + + @Test + public void testGetPrivateNetmask() { + String pMask = host.getPrivateNetmask(); + assertTrue(pMask.equals("255.255.255.16")); + } + + @Test + public void testGetStorageNetmask() { + String sMask = host.getStorageNetmask(); + assertTrue(sMask.equals("255.255.255.24")); + } + + @Test + public void testGetStorageMacAddress() { + String sMac = host.getStorageMacAddress(); + assertTrue(sMac.equals("01:f4:17:38:0e:26")); + } + + @Test + public void testGetPublicMacAddress() { + String pMac = host.getPublicMacAddress(); + assertTrue(pMac.equals("02:f4:17:38:0e:26")); + } + + @Test + public void testGetPrivateMacAddress() { + String pMac = host.getPrivateMacAddress(); + assertTrue(pMac.equals("03:f4:17:38:0e:26")); + } + + @Test + public void testGetStorageNetmaskDeux() { + String sMask = host.getStorageNetmaskDeux(); + assertTrue(sMask.equals("255.255.255.25")); + } + + @Test + public void testGetStorageMacAddressDeux() { + String sMac = host.getStorageMacAddressDeux(); + assertTrue(sMac.equals("01:f4:17:38:0e:27")); + } + + @Test + public void testGetHypervisorVersion() { + String v = host.getHypervisorVersion(); + assertTrue(v.equals("1.2.3.0")); + } + + @Test + public void testIsInMaintenanceStates() { + boolean b = host.isInMaintenanceStates(); + assertFalse(b); + } + + @Test + public void testGetResourceState() { + ResourceState r = host.getResourceState(); + assertTrue(r == ResourceState.Enabled); + } + + @Test + public void testGetWait() { + int wait = cohc.getWait(); + assertTrue(20 == wait); + } + + @Test + public void testExecuteInSequence() { + boolean b = cohc.executeInSequence(); + assertFalse(b); + } +} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java ---------------------------------------------------------------------- diff --git a/core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java b/core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java new file mode 100644 index 0000000..c2d69c0 --- /dev/null +++ b/core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java @@ -0,0 +1,209 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.agent.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.junit.Before; +import org.junit.Test; + +import com.cloud.agent.api.SnapshotCommand; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StoragePool; +import com.cloud.storage.StoragePoolStatus; + +public class SnapshotCommandTest { + + public StoragePool pool = new StoragePool() { + public long getId() { + return 1L; + }; + + public String getName() { + return "name"; + }; + + public String getUuid() { + return "bed9f83e-cac3-11e1-ac8a-0050568b007e"; + }; + + public StoragePoolType getPoolType() { + return StoragePoolType.Filesystem; + }; + + public Date getCreated() { + Date date = null; + try { + date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("01/01/1970 12:12:12"); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + public Date getUpdateTime() { + return new Date(); + }; + + public long getDataCenterId() { + return 0L; + }; + + public long getCapacityBytes() { + return 0L; + }; + + public long getAvailableBytes() { + return 0L; + }; + + public Long getClusterId() { + return 0L; + }; + + public String getHostAddress() { + return "hostAddress"; + }; + + public String getPath() { + return "path"; + }; + + public String getUserInfo() { + return "userInfo"; + }; + + public boolean isShared() { + return false; + }; + + public boolean isLocal() { + return false; + }; + + public StoragePoolStatus getStatus() { + return StoragePoolStatus.Up; + }; + + public int getPort() { + return 25; + }; + + public Long getPodId() { + return 0L; + } + + @Override + public String getStorageProviderName() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isInMaintenance() { + // TODO Auto-generated method stub + return false; + }; + }; + + SnapshotCommand ssc = new SnapshotCommand(pool, + "http://secondary.Storage.Url", + "420fa39c-4ef1-a83c-fd93-46dc1ff515ae", "snapshotName", 101L, 102L, + 103L); + + SnapshotCommand ssc1; + + + @Before + public void setUp() { + ssc1 = new SnapshotCommand(pool, + "secondaryStorageUrl", "snapshotUuid", "snapshotName", 101L, + 102L, 103L); + } + + @Test + public void testGetPrimaryStoragePoolNameLabel() { + String label = ssc.getPrimaryStoragePoolNameLabel(); + assertTrue(label.equals("bed9f83e-cac3-11e1-ac8a-0050568b007e")); + } + + @Test + public void testGetSecondaryStorageUrl() { + String url = ssc.getSecondaryStorageUrl(); + assertTrue(url.equals("http://secondary.Storage.Url")); + } + + @Test + public void testGetSnapshotUuid() { + String uuid = ssc.getSnapshotUuid(); + assertTrue(uuid.equals("420fa39c-4ef1-a83c-fd93-46dc1ff515ae")); + } + + @Test + public void testGetSnapshotName() { + String name = ssc.getSnapshotName(); + assertTrue(name.equals("snapshotName")); + } + + @Test + public void testGetVolumePath() { + ssc.setVolumePath("vPath"); + String path = ssc.getVolumePath(); + assertTrue(path.equals("vPath")); + + ssc1.setVolumePath("vPath1"); + path = ssc1.getVolumePath(); + assertTrue(path.equals("vPath1")); + } + + @Test + public void testExecuteInSequence() { + boolean b = ssc.executeInSequence(); + assertFalse(b); + + b = ssc1.executeInSequence(); + assertFalse(b); + } + + @Test + public void testGetDataCenterId() { + Long dcId = ssc.getDataCenterId(); + Long expected = 101L; + assertEquals(expected, dcId); + } + + @Test + public void testGetAccountId() { + Long aId = ssc.getAccountId(); + Long expected = 102L; + assertEquals(expected, aId); + } + + @Test + public void testGetVolumeId() { + Long vId = ssc.getVolumeId(); + Long expected = 103L; + assertEquals(expected, vId); + } +} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/core/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java ---------------------------------------------------------------------- diff --git a/core/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java b/core/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java new file mode 100644 index 0000000..02085f5 --- /dev/null +++ b/core/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java @@ -0,0 +1,229 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT 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.com.cloud.agent.api.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.junit.Test; + +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StoragePool; +import com.cloud.storage.StoragePoolStatus; + + +public class ResizeVolumeCommandTest { + + public StoragePool dummypool = new StoragePool() { + @Override + public long getId() { + return 1L; + }; + + @Override + public String getName() { + return "name"; + }; + + @Override + public String getUuid() { + return "bed9f83e-cac3-11e1-ac8a-0050568b007e"; + }; + + @Override + public StoragePoolType getPoolType() { + return StoragePoolType.Filesystem; + }; + + @Override + public Date getCreated() { + Date date = null; + try { + date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("01/01/1970 12:12:12"); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + @Override + public Date getUpdateTime() { + return new Date(); + }; + + @Override + public long getDataCenterId() { + return 0L; + }; + + @Override + public long getCapacityBytes() { + return 0L; + }; + + @Override + public long getAvailableBytes() { + return 0L; + }; + + @Override + public Long getClusterId() { + return 0L; + }; + + @Override + public String getHostAddress() { + return "hostAddress"; + }; + + @Override + public String getPath() { + return "path"; + }; + + @Override + public String getUserInfo() { + return "userInfo"; + }; + + @Override + public boolean isShared() { + return false; + }; + + @Override + public boolean isLocal() { + return false; + }; + + @Override + public StoragePoolStatus getStatus() { + return StoragePoolStatus.Up; + }; + + @Override + public int getPort() { + return 25; + }; + + @Override + public Long getPodId() { + return 0L; + } + + @Override + public String getStorageProviderName() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isInMaintenance() { + // TODO Auto-generated method stub + return false; + }; + }; + + Long newSize = 4194304L; + Long currentSize = 1048576L; + + ResizeVolumeCommand rv = new ResizeVolumeCommand("dummydiskpath", + new StorageFilerTO(dummypool), currentSize, newSize, false, + "vmName"); + + @Test + public void testExecuteInSequence() { + boolean b = rv.executeInSequence(); + assertFalse(b); + } + + @Test + public void testGetPath() { + String path = rv.getPath(); + assertTrue(path.equals("dummydiskpath")); + } + + @Test + public void testGetPoolUuid() { + String poolUuid = rv.getPoolUuid(); + assertTrue(poolUuid.equals("bed9f83e-cac3-11e1-ac8a-0050568b007e")); + } + + @Test + public void testGetPool() { + StorageFilerTO pool = rv.getPool(); + + Long id = pool.getId(); + Long expectedL = 1L; + assertEquals(expectedL, id); + + String uuid = pool.getUuid(); + assertTrue(uuid.equals("bed9f83e-cac3-11e1-ac8a-0050568b007e")); + + String host = pool.getHost(); + assertTrue(host.equals("hostAddress")); + + String path = pool.getPath(); + assertTrue(path.equals("path")); + + String userInfo = pool.getUserInfo(); + assertTrue(userInfo.equals("userInfo")); + + Integer port = pool.getPort(); + Integer expectedI = 25; + assertEquals(expectedI, port); + + StoragePoolType type = pool.getType(); + assertEquals(StoragePoolType.Filesystem, type); + + String str = pool.toString(); + assertTrue(str.equals("Pool[" + id.toString() + "|" + host + ":" + + port.toString() + "|" + path + "]")); + } + + @Test + public void testGetNewSize() { + long newSize = rv.getNewSize(); + assertTrue(newSize == 4194304L); + } + + @Test + public void testGetCurrentSize() { + long currentSize = rv.getCurrentSize(); + assertTrue(currentSize == 1048576L); + } + + @Test + public void testGetShrinkOk() { + assertFalse(rv.getShrinkOk()); + } + + @Test + public void testGetInstanceName() { + String vmName = rv.getInstanceName(); + assertTrue(vmName.equals("vmName")); + } + +} http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/MidoNet_Plugin_Guide.ent ---------------------------------------------------------------------- diff --git a/docs/en-US/MidoNet_Plugin_Guide.ent b/docs/en-US/MidoNet_Plugin_Guide.ent new file mode 100644 index 0000000..f31c407 --- /dev/null +++ b/docs/en-US/MidoNet_Plugin_Guide.ent @@ -0,0 +1,22 @@ + + + + + + http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/MidoNet_Plugin_Guide.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/MidoNet_Plugin_Guide.xml b/docs/en-US/MidoNet_Plugin_Guide.xml new file mode 100644 index 0000000..86182e6 --- /dev/null +++ b/docs/en-US/MidoNet_Plugin_Guide.xml @@ -0,0 +1,52 @@ + + +%BOOK_ENTITIES; + +%xinclude; +]> + + + + + + &PRODUCT; Plugin Guide for the MidoNet Plugin + Apache CloudStack + 4.2.0 + 1 + + + + Plugin Guide for the MidoNet Plugin. + + + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/Release_Notes.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/Release_Notes.xml b/docs/en-US/Release_Notes.xml index cda8d72..dca95d3 100644 --- a/docs/en-US/Release_Notes.xml +++ b/docs/en-US/Release_Notes.xml @@ -5113,7 +5113,7 @@ service cloudstack-agent start Start the first Management Server. Do not start any other Management Server nodes yet. - # service cloud-management start + # service cloudstack-management start 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. @@ -5126,7 +5126,7 @@ service cloudstack-agent start Start all Usage Servers (if they were running on your previous version). Perform this on each Usage Server host. - # service cloud-usage start + # service cloudstack-usage start @@ -5152,7 +5152,7 @@ service cloudstack-agent start Start the agent. - # service cloud-agent start + # service cloudstack-agent start Edit /etc/cloud/agent/agent.properties to change the @@ -5742,7 +5742,7 @@ service cloudstack-agent start Start the first Management Server. Do not start any other Management Server nodes yet. - # service cloud-management start + # service cloudstack-management start 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. @@ -5750,7 +5750,7 @@ service cloudstack-agent start Start all Usage Servers (if they were running on your previous version). Perform this on each Usage Server host. - # service cloud-usage start + # service cloudstack-usage start (KVM only) Additional steps are required for each KVM host. These steps will not @@ -5776,7 +5776,7 @@ service cloudstack-agent start Start the agent. - # service cloud-agent start + # service cloudstack-agent start Copy the contents of the agent.properties file to the new http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/added-API-commands-4.2.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/added-API-commands-4.2.xml b/docs/en-US/added-API-commands-4.2.xml index 4bec148..3abb780 100644 --- a/docs/en-US/added-API-commands-4.2.xml +++ b/docs/en-US/added-API-commands-4.2.xml @@ -39,5 +39,83 @@ The response parameters are: id, ipaddress, secondaryips, gateway, netmask, macaddr, broadcasturi, isolationuri, isdefault, + + deleteAlerts + Deletes the specified alerts. The request parameters are: ids (allowed to pass one or + more IDs separated by comma); type (string); olderthan (yyyy-mm-dd format). + The response parameters are: true, false + + + archiveAlerts + Archives the specified alerts. The request parameters are: ids (allowed to pass one or + more IDs separated by comma); type (string); olderthan (yyyy-mm-dd format). + The response parameters are: true, false + + + deleteEvents + Deletes the specified events. The request parameters are: ids (allowed to pass one or + more IDs separated by comma); type (string); olderthan (yyyy-mm-dd format). + The response parameters are: true, false + + + archiveEvents + Archives the specified events. The request parameters are: ids (allowed to pass one or + more IDs separated by comma); type (string); olderthan (yyyy-mm-dd format). + The response parameters are: true, false + + + createGlobalLoadBalancerRule + Creates a GSLB rule. The request parameters are name (the name of the global load + balancer rule); domain name ( the preferred domain name for the service); lb algorithm (the + algorithm used to load balance the traffic across the zones); session persistence (source IP + and HTTP cookie); account name; and domain Id. + + + assignToGlobalLoadBalancerRule + Assigns a load balancing rule or list of load balancing rules to GSLB. The request + parameters are: id (the UUID of global load balancer rule); loadbalancerrulelist (the list + load balancer rules that will be assigned to global load balancer rule. These are second + tier load balancing rules created with createLoadBalancerRule API. Weight is optional, the + default is 1). + + + removeFromGlobalLoadBalancerRule + Removes a load balancer rule association with global load balancer rule. The request + parameters are id (the UUID of global load balancer rule); loadbalancerrulelist (the list + load balancer rules that will be assigned to global load balancer rule). + + + deleteGlobalLoadBalancerRule + Deletes a global load balancer rule. The request parameters is: id (the unique ID of the + global load balancer rule). + + + listGlobalLoadBalancerRule + Lists load balancer rules. + The request parameters are: account (lists resources by account. Use with the domainid + parameter); domainid (lists only resources belonging to the domain specified); id (the + unique ID of the global load balancer rule); isrecursive (defaults to false; but if true, + lists all the resources from the parent specified by the domainid); keyword (lists by + keyword); listall (if set to false, lists only resources belonging to the command's caller; + if set to true, lists resources that the caller is authorized to see. Default value is + false); page; pagesize; projectid (lists objects by project); regionid ; tags (lists + resources by tags: key/value pairs). + + + updateGlobalLoadBalancerRule + Updates global load balancer rules. + The request parameters are: id (the unique ID of the global load balancer rule); account + (lists resources by account. Use with the domainid parameter); description (the description + of the load balancer rule); domainid (lists only resources belonging to the domain + specified); gslblbmethod (the load balancer algorithm that is used to distributed traffic + across the zones participating in global server load balancing, if not specified defaults to + round robin); gslbstickysessionmethodname (the session sticky method; if not specified + defaults to sourceip); isrecursive (defaults to false, but if true, lists all resources from + the parent specified by the domainid till leaves); keyword (lists by keyword); listall (if + set to false, list only those resources belonging to the command's caller; if set to true, + lists resources that the caller is authorized to see. Default value is false); page; + pagesize; projectid (lists objects by project); regionid; tags (lists resources by tags: + key/value pairs) + http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/aws-ec2-configuration.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/aws-ec2-configuration.xml b/docs/en-US/aws-ec2-configuration.xml index dd7732e..d6dd2b5 100644 --- a/docs/en-US/aws-ec2-configuration.xml +++ b/docs/en-US/aws-ec2-configuration.xml @@ -35,7 +35,7 @@ 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 , restart the Management Server. - # service cloud-management restart + # service cloudstack-management restart The following sections provides details to perform these steps http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/change-database-password.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/change-database-password.xml b/docs/en-US/change-database-password.xml index 0ab5267..b0021a4 100644 --- a/docs/en-US/change-database-password.xml +++ b/docs/en-US/change-database-password.xml @@ -29,8 +29,8 @@ Before changing the password, you'll need to stop CloudStack's management server and the usage engine if you've deployed that component. -# service cloud-management stop -# service cloud-usage stop +# service cloudstack-management stop +# service cloudstack-usage stop @@ -68,7 +68,7 @@ db.usage.password=ENC(encrypted_password_from_above) After copying the new password over, you can now start CloudStack (and the usage engine, if necessary). - # service cloud-management start + # service cloudstack-management start # service cloud-usage start http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/changed-API-commands-4.2.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/changed-API-commands-4.2.xml b/docs/en-US/changed-API-commands-4.2.xml index 26f10ff..2dd5a3b 100644 --- a/docs/en-US/changed-API-commands-4.2.xml +++ b/docs/en-US/changed-API-commands-4.2.xml @@ -30,6 +30,15 @@ + createVlanIpRange + + No new parameter has been added. However, the current functionality has been + extended to add guest IPs from a different subnet in shared networks in a Basic zone. + Ensure that you provide netmask and gateway if you are adding guest IPs from a + different subnet. + + + updateResourceLimit Added the following resource types to the resourcetype @@ -113,8 +122,10 @@ removelan (removes the specified VLAN range) - The removevlan and vlan parameters can be used together. If the VLAN range that you are trying - to remove is in use, the operation will not succeed. + + The removevlan and vlan parameters can be used together. If the VLAN range that + you are trying to remove is in use, the operation will not succeed. + http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/citrix-xenserver-installation.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/citrix-xenserver-installation.xml b/docs/en-US/citrix-xenserver-installation.xml index 2cd39a4..a5118d7 100644 --- a/docs/en-US/citrix-xenserver-installation.xml +++ b/docs/en-US/citrix-xenserver-installation.xml @@ -610,7 +610,7 @@ master-password=[your password] Restart the Management Server and Usage Server. You only need to do this once for all clusters. - # service cloud-management start + # service cloudstack-management start # service cloud-usage start http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/configure-usage-server.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/configure-usage-server.xml b/docs/en-US/configure-usage-server.xml index 173f4a5..83bed07 100644 --- a/docs/en-US/configure-usage-server.xml +++ b/docs/en-US/configure-usage-server.xml @@ -32,8 +32,8 @@ In Actions, click the Edit icon. Type the desired value and click the Save icon. Restart the Management Server (as usual with any global configuration change) and also the Usage Server: - # service cloud-management restart -# service cloud-usage restart + # service cloudstack-management restart +# service cloudstack-usage restart The following table shows the global configuration settings that control the behavior of the Usage Server. http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/creating-network-offerings.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/creating-network-offerings.xml b/docs/en-US/creating-network-offerings.xml index 2b23ca8..260751e 100644 --- a/docs/en-US/creating-network-offerings.xml +++ b/docs/en-US/creating-network-offerings.xml @@ -253,7 +253,7 @@ 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 + used for defining other services, such as StaticNAT 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 http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/database-replication.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/database-replication.xml b/docs/en-US/database-replication.xml index 718c349..bb14457 100644 --- a/docs/en-US/database-replication.xml +++ b/docs/en-US/database-replication.xml @@ -121,14 +121,14 @@ mysql> start slave; Failover 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: - Stop the Management Servers (via service cloud-management stop). + Stop the Management Servers (via service cloudstack-management stop). Change the replica's configuration to be a master and restart it. Ensure that the replica's port 3306 is open to the Management Servers. - 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. + 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/cloudstack/management/db.properties. Restart the Management Servers: -# service cloud-management start +# service cloudstack-management start http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/delete-event-alerts.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/delete-event-alerts.xml b/docs/en-US/delete-event-alerts.xml index 3eebcb7..ef39040 100644 --- a/docs/en-US/delete-event-alerts.xml +++ b/docs/en-US/delete-event-alerts.xml @@ -28,6 +28,18 @@ or by using the Details page. If you want to delete multiple alerts or events at the same time, you can use the respective context menu. You can delete alerts or events by category for a time period. + In order to support the delete or archive alerts, the following global parameters have been + added: + + + alert.purge.delay: The alerts older than specified + number of days are purged. Set the value to 0 to never purge alerts automatically. + + + alert.purge.interval: The interval in seconds to wait + before running the alert purge thread. The default is 86400 seconds (one day). + + Archived alerts or events cannot be viewed in the UI, or by using the API. They are maintained in the database for auditing or compliance purposes. http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/elastic-ip.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/elastic-ip.xml b/docs/en-US/elastic-ip.xml index b09d37d..8ecbd75 100644 --- a/docs/en-US/elastic-ip.xml +++ b/docs/en-US/elastic-ip.xml @@ -21,16 +21,31 @@
About Elastic IP Elastic IP (EIP) addresses are the IP addresses that are associated with an account, and act - as static IP addresses. The account owner has complete control over the Elastic IP addresses - that belong to the account. You can allocate an Elastic IP to a VM of your choice from the EIP - pool of your account. Later if required you can reassign the IP address to a different VM. This - feature is extremely helpful during VM failure. Instead of replacing the VM which is down, the - IP address can be reassigned to a new VM in your account. Elastic IP service provides Static NAT - (1:1) service in an EIP-enabled basic zone. The default network offering, + as static IP addresses. The account owner has the complete control over the Elastic IP addresses + that belong to the account. As an account owner, you can allocate an Elastic IP to a VM of your + choice from the EIP pool of your account. Later if required you can reassign the IP address to a + different VM. This feature is extremely helpful during VM failure. Instead of replacing the VM + which is down, the IP address can be reassigned to a new VM in your account. + Similar to the public IP address, Elastic IP addresses are mapped to their associated + private IP addresses by using StaticNAT. The EIP service is equipped with StaticNAT (1:1) + service in an EIP-enabled basic zone. The default network offering, DefaultSharedNetscalerEIPandELBNetworkOffering, provides your network with EIP and ELB network - services if a NetScaler device is deployed in your zone. Similar to the public IP address, - Elastic IP addresses are also mapped to their associated private IP addresses by using Stactic - NAT. + services if a NetScaler device is deployed in your zone. Consider the following illustration for + more details. + + + + + + eip-ns-basiczone.png: Elastic IP in a NetScaler-enabled Basic Zone. + + + In the illustration, a NetScaler appliance is the default entry or exit point for the + &PRODUCT; instances, and firewall is the default entry or exit point for the rest of the data + center. Netscaler provides LB services and staticNAT service to the guest networks. The guest + traffic in the pods and the Management Server are on different subnets / VLANs. The policy-based + routing in the data center core switch sends the public traffic through the NetScaler, whereas + the rest of the data center goes through the firewall. The EIP work flow is as follows: @@ -48,7 +63,6 @@ supported by NetScaler, in which the source IP address is replaced in the packets generated by a VM in the private network with the public IP address. - This default public IP will be released in two cases: @@ -68,12 +82,12 @@ - However, for the deployments where public IPs are limited resources, you have the - flexibility to choose not to allocate a public IP by default. You can use the Associate Public - IP option to turn on or off the automatic public IP assignment in the EIP-enabled Basic zones. - If you turn off the automatic public IP assignment while creating a network offering, only a - private IP is assigned to a VM when the VM is deployed with that network offering. Later, the - user can acquire an IP for the VM and enable static NAT. + For the deployments where public IPs are limited resources, you have the flexibility to + choose not to allocate a public IP by default. You can use the Associate Public IP option to + turn on or off the automatic public IP assignment in the EIP-enabled Basic zones. If you turn + off the automatic public IP assignment while creating a network offering, only a private IP is + assigned to a VM when the VM is deployed with that network offering. Later, the user can acquire + an IP for the VM and enable static NAT. For more information on the Associate Public IP option, see . For more information on the Associate Public IP option, see the @@ -83,7 +97,6 @@ continue to get both public IP and private by default, irrespective of the network offering configuration. - New deployments which use the default shared network offering with EIP and ELB services to create a shared network in the Basic zone will continue allocating public IPs to each user VM. http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/events.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/events.xml b/docs/en-US/events.xml index 4a14458..3b93ee0 100644 --- a/docs/en-US/events.xml +++ b/docs/en-US/events.xml @@ -25,7 +25,7 @@ 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 + physical resources, an action performed by an user (action events), or policy based events (alerts). http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/external-firewalls-and-load-balancers.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/external-firewalls-and-load-balancers.xml b/docs/en-US/external-firewalls-and-load-balancers.xml index b947daf..42ecacf 100644 --- a/docs/en-US/external-firewalls-and-load-balancers.xml +++ b/docs/en-US/external-firewalls-and-load-balancers.xml @@ -29,5 +29,6 @@ xmlns:xi="http://www.w3.org/2001/XInclude"/> +
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/gslb.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/gslb.xml b/docs/en-US/gslb.xml new file mode 100644 index 0000000..2303331 --- /dev/null +++ b/docs/en-US/gslb.xml @@ -0,0 +1,499 @@ + + +%BOOK_ENTITIES; +]> + + +
+ Global Server Load Balancing Support + &PRODUCT; supports Global Server Load Balancing (GSLB) functionalities to provide business + continuity, and enable seamless resource movement within a &PRODUCT; environment. &PRODUCT; + achieve this by extending its functionality of integrating with NetScaler Application Delivery + Controller (ADC), which also provides various GSLB capabilities, such as disaster recovery and + load balancing. The DNS redirection technique is used to achieve GSLB in &PRODUCT;. + In order to support this functionality, region level services and service provider are + introduced. A new service 'GSLB' is introduced as a region level service. The GSLB service + provider is introduced that will provider the GSLB service. Currently, NetScaler is the + supported GSLB provider in &PRODUCT;. GSLB functionality works in an Active-Active data center + environment. +
+ About Global Server Load Balancing + Global Server Load Balancing (GSLB) is an extension of load balancing functionality, which + is highly efficient in avoiding downtime. Based on the nature of deployment, GSLB represents a + set of technologies that is used for various purposes, such as load sharing, disaster + recovery, performance, and legal obligations. With GSLB, workloads can be distributed across + multiple data centers situated at geographically separated locations. GSLB can also provide an + alternate location for accessing a resource in the event of a failure, or to provide a means + of shifting traffic easily to simplify maintenance, or both. +
+ Components of GSLB + A typical GSLB environment is comprised of the following components: + + + GSLB Site: In &PRODUCT;terminology, GSLB sites are + represented by zones that are mapped to data centers, each of which has various network + appliances. Each GSLB site is managed by a NetScaler appliance that is local to that + site. Each of these appliances treats its own site as the local site and all other + sites, managed by other appliances, as remote sites. It is the central entity in a GSLB + deployment, and is represented by a name and an IP address. + + + GSLB Services: A GSLB service is typically + represented by a load balancing or content switching virtual server. In a GSLB + environment, you can have a local as well as remote GSLB services. A local GSLB service + represents a local load balancing or content switching virtual server. A remote GSLB + service is the one configured at one of the other sites in the GSLB setup. At each site + in the GSLB setup, you can create one local GSLB service and any number of remote GSLB + services. + + + GSLB Virtual Servers: A GSLB virtual server refers + to one or more GSLB services and balances traffic between traffic across the VMs in + multiple zones by using the &PRODUCT; functionality. It evaluates the configured GSLB + methods or algorithms to select a GSLB service to which to send the client requests. One + or more virtual servers from different zones are bound to the GSLB virtual server. GSLB + virtual server does not have a public IP associated with it, instead it will have a FQDN + DNS name. + + + Load Balancing or Content Switching Virtual + Servers: According to Citrix NetScaler terminology, a load balancing or + content switching virtual server represents one or many servers on the local network. + Clients send their requests to the load balancing or content switching virtual server’s + virtual IP (VIP) address, and the virtual server balances the load across the local + servers. After a GSLB virtual server selects a GSLB service representing either a local + or a remote load balancing or content switching virtual server, the client sends the + request to that virtual server’s VIP address. + + + DNS VIPs: DNS virtual IP represents a load + balancing DNS virtual server on the GSLB service provider. The DNS requests for domains + for which the GSLB service provider is authoritative can be sent to a DNS VIP. + + + Authoritative DNS: ADNS (Authoritative Domain Name + Server) is a service that provides actual answer to DNS queries, such as web site IP + address. In a GSLB environment, an ADNS service responds only to DNS requests for + domains for which the GSLB service provider is authoritative. When an ADNS service is + configured, the service provider owns that IP address and advertises it. When you create + an ADNS service, the NetScaler responds to DNS queries on the configured ADNS service IP + and port. + + +
+
+ How Does GSLB Works in &PRODUCT;? + Global server load balancing is used to manage the traffic flow to a web site hosted on + two separate zones that ideally are in different geographic locations. The following is an + illustration of how GLSB functionality is provided in &PRODUCT;: An organization, xyztelco, + has set up a public cloud that spans two zones, Zone-1 and Zone-2, across geographically + separated data centers that are managed by &PRODUCT;. Tenant-A of the cloud launches a + highly available solution by using xyztelco cloud. For that purpose, they launch two + instances each in both the zones: VM1 and VM2 in Zone-1 and VM5 and VM6 in Zone-2. Tenant-A + acquires a public IP, IP-1 in Zone-1, and configures a load balancer rule to load balance + the traffic between VM1 and VM2 instances. &PRODUCT; orchestrates setting up a virtual + server on the LB service provider in Zone-1. Virtual server 1 that is set up on the LB + service provider in Zone-1 represents a publicly accessible virtual server that client + reaches at IP-1. The client traffic to virtual server 1 at IP-1 will be load balanced across + VM1 and VM2 instances. + Tenant-A acquires another public IP, IP-2 in Zone-2 and sets up a load balancer rule to + load balance the traffic between VM5 and VM6 instances. Similarly in Zone-2, &PRODUCT; + orchestrates setting up a virtual server on the LB service provider. Virtual server 2 that + is setup on the LB service provider in Zone-2 represents a publicly accessible virtual + server that client reaches at IP-2. The client traffic that reaches virtual server 2 at IP-2 + is load balanced across VM5 and VM6 instances. At this point Tenant-A has the service + enabled in both the zones, but has no means to set up a disaster recovery plan if one of the + zone fails. Additionally, there is no way for Tenant-A to load balance the traffic + intelligently to one of the zones based on load, proximity and so on. The cloud + administrator of xyztelco provisions a GSLB service provider to both the zones. A GSLB + provider is typically an ADC that has the ability to act as an ADNS (Authoritative Domain + Name Server) and has the mechanism to monitor health of virtual servers both at local and + remote sites. The cloud admin enables GSLB as a service to the tenants that use zones 1 and + 2. + + + + + + gslb.png: GSLB architecture + + + Tenant-A wishes to leverage the GSLB service provided by the xyztelco cloud. Tenant-A + configures a GSLB rule to load balance traffic across virtual server 1 at Zone-1 and virtual + server 2 at Zone-2. The domain name is provided as A.xyztelco.com. &PRODUCT; orchestrates + setting up GSLB virtual server 1 on the GSLB service provider at Zone-1. &PRODUCT; binds + virtual server 1 of Zone-1 and virtual server 2 of Zone-2 to GLSB virtual server 1. GSLB + virtual server 1 is configured to start monitoring the health of virtual server 1 and 2 in + Zone-1. &PRODUCT; will also orchestrate setting up GSLB virtual server 2 on GSLB service + provider at Zone-2. &PRODUCT; will bind virtual server 1 of Zone-1 and virtual server 2 of + Zone-2 to GLSB virtual server 2. GSLB virtual server 2 is configured to start monitoring the + health of virtual server 1 and 2. &PRODUCT; will bind the domain A.xyztelco.com to both the + GSLB virtual server 1 and 2. At this point, Tenant-A service will be globally reachable at + A.xyztelco.com. The private DNS server for the domain xyztelcom.com is configured by the + admin out-of-band to resolve the domain A.xyztelco.com to the GSLB providers at both the + zones, which are configured as ADNS for the domain A.xyztelco.com. A client when sends a DNS + request to resolve A.xyztelcom.com, will eventually get DNS delegation to the address of + GSLB providers at zone 1 and 2. A client DNS request will be received by the GSLB provider. + The GSLB provider, depending on the domain for which it needs to resolve, will pick up the + GSLB virtual server associated with the domain. Depending on the health of the virtual + servers being load balanced, DNS request for the domain will be resolved to the public IP + associated with the selected virtual server. +
+
+
+ Configuring GSLB + A GSLB deployment is the logical collection of GSLB virtual server, GSLB service, LB + virtual server, service, domain, and ADNS service. To create a GSLB site, you must configure + load balancing in the zone. You must create GSLB vservers and GSLB services for each site. You + must bind GSLB services to GSLB vservers. You must then create an ADNS service that provides + the IP address of the best performing site to the client's request. A GSLB vserver is an + entity that performs load balancing for the domains bound to it by returning the IP address of + the best GSLB service. A GSLB service is a representation of the load balancing/content + switching vserver. An LB vserver load balances incoming traffic by identifying the best + server, then directs traffic to the corresponding service. It can also load-balance external + DNS name servers. Services are entities that represent the servers. The domain is the domain + name for which the system is the authoritative DNS server. By creating an ADNS service, the + system can be configured as an authoritative DNS server. + To configure GSLB in your cloud environment, as a cloud administrator you must perform the + following. + To configure such a GSLB setup, you must first configure a standard load balancing setup + for each zone. This enables you to balance load across the different servers in each zone in + the region. Then, configure both NetScaler appliances that you plan to add to each zone as + authoritative DNS (ADNS) servers. Next, create a GSLB site for each zone, configure GSLB + virtual servers for each site, create GLSB services, and bind the GSLB services to the GSLB + virtual servers. Finally, bind the domain to the GSLB virtual servers. The GSLB configurations + on the two appliances at the two different sites are identical, although each sites + load-balancing configuration is specific to that site. + Perform the following as a cloud administrator. As per the above example, the + administrator of xyztelco is the one who sets up GSLB: + + + In the cloud.dns.name global parameter, specify the DNS name of your tenant's cloud + that make use of the GSLB service. + + + On the NetScaler side, configure GSLB as given in Configuring Global Server Load Balancing (GSLB): + + + Configuring a standard load balancing setup. + + + Configure Authoritative DNS, as explained in Configuring an Authoritative DNS Service. + + + Configure a GSLB site with site name formed from the domain name details. + For more information, see Configuring a Basic GSLB Site. + + + Configure a GSLB virtual server. + For more information, see Configuring a GSLB Virtual Server. + + + Configure a GSLB service for each virtual server. + For more information, see Configuring a GSLB Service. + + + Bind the GSLB services to the GSLB virtual server. + For more information, see Binding GSLB Services to a GSLB Virtual Server. + + + Bind domain name to GSLB virtual server. Domain name is obtained from the domain + details. + For more information, see Binding a Domain to a GSLB Virtual Server. + + + + + In each zone that are participating in GSLB, add GSLB-enabled NetScaler device. + For more information, see . + + + As a domain administrator/ user perform the following: + + + Add a GSLB rule on both the sites. + See . + + + Assign load balancer rules. + See . + + +
+ Prerequisites and Guidelines + + + The GSLB functionality is supported both Basic and Advanced zones. + + + GSLB is added as a new network service. + + + GSLB service provider can be added to a physical network in a zone. + + + The admin is allowed to enable or disable GSLB functionality at region level. + + + The admin is allowed to configure a zone as GSLB capable or enabled. + A zone shall be considered as GSLB capable only if a GSLB service provider is + provisioned in the zone. + + + When users have VMs deployed in multiple availability zones which are GSLB enabled, + they can use the GSLB functionality to load balance traffic across the VMs in multiple + zones. + + + The users can use GSLB to load balance across the VMs across zones in a region only + if the admin has enabled GSLB in that region. + + + The users can load balance traffic across the availability zones in the same region + or different regions. + + + The admin can configure DNS name for the entire cloud. + + + The users can specify an unique name across the cloud for a globally load balanced + service. The provided name is used as the domain name under the DNS name associated with + the cloud. + The user-provided name along with the admin-provided DNS name is used to produce a + globally resolvable FQDN for the globally load balanced service of the user. For + example, if the admin has configured xyztelco.com as the DNS name for the cloud, and + user specifies 'foo' for the GSLB virtual service, then the FQDN name of the GSLB + virtual service is foo.xyztelco.com. + + + While setting up GSLB, users can select a load balancing method, such as round + robin, for using across the zones that are part of GSLB. + + + The user shall be able to set weight to zone-level virtual server. Weight shall be + considered by the load balancing method for distributing the traffic. + + + The GSLB functionality shall support session persistence, where series of client + requests for particular domain name is sent to a virtual server on the same zone. + Statistics is collected from each GSLB virtual server. + + +
+
+ Enabling GSLB in NetScaler + In each zone, add GSLB-enabled NetScaler device for load balancing. + + + Log in as administrator to the &PRODUCT; UI. + + + In the left navigation bar, click Infrastructure. + + + In Zones, click View More. + + + Choose the zone you want to work with. + + + Click the Physical Network tab, then click the name of the physical network. + + + In the Network Service Providers node of the diagram, click Configure. + You might have to scroll down to see this. + + + Click NetScaler. + + + Click Add NetScaler device and provide the following: + For NetScaler: + + + IP Address: The IP address of the SRX. + + + Username/Password: The authentication + credentials to access the device. &PRODUCT; uses these credentials to access the + device. + + + 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. + + + Public interface: Interface of device that is + configured to be part of the public network. + + + Private interface: Interface of device that is + configured to be part of the private network. + + + GSLB service: Select this option. + + + GSLB service Public IP: The public IP address + of the NAT translator for a GSLB service that is on a private network. + + + GSLB service Private IP: The private IP of the + GSLB service. + + + Number of Retries. Number of times to attempt a + command on the device before considering the operation failed. Default is 2. + + + Capacity: The number of networks the device can + handle. + + + 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. + + + + + Click OK. + + +
+
+ Adding a GSLB Rule + + + Log in to the &PRODUCT; UI as a domain administrator or user. + + + In the left navigation pane, click Region. + + + Select the region for which you want to create a GSLB rule. + + + In the Details tab, click View GSLB. + + + Click Add GSLB. + The Add GSLB page is displayed as follows: + + + + + + gslb-add.png: adding a gslb rule + + + + + Specify the following: + + + Name: Name for the GSLB rule. + + + Description: (Optional) A short description of + the GSLB rule that can be displayed to users. + + + GSLB Domain Name: A preferred domain name for + the service. + + + Algorithm: (Optional) The algorithm to use to + load balance the traffic across the zones. The options are Round Robin, Least + Connection, and Proximity. + + + Service Type: The transport protocol to use for + GSLB. The options are TCP and UDP. + + + Domain: (Optional) The domain for which you + want to create the GSLB rule. + + + Account: (Optional) The account on which you + want to apply the GSLB rule. + + + + + Click OK to confirm. + + +
+
+ Assigning Load Balancing Rules to GSLB + + + + Log in to the &PRODUCT; UI as a domain administrator or user. + + + In the left navigation pane, click Region. + + + Select the region for which you want to create a GSLB rule. + + + In the Details tab, click View GSLB. + + + Select the desired GSLB. + + + Click view assigned load balancing. + + + Click assign more load balancing. + + + Select the load balancing rule you have created for the zone. + + + Click OK to confirm. + + +
+
+
+ Known Limitation + Currently, &PRODUCT; does not support orchestration of services across the zones. The + notion of services and service providers in region are to be introduced. +
+
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/guest-ip-ranges.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/guest-ip-ranges.xml b/docs/en-US/guest-ip-ranges.xml index 1f8c8a1..b3ebd76 100644 --- a/docs/en-US/guest-ip-ranges.xml +++ b/docs/en-US/guest-ip-ranges.xml @@ -21,8 +21,12 @@ specific language governing permissions and limitations under the License. --> -
- Guest IP Ranges - 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. + Guest IP Ranges + 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. + In shared networks in Basic zone and Security Group-enabled Advanced networks, you will have + the flexibility to add multiple guest IP ranges from different subnets. You can add or remove + one IP range at a time.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/hypervisor-host-install-agent.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/hypervisor-host-install-agent.xml b/docs/en-US/hypervisor-host-install-agent.xml index e5bfa37..41b6719 100644 --- a/docs/en-US/hypervisor-host-install-agent.xml +++ b/docs/en-US/hypervisor-host-install-agent.xml @@ -27,8 +27,8 @@ 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. First we start by installing the agent: In RHEL or CentOS: - $ yum install cloud-agent + $ yum install cloudstack-agent In Ubuntu: - $ apt-get install cloud-agent + $ apt-get install cloudstack-agent 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! - \ No newline at end of file + http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c11dbad9/docs/en-US/hypervisor-host-install-libvirt.xml ---------------------------------------------------------------------- diff --git a/docs/en-US/hypervisor-host-install-libvirt.xml b/docs/en-US/hypervisor-host-install-libvirt.xml index f3ff090..d3d6b9b 100644 --- a/docs/en-US/hypervisor-host-install-libvirt.xml +++ b/docs/en-US/hypervisor-host-install-libvirt.xml @@ -24,7 +24,7 @@
Install and Configure libvirt - &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. + &PRODUCT; uses libvirt for managing virtual machines. Therefore it is vital that libvirt is configured correctly. Libvirt is a dependency of cloudstack-agent and should already be installed. 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