Hi,
Was just chatting with Tyler and he asked me to share what the API
that I would like to use in the CI runtime to interact with LAVA would
look like.
I figure it is useful to give you guys some context, so I am going to
share a simple user story. I am going to use "LAVA/CI" in the
following description as a short cut for LAVA with the extra logic and
dashboard we need to make this work.
The most simple user story for this tool is:
1. Write CI job
2. Check into VCS
3. Tell LAVA/CI that the job exists
4. Ask LAVA/CI to run the job
5. LAVA/CI checks the job out of VCS
6. LAVA/CI start running the job[a]
7. The job requests a slave machine that matches a specification
8. The job runs a series of commands on that machine
9. The job releases the machine
10. The job completes
11. The user polls LAVA/CI to see the result of the job
[a] I expect us to have a box that just sits there running these jobs
(Python scripts). The scripts just run commands on other machines and
shuffle files around, so 1 relatively modest computer should cope with
running all the scripts at once.
Now, the job could be more complex. The most likely use is that an x86
machine is requested at the start of the job and used as a build
slave, then the resulting image is booted and tested on an ARM board.
You may perform 1 kernel build and derive several images from it to
perform single zImage testing, request one of each of your target
boards and execute your boot & test on those ARM boards in parallel.
We could also request an ARM server part and several other machines as
traffic generators to do some multi-node testing. The nice thing is
that LAVA doesn't care - it is just handing out machines.
OK, so that is a bit of context out of the way. What do I actually want?
First, I want to ask LAVA for a machine based on a specification I
give. For now, lets stick to a name for each type (x86_64 / Panda /
Origen etc). Later I think a list of keys specifying a minimum
specification would be nice, such as arch=ARMv7, subarch=NEON,
RAM=1GB, cpus=2. I would like to connect to it using SSH. If this is
directly or by connecting to a terminal server doesn't matter. As long
as I am given sufficient information to connect and log in, I don't
mind if this is key based or password based. If it is inconvenient to
use SSH I am happy to add code to telnet into a board. I imagine SSH
is what I will use for x86 machines.
I would then like to ask LAVA to boot a machine I have reserved using
a particular disk image. For x86 machines, I assume this will be from
a selection of VM disk images that OpenStack can boot (will need that
listing). For ARM boards this will be a disk image I have published
somewhere.
Non-API related thought: I think it is reasonable to have an internal
file server to store disk images on that we create during builds
without having to push up to snapshots.linaro.org and pull them back
down. It makes far more sense to boot and test an image, then
optionally upload it to the wider world. Let me know if we have this
soft of temporary storage available.
I need to know if a machine is ready for me to use. I am happy to poll
something.
I need to tell LAVA/CI that I have finished with a machine.
How I access that API doesn't matter to me as long as a Python library
exists to allow me to interact with it without many headaches! Example
code welcome :-)
If you are interested, this is an example configuration that builds a kernel:
http://bazaar.launchpad.net/~linaro-automation/linaro-ci-runtime/trunk/view…
--
James Tunnicliffe
Paul,
I've been having some thoughts about CBuild and Lava and the TCWG
integration of them both. I wish to share them and open them up for general
discussion.
The background to this has been the flakiness of the Panda's (due to heat),
the Arndale (due to board 'set-up' issues), and getting a batch of Calxeda
nodes working.
The following discussion refers to building and testing only, *not*
benchmarking.
If you look at http://cbuild.validation.linaro.org/helpers/scheduler you
will see a bunch of calxeda01_* nodes have been added to CBuild. After a
week of sorting them out they provide builds twice as fast as the Panda
boards. However, during the setup of the boards I came to the conclusion
that we set build slaves up incorrectly, and that there is a better way.
The issues I encountered were:
* The Calxeda's run quantal - yet we want to build on precise.
* Its hard to get a machine running in hard-float to bootstrap a
soft-float compiler and vice-versa.
* My understanding of how the Lava integration works is that it runs the
cbuild install scripts each time, and so we can't necessarily reproduce a
build if the upstream packages have been changed.
Having thought about this a bit I came to the conclusion that the simple
solution is to use chroots (managed by schroot), and to change the
architecture a bit. The old architecture is everything is put into the main
file-system as one layer. The new architecture would be to split this into two:
1. Rootfs - Contains just enough to boot the system and knows how to
download an appropriate chroot and start it.
2. Chroots - these contain a setup build system that can be used for
particular builds.
The rootfs can be machine type specific (as necessary), and for builds can
be a stock linaro root filesystem. It will contain scripts to set the users
needed up, and then to download an appropriate chroot and run it.
The chroot will be set up for a particular type of build (soft-float vs
hard-float) and will be the same for all platforms. The advantage of this
is that I can then download a chroot to my ChromeBook and reproduce a build
locally in the same environment to diagnose issues.
The Calxeda nodes in cbuild use this type of infrastructure - the rootfs is
running quantal (and I have no idea how it is configured - it is what Steve
supplied me with). Each node then runs two chroots (precise armel and
precise armhf) which take it in turns to ask the cbuild scheduler whether
there is a job available.
So my first question is does any of the above make sense?
Next steps as I see it are:
1. Paul/Dave - what stage is getting the Pandaboards in the Lava farm
cooled at? One advantage of the above architecture is we could use a stock
Pandaboard kernel & rootfs that has thermal limiting turned on for builds,
so that things don't fall over all the time.
2. Paul - how hard would it be to try and fire up a Calxeda node into
Lava? We can use one of the ones assigned to me. I don't need any fancy
multinode stuff that Michael Hudson-Doyle is working on - each node can be
considered a separate board. I feel guilty that I put the nodes into CBuild
without looking at Lava - but it was easier to do and got me going - I think
correcting that is important
3. Generally - What's the state of the Arndale boards in Lava? Fathi has
got GCC building reliably, although I believe he is now facing networking
issues.
4. Paul - If Arndale boards are available in Lava - how much effort would
it be to make them available to CBuild?
One issue the above doesn't solve as far as I see it is being able to say to
Lava that we can do a build on any ARMv7-A CBuild compatible board. I don't
generally care whether the build happens on an Arndale, Panda, or Calxeda
board - I want the result in the shortest possible time.
A final note on benchmarking. I think the above scheme could work for
benchmarking targets all we need to do is build a kernel/rootfs that is
setup to provide a system that produces repeatable benchmarking results.
Comments welcome from all.
Thanks,
Matt
--
Matthew Gretton-Dann
Toolchain Working Group, Linaro
Hi all,
I'm moving this question from Zendesk to the mailing list. Could you
please assist Mailme (CC'd on this email) with his download errors. He has
provided links for the log messages in his request. Thank you all in
advance for you help in this matter. Mailme please add any additional
information you may want the team to know.
******* Question Below ******
I am trying to add support for a device in LAVA.
I have HW pack and Binary Pack for my board.
The problem I am getting is in downloading it through LAVA, while
deploying.
The log message can be seen at
http://paste.ubuntu.com/5715609/
It is "urllib2.HTTPError: HTTP Error 403: Forbidden" , but I am able to
download the package from the browser as well as
using wget command.
For this you can see the log at
http://paste.ubuntu.com/5715553/
Please help me on this issue as it is a big blockage for my work.
*********************************************************
Again thank you all in advance for you help.
~Amber
--
Amber Graner
Community and Social Media Manager
Linaro.org <http://www.linaro.org/>* **│ *Open source software for ARM SoCs*
***
Follow *Linaro: *Facebook <http://www.facebook.com/pages/Linaro> |
Twitter<http://twitter.com/#%21/linaroorg>
| Blog <http://www.linaro.org/linaro-blog/>
*+1.828.582.9469* cell
*+1.828.395.1049* office
irc: akgraner
amber.graner(a)linaro.org (email and Google chat)
*
Hi,
Greetings from LAVA Team!
We are very happy to announce you that there are new features getting
added to validation.linaro.org. In order to serve you better we are
trying to collect metadata from lava-test-shell tests that you are
running in validation.linaro.org.
On 2013-04-16 we will be deploying a new version of lava-dashboard in
validation.linaro.org which requires all lava-test-shell test
definitions, which you run should have metadata to be complete.
When we say metadata to be complete, following is a sample test
definition we refer to:
metadata:
name: device-tree
format: "Lava-Test-Shell Test Definition 1.0"
description: "Device tree test to check folder structure."
os:
- ubuntu
devices:
- origen
- snowball
- panda
- panda-es
- vexpress
environment:
- lava-test-shell
install:
bzr-repos:
-
lp:~linaro-foundations/linaro-ubuntu/lava-test-device-tree
run:
steps:
- "cd lava-test-device-tree; sudo bash -x ./run-test.sh"
parse:
pattern:
"(?P<test_case_id>[a-zA-Z0-9_-]+):\\s(?P<result>\\w+)"
However, the sections such as os, devices, environment are optional in
the above, but other parameters such as name, format, description are
mandatory in the metadata section.
If your test definition is not part of a bzr or git repository then it
is mandatory to have a 'version' parameter in metadata section. The
following example shows how a test definition metadata section will
look like for a test definition which is not part of bzr or git
repository:
metadata:
name: device-tree
format: "Lava-Test-Shell Test Definition 1.0"
version: 1.0
description: "Device tree test to check folder structure."
os:
- ubuntu
devices:
- origen
- snowball
- panda
- panda-es
- vexpress
environment:
- lava-test-shell
The documentation has been updated to reflect this change:
https://lava-dispatcher.readthedocs.org/en/latest/lava_test_shell.html
If you have any doubts in the above, please approach linaro-validation
<linaro-validation(a)lists.linaro.org>. Remember test definitions that
do not adhere to the above notification will fail when run on
validation.linaro.org after 2013-04-16.
If you want to test the correctness of your test definitions before
2013-04-16 feel free to use staging.validation.linaro.org.
Thank You.
LAVA Team!
*--
Tyler Baker
Technical Architect, Automation & CI
Linaro.org | Open source software for ARM SoCs
Follow Linaro: http://www.facebook.com/pages/Linarohttp://twitter.com/#!/linaroorg - http://www.linaro.org/linaro-blog