6b841fee7c
Only 2 main Vagrant calls are now needed (`vagrant up` and `vagrant up machine1`). This PR only updates the Vagrant Virtualbox setup. The Vagrant Libvirt and Terraform still need to be updated. This uses docker-compose as the entry point for standing up the stack and makes the stand-up of the sandbox more portal. Vagrant and Terraform are only responsible for standing up infrastructure and then running docker-compose, not for running any glue scripts. The docker-compose calls out to single-shot services to do all the glue required to get the fully functional Tinkerbell stack up and running. All the single-shot services are idempotent. This increases portability and the development iteration loop. This also simplifies the required steps needed to get a fully functioning sandbox up and running. This is intended to help people looking to get started by getting them to a provisioned machine quicker and more easily. Signed-off-by: Jacob Weinstock <jakobweinstock@gmail.com>
16 KiB
16 KiB
Quick start guide for Vagrant and VirtualBox
This option will stand up the provisioner in Virtualbox using Vagrant. This option will also show you how to create a machine to provision.
Prerequisites
- Vagrant is installed
- VirtualBox is installed
Steps
-
Clone this repository
git clone https://github.com/tinkerbell/sandbox.git cd sandbox
-
Start the provisioner
cd deploy/vagrant vagrant up # This process will take about 5-10 minutes depending on your internet connection. # OSIE is about 2GB in size and the Ubuntu Focal image is about 500MB
expected output
Bringing machine 'provisioner' up with 'virtualbox' provider... ==> provisioner: Importing base box 'generic/ubuntu2004'... ==> provisioner: Matching MAC address for NAT networking... ==> provisioner: Checking if box 'generic/ubuntu2004' version '3.2.24' is up to date... ==> provisioner: Setting the name of the VM: vagrant_provisioner_1626366679197_92753 ==> provisioner: Clearing any previously set network interfaces... ==> provisioner: Preparing network interfaces based on configuration... provisioner: Adapter 1: nat provisioner: Adapter 2: hostonly ==> provisioner: Forwarding ports... provisioner: 22 (guest) => 2222 (host) (adapter 1) ==> provisioner: Running 'pre-boot' VM customizations... ==> provisioner: Booting VM... ==> provisioner: Waiting for machine to boot. This may take a few minutes... provisioner: SSH address: 127.0.0.1:2222 provisioner: SSH username: vagrant provisioner: SSH auth method: private key provisioner: provisioner: Vagrant insecure key detected. Vagrant will automatically replace provisioner: this with a newly generated keypair for better security. provisioner: provisioner: Inserting generated public key within guest... provisioner: Removing insecure key from the guest if it's present... provisioner: Key inserted! Disconnecting and reconnecting using new SSH key... ==> provisioner: Machine booted and ready! ==> provisioner: Checking for guest additions in VM... ==> provisioner: Configuring and enabling network interfaces... ==> provisioner: Mounting shared folders... provisioner: /vagrant => /Users/jacobweinstock/tmp/sandbox/deploy ==> provisioner: Running provisioner: docker... provisioner: Installing Docker onto machine... ==> provisioner: Running provisioner: docker_compose... provisioner: Checking for Docker Compose installation... provisioner: Getting machine and kernel name from guest machine... provisioner: Downloading Docker Compose 1.29.1 for Linux x86_64 provisioner: Downloaded Docker Compose 1.29.1 has SHA256 signature 8097769d32e34314125847333593c8edb0dfc4a5b350e4839bef8c2fe8d09de7 provisioner: Uploading Docker Compose 1.29.1 to guest machine... provisioner: Installing Docker Compose 1.29.1 in guest machine... provisioner: Symlinking Docker Compose 1.29.1 in guest machine... provisioner: Running docker-compose up... ==> provisioner: Creating network "vagrant_default" with the default driver ==> provisioner: Creating volume "vagrant_postgres_data" with default driver ==> provisioner: Creating volume "vagrant_certs" with default driver ==> provisioner: Creating volume "vagrant_auth" with default driver ==> provisioner: Pulling tls-gen (cfssl/cfssl:)... provisioner: latest: Pulling from cfssl/cfssl provisioner: Digest: sha256:c21e852f3904e2ba77960e9cba23c69d9231467795a8a160ce1d848e621381ea provisioner: Status: Downloaded newer image for cfssl/cfssl:latest ==> provisioner: Pulling registry-auth (httpd:2)... provisioner: 2: Pulling from library/httpd provisioner: Digest: sha256:1fd07d599a519b594b756d2e4e43a72edf7e30542ce646f5eb3328cf3b12341a provisioner: Status: Downloaded newer image for httpd:2 ==> provisioner: Pulling osie-work (alpine:)... provisioner: latest: Pulling from library/alpine provisioner: Digest: sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0 provisioner: Status: Downloaded newer image for alpine:latest ==> provisioner: Pulling ubuntu-image-setup (ubuntu:)... provisioner: latest: Pulling from library/ubuntu provisioner: Digest: sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2 provisioner: Status: Downloaded newer image for ubuntu:latest ==> provisioner: Pulling db (postgres:10-alpine)... provisioner: 10-alpine: Pulling from library/postgres provisioner: Digest: sha256:0eef1c94e0c4b0c4b84437785d0c5926f62b7f537627d97cf9ebcd7b205bc9aa provisioner: Status: Downloaded newer image for postgres:10-alpine ==> provisioner: Pulling tink-server-migration (quay.io/tinkerbell/tink:sha-8ea8a0e5)... provisioner: sha-8ea8a0e5: Pulling from tinkerbell/tink provisioner: Digest: sha256:84fc83f8562901d0b27e7ebb453a7f27e5797d17fb0b6899f92002df840fbf21 provisioner: Status: Downloaded newer image for quay.io/tinkerbell/tink:sha-8ea8a0e5 ==> provisioner: Pulling create-tink-records (quay.io/tinkerbell/tink-cli:sha-8ea8a0e5)... provisioner: sha-8ea8a0e5: Pulling from tinkerbell/tink-cli provisioner: Digest: sha256:0fc5441e9ef6e94eff7bf1ae9cf9a15a98581c742890d2d7130fd9542b12802d provisioner: Status: Downloaded newer image for quay.io/tinkerbell/tink-cli:sha-8ea8a0e5 ==> provisioner: Pulling registry (registry:2.7.1)... provisioner: 2.7.1: Pulling from library/registry provisioner: Digest: sha256:aba2bfe9f0cff1ac0618ec4a54bfefb2e685bbac67c8ebaf3b6405929b3e616f provisioner: Status: Downloaded newer image for registry:2.7.1 ==> provisioner: Pulling images-to-local-registry (quay.io/containers/skopeo:latest)... provisioner: latest: Pulling from containers/skopeo provisioner: Digest: sha256:f7bfc49ffc4331ce7ab6ff51b0883bc39115cd1028fe1606a6fc9d4351df3673 provisioner: Status: Downloaded newer image for quay.io/containers/skopeo:latest ==> provisioner: Pulling boots (quay.io/tinkerbell/boots:sha-cb0290f8)... provisioner: sha-cb0290f8: Pulling from tinkerbell/boots provisioner: Digest: sha256:8e106bf73122d08ce9ef75f5cae4be77ecff38c2b55cb44541caabf94d325de9 provisioner: Status: Downloaded newer image for quay.io/tinkerbell/boots:sha-cb0290f8 ==> provisioner: Pulling osie-bootloader (nginx:alpine)... provisioner: alpine: Pulling from library/nginx provisioner: Digest: sha256:91528597e842ab1b3b25567191fa7d4e211cb3cc332071fa031cfed2b5892f9e provisioner: Status: Downloaded newer image for nginx:alpine ==> provisioner: Pulling hegel (quay.io/tinkerbell/hegel:sha-9f5da0a8)... provisioner: sha-9f5da0a8: Pulling from tinkerbell/hegel provisioner: Digest: sha256:9d3c6d5e4bc957cedafbeec22da4f59d94c78b65d84adbd0c8f947c51cf3668b provisioner: Status: Downloaded newer image for quay.io/tinkerbell/hegel:sha-9f5da0a8 ==> provisioner: Creating vagrant_db_1 ... ==> provisioner: Creating vagrant_osie-bootloader_1 ... ==> provisioner: Creating vagrant_ubuntu-image-setup_1 ... ==> provisioner: Creating vagrant_tls-gen_1 ... ==> provisioner: Creating vagrant_registry-auth_1 ... ==> provisioner: Creating vagrant_osie-work_1 ... ==> provisioner: Creating vagrant_tls-gen_1 ... done ==> provisioner: Creating vagrant_ubuntu-image-setup_1 ... done ==> provisioner: Creating vagrant_osie-bootloader_1 ... done ==> provisioner: Creating vagrant_registry-auth_1 ... done ==> provisioner: Creating vagrant_db_1 ... done ==> provisioner: Creating vagrant_osie-work_1 ... done ==> provisioner: Creating vagrant_registry_1 ... ==> provisioner: Creating vagrant_registry_1 ... done ==> provisioner: Creating vagrant_tink-server-migration_1 ... ==> provisioner: Creating vagrant_tink-server-migration_1 ... done ==> provisioner: Creating vagrant_tink-server_1 ... ==> provisioner: Creating vagrant_tink-server_1 ... done ==> provisioner: Creating vagrant_images-to-local-registry_1 ... ==> provisioner: Creating vagrant_images-to-local-registry_1 ... done ==> provisioner: Creating vagrant_registry-ca-crt-download_1 ... ==> provisioner: Creating vagrant_create-tink-records_1 ... ==> provisioner: Creating vagrant_boots_1 ... ==> provisioner: Creating vagrant_tink-cli_1 ... ==> provisioner: Creating vagrant_hegel_1 ... ==> provisioner: Creating vagrant_boots_1 ... done ==> provisioner: Creating vagrant_create-tink-records_1 ... done ==> provisioner: Creating vagrant_tink-cli_1 ... done ==> provisioner: Creating vagrant_registry-ca-crt-download_1 ... done ==> provisioner: Creating vagrant_hegel_1 ... done ==> provisioner: Creating vagrant_wait-for-osie-and-ubuntu-downloads_1 ... ==> provisioner: Creating vagrant_wait-for-osie-and-ubuntu-downloads_1 ... done
-
Start the machine to be provisioned
vagrant up machine1 # This will start a VM to pxe boot. A GUI window of this machines console will be opened. # The `vagrant up machine1` command will exit quickly and show the following error message. This is expected. # Once the command line control is returned to you, you can move on to the next step.
expected output
Bringing machine 'machine1' up with 'virtualbox' provider... ==> machine1: Importing base box 'jtyr/pxe'... ==> machine1: Matching MAC address for NAT networking... ==> machine1: Checking if box 'jtyr/pxe' version '2' is up to date... ==> machine1: Setting the name of the VM: vagrant_machine1_1626365105119_9800 ==> machine1: Fixed port collision for 22 => 2222. Now on port 2200. ==> machine1: Clearing any previously set network interfaces... ==> machine1: Preparing network interfaces based on configuration... machine1: Adapter 1: hostonly ==> machine1: Forwarding ports... machine1: 22 (guest) => 2200 (host) (adapter 1) machine1: VirtualBox adapter #1 not configured as "NAT". Skipping port machine1: forwards on this adapter. ==> machine1: Running 'pre-boot' VM customizations... ==> machine1: Booting VM... ==> machine1: Waiting for machine to boot. This may take a few minutes... machine1: SSH address: 127.0.0.1:22 machine1: SSH username: vagrant machine1: SSH auth method: private key machine1: Warning: Authentication failure. Retrying... Timed out while waiting for the machine to boot. This means that Vagrant was unable to communicate with the guest machine within the configured ("config.vm.boot_timeout" value) time period. If you look above, you should be able to see the error(s) that Vagrant had when attempting to connect to the machine. These errors are usually good hints as to what may be wrong. If you're using a custom box, make sure that networking is properly working and you're able to connect to the machine. It is a common problem that networking isn't setup properly in these boxes. Verify that authentication configurations are also setup properly, as well. If the box appears to be booting properly, you may want to increase the timeout ("config.vm.boot_timeout") value.
-
Watch the provision complete
# log in to the provisioner vagrant ssh provisioner # watch the workflow events and status for workflow completion # once the workflow is complete (see the expected output below for completion), move on to the next step wid=$(cat /vagrant/compose/manifests/workflow/workflow_id.txt); docker exec -it vagrant_tink-cli_1 watch "tink workflow events ${wid}; tink workflow state ${wid}"
expected output
+--------------------------------------+-----------------+---------------------+----------------+---------------------------------+---------------+ | WORKER ID | TASK NAME | ACTION NAME | EXECUTION TIME | MESSAGE | ACTION STATUS | +--------------------------------------+-----------------+---------------------+----------------+---------------------------------+---------------+ | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | stream-ubuntu-image | 0 | Started execution | STATE_RUNNING | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | stream-ubuntu-image | 15 | finished execution successfully | STATE_SUCCESS | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | install-openssl | 0 | Started execution | STATE_RUNNING | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | install-openssl | 1 | finished execution successfully | STATE_SUCCESS | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | create-user | 0 | Started execution | STATE_RUNNING | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | create-user | 0 | finished execution successfully | STATE_SUCCESS | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | enable-ssh | 0 | Started execution | STATE_RUNNING | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | enable-ssh | 0 | finished execution successfully | STATE_SUCCESS | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | disable-apparmor | 0 | Started execution | STATE_RUNNING | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | disable-apparmor | 0 | finished execution successfully | STATE_SUCCESS | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | write-netplan | 0 | Started execution | STATE_RUNNING | | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | os-installation | write-netplan | 0 | finished execution successfully | STATE_SUCCESS | +--------------------------------------+-----------------+---------------------+----------------+---------------------------------+---------------+ +----------------------+--------------------------------------+ | FIELD NAME | VALUES | +----------------------+--------------------------------------+ | Workflow ID | 3107919b-e59d-11eb-bf99-0242ac120005 | | Workflow Progress | 100% | | Current Task | os-installation | | Current Action | write-netplan | | Current Worker | 0eba0bf8-3772-4b4a-ab9f-6ebe93b90a94 | | Current Action State | STATE_SUCCESS | +----------------------+--------------------------------------+
-
Reboot the machine
# crtl-c to exit the watch # exit the provisioner vagrant@ubuntu2004:~$ exit # restart machine1 # the output will be the same as step 3, once the command line control is returned to you, you can move on to the next step. vagrant reload machine1
-
Login to the machine
The machine has been provisioned with Ubuntu Focal. You can now SSH into the machine.
vagrant ssh provisioner ssh tink@192.168.50.43 # user/pass => tink/tink