Bootstrap Packer template for libvirt and Vbox (#48)
This PR contains a provisioning mechanism for the Vagrant boxes we ship as part of Sandbox. In order to self contain and distribute the required dependencies for Tinkerbell and Sandbox without having to download all of them runtime we decided to use [Packer.io](https://packer.io) to build boxes that you can use when provisioning Tinkerbell on Vagrant. Currently the generated boxes are available via [Vagrant Cloud](https://app.vagrantup.com/tinkerbelloss). Signed-off-by: Gianluca Arbezzano <gianarb92@gmail.com>
This commit is contained in:
commit
58937939c3
3
deploy/vagrant/Vagrantfile
vendored
3
deploy/vagrant/Vagrantfile
vendored
@ -15,7 +15,8 @@ end
|
|||||||
Vagrant.configure('2') do |config|
|
Vagrant.configure('2') do |config|
|
||||||
|
|
||||||
config.vm.define :provisioner do |provisioner|
|
config.vm.define :provisioner do |provisioner|
|
||||||
provisioner.vm.box = 'generic/ubuntu1804'
|
provisioner.vm.box = "tinkerbelloss/sandbox-ubuntu1804"
|
||||||
|
provisioner.vm.box_version = "0.1.0"
|
||||||
provisioner.vm.hostname = 'provisioner'
|
provisioner.vm.hostname = 'provisioner'
|
||||||
provisioner.vm.synced_folder './../../', '/vagrant'
|
provisioner.vm.synced_folder './../../', '/vagrant'
|
||||||
provisioner.vm.provision :shell, path: './scripts/tinkerbell.sh'
|
provisioner.vm.provision :shell, path: './scripts/tinkerbell.sh'
|
||||||
|
1
deploy/vagrant/basebox/.gitignore
vendored
Normal file
1
deploy/vagrant/basebox/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
output*
|
30
deploy/vagrant/basebox/README.md
Normal file
30
deploy/vagrant/basebox/README.md
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
This directory contains a provisioning mechanism for the Vagrant boxes we ship
|
||||||
|
as part of Sandbox.
|
||||||
|
|
||||||
|
In order to self contain and distribute the required dependencies for Tinkerbell
|
||||||
|
and Sandbox without having to download all of them at runtime we decided to use
|
||||||
|
[Packer.io](https://packer.io) to build boxes that you can use when provisioning
|
||||||
|
Tinkerbell on Vagrant.
|
||||||
|
|
||||||
|
Currently the generated boxes are available via [Vagrant
|
||||||
|
Cloud](https://app.vagrantup.com/tinkerbelloss).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
To build the boxes checkout the right directory and run
|
||||||
|
|
||||||
|
```terminal
|
||||||
|
$ packer build --parallel-builds=1 ./template.json
|
||||||
|
```
|
||||||
|
|
||||||
|
`-parallel-builds=1` is required because the template builds images for multiple
|
||||||
|
providers using the [Vagrant
|
||||||
|
builder](https://www.packer.io/docs/builders/vagrant) and I didn't manage to get
|
||||||
|
it to work in parallel yet.
|
||||||
|
|
||||||
|
## Deploy to Vagrant Cloud
|
||||||
|
|
||||||
|
I didn't find a way to make the Vagrant Cloud post processor to work. But I use
|
||||||
|
the vagrant cli `vagrant cloud publish` command.
|
47
deploy/vagrant/basebox/ubuntu1804/provision.sh
Normal file
47
deploy/vagrant/basebox/ubuntu1804/provision.sh
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# abort this script on errors
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
|
setup_docker() (
|
||||||
|
# steps from https://docs.docker.com/engine/install/ubuntu/
|
||||||
|
sudo apt-get install -y \
|
||||||
|
apt-transport-https \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
gnupg-agent \
|
||||||
|
software-properties-common
|
||||||
|
|
||||||
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |
|
||||||
|
sudo apt-key add -
|
||||||
|
|
||||||
|
local repo
|
||||||
|
repo=$(
|
||||||
|
printf "deb [arch=amd64] https://download.docker.com/linux/ubuntu %s stable" \
|
||||||
|
"$(lsb_release -cs)"
|
||||||
|
)
|
||||||
|
sudo add-apt-repository "$repo"
|
||||||
|
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
|
||||||
|
)
|
||||||
|
|
||||||
|
setup_docker_compose() (
|
||||||
|
# from https://docs.docker.com/compose/install/
|
||||||
|
sudo curl -L \
|
||||||
|
"https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" \
|
||||||
|
-o /usr/local/bin/docker-compose
|
||||||
|
|
||||||
|
sudo chmod +x /usr/local/bin/docker-compose
|
||||||
|
)
|
||||||
|
|
||||||
|
main() (
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
sudo apt-get update
|
||||||
|
setup_docker
|
||||||
|
setup_docker_compose
|
||||||
|
sudo apt-get install -y jq
|
||||||
|
sudo usermod -aG docker vagrant
|
||||||
|
)
|
||||||
|
|
||||||
|
main
|
27
deploy/vagrant/basebox/ubuntu1804/template.json
Normal file
27
deploy/vagrant/basebox/ubuntu1804/template.json
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"builders": [
|
||||||
|
{
|
||||||
|
"communicator": "ssh",
|
||||||
|
"name": "vagrant-virtualbox",
|
||||||
|
"provider": "virtualbox",
|
||||||
|
"source_path": "generic/ubuntu1804",
|
||||||
|
"type": "vagrant"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"communicator": "ssh",
|
||||||
|
"name": "vagrant-libvirt",
|
||||||
|
"provider": "libvirt",
|
||||||
|
"source_path": "generic/ubuntu1804",
|
||||||
|
"type": "vagrant"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"provisioners": [
|
||||||
|
{
|
||||||
|
"script": "provision.sh",
|
||||||
|
"type": "shell"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"variables": {
|
||||||
|
"cloud_token": "{{ env `VAGRANT_CLOUD_TOKEN` }}"
|
||||||
|
}
|
||||||
|
}
|
@ -7,38 +7,6 @@ whoami
|
|||||||
|
|
||||||
cd /vagrant
|
cd /vagrant
|
||||||
|
|
||||||
setup_docker() (
|
|
||||||
# steps from https://docs.docker.com/engine/install/ubuntu/
|
|
||||||
sudo apt-get install -y \
|
|
||||||
apt-transport-https \
|
|
||||||
ca-certificates \
|
|
||||||
curl \
|
|
||||||
gnupg-agent \
|
|
||||||
software-properties-common
|
|
||||||
|
|
||||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |
|
|
||||||
sudo apt-key add -
|
|
||||||
|
|
||||||
local repo
|
|
||||||
repo=$(
|
|
||||||
printf "deb [arch=amd64] https://download.docker.com/linux/ubuntu %s stable" \
|
|
||||||
"$(lsb_release -cs)"
|
|
||||||
)
|
|
||||||
sudo add-apt-repository "$repo"
|
|
||||||
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
|
|
||||||
)
|
|
||||||
|
|
||||||
setup_docker_compose() (
|
|
||||||
# from https://docs.docker.com/compose/install/
|
|
||||||
sudo curl -L \
|
|
||||||
"https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" \
|
|
||||||
-o /usr/local/bin/docker-compose
|
|
||||||
|
|
||||||
sudo chmod +x /usr/local/bin/docker-compose
|
|
||||||
)
|
|
||||||
|
|
||||||
make_certs_writable() (
|
make_certs_writable() (
|
||||||
local certdir="/etc/docker/certs.d/$TINKERBELL_HOST_IP"
|
local certdir="/etc/docker/certs.d/$TINKERBELL_HOST_IP"
|
||||||
sudo mkdir -p "$certdir"
|
sudo mkdir -p "$certdir"
|
||||||
@ -50,13 +18,7 @@ secure_certs() (
|
|||||||
sudo chown "root" "$certdir"
|
sudo chown "root" "$certdir"
|
||||||
)
|
)
|
||||||
|
|
||||||
command_exists() (
|
|
||||||
command -v "$@" >/dev/null 2>&1
|
|
||||||
)
|
|
||||||
|
|
||||||
configure_vagrant_user() (
|
configure_vagrant_user() (
|
||||||
sudo usermod -aG docker vagrant
|
|
||||||
|
|
||||||
echo -n "$TINKERBELL_REGISTRY_PASSWORD" |
|
echo -n "$TINKERBELL_REGISTRY_PASSWORD" |
|
||||||
sudo -iu vagrant docker login \
|
sudo -iu vagrant docker login \
|
||||||
--username="$TINKERBELL_REGISTRY_USERNAME" \
|
--username="$TINKERBELL_REGISTRY_USERNAME" \
|
||||||
@ -72,20 +34,6 @@ setup_nat() (
|
|||||||
main() (
|
main() (
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
apt-get update
|
|
||||||
|
|
||||||
if ! command_exists docker; then
|
|
||||||
setup_docker
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! command_exists docker-compose; then
|
|
||||||
setup_docker_compose
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! command_exists jq; then
|
|
||||||
sudo apt-get install -y jq
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f ./.env ]; then
|
if [ ! -f ./.env ]; then
|
||||||
./generate-envrc.sh eth1 >.env
|
./generate-envrc.sh eth1 >.env
|
||||||
fi
|
fi
|
||||||
@ -98,9 +46,7 @@ main() (
|
|||||||
./setup.sh
|
./setup.sh
|
||||||
|
|
||||||
setup_nat
|
setup_nat
|
||||||
|
|
||||||
secure_certs
|
secure_certs
|
||||||
|
|
||||||
configure_vagrant_user
|
configure_vagrant_user
|
||||||
|
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user