How to test Apache CloudStack 4.2 on your local machine

LeaseWeb released its Private Cloud powered by Apache CloudStack two months ago [1]. Apache CloudStack [2] is an open source software platform that pools computing resources to build public, private, and hybrid Infrastructure as a Service (IaaS) clouds.

In this post, I will give a short introduction of Apache CloudStack and introduce an easy way to test Apache CloudStack 4.2 on our local machine using DevCloud.

Apache CloudStack manages the network, storage, and compute nodes that make up a cloud infrastructure. Apache CloudStack provides a first-class user interface (UI), a command line tool named CloudMonkey [3], and a full-featured RESTful API. Apache CloudStack currently supports the most popular hypervisors: VMware, KVM, XenServer and Xen Cloud Platform (XCP).

For now, the latest stable version of Apache CloudStack is 4.2.0. However, if you want to change and test your change in Apache CloudStack, or test the new features of CloudStack, you can check out the Apache CloudStack source code, build RPM/DEB packages, and install them on servers. However, Apache CloudStack also provides an easier way for testing.

DevCloud [4] is a virtual appliance shipped as an OVA image which runs on VirtualBox (an opensource type-2 or desktop hypervisor) and can be used for CloudStack’s development and testing. An NFS server is already configured in DevCloud, the System VM Template for Apache CloudStack 4.0/4.1 and a ttylinux virtual machine template are already installed on it. Moreover, Xen hypervisor and Xen Cloud Platform (XCP) are already installed in DevCloud, so virtual machines can be deployed in it.

Now we can test Apache Cloudstack on our local machines using DevCloud:

1. Preparation

(1)  Install VirtualBox

(2) Create a “host-only” network in VirtualBox if not exists. Set the IPv4 to 192.168.56.1

devcloud-11

(3) It is recommended that we install a Linux (such as CentOS, Ubuntu) virtual machine in VirtualBox as the working VM (WORK-VM) at first. There are two network adaptor attached to the VM (on is attached to NAT , another one is attached to the Host-Only Adaptor created in Step 2). Suppose it has a IP 192.168.56.2 .

Make sure the following programs have been installed: mysql-server, Python, Python-Dev (python-devel), mysql-connector-java, Java, tomcat6, python-paramiko, nfs-utils, Jsvc, maven, mysql-connector-python (pip install), requests (pip install)

(4) Get DevCloud2 [5] and import it to VirtualBox. Please do NOT select “re-initialize the MAC address of all network cards”. Make sure ‘Enable PAE/NX’ mode under VM settings -> System -> Processor Tab is checked. Change the network setting like Step 3. The network configuration should like this:
devcloud-12

2. Management server installation from CloudStack source codes

(5) Checkout Apache CloudStack source code from Apache Git repository in WORK-VM (see step 3).

git clone https://git-wip-us.apache.org/repos/asf/cloudstack.git testing
cd testing
git checkout 4.2    # or other branches or tags (like 4.2.0)

Revert commit 7f9463bb54f19e7676f8c6049d1ebc02330a730f which make DevCloud not working on Apache CloudStack 4.2 branch.

[root@weizhou-centos testing(4.2)]# git show 7f9463bb54f19e7676f8c6049d1ebc02330a730f
commit 7f9463bb54f19e7676f8c6049d1ebc02330a730f
Author: Anthony Xu <anthony.xu@citrix.com>;
Date:   Tue Dec 3 01:36:24 2013 -0800

    put shell scripts to a seperate directory in XS
    use same scripts for both XS and XCP
[root@weizhou-centos testing(4.2)]# git revert 7f9463bb54f19e7676f8c6049d1ebc02330a730f

(6) Compile Apache CloudStack source code, deploy database, and run the management server

mvn -P developer,systemvm clean install
mvn -P developer -pl developer,tools/devcloud –Ddeploydb
mvn -pl :cloud-client-ui jetty:run

Now we can see the Apache CloudStack UI on http://192.168.56.2:8080/client (username:admin, password:password)
devcloud-13
(7) Change some global configuration in Apache CloudStack, and restart management server. Or you can change by MySQL:

mysql -e &quot;update cloud.configuration set value='192.168.56.2' where name='host'&quot;;
# the value should be the ip of WORK-VM.
mysql -e &quot;update cloud.configuration set value='10' where name='cpu.overprovisioning.factor'&quot;;
mvn -pl :cloud-client-ui jetty:run

3. DevCloud deployment and testing

(8) Start DevCloud in VirtualBox. And run the following command in WORK-VM for testing Apache CloudStack 4.2 and newer.

mkdir /mnt/secondary
mount 192.168.56.10:/opt/storage/secondary /mnt/secondary
wget http://download.cloud.com/templates/4.2/systemvmtemplate-2013-07-12-master-xen.vhd.bz2 -O /root/systemvmtemplate-2013-07-12-master-xen.vhd.bz2
./client/target/generated-webapp/WEB-INF/classes/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -f /root/systemvmtemplate-2013-07-12-master-xen.vhd.bz2 -h xenserver -F

This is because the system VM (System Virtual Machines) [6] template changed between Apache CloudStack 4.1 and 4.2. So the old system VM template inside DevCloud is no longer valid when we test Apache CloudStack 4.2. These commands download the new system VM template and install it to Secondary Storage (NFS inside DevCloud).
After this, take a snapshot of DevCloud in VirtualBox, so that we do not need to update systemvm template any more. Each time when we want a clean DevCloud, we can restore the snapshot.
devcloud-14
(9) Using Marvin to deploy DevCloud. Open another session and run the following commands:

cd tools/marvin
python setup.py install	# run only the first time. Check python-devel package if fails
cd ../../
mvn -P developer -pl tools/devcloud -Ddeploysvr	# Basic Network

If you want to use other type of networks, you can replace the last command with one of the following commands.

python tools/marvin/marvin/deployDataCenter.py -i tools/devcloud/devcloud.cfg    # Basic Network, same to before
python tools/marvin/marvin/deployDataCenter.py -i tools/devcloud/devcloud-advanced.cfg     # Advanced Network
python tools/marvin/marvin/deployDataCenter.py -i tools/devcloud/devcloud-advancedsg.cfg  # Advanced with Security Groups

(10) After Step (9), a Zone/Pod/Cluster have been created, and DevCloud has been added as a host. After a few minutes, we can see that the system VMs are running on Apache CloudStack UI -> Infrastructure -> System VMs.
devcloud-15
(11) Now we can deploy a VM on Apache CloudStack UI -> Instances -> Add Instance -> Template -> select “tty Linux” -> select “tinyOffering” -> next . After a few minutes, the VM will be up.
devcloud-16
A virtual router (for default network) is also running.
devcloud-17

4. Limitation and future work

Now we have an testing environment with Apache CloudStack 4.2. We can test the functionalities in CloudStack like virtual machine operations, network, template, domain/account.

However, in this environment, we have only one host (devcloud) with local storage (this means the volumes of virtual machines are stored on the host, not shared storage, so virtual machines live migration is disabled). In the next post, I will introduce how to test with multiple devcloud hosts, and shared storage (like NFS).

Tips

(1) It is better for testing Apache CloudStack 4.2. The 4.3/master branch have not been tested.

(2) If you are new to CloudStack, you can get some concepts from Apache CloudStack Installation Guide [7] and Apache CloudStack Admin Guide [6]. Please note a new type of network (Advanced Network with Security Groups) was introduced in Apache CloudStack 4.2.0.

(3) You can use XCP command lines [8] to manage virtual machines inside DevCloud. For example:

root@devcloud:~# xe vm-list
uuid ( RO)           : 576aacc8-4c8e-e0b4-f035-79001b4a7284
     name-label ( RW): r-4-VM
    power-state ( RO): running

uuid ( RO)           : 1efad534-bcd5-c183-9bfa-5eaf4a4afe80
     name-label ( RW): i-2-3-VM
    power-state ( RO): running

uuid ( RO)           : c8c2f1a3-40d3-308f-70bf-687f7f49b9a5
     name-label ( RW): Control domain on host: devcloud
    power-state ( RO): running

uuid ( RO)           : 61721ac5-c139-de00-c167-9e2edda49471
     name-label ( RW): v-2-VM
    power-state ( RO): running

uuid ( RO)           : 464b1a57-1d82-eb33-b8da-93f029289389
     name-label ( RW): s-1-VM
    power-state ( RO): running

(4) You can find more details in log files:

1. vmops.log in testing directory (WORK-VM).
2. /var/log/xcp-xapi.log inside DevCloud.

(5) If you want to attach the git branch name to directory path, please follow the article: “Git tip: Show your branch name on the Linux prompt”

(6) If we change some source codes, but now willing to build all projects as it take a long time. We can build the specified projects using maven.

mvn –P developer –pl api,server		# if you want to re-build api and server projects
cp ./api/target/cloud-api-4.2.1-SNAPSHOT.jar ./client/target/cloud-client-ui-4.2.1-SNAPSHOT/WEB-INF/lib/cloud-api-4.2.1-SNAPSHOT.jar
cp ./server/target/cloud-server-4.2.1-SNAPSHOT.jar ./client/target/cloud-client-ui-4.2.1-SNAPSHOT/WEB-INF/lib/cloud-server-4.2.1-SNAPSHOT.jar

If you want to re-build systemvm.iso which is attached to system VMs when they start.

mvn -P developer,systemvm -pl patches/,services/console-proxy/,services/console-proxy/server/
cp ./services/console-proxy/server/dist/systemvm.iso ./client/target/cloud-client-ui-4.2.1-SNAPSHOT/WEB-INF/classes/vms/systemvm.iso
scp ./services/console-proxy/server/dist/systemvm.iso 192.168.56.10:/usr/share/xcp/packages/iso/systemvm.iso

References

[1] http://www.leaseweb.com/en/about-us/press/leaseweb-introduces-new-private-cloud-platform-powered-by-apache-cloudstack
[2] http://cloudstack.apache.org/
[3] https://pypi.python.org/pypi/cloudmonkey/
[4] https://cwiki.apache.org/confluence/display/CLOUDSTACK/DevCloud
[5] http://people.apache.org/~bhaisaab/cloudstack/devcloud/devcloud2.ova
[6] https://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.0/html/Admin_Guide/working-with-system-vm.html
[7] http://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.0/html/Installation_Guide/deployment-architecture-overview.html
[8] http://wiki.xen.org/wiki/XCP_Command_Line_Interface
[9] http://www.leaseweblabs.com/2013/08/git-tip-show-your-branch-name-on-the-linux-prompt/

One Response to “How to test Apache CloudStack 4.2 on your local machine”

  • smidh:

    Hello i wanna ask you something.
    Is it possible to test some c# or java based application on cloudstack devcloud mode?

Leave a Reply