first version of automatic testrunner deployment. Uses ansible, vagrant
and virtualbox
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | venv/ | ||||||
|  | *~ | ||||||
|  | *.swp | ||||||
|  | .vagrant/ | ||||||
							
								
								
									
										5
									
								
								ansible/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								ansible/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -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. | ||||||
							
								
								
									
										75
									
								
								ansible/Vagrantfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								ansible/Vagrantfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -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 | ||||||
|  |  | ||||||
							
								
								
									
										8
									
								
								ansible/host-config.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								ansible/host-config.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | --- | ||||||
|  | - name: Provision the operation system for buildslave | ||||||
|  |   # testing | ||||||
|  |   hosts: all | ||||||
|  |   # live | ||||||
|  |   # hosts: poc-8.ethdev.com | ||||||
|  |   roles: | ||||||
|  |       - common | ||||||
							
								
								
									
										27
									
								
								ansible/roles/common/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								ansible/roles/common/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
							
								
								
									
										6
									
								
								ansible/roles/testrunner/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ansible/roles/testrunner/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | --- | ||||||
|  | - name: update Go client | ||||||
|  |   docker_image: | ||||||
|  |       path: git/ansible/test-files/docker-go | ||||||
|  |       name: go | ||||||
|  |       state: build | ||||||
							
								
								
									
										3
									
								
								ansible/site.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								ansible/site.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | --- | ||||||
|  | - include: host-config.yml | ||||||
|  | - include: testrunner-config.yml | ||||||
							
								
								
									
										46
									
								
								ansible/test-files/docker-go/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								ansible/test-files/docker-go/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								ansible/testrunner-config.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								ansible/testrunner-config.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
		Reference in New Issue
	
	Block a user