One of my job requirement is to keep testing the latest Fedora cloud images. We have a list of tests from Fedora QA team. But the biggest problem is that I don’t like doing these manually. I was looking for a way to run these automatically. We can do this by the normal CI systems, but there are two problems in that.
Tunir came out as a solution to these problems. It is a simple system, which can run predefined set of commands in a fresh cloud instance, or in a remote system. Btw, did I mention that you don’t need a cloud to run these cloud instances in your local system? This is possible thanks to the code from Mike Ruckman.
Each job in Tunir requires two files, jobname.json and jobname.txt. The json file contains the details of the Cloud image (if any), or the remote system details, ram required for the vm etc. The .txt file contains the shell commands to run in the system. For now it has two unique commands for Tunir. You can write @@ in front of any command to mark that this command will return non zero exit code. We also have a SLEEP NUMBER_OF_SECONDS option, we use it when we reboot the system, and want Tunir to wait before executing the next command.
Tunir has a stateless mode, I use that all the time :) In stateless mode, it will not save the results in any database. It will directly print the result in the terminal.
$ tunir --job fedora --stateless
Tunir uses redis to store some configuration information, like available ports. Remember to execute createports.py to fill the configuration with available ports.
You can install Tunir using pip, a review request is also up for Fedora. If you are on Fedora 21, you can just test with my package.
I am currently using unittest for the Cloud testcases, they are available at my github. You can use fedora.json and fedora.txt from the same repo to execute the tests. Example of tests running inside Tunir is below (I am using this in the Fedora Cloud tests).
curl -O https://kushal.fedorapeople.org/tunirtests.tar.gz tar -xzvf tunirtests.tar.gz python -m unittest tunirtests.cloudtests sudo systemctl stop crond.service @@ sudo systemctl disable crond.service @@ sudo reboot SLEEP 30 sudo python -m unittest tunirtests.cloudservice.TestServiceManipulation @@ sudo reboot SLEEP 30 sudo python -m unittest tunirtests.cloudservice.TestServiceAfter
UPDATE: Adding the output from Tunir for test mentioned above.
sudo ./tunir --job fedora --stateless [sudo] password for kdas: Got port: 2229 cleaning and creating dirs... Creating meta-data... downloading new image... Local downloads will be stored in /tmp/tmpZrnJsA. Downloading file:///home/Fedora-Cloud-Base-20141203-21.x86_64.qcow2 (158443520 bytes) Succeeded at downloading Fedora-Cloud-Base-20141203-21.x86_64.qcow2 download: /boot/vmlinuz-3.17.4-301.fc21.x86_64 -> ./vmlinuz-3.17.4-301.fc21.x86_64 download: /boot/initramfs-3.17.4-301.fc21.x86_64.img -> ./initramfs-3.17.4-301.fc21.x86_64.img /usr/bin/qemu-kvm -m 2048 -drive file=/tmp/tmpZrnJsA/Fedora-Cloud-Base-20141203-21.x86_64.qcow2,if=virtio -drive file=/tmp/tmpZrnJsA/seed.img,if=virtio -redir tcp:2229::22 -kernel /tmp/tmpZrnJsA/vmlinuz-3.17.4-301.fc21.x86_64 -initrd /tmp/tmpZrnJsA/initramfs-3.17.4-301.fc21.x86_64.img -append root=/dev/vda1 ro ds=nocloud-net -nographic Successfully booted your local cloud image! PID: 11880 Starting a stateless job. Executing command: curl -O https://kushal.fedorapeople.org/tunirtests.tar.gz Executing command: tar -xzvf tunirtests.tar.gz Executing command: python -m unittest tunirtests.cloudtests Executing command: sudo systemctl stop crond.service Executing command: @@ sudo systemctl disable crond.service Executing command: @@ sudo reboot Sleeping for 30. Executing command: sudo python -m unittest tunirtests.cloudservice.TestServiceManipulation Executing command: @@ sudo reboot Sleeping for 30. Executing command: sudo python -m unittest tunirtests.cloudservice.TestServiceAfter Job status: True command: curl -O https://kushal.fedorapeople.org/tunirtests.tar.gz status: True % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 8019 100 8019 0 0 4222 0 0:00:01 0:00:01 --:--:-- 4224 command: tar -xzvf tunirtests.tar.gz status: True tunirtests/ tunirtests/cloudservice.py tunirtests/LICENSE tunirtests/testutils.py tunirtests/__init__.py tunirtests/cloudtests.py command: python -m unittest tunirtests.cloudtests status: True .suu ---------------------------------------------------------------------- Ran 4 tests in 0.036s OK (skipped=1, unexpected successes=2) command: sudo systemctl stop crond.service status: True command: @@ sudo systemctl disable crond.service status: True Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service. command: @@ sudo reboot status: True command: sudo python -m unittest tunirtests.cloudservice.TestServiceManipulation status: True . ---------------------------------------------------------------------- Ran 1 test in 0.282s OK command: sudo python -m unittest tunirtests.cloudservice.TestServiceAfter status: True . ---------------------------------------------------------------------- Ran 1 test in 0.070s OK
According to Wikipedia, A hackathon (also known as a hack day, hackfest or codefest) is an event in which computer programmers and others involved in software development, including graphic designers, interface designers and project managers, collaborate intensively on software projects. Let us go through few points from this definition.
We can also see that people work intensively on the projects. It can be one project, or people can work as teams on different projects. In Fedora land, the most common example of hackathon is “Fedora Activity Days” or FADs. Where a group of contributors sit together in a place and work on the project intensively. The last example is the Design FAD which we had around a month back, where the design team worked on fixing the their goals and workflows and other related things.
One should keep these things in mind while submitting a proposal for FUDCON or actually any other conference. If you want to teach about any particular technology or tool, you should put that as a workshop proposal than a hackfest or hackathon.
Then which one is a good topic for hackfest during Fudcon? Say you want to work on the speed up of the boot time of Fedora. You may want to design 5 great icons for the projects you love. If you love photography, may be you want to build a camera using a RaspberryPi and some nice Python code. Another good option is to ask for a list of bugs from the applications under Fedora apps/infrastructure/releng team and then work on fixing them during the conference.
In both hackfest or workshop proposals, there are a few points which must be present in your proposal. Things like
CFP is open still 9th March, so go ahead and submit awesome proposals.