This commit is contained in:
sailajam 2013-09-16 16:17:42 +05:30
commit 20b1a2c5cd
20 changed files with 2625 additions and 6023 deletions

File diff suppressed because it is too large Load Diff

View File

@ -84,6 +84,14 @@
<para>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.</para>
<para>(VMware only) If you have enabled Nexus dvSwitch in the environment, you must specify
the corresponding Ethernet port profile names as network traffic label for each traffic type
on the physical network. For more information on Nexus dvSwitch, see Configuring a vSphere
Cluster with Nexus 1000v Virtual Switch in the Installation Guide. If you have enabled
VMware dvSwitch in the environment, you must specify the corresponding Switch name as
network traffic label for each traffic type on the physical network. For more information,
see Configuring a VMware Datacenter with VMware Distributed Virtual Switch in the
Installation Guide. </para>
</listitem>
<listitem>
<para>Click Next.</para>
@ -219,9 +227,9 @@
</listitem>
<listitem>
<para><emphasis role="bold">Protocol.</emphasis> 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.</para>
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.</para>
<informaltable frame="all">
<tgroup cols="2" align="left" colsep="1" rowsep="1">
<colspec colname="c1"/>
@ -362,7 +370,8 @@
Secondary Storage :</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">NFS Server.</emphasis> The IP address of the server or fully qualified domain name of the server.</para>
<para><emphasis role="bold">NFS Server.</emphasis> The IP address of the server or fully
qualified domain name of the server.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Path.</emphasis> The exported path from the server.</para>

View File

@ -22,124 +22,298 @@
under the License.
-->
<section id="basic-zone-configuration">
<title>Basic Zone Configuration</title>
<orderedlist>
<listitem><para>After you select Basic in the Add Zone wizard and click Next, you will be asked to enter the following details. Then click Next.</para>
<itemizedlist>
<listitem><para><emphasis role="bold">Name.</emphasis> A name for the zone.</para></listitem>
<listitem><para><emphasis role="bold">DNS 1 and 2.</emphasis> 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.</para></listitem>
<listitem><para><emphasis role="bold">Internal DNS 1 and Internal DNS 2.</emphasis> 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.</para></listitem>
<listitem><para><emphasis role="bold">Hypervisor.</emphasis> (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.</para></listitem>
<listitem><para><emphasis role="bold">Network Offering.</emphasis> Your choice here determines what network services will be available on the network for guest VMs.</para>
<informaltable frame="all">
<tgroup cols="2" align="left" colsep="1" rowsep="1">
<colspec colname="c1" />
<colspec colname="c2" />
<thead>
<row>
<entry><para>Network Offering</para></entry>
<entry><para>Description</para></entry>
</row>
</thead>
<tbody>
<row>
<entry><para>DefaultSharedNetworkOfferingWithSGService</para></entry>
<entry><para>If you want to enable security groups for guest traffic isolation, choose this. (See Using Security Groups to Control Traffic to VMs.)</para></entry>
</row>
<row>
<entry><para>DefaultSharedNetworkOffering</para></entry>
<entry><para>If you do not need security groups, choose this.</para></entry>
</row>
<row>
<entry><para>DefaultSharedNetscalerEIPandELBNetworkOffering</para></entry>
<entry><para>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.</para></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</listitem>
<listitem><para><emphasis role="bold">Network Domain.</emphasis> (Optional) If you want to assign a special domain name to the guest VM network, specify the DNS suffix.</para></listitem>
<listitem><para><emphasis role="bold">Public.</emphasis> 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.</para></listitem>
</itemizedlist>
<title>Basic Zone Configuration</title>
<orderedlist>
<listitem>
<para>After you select Basic in the Add Zone wizard and click Next, you will be asked to enter
the following details. Then click Next.</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Name.</emphasis> A name for the zone.</para>
</listitem>
<listitem><para>Choose which traffic types will be carried by the physical network.</para>
<para>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.</para>
<listitem>
<para><emphasis role="bold">DNS 1 and 2.</emphasis> 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.</para>
</listitem>
<listitem><para>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.</para>
<para>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.</para>
<listitem>
<para><emphasis role="bold">Internal DNS 1 and Internal DNS 2.</emphasis> 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.</para>
</listitem>
<listitem><para>Click Next.</para></listitem>
<listitem><para>(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.</para>
<itemizedlist>
<listitem><para><emphasis role="bold">IP address.</emphasis> The NSIP (NetScaler IP) address of the NetScaler device.</para></listitem>
<listitem><para><emphasis role="bold">Username/Password.</emphasis> The authentication credentials to access the device. &PRODUCT; uses these credentials to access the device.</para></listitem>
<listitem><para><emphasis role="bold">Type.</emphasis> 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.</para></listitem>
<listitem><para><emphasis role="bold">Public interface.</emphasis> Interface of NetScaler that is configured to be part of the public network.</para></listitem>
<listitem><para><emphasis role="bold">Private interface.</emphasis> Interface of NetScaler that is configured to be part of the private network.</para></listitem>
<listitem><para><emphasis role="bold">Number of retries.</emphasis> Number of times to attempt a command on the device before considering the operation failed. Default is 2.</para></listitem>
<listitem><para><emphasis role="bold">Capacity.</emphasis> Number of guest networks/accounts that will share this NetScaler device.</para></listitem>
<listitem><para><emphasis role="bold">Dedicated.</emphasis> 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.</para></listitem>
</itemizedlist>
<listitem>
<para><emphasis role="bold">Hypervisor.</emphasis> (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.</para>
</listitem>
<listitem><para>(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.</para>
<itemizedlist>
<listitem><para><emphasis role="bold">Gateway.</emphasis> The gateway in use for these IP addresses.</para></listitem>
<listitem><para><emphasis role="bold">Netmask.</emphasis> The netmask associated with this IP range.</para></listitem>
<listitem><para><emphasis role="bold">VLAN.</emphasis> The VLAN that will be used for public traffic.</para></listitem>
<listitem><para><emphasis role="bold">Start IP/End IP.</emphasis> A range of IP addresses that are assumed to be accessible from the Internet and will be allocated for access to guest VMs.</para></listitem>
</itemizedlist>
<listitem>
<para><emphasis role="bold">Network Offering.</emphasis> Your choice here determines what
network services will be available on the network for guest VMs.</para>
<informaltable frame="all">
<tgroup cols="2" align="left" colsep="1" rowsep="1">
<colspec colname="c1"/>
<colspec colname="c2"/>
<thead>
<row>
<entry><para>Network Offering</para></entry>
<entry><para>Description</para></entry>
</row>
</thead>
<tbody>
<row>
<entry><para>DefaultSharedNetworkOfferingWithSGService</para></entry>
<entry><para>If you want to enable security groups for guest traffic isolation,
choose this. (See Using Security Groups to Control Traffic to
VMs.)</para></entry>
</row>
<row>
<entry><para>DefaultSharedNetworkOffering</para></entry>
<entry><para>If you do not need security groups, choose this.</para></entry>
</row>
<row>
<entry><para>DefaultSharedNetscalerEIPandELBNetworkOffering</para></entry>
<entry><para>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.</para></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</listitem>
<listitem><para>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 <xref linkend="about-pods" />.</para>
<para>To configure the first pod, enter the following, then click Next:</para>
<itemizedlist>
<listitem><para><emphasis role="bold">Pod Name.</emphasis> A name for the pod.</para></listitem>
<listitem><para><emphasis role="bold">Reserved system gateway.</emphasis> The gateway for the hosts in that pod.</para></listitem>
<listitem><para><emphasis role="bold">Reserved system netmask.</emphasis> The network prefix that defines the pod's subnet. Use CIDR notation.</para></listitem>
<listitem><para><emphasis role="bold">Start/End Reserved System IP.</emphasis> 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.</para></listitem>
</itemizedlist>
<listitem>
<para><emphasis role="bold">Network Domain.</emphasis> (Optional) If you want to assign a
special domain name to the guest VM network, specify the DNS suffix.</para>
</listitem>
<listitem><para>Configure the network for guest traffic. Provide the following, then click Next:</para>
<itemizedlist>
<listitem><para><emphasis role="bold">Guest gateway.</emphasis> The gateway that the guests should use.</para></listitem>
<listitem><para><emphasis role="bold">Guest netmask.</emphasis> The netmask in use on the subnet the guests will use.</para></listitem>
<listitem><para><emphasis role="bold">Guest start IP/End IP.</emphasis> Enter the first and last IP addresses that define a range that &PRODUCT; can assign to guests.</para>
<itemizedlist>
<listitem><para>We strongly recommend the use of multiple NICs. If multiple NICs are used, they may be in a different subnet.</para></listitem>
<listitem><para>If one NIC is used, these IPs should be in the same CIDR as the pod CIDR.</para></listitem>
</itemizedlist>
</listitem>
</itemizedlist>
<listitem>
<para><emphasis role="bold">Public.</emphasis> 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.</para>
</listitem>
<listitem><para>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.</para>
<para>To configure the first cluster, enter the following, then click Next:</para>
<itemizedlist>
<listitem><para><emphasis role="bold">Hypervisor.</emphasis> (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.</para></listitem>
<listitem><para><emphasis role="bold">Cluster name.</emphasis> Enter a name for the cluster. This can be text of your choosing and is not used by &PRODUCT;.</para></listitem>
</itemizedlist>
</itemizedlist>
</listitem>
<listitem>
<para>Choose which traffic types will be carried by the physical network.</para>
<para>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.</para>
</listitem>
<listitem>
<para>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.</para>
<para>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.</para>
</listitem>
<listitem>
<para>Click Next.</para>
</listitem>
<listitem>
<para>(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.</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">IP address.</emphasis> The NSIP (NetScaler IP) address of the
NetScaler device.</para>
</listitem>
<listitem><para>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.</para>
<note><para>When you add a hypervisor host to &PRODUCT;, the host must not have any VMs already running.</para></note>
<para>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:</para>
<itemizedlist>
<listitem><para>Citrix XenServer Installation and Configuration</para></listitem>
<listitem><para>VMware vSphere Installation and Configuration</para></listitem>
<listitem><para>KVM vSphere Installation and Configuration</para></listitem>
<!-- <listitem><para>Oracle VM (OVM) Installation and Configuration</para></listitem> -->
</itemizedlist>
<para>To configure the first host, enter the following, then click Next:</para>
<itemizedlist>
<listitem><para><emphasis role="bold">Host Name.</emphasis> The DNS name or IP address of the host.</para></listitem>
<listitem><para><emphasis role="bold">Username.</emphasis> The username is root.</para></listitem>
<listitem><para><emphasis role="bold">Password.</emphasis> This is the password for the user named above (from your XenServer or KVM install).</para></listitem>
<listitem><para><emphasis role="bold">Host Tags.</emphasis> (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.</para></listitem>
</itemizedlist>
<listitem>
<para><emphasis role="bold">Username/Password.</emphasis> The authentication credentials
to access the device. &PRODUCT; uses these credentials to access the device.</para>
</listitem>
<listitem><para>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.</para>
<para>To configure the first primary storage server, enter the following, then click Next:</para>
<itemizedlist>
<listitem><para><emphasis role="bold">Name.</emphasis> The name of the storage device.</para></listitem>
<listitem><para><emphasis role="bold">Protocol.</emphasis> 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.</para></listitem>
</itemizedlist>
<listitem>
<para><emphasis role="bold">Type.</emphasis> 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.</para>
</listitem>
</orderedlist>
<listitem>
<para><emphasis role="bold">Public interface.</emphasis> Interface of NetScaler that is
configured to be part of the public network.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Private interface.</emphasis> Interface of NetScaler that is
configured to be part of the private network.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Number of retries.</emphasis> Number of times to attempt a
command on the device before considering the operation failed. Default is 2.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Capacity.</emphasis> Number of guest networks/accounts that
will share this NetScaler device.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Dedicated.</emphasis> 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.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>(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.</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Gateway.</emphasis> The gateway in use for these IP
addresses.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Netmask.</emphasis> The netmask associated with this IP
range.</para>
</listitem>
<listitem>
<para><emphasis role="bold">VLAN.</emphasis> The VLAN that will be used for public
traffic.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Start IP/End IP.</emphasis> A range of IP addresses that are
assumed to be accessible from the Internet and will be allocated for access to guest
VMs.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>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 <xref linkend="about-pods"/>.</para>
<para>To configure the first pod, enter the following, then click Next:</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Pod Name.</emphasis> A name for the pod.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Reserved system gateway.</emphasis> The gateway for the hosts
in that pod.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Reserved system netmask.</emphasis> The network prefix that
defines the pod's subnet. Use CIDR notation.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Start/End Reserved System IP.</emphasis> 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.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Configure the network for guest traffic. Provide the following, then click Next:</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Guest gateway.</emphasis> The gateway that the guests should
use.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Guest netmask.</emphasis> The netmask in use on the subnet the
guests will use.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Guest start IP/End IP.</emphasis> Enter the first and last IP
addresses that define a range that &PRODUCT; can assign to guests.</para>
<itemizedlist>
<listitem>
<para>We strongly recommend the use of multiple NICs. If multiple NICs are used, they
may be in a different subnet.</para>
</listitem>
<listitem>
<para>If one NIC is used, these IPs should be in the same CIDR as the pod CIDR.</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>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.</para>
<para>To configure the first cluster, enter the following, then click Next:</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Hypervisor.</emphasis> (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.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Cluster name.</emphasis> Enter a name for the cluster. This
can be text of your choosing and is not used by &PRODUCT;.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>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.</para>
<note>
<para>When you add a hypervisor host to &PRODUCT;, the host must not have any VMs already
running.</para>
</note>
<para>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:</para>
<itemizedlist>
<listitem>
<para>Citrix XenServer Installation and Configuration</para>
</listitem>
<listitem>
<para>VMware vSphere Installation and Configuration</para>
</listitem>
<listitem>
<para>KVM vSphere Installation and Configuration</para>
</listitem>
<!-- <listitem><para>Oracle VM (OVM) Installation and Configuration</para></listitem> -->
</itemizedlist>
<para>To configure the first host, enter the following, then click Next:</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Host Name.</emphasis> The DNS name or IP address of the
host.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Username.</emphasis> The username is root.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Password.</emphasis> This is the password for the user named
above (from your XenServer or KVM install).</para>
</listitem>
<listitem>
<para><emphasis role="bold">Host Tags.</emphasis> (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.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>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.</para>
<para>To configure the first primary storage server, enter the following, then click
Next:</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Name.</emphasis> The name of the storage device.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Protocol.</emphasis> 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.</para>
</listitem>
</itemizedlist>
</listitem>
</orderedlist>
</section>

View File

@ -33,8 +33,8 @@
shows a few of the more useful parameters.</para>
<informaltable frame="all">
<tgroup cols="2" align="left" colsep="1" rowsep="1">
<colspec colnum="1" colname="c1" colwidth="2*"/>
<colspec colnum="2" colname="c2" colwidth="1*"/>
<colspec colnum="1" colname="c1" colwidth="1.0*"/>
<colspec colnum="2" colname="c2" colwidth="3.55*"/>
<thead>
<row>
<entry><para>Field</para></entry>
@ -127,4 +127,172 @@
<listitem><para>In the Actions column, click the Edit icon to modify a value.</para></listitem>
</orderedlist>
</section>
<section id="granular-param">
<title>Granular Global Configuration Parameters</title>
<para>The following global configuration parameters have been made more granular. The parameters
are listed under three different scopes: account, cluster, and zone. </para>
<informaltable frame="all">
<tgroup cols="3" align="left" colsep="1" rowsep="1">
<colspec colnum="1" colname="c1" colwidth="1.0*"/>
<colspec colnum="2" colname="c2" colwidth="2.08*"/>
<colspec colnum="3" colname="c3" colwidth="11.86*"/>
<thead>
<row>
<entry><para>Field</para></entry>
<entry><para>Field</para></entry>
<entry><para>Value</para></entry>
</row>
</thead>
<tbody>
<row>
<entry><para>account</para></entry>
<entry><para>remote.access.vpn.client.iprange </para></entry>
<entry><para>The range of IPs to be allocated to remotely access the VPN clients. The
first IP in the range is used by the VPN server.</para></entry>
</row>
<row>
<entry><para>account</para></entry>
<entry><para>allow.public.user.templates</para></entry>
<entry><para>If false, users will not be able to create public templates.</para></entry>
</row>
<row>
<entry><para>account</para></entry>
<entry><para>use.system.public.ips</para></entry>
<entry><para>If true and if an account has one or more dedicated public IP ranges, IPs
are acquired from the system pool after all the IPs dedicated to the account have
been consumed.</para></entry>
</row>
<row>
<entry><para>account</para></entry>
<entry><para>use.system.guest.vlans </para></entry>
<entry><para>If true and if an account has one or more dedicated guest VLAN ranges,
VLANs are allocated from the system pool after all the VLANs dedicated to the
account have been consumed.</para></entry>
</row>
<row>
<entry><para>cluster</para></entry>
<entry><para>cluster.storage.allocated.capacity.notificationthreshold </para></entry>
<entry><para>The percentage, as a value between 0 and 1, of allocated storage utilization above which
alerts are sent that the storage is below the threshold.</para></entry>
</row>
<row>
<entry><para>cluster</para></entry>
<entry><para>cluster.storage.capacity.notificationthreshold </para></entry>
<entry><para>The percentage, as a value between 0 and 1, of storage utilization above which alerts are sent
that the available storage is below the threshold.</para></entry>
</row>
<row>
<entry><para>cluster</para></entry>
<entry><para>cluster.cpu.allocated.capacity.notificationthreshold </para></entry>
<entry><para>The percentage, as a value between 0 and 1, of cpu utilization above which alerts are sent
that the available CPU is below the threshold.</para></entry>
</row>
<row>
<entry><para>cluster</para></entry>
<entry><para>cluster.memory.allocated.capacity.notificationthreshold </para></entry>
<entry><para>The percentage, as a value between 0 and 1, of memory utilization above which alerts are sent
that the available memory is below the threshold.</para></entry>
</row>
<row>
<entry><para>cluster</para></entry>
<entry><para>cluster.cpu.allocated.capacity.disablethreshold </para></entry>
<entry><para>The percentage, as a value between 0 and 1, of CPU utilization above which allocators will
disable that cluster from further usage. Keep the corresponding notification
threshold lower than this value to be notified beforehand.</para></entry>
</row>
<row>
<entry><para>cluster</para></entry>
<entry><para>cluster.memory.allocated.capacity.disablethreshold </para></entry>
<entry><para>The percentage, as a value between 0 and 1, of memory utilization above which allocators will
disable that cluster from further usage. Keep the corresponding notification
threshold lower than this value to be notified beforehand.</para></entry>
</row>
<row>
<entry><para>cluster</para></entry>
<entry><para>cpu.overprovisioning.factor</para></entry>
<entry><para>Used for CPU over-provisioning calculation; the available CPU will be the mathematical product
of actualCpuCapacity and cpu.overprovisioning.factor.</para></entry>
</row>
<row>
<entry><para>cluster</para></entry>
<entry><para>mem.overprovisioning.factor </para></entry>
<entry><para>Used for memory over-provisioning calculation.</para></entry>
</row>
<row>
<entry><para>cluster</para></entry>
<entry><para>vmware.reserve.cpu </para></entry>
<entry><para>Specify whether or not to reserve CPU when not over-provisioning; In case of CPU
over-provisioning, CPU is always reserved.</para></entry>
</row>
<row>
<entry><para>cluster</para></entry>
<entry><para>vmware.reserve.mem </para></entry>
<entry><para>Specify whether or not to reserve memory when not over-provisioning; In case of memory
over-provisioning memory is always reserved.</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>pool.storage.allocated.capacity.disablethreshold </para></entry>
<entry><para>The percentage, as a value between 0 and 1, of allocated storage utilization above which
allocators will disable that pool because the available allocated storage is below
the threshold.</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>pool.storage.capacity.disablethreshold </para></entry>
<entry><para>The percentage, as a value between 0 and 1, of storage utilization above which allocators will
disable the pool because the available storage capacity is below the
threshold.</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>storage.overprovisioning.factor </para></entry>
<entry><para>Used for storage over-provisioning calculation; available storage will be the mathematical
product of actualStorageSize and storage.overprovisioning.factor.</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>network.throttling.rate </para></entry>
<entry><para>Default data transfer rate in megabits per second allowed in a network.</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>guest.domain.suffix </para></entry>
<entry><para>Default domain name for VMs inside a virtual networks with a router.</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>router.template.xen </para></entry>
<entry><para>Name of the default router template on Xenserver.</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>router.template.kvm </para></entry>
<entry><para>Name of the default router template on KVM.</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>router.template.vmware </para></entry>
<entry><para>Name of the default router template on VMware.</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>enable.dynamic.scale.vm</para></entry>
<entry><para>Enable or diable dynamically scaling of a VM.</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>use.external.dns </para></entry>
<entry><para>Bypass internal DNS, and use the external DNS1 and DNS2</para></entry>
</row>
<row>
<entry><para>zone</para></entry>
<entry><para>blacklisted.routes </para></entry>
<entry><para>Routes that are blacklisted cannot be used for creating static routes for a VPC Private
Gateway.</para></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</section>
</chapter>

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>

View File

@ -19,7 +19,7 @@
under the License.
-->
<section id="removed-api-4.2">
<title>Removed APIs</title>
<title>Deprecated APIs</title>
<itemizedlist>
<listitem>
<para>deleteCiscoNexusVSM (Deletes a Cisco Nexus VSM device) </para>

View File

@ -75,27 +75,52 @@
<phrase>vds-name.png: Name of the dvSwitch as specified in the vCenter.</phrase>
</textobject>
</mediaobject>
<para>Use this VDS name when you specify the switch name in the traffic label while creating the
zone. Traffic label format is [["Name of vSwitch/dvSwitch/EthernetPortProfile"][,"VLAN
ID"[,"vSwitch Type"]]]</para>
<para>Use this VDS name in the following:</para>
<itemizedlist>
<listitem>
<para>The switch name in the Edit traffic label dialog while configuring a public and guest
traffic during zone creation.</para>
<para>During a zone creation, ensure that you select VMware vNetwork Distributed Virtual Switch
when you configure guest and public traffic type.</para>
<mediaobject>
<imageobject>
<imagedata fileref="./images/traffic-type.png"/>
</imageobject>
<textobject>
<phrase>traffic-type.png: virtual switch type</phrase>
</textobject>
</mediaobject>
</listitem>
<listitem>
<para>The Public Traffic vSwitch Type field when you add a VMware VDS-enabled cluster. </para>
</listitem>
<listitem>
<para>The switch name in the traffic label while updating the switch type in a zone.</para>
</listitem>
</itemizedlist>
<para>Traffic label format in the last case is [["Name of
vSwitch/dvSwitch/EthernetPortProfile"][,"VLAN ID"[,"vSwitch Type"]]]</para>
<para>The possible values for traffic labels are:</para>
<itemizedlist>
<listitem><para>empty string</para></listitem>
<listitem><para>dvSwitch0</para></listitem>
<listitem><para> dvSwitch0,200</para></listitem>
<listitem><para>dvSwitch1,300,vmwaredvs</para></listitem>
<listitem><para>myEthernetPortProfile,,nexusdvs</para></listitem>
<listitem><para>dvSwitch0,,vmwaredvs</para></listitem>
<listitem>
<para>empty string</para>
</listitem>
<listitem>
<para>dvSwitch0</para>
</listitem>
<listitem>
<para> dvSwitch0,200</para>
</listitem>
<listitem>
<para>dvSwitch1,300,vmwaredvs</para>
</listitem>
<listitem>
<para>myEthernetPortProfile,,nexusdvs</para>
</listitem>
<listitem>
<para>dvSwitch0,,vmwaredvs</para>
</listitem>
</itemizedlist>
<mediaobject>
<imageobject>
<imagedata fileref="./images/traffic-label.png"/>
</imageobject>
<textobject>
<phrase>traffic-label.png: Traffic label specified while zone creation.</phrase>
</textobject>
</mediaobject>
<informaltable frame="all">
<tgroup cols="3" align="left" colsep="1" rowsep="1">
<colspec colname="c1"/>
@ -124,10 +149,10 @@
<row>
<entry><para>2</para></entry>
<entry><para>VLAN ID to be used for this traffic wherever applicable.</para></entry>
<entry><para>This field would be used for only public traffic as of now. In case of guest traffic this
field would be ignored and could be left empty for guest traffic. By default empty
string would be assumed which translates to untagged VLAN for that specific traffic
type.</para></entry>
<entry><para>This field would be used for only public traffic as of now. In case of
guest traffic this field would be ignored and could be left empty for guest traffic.
By default empty string would be assumed which translates to untagged VLAN for that
specific traffic type.</para></entry>
</row>
<row>
<entry><para>3</para></entry>
@ -153,6 +178,7 @@
</tbody>
</tgroup>
</informaltable>
</section>
<section id="enable-dvswitch">
<title>Enabling Virtual Distributed Switch in &PRODUCT;</title>
@ -171,6 +197,10 @@
<section id="config-dvswitch">
<title>Configuring Distributed Virtual Switch in &PRODUCT;</title>
<para>You can configure VDS by adding the necessary resources while a zone is created.</para>
<para>Alternatively, at the cluster level, you can create an additional cluster with VDS enabled
in the existing zone. Use the Add Cluster option. For information as given in <xref
linkend="add-clusters-vsphere"/>.</para>
<para>In both these cases, you must specify the following parameters to configure VDS:</para>
<mediaobject>
<imageobject>
<imagedata fileref="./images/dvSwitch-config.png"/>
@ -179,10 +209,6 @@
<phrase>dvSwitchConfig.png: Configuring dvSwitch</phrase>
</textobject>
</mediaobject>
<para>Alternatively, you can create an additional cluster with VDS enabled in the existing zone.
Use the Add Cluster option. For information as given in <xref linkend="add-clusters-vsphere"
/>.</para>
<para>In both these cases, you must specify the following parameters to configure VDS:</para>
<informaltable frame="all">
<tgroup cols="2" align="left" colsep="1" rowsep="1">
<colspec colname="c1"/>

View File

@ -173,6 +173,8 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
_upgradeMap.put("4.0.2", new DbUpgrade[] { new Upgrade40to41(), new Upgrade410to420() });
_upgradeMap.put("4.1.0", new DbUpgrade[] { new Upgrade410to420() });
_upgradeMap.put("4.1.1", new DbUpgrade[] { new Upgrade410to420() });
//CP Upgrades
_upgradeMap.put("3.0.3", new DbUpgrade[] { new Upgrade303to304(), new Upgrade304to305(), new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420() });

View File

@ -51,7 +51,7 @@ public class Upgrade410to420 implements DbUpgrade {
@Override
public String[] getUpgradableVersionRange() {
return new String[] { "4.1.0", "4.2.0" };
return new String[] { "4.1.0", "4.1.1" };
}
@Override

View File

@ -162,6 +162,19 @@ Group: System Environment/Libraries
%description awsapi
Apache Cloudstack AWS API compatibility wrapper
%package baremetal-agent
Summary: CloudStack baremetal agent
Requires: tftp-server
Requires: xinetd
Requires: syslinux
Requires: chkconfig
Requires: dhcp
Requires: httpd
Group: System Environment/Libraries
%description baremetal-agent
The CloudStack baremetal agent
%prep
echo Doing CloudStack build
@ -236,6 +249,7 @@ install -D client/target/utilities/bin/cloud-set-guest-sshkey ${RPM_BUILD_ROOT}%
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-setup-baremetal ${RPM_BUILD_ROOT}%{_bindir}/%{name}-setup-baremetal
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
@ -603,6 +617,8 @@ fi
%{_defaultdocdir}/%{name}-awsapi-%{version}/LICENSE
%{_defaultdocdir}/%{name}-awsapi-%{version}/NOTICE
%files baremetal-agent
%attr(0755,root,root) %{_bindir}/cloudstack-setup-baremetal
%changelog
* Fri Oct 03 2012 Hugo Trippaers <hugo@apache.org> 4.1.0

View File

@ -65,8 +65,8 @@ public class BaremetalDhcpElement extends AdapterBase implements DhcpServiceProv
static {
Capability cap = new Capability(BaremetalDhcpManager.BAREMETAL_DHCP_SERVICE_CAPABITLITY);
Map<Capability, String> baremetalCaps = new HashMap<Capability, String>();
baremetalCaps.put(cap, null);
baremetalCaps.put(Capability.DhcpAccrossMultipleSubnets, Boolean.TRUE.toString());
baremetalCaps.put(cap, null);
baremetalCaps.put(Capability.DhcpAccrossMultipleSubnets, Boolean.TRUE.toString());
capabilities = new HashMap<Service, Map<Capability, String>>();
capabilities.put(Service.Dhcp, baremetalCaps);
}
@ -82,11 +82,8 @@ public class BaremetalDhcpElement extends AdapterBase implements DhcpServiceProv
}
private boolean canHandle(DeployDestination dest, TrafficType trafficType, GuestType networkType) {
Pod pod = dest.getPod();
if (pod != null && dest.getDataCenter().getNetworkType() == NetworkType.Basic && trafficType == TrafficType.Guest) {
SearchCriteriaService<BaremetalDhcpVO, BaremetalDhcpVO> sc = SearchCriteria2.create(BaremetalDhcpVO.class);
sc.addAnd(sc.getEntity().getPodId(), Op.EQ, pod.getId());
return sc.find() != null;
if (dest.getDataCenter().getNetworkType() == NetworkType.Basic && trafficType == TrafficType.Guest) {
return true;
}
return false;

View File

@ -136,14 +136,13 @@ public class BaremetalDhcpManagerImpl extends ManagerBase implements BaremetalDh
public boolean addVirtualMachineIntoNetwork(Network network, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> profile,
DeployDestination dest, ReservationContext context) throws ResourceUnavailableException {
Long zoneId = profile.getVirtualMachine().getDataCenterId();
Long podId = profile.getVirtualMachine().getPodIdToDeployIn();
List<HostVO> hosts = _resourceMgr.listAllUpAndEnabledHosts(Type.BaremetalDhcp, null, podId, zoneId);
List<HostVO> hosts = _resourceMgr.listAllUpAndEnabledHosts(Type.BaremetalDhcp, null, null, zoneId);
if (hosts.size() == 0) {
throw new CloudRuntimeException("No external Dhcp found in zone " + zoneId + " pod " + podId);
throw new CloudRuntimeException("No external Dhcp found in zone " + zoneId);
}
if (hosts.size() > 1) {
throw new CloudRuntimeException("Something wrong, more than 1 external Dhcp found in zone " + zoneId + " pod " + podId);
throw new CloudRuntimeException("Something wrong, more than 1 external Dhcp found in zone " + zoneId);
}
HostVO h = hosts.get(0);

View File

@ -147,8 +147,7 @@ public class KVMStorageProcessor implements StorageProcessor {
DataTO destData = cmd.getDestTO();
TemplateObjectTO template = (TemplateObjectTO) srcData;
DataStoreTO imageStore = template.getDataStore();
TemplateObjectTO volume = (TemplateObjectTO) destData;
PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) volume.getDataStore();
PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO) destData.getDataStore();
if (!(imageStore instanceof NfsTO)) {
return new CopyCmdAnswer("unsupported protocol");
@ -197,19 +196,32 @@ public class KVMStorageProcessor implements StorageProcessor {
KVMPhysicalDisk primaryVol = storagePoolMgr.copyPhysicalDisk(tmplVol, UUID.randomUUID().toString(),
primaryPool);
TemplateObjectTO newTemplate = new TemplateObjectTO();
newTemplate.setPath(primaryVol.getName());
DataTO data = null;
/**
* Force the ImageFormat for RBD templates to RAW
*
*/
if (primaryPool.getType() == StoragePoolType.RBD) {
newTemplate.setFormat(ImageFormat.RAW);
} else {
newTemplate.setFormat(ImageFormat.QCOW2);
if (destData.getObjectType() == DataObjectType.TEMPLATE) {
TemplateObjectTO newTemplate = new TemplateObjectTO();
newTemplate.setPath(primaryVol.getName());
if (primaryPool.getType() == StoragePoolType.RBD) {
newTemplate.setFormat(ImageFormat.RAW);
} else {
newTemplate.setFormat(ImageFormat.QCOW2);
}
data = newTemplate;
} else if (destData.getObjectType() == DataObjectType.VOLUME) {
VolumeObjectTO volumeObjectTO = new VolumeObjectTO();
volumeObjectTO.setPath(primaryVol.getName());
if (primaryVol.getFormat() == PhysicalDiskFormat.RAW)
volumeObjectTO.setFormat(ImageFormat.RAW);
else if (primaryVol.getFormat() == PhysicalDiskFormat.QCOW2) {
volumeObjectTO.setFormat(ImageFormat.QCOW2);
}
data = volumeObjectTO;
}
return new CopyCmdAnswer(newTemplate);
return new CopyCmdAnswer(data);
} catch (CloudRuntimeException e) {
return new CopyCmdAnswer(e.toString());
} finally {
@ -287,6 +299,7 @@ public class KVMStorageProcessor implements StorageProcessor {
String templatePath = template.getPath();
if (primaryPool.getType() == StoragePoolType.CLVM) {
templatePath = ((NfsTO)imageStore).getUrl() + File.separator + templatePath;
vol = templateToPrimaryDownload(templatePath, primaryPool);
} else {
if (templatePath.contains("/mnt")) {

View File

@ -25,9 +25,13 @@ import com.cloud.agent.api.to.DataObjectType;
import com.cloud.agent.api.to.DataStoreTO;
import com.cloud.agent.api.to.DataTO;
import com.cloud.agent.api.to.StorageFilerTO;
import com.cloud.configuration.Config;
import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.exception.StorageUnavailableException;
import com.cloud.host.dao.HostDao;
import com.cloud.storage.DataStoreRole;
import com.cloud.storage.ResizeVolumePayload;
import com.cloud.storage.Storage;
import com.cloud.storage.StorageManager;
import com.cloud.storage.StoragePool;
import com.cloud.storage.VolumeManager;
@ -36,17 +40,24 @@ 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.NumbersUtil;
import com.cloud.vm.dao.VMInstanceDao;
import org.apache.cloudstack.engine.subsystem.api.storage.*;
import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.storage.command.CommandResult;
import org.apache.cloudstack.storage.command.CopyCmdAnswer;
import org.apache.cloudstack.storage.command.CopyCommand;
import org.apache.cloudstack.storage.command.CreateObjectCommand;
import org.apache.cloudstack.storage.command.DeleteCommand;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.cloudstack.storage.to.TemplateObjectTO;
import org.apache.cloudstack.storage.volume.VolumeObject;
import org.apache.log4j.Logger;
import javax.inject.Inject;
import java.util.UUID;
public class CloudStackPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver {
private static final Logger s_logger = Logger.getLogger(CloudStackPrimaryDataStoreDriverImpl.class);
@ -72,7 +83,12 @@ public class CloudStackPrimaryDataStoreDriverImpl implements PrimaryDataStoreDri
SnapshotManager snapshotMgr;
@Inject
EndPointSelector epSelector;
@Inject
ConfigurationDao configDao;
@Inject
TemplateManager templateManager;
@Inject
TemplateDataFactory templateDataFactory;
@Override
public DataTO getTO(DataObject data) {
return null;
@ -163,10 +179,49 @@ public class CloudStackPrimaryDataStoreDriverImpl implements PrimaryDataStoreDri
@Override
public void copyAsync(DataObject srcdata, DataObject destData, AsyncCompletionCallback<CopyCommandResult> callback) {
DataStore store = destData.getDataStore();
if (store.getRole() == DataStoreRole.Primary) {
if ((srcdata.getType() == DataObjectType.TEMPLATE && destData.getType() == DataObjectType.TEMPLATE)) {
//For CLVM, we need to copy template to primary storage at all, just fake the copy result.
TemplateObjectTO templateObjectTO = new TemplateObjectTO();
templateObjectTO.setPath(UUID.randomUUID().toString());
templateObjectTO.setSize(srcdata.getSize());
templateObjectTO.setPhysicalSize(srcdata.getSize());
templateObjectTO.setFormat(Storage.ImageFormat.RAW);
CopyCmdAnswer answer = new CopyCmdAnswer(templateObjectTO);
CopyCommandResult result = new CopyCommandResult("", answer);
callback.complete(result);
} else if (srcdata.getType() == DataObjectType.TEMPLATE && destData.getType() == DataObjectType.VOLUME) {
//For CLVM, we need to pass template on secondary storage to hypervisor
String value = configDao.getValue(Config.PrimaryStorageDownloadWait.toString());
int _primaryStorageDownloadWait = NumbersUtil.parseInt(value,
Integer.parseInt(Config.PrimaryStorageDownloadWait.getDefaultValue()));
StoragePoolVO storagePoolVO = primaryStoreDao.findById(store.getId());
DataStore imageStore = templateManager.getImageStore(storagePoolVO.getDataCenterId(), srcdata.getId());
DataObject srcData = templateDataFactory.getTemplate(srcdata.getId(), imageStore);
CopyCommand cmd = new CopyCommand(srcData.getTO(), destData.getTO(), _primaryStorageDownloadWait, true);
EndPoint ep = epSelector.select(srcData, destData);
Answer answer = ep.sendMessage(cmd);
CopyCommandResult result = new CopyCommandResult("", answer);
callback.complete(result);
}
}
}
@Override
public boolean canCopy(DataObject srcData, DataObject destData) {
//BUG fix for CLOUDSTACK-4618
DataStore store = destData.getDataStore();
if (store.getRole() == DataStoreRole.Primary) {
if ((srcData.getType() == DataObjectType.TEMPLATE && destData.getType() == DataObjectType.TEMPLATE) ||
(srcData.getType() == DataObjectType.TEMPLATE && destData.getType() == DataObjectType.VOLUME)) {
StoragePoolVO storagePoolVO = primaryStoreDao.findById(store.getId());
if (storagePoolVO != null && storagePoolVO.getPoolType() == Storage.StoragePoolType.CLVM) {
return true;
}
}
}
return false;
}

View File

@ -42,11 +42,11 @@ fi
is_lv() {
# Must be a block device
if [ -b "${1}" ]; then
if [ -b "${1}" -o -L "{1}" ]; then
# But not a volume group or physical volume
lvm vgs "${1}" > /dev/null 2>&1 && return 1
# And a logical volume
lvm lvs "${1}" > /dev/null 2>&1 && return 0
lvm lvs "${1}" > /dev/null 2>&1 && return 1
fi
return 0
}

View File

@ -198,6 +198,20 @@ def preparePING(tftpRootDir):
if not bashWithResult("mkdir -p %s/pxelinux.cfg"%tftpRootDir): return False
return True
def prepareSyslinux(tftpRootDir):
pkg = bash('rpm -ql syslinux | grep "/pxelinux.0$"')
if not pkg.isSuccess():
printError('cannot find pxelinux.0 on system. is syslinux installed?')
return False
pkg = pkg.getStdout()
cp = "cp -f %s %s" % (pkg, tftpRootDir)
if not bashWithResult(cp):
return False
return True
if __name__ == "__main__":
@ -209,7 +223,8 @@ if __name__ == "__main__":
exitIfFail(getTftpRootDir(tftpRootDirList))
tftpRootDir = tftpRootDirList[0].strip()
exitIfFail(preparePING(tftpRootDir))
#exitIfFail(preparePING(tftpRootDir))
exitIfFail(prepareSyslinux(tftpRootDir))
printMsg("")
printMsg("Setup BareMetal PXE server successfully")
printMsg("TFTP root directory is: %s\n"%tftpRootDir)

View File

@ -722,185 +722,7 @@ CREATE TABLE `cloud`.`service_offering_details` (
CONSTRAINT `fk_service_offering_details__service_offering_id` FOREIGN KEY (`service_offering_id`) REFERENCES `service_offering`(`id`) ON DELETE CASCADE,
CONSTRAINT UNIQUE KEY `uk_service_offering_id_name` (`service_offering_id`, `name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP VIEW IF EXISTS `cloud`.`user_vm_view`;
CREATE VIEW `cloud`.`user_vm_view` AS
select
vm_instance.id id,
vm_instance.name name,
user_vm.display_name display_name,
user_vm.user_data user_data,
account.id account_id,
account.uuid account_uuid,
account.account_name account_name,
account.type account_type,
domain.id domain_id,
domain.uuid domain_uuid,
domain.name domain_name,
domain.path domain_path,
projects.id project_id,
projects.uuid project_uuid,
projects.name project_name,
instance_group.id instance_group_id,
instance_group.uuid instance_group_uuid,
instance_group.name instance_group_name,
vm_instance.uuid uuid,
vm_instance.last_host_id last_host_id,
vm_instance.vm_type type,
vm_instance.vnc_password vnc_password,
vm_instance.limit_cpu_use limit_cpu_use,
vm_instance.created created,
vm_instance.state state,
vm_instance.removed removed,
vm_instance.ha_enabled ha_enabled,
vm_instance.hypervisor_type hypervisor_type,
vm_instance.instance_name instance_name,
vm_instance.guest_os_id guest_os_id,
guest_os.uuid guest_os_uuid,
vm_instance.pod_id pod_id,
host_pod_ref.uuid pod_uuid,
vm_instance.private_ip_address private_ip_address,
vm_instance.private_mac_address private_mac_address,
vm_instance.vm_type vm_type,
data_center.id data_center_id,
data_center.uuid data_center_uuid,
data_center.name data_center_name,
data_center.networktype data_center_type,
data_center.is_security_group_enabled security_group_enabled,
host.id host_id,
host.uuid host_uuid,
host.name host_name,
vm_template.id template_id,
vm_template.uuid template_uuid,
vm_template.name template_name,
vm_template.display_text template_display_text,
vm_template.enable_password password_enabled,
iso.id iso_id,
iso.uuid iso_uuid,
iso.name iso_name,
iso.display_text iso_display_text,
service_offering.id service_offering_id,
disk_offering.uuid service_offering_uuid,
service_offering.cpu cpu,
service_offering.speed speed,
service_offering.ram_size ram_size,
disk_offering.name service_offering_name,
storage_pool.id pool_id,
storage_pool.uuid pool_uuid,
storage_pool.pool_type pool_type,
volumes.id volume_id,
volumes.uuid volume_uuid,
volumes.device_id volume_device_id,
volumes.volume_type volume_type,
security_group.id security_group_id,
security_group.uuid security_group_uuid,
security_group.name security_group_name,
security_group.description security_group_description,
nics.id nic_id,
nics.uuid nic_uuid,
nics.network_id network_id,
nics.ip4_address ip_address,
nics.ip6_address ip6_address,
nics.ip6_gateway ip6_gateway,
nics.ip6_cidr ip6_cidr,
nics.default_nic is_default_nic,
nics.gateway gateway,
nics.netmask netmask,
nics.mac_address mac_address,
nics.broadcast_uri broadcast_uri,
nics.isolation_uri isolation_uri,
vpc.id vpc_id,
vpc.uuid vpc_uuid,
networks.uuid network_uuid,
networks.name network_name,
networks.traffic_type traffic_type,
networks.guest_type guest_type,
user_ip_address.id public_ip_id,
user_ip_address.uuid public_ip_uuid,
user_ip_address.public_ip_address public_ip_address,
ssh_keypairs.keypair_name keypair_name,
resource_tags.id tag_id,
resource_tags.uuid tag_uuid,
resource_tags.key tag_key,
resource_tags.value tag_value,
resource_tags.domain_id tag_domain_id,
resource_tags.account_id tag_account_id,
resource_tags.resource_id tag_resource_id,
resource_tags.resource_uuid tag_resource_uuid,
resource_tags.resource_type tag_resource_type,
resource_tags.customer tag_customer,
async_job.id job_id,
async_job.uuid job_uuid,
async_job.job_status job_status,
async_job.account_id job_account_id,
affinity_group.id affinity_group_id,
affinity_group.uuid affinity_group_uuid,
affinity_group.name affinity_group_name,
affinity_group.description affinity_group_description
from
`cloud`.`user_vm`
inner join
`cloud`.`vm_instance` ON vm_instance.id = user_vm.id
and vm_instance.removed is NULL
inner join
`cloud`.`account` ON vm_instance.account_id = account.id
inner join
`cloud`.`domain` ON vm_instance.domain_id = domain.id
left join
`cloud`.`guest_os` ON vm_instance.guest_os_id = guest_os.id
left join
`cloud`.`host_pod_ref` ON vm_instance.pod_id = host_pod_ref.id
left join
`cloud`.`projects` ON projects.project_account_id = account.id
left join
`cloud`.`instance_group_vm_map` ON vm_instance.id = instance_group_vm_map.instance_id
left join
`cloud`.`instance_group` ON instance_group_vm_map.group_id = instance_group.id
left join
`cloud`.`data_center` ON vm_instance.data_center_id = data_center.id
left join
`cloud`.`host` ON vm_instance.host_id = host.id
left join
`cloud`.`vm_template` ON vm_instance.vm_template_id = vm_template.id
left join
`cloud`.`vm_template` iso ON iso.id = user_vm.iso_id
left join
`cloud`.`service_offering` ON vm_instance.service_offering_id = service_offering.id
left join
`cloud`.`disk_offering` ON vm_instance.service_offering_id = disk_offering.id
left join
`cloud`.`volumes` ON vm_instance.id = volumes.instance_id
left join
`cloud`.`storage_pool` ON volumes.pool_id = storage_pool.id
left join
`cloud`.`security_group_vm_map` ON vm_instance.id = security_group_vm_map.instance_id
left join
`cloud`.`security_group` ON security_group_vm_map.security_group_id = security_group.id
left join
`cloud`.`nics` ON vm_instance.id = nics.instance_id
left join
`cloud`.`networks` ON nics.network_id = networks.id
left join
`cloud`.`vpc` ON networks.vpc_id = vpc.id
left join
`cloud`.`user_ip_address` ON user_ip_address.vm_id = vm_instance.id
left join
`cloud`.`user_vm_details` ON user_vm_details.vm_id = vm_instance.id
and user_vm_details.name = 'SSH.PublicKey'
left join
`cloud`.`ssh_keypairs` ON ssh_keypairs.public_key = user_vm_details.value
left join
`cloud`.`resource_tags` ON resource_tags.resource_id = vm_instance.id
and resource_tags.resource_type = 'UserVm'
left join
`cloud`.`async_job` ON async_job.instance_id = vm_instance.id
and async_job.instance_type = 'VirtualMachine'
and async_job.job_status = 0
left join
`cloud`.`affinity_group_vm_map` ON vm_instance.id = affinity_group_vm_map.instance_id
left join
`cloud`.`affinity_group` ON affinity_group_vm_map.affinity_group_id = affinity_group.id;
DROP VIEW IF EXISTS `cloud`.`affinity_group_view`;
CREATE VIEW `cloud`.`affinity_group_view` AS
select