mirror of https://github.com/apache/cloudstack.git
Merge branch '4.2' of https://git-wip-us.apache.org/repos/asf/cloudstack into 4.2
This commit is contained in:
commit
20b1a2c5cd
File diff suppressed because it is too large
Load Diff
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 |
|
|
@ -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;
|
||||
]>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"/>
|
||||
|
|
|
|||
|
|
@ -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() });
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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")) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
17
python/bindir/cloud-setup-baremetal → setup/bindir/cloud-setup-baremetal.in
Executable file → Normal file
17
python/bindir/cloud-setup-baremetal → setup/bindir/cloud-setup-baremetal.in
Executable file → Normal 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)
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue