From 74faa30af6349a7f87959dcf907092b98af735ec Mon Sep 17 00:00:00 2001 From: sveneh Date: Wed, 14 Jan 2015 16:10:33 +0100 Subject: [PATCH] first version of automatic testrunner deployment. Uses ansible, vagrant and virtualbox --- .gitignore | 4 ++ ansible/README.md | 5 ++ ansible/Vagrantfile | 75 +++++++++++++++++++++++++ ansible/host-config.yml | 8 +++ ansible/roles/common/tasks/main.yml | 27 +++++++++ ansible/roles/testrunner/tasks/main.yml | 6 ++ ansible/site.yml | 3 + ansible/test-files/docker-go/Dockerfile | 46 +++++++++++++++ ansible/testrunner-config.yml | 12 ++++ 9 files changed, 186 insertions(+) create mode 100644 .gitignore create mode 100644 ansible/README.md create mode 100644 ansible/Vagrantfile create mode 100644 ansible/host-config.yml create mode 100644 ansible/roles/common/tasks/main.yml create mode 100644 ansible/roles/testrunner/tasks/main.yml create mode 100644 ansible/site.yml create mode 100644 ansible/test-files/docker-go/Dockerfile create mode 100644 ansible/testrunner-config.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..cdf615a0fe --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +venv/ +*~ +*.swp +.vagrant/ diff --git a/ansible/README.md b/ansible/README.md new file mode 100644 index 0000000000..558b2e845f --- /dev/null +++ b/ansible/README.md @@ -0,0 +1,5 @@ +# Automatic deployment of the random test generator + +Testing is done in a Vagrant virtual machine + +install vagrant, virtualbox, ansible, then do `vagrant up`. It should provison a basic machine. `vagrant ssh` to verify the machine is working as expected. diff --git a/ansible/Vagrantfile b/ansible/Vagrantfile new file mode 100644 index 0000000000..ca2a7b288c --- /dev/null +++ b/ansible/Vagrantfile @@ -0,0 +1,75 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! +VAGRANTFILE_API_VERSION ||= "2" + +Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| + # All Vagrant configuration is done here. The most common configuration + # options are documented and commented below. For a complete reference, + # please see the online documentation at vagrantup.com. + + # Every Vagrant virtual environment requires a box to build off of. + config.vm.box = "ubuntu/trusty64" + config.vm.define "random-test" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + # config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" + + # If true, then any SSH connections made will enable agent forwarding. + # Default value: false + # config.ssh.forward_agent = true + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + # config.vm.synced_folder "../data", "/vagrant_data" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + # config.vm.provider "virtualbox" do |vb| + # # Don't boot with headless mode + # vb.gui = true + # + # # Use VBoxManage to customize the VM. For example to change memory: + # vb.customize ["modifyvm", :id, "--memory", "1024"] + # end + + + # Ubuntu / Virtualbox workaround. + # see http://askubuntu.com/questions/238040/how-do-i-fix-name-service-for-vagrant-client + config.vm.provider "virtualbox" do |vb| + vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] + end + + # + # View the documentation for the provider you're using for more + # information on available options. + + + # Ansible + config.vm.provision "ansible" do |ansible| + ansible.playbook = "host-config.yml" + end + +end + diff --git a/ansible/host-config.yml b/ansible/host-config.yml new file mode 100644 index 0000000000..edb4cd8209 --- /dev/null +++ b/ansible/host-config.yml @@ -0,0 +1,8 @@ +--- +- name: Provision the operation system for buildslave + # testing + hosts: all + # live + # hosts: poc-8.ethdev.com + roles: + - common diff --git a/ansible/roles/common/tasks/main.yml b/ansible/roles/common/tasks/main.yml new file mode 100644 index 0000000000..dcffc7b8be --- /dev/null +++ b/ansible/roles/common/tasks/main.yml @@ -0,0 +1,27 @@ +--- +- name: install docker + sudo: true + # install script from https://docs.docker.com/installation/ubuntulinux/ + shell: curl -sSL https://get.docker.com/ubuntu/ | sudo sh + +- name: install package dependencies + sudo: true + apt: name={{ item }} + with_items: + - python-pip + +- name: install python dependencies + sudo: true + pip: name=docker-py + + +- name: enable docker for standard user + sudo: true + # todo: how to logout after this command, otherwise won't be effective in this play + user: name=vagrant groups=docker append=yes + +- name: checkout test repo + git: + repo: https://github.com/sveneh/tests.git + version: develop + dest: git diff --git a/ansible/roles/testrunner/tasks/main.yml b/ansible/roles/testrunner/tasks/main.yml new file mode 100644 index 0000000000..54f7fc5fbb --- /dev/null +++ b/ansible/roles/testrunner/tasks/main.yml @@ -0,0 +1,6 @@ +--- +- name: update Go client + docker_image: + path: git/ansible/test-files/docker-go + name: go + state: build diff --git a/ansible/site.yml b/ansible/site.yml new file mode 100644 index 0000000000..cc04daa940 --- /dev/null +++ b/ansible/site.yml @@ -0,0 +1,3 @@ +--- +- include: host-config.yml +- include: testrunner-config.yml diff --git a/ansible/test-files/docker-go/Dockerfile b/ansible/test-files/docker-go/Dockerfile new file mode 100644 index 0000000000..235ffff440 --- /dev/null +++ b/ansible/test-files/docker-go/Dockerfile @@ -0,0 +1,46 @@ +# Adjusted from https://github.com/ethereum/go-ethereum/blob/develop/Dockerfile +FROM ubuntu:14.04 + +## Environment setup +ENV HOME /root +ENV GOPATH /root/go +ENV PATH /go/bin:/root/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games + +RUN mkdir -p /root/go +ENV DEBIAN_FRONTEND noninteractive + +## Install base dependencies +RUN apt-get update && apt-get upgrade -y +RUN apt-get install -y git mercurial build-essential software-properties-common pkg-config libgmp3-dev libreadline6-dev libpcre3-dev libpcre++-dev + +## Build and install Go +RUN hg clone -u release https://code.google.com/p/go +RUN cd go && hg update go1.4 +RUN cd go/src && ./all.bash && go version + +## Install GUI dependencies +RUN add-apt-repository ppa:ubuntu-sdk-team/ppa -y +RUN apt-get update -y +RUN apt-get install -y qtbase5-private-dev qtdeclarative5-private-dev libqt5opengl5-dev + +## Fetch and install serpent-go +RUN go get -v -d github.com/ethereum/serpent-go +WORKDIR $GOPATH/src/github.com/ethereum/serpent-go +# RUN git checkout master +RUN git submodule update --init +RUN go install -v + +# Fetch and install go-ethereum +RUN go get -v -d github.com/ethereum/go-ethereum/... +WORKDIR $GOPATH/src/github.com/ethereum/go-ethereum + +RUN git checkout develop + +RUN git pull +RUN ETH_DEPS=$(go list -f '{{.Imports}} {{.TestImports}} {{.XTestImports}}' github.com/ethereum/go-ethereum/... | sed -e 's/\[//g' | sed -e 's/\]//g' | sed -e 's/C //g'); if [ "$ETH_DEPS" ]; then go get $ETH_DEPS; fi +RUN go install -v ./cmd/ethtest + +# Run JSON RPC +ENTRYPOINT ["ethtest"] +EXPOSE 8080 + diff --git a/ansible/testrunner-config.yml b/ansible/testrunner-config.yml new file mode 100644 index 0000000000..99323f82bc --- /dev/null +++ b/ansible/testrunner-config.yml @@ -0,0 +1,12 @@ +--- +- name: setting up buildslave configuration + # testing + hosts: all + # live + # hosts: poc-8.ethdev.com + + # TODO use the right user for configuring, until credentials set, stay with default vagrant user + # remote_user: buildsalve + + roles: + - buildslave