diff --git a/README.md b/README.md index e8112ad511bfd8fa65a709f4b12eb0cf5405f710..0fba7df64b563baa34c38e8db3b3365caafd0274 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,6 @@ Testing is implemented using pytest using the following convention: * Tests are executed from the test-runner container on the VM using install python modules * CI testing is on givry using nested LXD containers -##### Create VM - Create a single VM with LXC installed and configured with lxcbr0 configured for the network 172.40.231.0/24 ```shell @@ -78,22 +76,18 @@ To create|start|stop|destroy specific services use the `-c` option e.g. /vagrant/scripts/test/fixture.sh create -f /vagrant/src/test/clmctest/rspec.json -c clmc-service ``` -##### Create `reporc` file - The installation of several of the services depend on accessing the Nexus binary repository (for the custom Telegraf agent). To do this, a username and password for the repository must be specified in a `reporc` file in the user's home directory, e.g. - ```shell REPO_USER=itinnov.flame.integration REPO_PASS=xxxxxxx ``` -##### Build all services - Create all the services needed for integration tests: ```shell -sudo /vagrant/scripts/test/fixture.sh create -f /vagrant/src/test/clmctest/rspec.json -c all +sudo su +/vagrant/scripts/test/fixture.sh create -f /vagrant/src/test/clmctest/rspec.json -c all ``` As part of the clmc-service installation, the service's unit tests have been run. The fixture script will fail if any individual service installation fails to install (or fails its tests). @@ -101,15 +95,15 @@ As part of the clmc-service installation, the service's unit tests have been run Attach to the test-runner to run the tests ```shell -sudo lxc exec test-runner -- bash +lxc-attach -n test-runner ``` Build and install the CLMC test Python module: ```shell -cd /opt/clmc/src/test -python3 setup.py sdist --dist-dir=../../build -pip3 install /opt/clmc/build/clmctest-<version>.tar.gz +cd /vagrant/src/test +python setup.py sdist --dist-dir=../../build +pip3 install /vagrant/build/clmctest-<version>.tar.gz ``` The following module is unit tests: @@ -128,19 +122,19 @@ pytest -s --pyargs clmctest.monitoring #### CI Testing -A lxd container is setup on givry called `flame-clmc-ci`. The container is priviledged and allows for nested containers. The container was created using the following commands. +A lxd container is setup on givry called `flame-clmc-ci`. The container is priviledged and allows for nested containers. The container was created using the following commands. Note that the container only works on the `default` storage pool and not the large storage device `pool2` ``` -lxc launch ubuntu:18.04 flame-clmc-ci -c security.privileged=true -c security.nesting=true +lxc launch ubuntu:18.04 flame-clmc-ci -c security.privileged=true -c security.nesting=true ``` the container is then started and LXD initialised ``` lxc exec flame-clmc-ci -- bash -lxd init --auto --storage-backend dir +lxd init --auto --storage-backend dir lxc network create lxcbr0 ipv6.address=none ipv4.address=172.40.231.1/24 ipv4.nat=true ``` diff --git a/Vagrantfile b/Vagrantfile index 529e1dcd3959ce65f9b2967833111cd1cb3139d8..02fc7bb504c593f0da8c3dc4e28c27f4da86525d 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -21,8 +21,6 @@ $lxc_script = <<-SCRIPT -export DEBIAN_FRONTEND=noninteractive - apt-get update apt-get install python3 python3-setuptools jq -y @@ -31,8 +29,7 @@ echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo deb echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections apt-get -y install iptables-persistent - -lxd init --auto --storage-backend dir +lxd init --auto --storage-backend dir lxc network create lxcbr0 ipv6.address=none ipv4.address=172.40.231.1/24 ipv4.nat=true # enable NTP @@ -48,7 +45,6 @@ timedatectl set-ntp no #done apt-get install ntp -y - echo "timesync set to ntpd" # set timezone to London @@ -58,29 +54,14 @@ SCRIPT Vagrant.configure("2") do |config| config.vm.box = "ubuntu/bionic64" - config.vm.box_version = '20190627.1.0' - - # use public network by allowing the IP to be assigned via DHCP - #config.vm.network "public_network", use_dhcp_assigned_default_route: true - - # forward ports to host - #config.vm.network "forwarded_port", guest: 80, host: 80 - - # increase default disk size, it requires to install the plugin first - # e.g. vagrant plugin install vagrant-disksize - config.disksize.size = '15GB' - - # forward X11 - config.ssh.forward_agent = true - config.ssh.forward_x11 = true - - # provision the VM + config.disksize.size = '50GB' config.vm.provider "virtualbox" do |vb| - vb.cpus = 2 - #vb.memory = "8192" - vb.memory = "12288" + vb.cpus = 4 + vb.memory = "8192" end + #config.vm.network "forwarded_port", guest: 8888, host: 8888 + # Install lxc config.vm.provision :shell, inline: $lxc_script end diff --git a/scripts/test/fixture.sh b/scripts/test/fixture.sh index 821cb71971cdaea64f0d4522160af20e87068552..dc20be92e0b945cde9fed1c3cec247ebc2645979 100755 --- a/scripts/test/fixture.sh +++ b/scripts/test/fixture.sh @@ -28,12 +28,6 @@ repo_root="/vagrant" target_root="/opt/clmc" config_file="rspec.json" -# make sure UID is root -if [ "$EUID" -ne 0 ]; then - echo "please run as root (requires to change iptables)" - exit -fi - usage() { echo "Usage: $0 create|start|stop|destroy [-f config_file] [-r repo_root] [-c container_name|all]" 1>&2 echo " -f defaults to '${config_file}'" 1>&2 @@ -42,14 +36,6 @@ usage() { exit 1 } -failed() { - msg=$1 - sn=$2 - echo "failed to: $msg for service $service_name" - delete $sn - exit 1 -} - create() { service_name=$1 config_file=$2 @@ -61,28 +47,25 @@ create() { echo $SERVICE ip=$(echo $SERVICE | jq -r '.ip_address') - lxc init ubuntu:16.04 ${service_name} || failed "crate lxc image" ${service_name} + lxc init ubuntu:16.04 ${service_name} echo "Creating network: ${service_name}" - lxc network attach lxcbr0 ${service_name} eth0 || failed "attach lxcbr0" ${service_name} - lxc config device set ${service_name} eth0 ipv4.address ${ip} || failed "config eth0" ${service_name} - lxc config set ${service_name} security.privileged true || failed "config security" ${service_name} + lxc network attach lxcbr0 ${service_name} eth0 + lxc config device set ${service_name} eth0 ipv4.address ${ip} + lxc config set ${service_name} security.privileged true # copy flame clmc files into the root container echo "Copying files to rootfs" container_dir="/var/lib/lxd/containers/"${service_name}"/rootfs" container_repo_root=${container_dir}${target_root} - mkdir -p ${container_repo_root} || failed "create target directory" ${service_name} - cp -f ${repo_root}/reporc ${container_repo_root} || failed "copy reporc" ${service_name} - cp -rf ${repo_root}/scripts ${container_repo_root} || failed "copy scripts" ${service_name} - cp -rf ${repo_root}/src ${container_repo_root} || failed "copy src" ${service_name} - chown -R 100000:100000 ${container_repo_root} || failed "change permissions" ${service_name} - + mkdir -p ${container_repo_root} + cp -f ${repo_root}/reporc ${container_repo_root} + cp -rf ${repo_root}/scripts ${container_repo_root} + cp -rf ${repo_root}/src ${container_repo_root} + chown -R 100000:100000 ${container_repo_root} # start the container echo "Starting: ${service_name}" lxc start ${service_name} - # add delay to avoid while-loop lxc command failing initially - sleep 1 while :; do echo "Waiting for container to start: ${service_name}" lxc file pull ${service_name}/etc/resolv.conf - | grep -q nameserver && break @@ -99,15 +82,16 @@ create() { if [ $exit_code != 0 ]; then echo "clmc-service installation failed with exit code ${exit_code}" exit 1 - fi - elif [ ${service_name} == "test-runner" ]; then + fi + elif [ ${service_name} == "test-runner" ] + then cmd="${target_root}/src/test/clmctest/services/pytest/install.sh" lxc exec ${service_name} -- ${cmd} exit_code=$? if [ $exit_code != 0 ]; then echo "test-runner installation failed with exit code ${exit_code}" exit 1 - fi + fi else # get container parameters location=$(echo $SERVICE | jq -r '.location') @@ -131,9 +115,8 @@ create() { lxc exec ${service_name} --env REPO_ROOT="${target_root}" -- ${cmd} # check that telegraf installed (it may not have if the reporc file was not present or Nexus server was down) - - if lxc exec ${service_name} -- ls /etc/telegraf |& grep 'ls: cannot access'; then - echo "Telegraf agent failed to install for ${service_name} (check reporc?)" + if lxc-attach -n ${service_name} -- ls /etc/telegraf |& grep 'ls: cannot access'; then + echo "Telegraf agent failed to install (check reporc?)" exit 1 fi @@ -141,14 +124,13 @@ create() { lxc exec ${service_name} -- service telegraf stop # copy telegraf configuration templates - echo "copy telegraf configuration templates" - lxc file push -r scripts/clmc-agent/telegraf.conf ${service_name}/etc/telegraf/ - lxc file push -r scripts/clmc-agent/telegraf_output.conf ${service_name}/etc/telegraf/telegraf.d/ + cp -f ${repo_root}/scripts/clmc-agent/telegraf.conf ${container_dir}/etc/telegraf/ + cp -f ${repo_root}/scripts/clmc-agent/telegraf_output.conf ${container_dir}/etc/telegraf/telegraf.d/ # copy the 'host' config into all service containers - lxc file push -r src/test/clmctest/services/host/telegraf*.conf ${service_name}/etc/telegraf/telegraf.d/ + cp -f ${repo_root}/src/test/clmctest/services/host/telegraf*.conf ${container_dir}/etc/telegraf/telegraf.d/ # copy the service-specific config - lxc file push -r src/test/clmctest/services/${sf_package_id}/telegraf*.conf ${service_name}/etc/telegraf/telegraf.d/ - lxc exec ${service_name} -- chown -R 100000:100000 /etc/telegraf/ + cp -f ${repo_root}/src/test/clmctest/services/${sf_package_id}/telegraf*.conf ${container_dir}/etc/telegraf/telegraf.d/ + chown -R 100000:100000 ${container_dir}/etc/telegraf/ # replace telegraf template with container parameters cmd="${target_root}/scripts/clmc-agent/configure.sh ${location} ${sfc_id} ${sfc_instance_id} ${sf_package_id} ${sf_id} ${sf_endpoint_id} ${influxdb_url}" @@ -185,19 +167,10 @@ stop() { service_name=$1 if lxc info ${service_name}; then echo "Stopping container: ${service_name}" - lxc stop ${service_name} - fi -} - -delete() { - service_name=$1 - if lxc list | grep -q ${service_name}; then - echo "Deleting container: ${service_name}" - lxc delete ${service_name} + lxc stop -n ${service_name} fi } - destroy() { service_name=$1 config_file=$2