Merge lp:~terceiro/lava-dispatcher/modularize-distro-support into lp:lava-dispatcher

Proposed by Antonio Terceiro
Status: Merged
Merged at revision: 580
Proposed branch: lp:~terceiro/lava-dispatcher/modularize-distro-support
Merge into: lp:lava-dispatcher
Diff against target: 257 lines (+60/-82)
8 files modified
lava_dispatcher/actions/lava_test_shell.py (+28/-57)
lava_test_shell/README (+11/-0)
lava_test_shell/distro/ubuntu/lava-install-packages (+4/-0)
lava_test_shell/distro/ubuntu/lava-installed-packages (+3/-0)
lava_test_shell/distro/ubuntu/lava-os-build (+3/-0)
lava_test_shell/lava-installed-packages (+3/-0)
lava_test_shell/lava-os-build (+3/-0)
lava_test_shell/lava-test-runner (+5/-25)
To merge this branch: bzr merge lp:~terceiro/lava-dispatcher/modularize-distro-support
Reviewer Review Type Date Requested Status
Fathi Boudra Approve
Linaro Validation Team Pending
Review via email: mp+159007@code.launchpad.net

This proposal supersedes a proposal from 2013-04-11.

Description of the change

This branch makes some changes to the dispatcher in order to ease the addition of new supported distros. I think we can improve the situation even further, but this is already a good start.

This is a pre-requisite for adding Fedora support (bug #1165999) in a more-or-less clean way.

To post a comment you must log in.
Revision history for this message
Fathi Boudra (fboudra) wrote : Posted in a previous version of this proposal

Looks good to me. +1

review: Approve
Revision history for this message
Fathi Boudra (fboudra) wrote :

+1 still :)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lava_dispatcher/actions/lava_test_shell.py'
--- lava_dispatcher/actions/lava_test_shell.py 2013-04-07 19:43:05 +0000
+++ lava_dispatcher/actions/lava_test_shell.py 2013-04-15 19:40:37 +0000
@@ -106,7 +106,7 @@
106# to the host and turned into a bundle for submission to the dashboard.106# to the host and turned into a bundle for submission to the dashboard.
107107
108from datetime import datetime108from datetime import datetime
109import glob109from glob import glob
110import logging110import logging
111import os111import os
112import pexpect112import pexpect
@@ -132,38 +132,18 @@
132from lava_dispatcher.downloader import download_image132from lava_dispatcher.downloader import download_image
133133
134LAVA_TEST_DIR = '%s/../../lava_test_shell' % os.path.dirname(__file__)134LAVA_TEST_DIR = '%s/../../lava_test_shell' % os.path.dirname(__file__)
135LAVA_TEST_ANDROID = '%s/lava-test-runner-android' % LAVA_TEST_DIR
136LAVA_TEST_UBUNTU = '%s/lava-test-runner-ubuntu' % LAVA_TEST_DIR
137LAVA_TEST_UPSTART = '%s/lava-test-runner.conf' % LAVA_TEST_DIR
138LAVA_TEST_INITD = '%s/lava-test-runner.init.d' % LAVA_TEST_DIR
139LAVA_TEST_SHELL = '%s/lava-test-shell' % LAVA_TEST_DIR
140LAVA_TEST_CASE = '%s/lava-test-case' % LAVA_TEST_DIR
141LAVA_TEST_CASE_ATTACH = '%s/lava-test-case-attach' % LAVA_TEST_DIR
142LAVA_TEST_RUN_ATTACH = '%s/lava-test-run-attach' % LAVA_TEST_DIR
143135
144Target.android_deployment_data['lava_test_runner'] = LAVA_TEST_ANDROID136Target.android_deployment_data['distro'] = 'android'
145Target.android_deployment_data['lava_test_shell'] = LAVA_TEST_SHELL
146Target.android_deployment_data['lava_test_case'] = LAVA_TEST_CASE
147Target.android_deployment_data['lava_test_case_attach'] = LAVA_TEST_CASE_ATTACH
148Target.android_deployment_data['lava_test_run_attach'] = LAVA_TEST_RUN_ATTACH
149Target.android_deployment_data['lava_test_sh_cmd'] = '/system/bin/mksh'137Target.android_deployment_data['lava_test_sh_cmd'] = '/system/bin/mksh'
150Target.android_deployment_data['lava_test_dir'] = '/data/lava'138Target.android_deployment_data['lava_test_dir'] = '/data/lava'
151Target.android_deployment_data['lava_test_results_part_attr'] = 'data_part_android_org'139Target.android_deployment_data['lava_test_results_part_attr'] = 'data_part_android_org'
152140
153Target.ubuntu_deployment_data['lava_test_runner'] = LAVA_TEST_UBUNTU141Target.ubuntu_deployment_data['distro'] = 'ubuntu'
154Target.ubuntu_deployment_data['lava_test_shell'] = LAVA_TEST_SHELL
155Target.ubuntu_deployment_data['lava_test_case'] = LAVA_TEST_CASE
156Target.ubuntu_deployment_data['lava_test_case_attach'] = LAVA_TEST_CASE_ATTACH
157Target.ubuntu_deployment_data['lava_test_run_attach'] = LAVA_TEST_RUN_ATTACH
158Target.ubuntu_deployment_data['lava_test_sh_cmd'] = '/bin/bash'142Target.ubuntu_deployment_data['lava_test_sh_cmd'] = '/bin/bash'
159Target.ubuntu_deployment_data['lava_test_dir'] = '/lava'143Target.ubuntu_deployment_data['lava_test_dir'] = '/lava'
160Target.ubuntu_deployment_data['lava_test_results_part_attr'] = 'root_part'144Target.ubuntu_deployment_data['lava_test_results_part_attr'] = 'root_part'
161145
162Target.oe_deployment_data['lava_test_runner'] = LAVA_TEST_UBUNTU146Target.oe_deployment_data['distro'] = 'oe'
163Target.oe_deployment_data['lava_test_shell'] = LAVA_TEST_SHELL
164Target.oe_deployment_data['lava_test_case'] = LAVA_TEST_CASE
165Target.oe_deployment_data['lava_test_case_attach'] = LAVA_TEST_CASE_ATTACH
166Target.oe_deployment_data['lava_test_run_attach'] = LAVA_TEST_RUN_ATTACH
167Target.oe_deployment_data['lava_test_sh_cmd'] = '/bin/sh'147Target.oe_deployment_data['lava_test_sh_cmd'] = '/bin/sh'
168Target.oe_deployment_data['lava_test_dir'] = '/lava'148Target.oe_deployment_data['lava_test_dir'] = '/lava'
169Target.oe_deployment_data['lava_test_results_part_attr'] = 'root_part'149Target.oe_deployment_data['lava_test_results_part_attr'] = 'root_part'
@@ -376,11 +356,17 @@
376 f.write('set -ex\n')356 f.write('set -ex\n')
377 f.write('cd %s\n' % targetdir)357 f.write('cd %s\n' % targetdir)
378358
379 # TODO how should we handle this for Android?359 distro = self.context.client.target_device.deployment_data['distro']
360
361 # generic dependencies - must be named the same across all distros
362 # supported by the testdef
380 deps = self.testdef['install'].get('deps', [])363 deps = self.testdef['install'].get('deps', [])
364
365 # distro-specific dependencies
366 deps = deps + self.testdef['install'].get('deps-' + distro, [])
367
381 if deps:368 if deps:
382 f.write('sudo apt-get update\n')369 f.write('lava-install-packages ')
383 f.write('sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -q ')
384 for dep in deps:370 for dep in deps:
385 f.write('%s ' % dep)371 f.write('%s ' % dep)
386 f.write('\n')372 f.write('\n')
@@ -484,7 +470,6 @@
484470
485 def run(self, testdef_urls=None, testdef_repos=None, timeout=-1):471 def run(self, testdef_urls=None, testdef_repos=None, timeout=-1):
486 target = self.client.target_device472 target = self.client.target_device
487 self._assert_target(target)
488473
489 testdefs_by_uuid = self._configure_target(target, testdef_urls, testdef_repos)474 testdefs_by_uuid = self._configure_target(target, testdef_urls, testdef_repos)
490475
@@ -533,26 +518,25 @@
533 return False518 return False
534519
535 def _copy_runner(self, mntdir, target):520 def _copy_runner(self, mntdir, target):
536 runner = target.deployment_data['lava_test_runner']521 shell = target.deployment_data['lava_test_sh_cmd']
537 shutil.copy(runner, '%s/bin/lava-test-runner' % mntdir)522
538 os.chmod('%s/bin/lava-test-runner' % mntdir, XMOD)523 # Generic scripts
539524 scripts_to_copy = glob(os.path.join(LAVA_TEST_DIR, 'lava-*'))
540 shcmd = target.deployment_data['lava_test_sh_cmd']525
541526 # Distro-specific scripts override the generic ones
542 for key in ['lava_test_shell', 'lava_test_case_attach', 'lava_test_run_attach']:527 distro = target.deployment_data['distro']
543 fname = target.deployment_data[key]528 distro_support_dir = '%s/distro/%s' % (LAVA_TEST_DIR, distro)
529 for script in glob(os.path.join(distro_support_dir, 'lava-*')):
530 scripts_to_copy.append(script)
531
532 for fname in scripts_to_copy:
544 with open(fname, 'r') as fin:533 with open(fname, 'r') as fin:
545 with open('%s/bin/%s' % (mntdir, os.path.basename(fname)), 'w') as fout:534 foutname = os.path.basename(fname)
546 fout.write("#!%s\n\n" % shcmd)535 with open('%s/bin/%s' % (mntdir, foutname), 'w') as fout:
536 fout.write("#!%s\n\n" % shell)
547 fout.write(fin.read())537 fout.write(fin.read())
548 os.fchmod(fout.fileno(), XMOD)538 os.fchmod(fout.fileno(), XMOD)
549539
550 tc = target.deployment_data['lava_test_case']
551 with open(tc, 'r') as fin:
552 with open('%s/bin/lava-test-case' % mntdir, 'w') as fout:
553 fout.write('#!%s\n\n' % shcmd)
554 fout.write(fin.read())
555 os.fchmod(fout.fileno(), XMOD)
556540
557 def _mk_runner_dirs(self, mntdir):541 def _mk_runner_dirs(self, mntdir):
558 utils.ensure_directory('%s/bin' % mntdir)542 utils.ensure_directory('%s/bin' % mntdir)
@@ -618,16 +602,3 @@
618 with os.fdopen(fd, 'w') as f:602 with os.fdopen(fd, 'w') as f:
619 DocumentIO.dump(f, bundle)603 DocumentIO.dump(f, bundle)
620604
621 def _assert_target(self, target):
622 """ Ensure the target has the proper deployment data required by this
623 action. This allows us to exit the action early rather than going 75%
624 through the steps before discovering something required is missing
625 """
626 if not target.deployment_data:
627 raise RuntimeError('Target includes no deployment_data')
628
629 keys = ['lava_test_runner', 'lava_test_shell', 'lava_test_dir',
630 'lava_test_sh_cmd']
631 for k in keys:
632 if k not in target.deployment_data:
633 raise RuntimeError('Target deployment_data missing %s' % k)
634605
=== added file 'lava_test_shell/README'
--- lava_test_shell/README 1970-01-01 00:00:00 +0000
+++ lava_test_shell/README 2013-04-15 19:40:37 +0000
@@ -0,0 +1,11 @@
1This directory contains support scripts for lava-test-shell.
2
3The scripts in this directory will be copied into the target device and will be
4in $PATH during the lava-test-shell execution.
5
6Distribution-specific scripts can be placed in distro/$distroname, and will
7override the ones in the top level directory. For example,
8distro/android/lava-test-runner will be used on Android instead of the
9lava-test-runner script present at the same directory as this README file.
10
11All scripts have to be named using a "lava-" suffix.
012
=== added directory 'lava_test_shell/distro'
=== added directory 'lava_test_shell/distro/android'
=== renamed file 'lava_test_shell/lava-test-runner-android' => 'lava_test_shell/distro/android/lava-test-runner'
=== added directory 'lava_test_shell/distro/ubuntu'
=== added file 'lava_test_shell/distro/ubuntu/lava-install-packages'
--- lava_test_shell/distro/ubuntu/lava-install-packages 1970-01-01 00:00:00 +0000
+++ lava_test_shell/distro/ubuntu/lava-install-packages 2013-04-15 19:40:37 +0000
@@ -0,0 +1,4 @@
1#!/bin/sh
2
3sudo DEBIAN_FRONTEND=noninteractive apt-get update
4sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -q "$@"
05
=== added file 'lava_test_shell/distro/ubuntu/lava-installed-packages'
--- lava_test_shell/distro/ubuntu/lava-installed-packages 1970-01-01 00:00:00 +0000
+++ lava_test_shell/distro/ubuntu/lava-installed-packages 2013-04-15 19:40:37 +0000
@@ -0,0 +1,3 @@
1#!/bin/sh
2
3dpkg-query -W -f '${status} ${package} : ${version}\n' | sed -n 's/^install ok installed/package:/p'
04
=== added file 'lava_test_shell/distro/ubuntu/lava-os-build'
--- lava_test_shell/distro/ubuntu/lava-os-build 1970-01-01 00:00:00 +0000
+++ lava_test_shell/distro/ubuntu/lava-os-build 2013-04-15 19:40:37 +0000
@@ -0,0 +1,3 @@
1#!/bin/sh
2
3cat /etc/lsb-release | grep DESCRIPTION | cut -d\" -f2
04
=== added file 'lava_test_shell/lava-installed-packages'
--- lava_test_shell/lava-installed-packages 1970-01-01 00:00:00 +0000
+++ lava_test_shell/lava-installed-packages 2013-04-15 19:40:37 +0000
@@ -0,0 +1,3 @@
1#!/bin/sh
2
3echo 'Unsupported distro: cannot obtain list of installed packages'
04
=== added file 'lava_test_shell/lava-os-build'
--- lava_test_shell/lava-os-build 1970-01-01 00:00:00 +0000
+++ lava_test_shell/lava-os-build 2013-04-15 19:40:37 +0000
@@ -0,0 +1,3 @@
1#!/bin/sh
2
3echo 'Unsupported distro: cannot determine build version'
04
=== renamed file 'lava_test_shell/lava-test-runner-ubuntu' => 'lava_test_shell/lava-test-runner'
--- lava_test_shell/lava-test-runner-ubuntu 2013-03-15 16:50:30 +0000
+++ lava_test_shell/lava-test-runner 2013-04-15 19:40:37 +0000
@@ -5,12 +5,6 @@
5RESULTSDIR="/lava/results"5RESULTSDIR="/lava/results"
6BINDIR="/lava/bin"6BINDIR="/lava/bin"
77
8detect_distro() {
9 test -x /usr/bin/dpkg-query && echo "debian_based" && return
10
11 echo "unknown"
12}
13
14hwcontext()8hwcontext()
15{9{
16 mkdir -p ${RESULTSDIR}/hwcontext10 mkdir -p ${RESULTSDIR}/hwcontext
@@ -21,31 +15,17 @@
21 [ -f ${meminfo} ] || cat /proc/meminfo > ${meminfo}15 [ -f ${meminfo} ] || cat /proc/meminfo > ${meminfo}
22}16}
2317
24unknown_swcontext() {18swcontext()
25 mkdir -p ${RESULTSDIR}/swcontext
26 build=${RESULTSDIR}/swcontext/build.txt
27 pkgs=${RESULTSDIR}/swcontext/pkgs.txt
28
29 # we don't know about the software context
30 echo 'Unsupported distro: cannot determine build version' > "$build"
31 echo 'Unsupported distro: cannot obtain list of installed packages' > "$pkgs"
32}
33
34debian_based_swcontext()
35{19{
36 mkdir -p ${RESULTSDIR}/swcontext20 mkdir -p ${RESULTSDIR}/swcontext
37 build=${RESULTSDIR}/swcontext/build.txt21 build=${RESULTSDIR}/swcontext/build.txt
38 pkgs=${RESULTSDIR}/swcontext/pkgs.txt22 pkgs=${RESULTSDIR}/swcontext/pkgs.txt
3923
40 [ -f ${build} ] || cat /etc/lsb-release | grep DESCRIPTION | cut -d\" -f2 > ${build}24 lava-os-build > ${build}
41 # this does a query of installed packaged that will look similar to25
26 # this has to print a list of installed packages that will look similar to
42 # what android's package list does27 # what android's package list does
43 [ -f ${pkgs} ] || dpkg-query -W -f '${status} ${package} : ${version}\n' | sed -n 's/^install ok installed/package:/p' > ${pkgs}28 lava-installed-packages > ${pkgs}
44}
45
46swcontext() {
47 distro=$(detect_distro)
48 ${distro}_swcontext
49}29}
5030
51cleanup()31cleanup()

Subscribers

People subscribed via source and target branches