The lxcrunner package provides an utility to run scripts inside Linux Containers. The main purpose of the utility is to
- setup a test environment with one or many LXC containers,
- run unit and functional tests inside the test environment and then
- tear down the LXC containers safely.
All the aspects of the lxcrunner utility can be configured with a config file. The default location of the file is /etc/lxcrunner/config.ini, but it can be overriden with the --config option.
The config file consists of two major parts:
- description of containers to set up and
- logging configuration.
For the latter part see the documentation of the standard python logging library: http://docs.python.org/library/logging.html.
The DEFAULT section of the config file should contain the following options:
- vm_dir
- directory where LXC containers reside;
- tpl_dir
- path to templates used to modify configuarion files of LXC containers;
- vm_suite
- (optional) name of a suite. This option can be overriden with the command line option --suite of the lxcrunner utility. The suite name is used to refer a section in the config file with settings specific to the suite's environment setup.
Any suite sections must contain the option vmguests with a comma-separated list of guest (LXC containers) names. These names are used to refer config sections for guests: guest section names as prefixed with the string vmguest_, i.e. vmguest_<guest_name>.
Additionally the section may contain arbitrary number of context variables used in template files. Values of the options with names like ctx_<variable_name> are transformed to templates variables with <variable_name> as their name.
A guest section must contain the field tpl_type whose value refers to a template section tpl_<tpl_type_value>.
Guest sections may contain context variable in the same format as in suite sections.
Optionally a guest section may contain the field execute with a path to a script inside the guest container as its value. If this option is specified then the guest is never get demonized, but the script is executed inside the container instead.
A template section must contain the field tarball. The value of the field is a path to a tarball to unpack in vm_dir.
Any other fields are names of templates that need to be rendered to specified paths inside a container. lxcrunner looks for templates in the folder tpl_dir. For example the field hosts inside a template section refers to the template file <tpl_dir>/hosts.tpl. Values of the fields are paths relative to container's root. Optionally the value may contain a permission descriptor for the file:
hosts: etc/hosts 0644
An example of the config file:
[DEFAULT] vm_dir: /var/lib/lxc tpl_dir: /etc/lxcrunner/templates vm_suite: derek_setup ; VM suite [derek_setup] vmguests: riaktest1,riaktest2,unittesthost ; set template variables netmask and gateway common for all guests ctx_netmask: 255.255.255.0 ctx_gateway: 192.168.132.1 [vmguest_riaktest1] ; use the riaknode template ([tpl_riaknode]) for the riaktest1 guest tpl_type: riaknode ctx_ip_address: 192.168.132.31 [vmguest_riaktest2] tpl_type: riaknode ctx_ip_address: 192.168.132.32 [vmguest_unittesthost] tpl_type: unittesthost ctx_ip_address: 192.168.132.40 ctx_riak_hosts: 192.168.132.31,192.168.132.32 execute: /bin/run_tests.sh [tpl_riaknode] ; rootstrap used to deploy riaknode guests tarball: /home/rozhkov/backups/lxcs/riaknode-template.tgz tpls: hosts,hostname,interfaces,checkroot,riak_app_config,riak_vm_args,riak_initd ; templates used to modify files inside guests hosts: etc/hosts hostname: etc/hostname interfaces: etc/network/interfaces checkroot: etc/init.d/checkroot.sh riak_app_config: etc/riak/app.config riak_vm_args: etc/riak/vm.args riak_initd: etc/init.d/riak [tpl_unittesthost] tarball: /home/rozhkov/backups/lxcs/testhost-template.tgz tpls: hosts,hostname,interfaces,checkroot,haproxy_cfg,run_tests ; templates used to modify files inside guests hosts: etc/hosts hostname: etc/hostname interfaces: etc/network/interfaces checkroot: etc/init.d/checkroot.sh haproxy_cfg: etc/haproxy/haproxy.cfg run_tests: run_tests.sh 0744
In case the default suite is specified in the default config file then you can simply run:
# lxcrunner
In oder to run an alternative non-default suite then use the option --suite:
# lxcrunner --suite mysuite
To see the full list of options run:
$ lxcrunner --help Usage: lxcrunner [options] Options: -h, --help show this help message and exit -c CONFIG, --config=CONFIG path to config file -s SUITE, --suite=SUITE name of suite in config file -e ENDSTAGE, --end-stage=ENDSTAGE name of final stage when lxcrunner must stop. The stages are 'prepare', 'startsuite', 'run', 'cleanup' -u, --unique add unique suffix to VM guests