Teuthology docker targets hack (1/5)

teuthology runs jobs testing the Ceph integration on targets that can either be virtual machines or bare metal. The container hack adds support for docker containers as a replacement.

...
Running task exec...
Executing custom commands...
Running commands on role mon.a host container002
running sudo 'TESTDIR=/home/ubuntu/cephtest' bash '-c' '/bin/true'
running docker exec container002 bash /tmp/tmp/tmptJ7hxa
Duration was 0.088931 seconds
...


A worker with this hack listens on the container tube:

$ mkdir /tmp/a /tmp/logs
$ ./virtualenv/bin/teuthology-worker \
  -l /tmp/logs --archive-dir /tmp/a \
  --tube container

A noop job

machine_type: container
os_type: ubuntu
os_version: "14.04"
roles:
- - mon.a
  - osd.0
- - osd.1
  - client.0
tasks:
- exec:
    mon.a:
      - /bin/true

is scheduled via the container tube

./virtualenv/bin/teuthology-schedule --name foo \
  --worker container --owner loic@dachary.org \
  noop.yaml
Job scheduled with name foo and ID 29
2014-10-29 14:28:28,415.415 WARNING:teuthology.report:No results_server \
  set in /home/loic/.teuthology.yaml; cannot report results

The implementation relies on the docker 1.3 docker exec command. It is used as a replacement for ssh connections.

...
2014-10-29 13:48:34,996.996 INFO:teuthology.lockstatus:lockstatus::get_status uri = http://localhost:8080/nodes/container002/
2014-10-29 13:48:35,009.009 INFO:teuthology.containers:sleeper_running  140380434393616
2014-10-29 13:48:35,032.032 INFO:teuthology.containers:running 'docker' 'run' '--rm=true' '--volume' '/tmp:/tmp/tmp' '--name' 'container002' 'ceph-ubuntu-14.04' 'bash' '-c' 'echo running ; sleep 1000000'
2014-10-29 13:48:36,132.132 INFO:teuthology.containers:run_sleeper: running

2014-10-29 13:48:36,133.133 INFO:teuthology.containers:sleeper_running  140380434393616
2014-10-29 13:48:36,133.133 INFO:teuthology.containers:start: container container002 started
2014-10-29 13:48:36,133.133 INFO:teuthology.lockstatus:lockstatus::get_status uri = http://localhost:8080/nodes/container001/
2014-10-29 13:48:36,149.149 INFO:teuthology.containers:sleeper_running  140380258955216
2014-10-29 13:48:36,169.169 INFO:teuthology.containers:running 'docker' 'run' '--rm=true' '--volume' '/tmp:/tmp/tmp' '--name' 'container001' 'ceph-ubuntu-14.04' 'bash' '-c' 'echo running ; sleep 1000000'
2014-10-29 13:48:37,244.244 INFO:teuthology.containers:run_sleeper: running

2014-10-29 13:48:37,244.244 INFO:teuthology.containers:sleeper_running  140380258955216
2014-10-29 13:48:37,245.245 INFO:teuthology.containers:start: container container001 started
2014-10-29 13:48:37,245.245 INFO:teuthology.task.internal:roles:  - ['mon.a', 'osd.0']
2014-10-29 13:48:37,245.245 INFO:teuthology.task.internal:roles:  - ['osd.1', 'client.0']
2014-10-29 13:48:37,245.245 INFO:teuthology.run_tasks:Running task internal.push_inventory...
2014-10-29 13:48:37,245.245 INFO:teuthology.run_tasks:Running task internal.serialize_remote_roles...
2014-10-29 13:48:37,247.247 INFO:teuthology.run_tasks:Running task internal.check_conflict...
...
2014-10-29 13:48:40,033.033 INFO:teuthology.containers:running rmdir '--' '/home/ubuntu/cephtest'
2014-10-29 13:48:40,034.034 INFO:teuthology.containers:running docker exec container002 bash /tmp/tmp/tmpxaD5xX
2014-10-29 13:48:40,145.145 INFO:teuthology.containers:completed ['docker', 'exec', u'container001', 'bash', '/tmp/tmp/tmpqhYczm'] on container001:
2014-10-29 13:48:40,145.145 INFO:teuthology.containers:completed ['docker', 'exec', u'container002', 'bash', '/tmp/tmp/tmpxaD5xX'] on container002:
2014-10-29 13:48:40,147.147 INFO:teuthology.run:Summary data:
{duration: 0.0005440711975097656, failure_reason: need more than 0 values to unpack,
  owner: loic@dachary.org, status: fail, success: false}

2014-10-29 13:48:40,148.148 WARNING:teuthology.report:No results_server set in /home/loic/.teuthology.yaml; cannot report results
2014-10-29 13:48:40,149.149 INFO:teuthology.run:FAIL

The containers were added to the paddles database, using the new is_container field.

for id in 1 2 3 ; do
 sqlite3 dev.db "insert into nodes (id,name,machine_type,is_container,is_vm,locked,up) values ($id, 'container00$id', 'container', 1, 0, 0, 1);"
done

They were not pre-provisionned because they are created on demand. Since docker provides a repository of images, downburst is not used.