diff --git a/.envrc b/.envrc deleted file mode 100644 index 0fc3eabb..00000000 --- a/.envrc +++ /dev/null @@ -1,2 +0,0 @@ -has nix && use nix -dotenv_if_exists diff --git a/.github/workflows/ci-non-go.sh b/.github/workflows/ci-non-go.sh index 3d0cdca0..40d3d472 100755 --- a/.github/workflows/ci-non-go.sh +++ b/.github/workflows/ci-non-go.sh @@ -18,15 +18,7 @@ if ! shfmt -f . | xargs shfmt -s -l -d; then failed=1 fi -if ! make lint; then - failed=1 -fi - -if ! terraform fmt -write -recursive deploy/infrastructure/terraform/; then - failed=1 -fi - -if ! rufo deploy/infrastructure/vagrant/Vagrantfile; then +if ! rufo vagrant/Vagrantfile; then failed=1 fi diff --git a/.github/workflows/vagrant-packet.yaml b/.github/workflows/vagrant-packet.yaml deleted file mode 100644 index 403878e2..00000000 --- a/.github/workflows/vagrant-packet.yaml +++ /dev/null @@ -1,23 +0,0 @@ -name: Setup with Vagrant on Packet -on: - push: - pull_request: - types: [labeled] - -jobs: - vagrant-setup: - if: contains(github.event.pull_request.labels.*.name, 'ci-check/vagrant-setup') - runs-on: vagrant - env: - TEST_WITH_VAGRANT: "yes" - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Cleanup state directory - run: | - rm -rf ./deploy/state - - name: Vagrant Test - run: | - export VAGRANT_DEFAULT_PROVIDER="virtualbox" - cd ./test/vagrant - go test --timeout 1h -v ./ diff --git a/.gitignore b/.gitignore index c215dfc8..997ca2f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,24 +1 @@ -# hidden files/dirs -.* -!deploy/infrastructure/vagrant/.env -!deploy/infrastructure/terraform/.env -!deploy/stack/compose/.env -!.gitignore -!.github/ - -# Local .terraform directories -.terraform* -!.terraform.lock.hcl - -# .tfstate files -*.tfstate -*.tfstate.* - -compose.tar.gz -compose.zip -deploy/stack/compose/manifests/manifests.yaml -deploy/stack/compose/state/* -!deploy/stack/compose/state/.keep -envrc -out -workflow_id.txt +.vagrant \ No newline at end of file diff --git a/.golangci.yml b/.golangci.yml deleted file mode 100755 index e21d2ddc..00000000 --- a/.golangci.yml +++ /dev/null @@ -1,196 +0,0 @@ -# NOTE: This file is populated by the lint-install tool. Local adjustments may be overwritten. -linters-settings: - cyclop: - # NOTE: This is a very high transitional threshold - max-complexity: 37 - package-average: 34.0 - skip-tests: true - - gocognit: - # NOTE: This is a very high transitional threshold - min-complexity: 98 - - dupl: - threshold: 200 - - goconst: - min-len: 4 - min-occurrences: 5 - ignore-tests: true - - errorlint: - # these are still common in Go: for instance, exit errors. - asserts: false - - exhaustive: - default-signifies-exhaustive: true - - nestif: - min-complexity: 8 - - nolintlint: - require-explanation: true - allow-unused: false - require-specific: true - - revive: - ignore-generated-header: true - severity: warning - rules: - - name: atomic - - name: blank-imports - - name: bool-literal-in-expr - - name: confusing-naming - - name: constant-logical-expr - - name: context-as-argument - - name: context-keys-type - - name: deep-exit - - name: defer - - name: range-val-in-closure - - name: range-val-address - - name: dot-imports - - name: error-naming - - name: error-return - - name: error-strings - - name: errorf - - name: exported - - name: identical-branches - - name: if-return - - name: import-shadowing - - name: increment-decrement - - name: indent-error-flow - - name: indent-error-flow - - name: package-comments - - name: range - - name: receiver-naming - - name: redefines-builtin-id - - name: superfluous-else - - name: struct-tag - - name: time-naming - - name: unexported-naming - - name: unexported-return - - name: unnecessary-stmt - - name: unreachable-code - - name: unused-parameter - - name: var-declaration - - name: var-naming - - name: unconditional-recursion - - name: waitgroup-by-value - - staticcheck: - go: "1.16" - - unused: - go: "1.16" - -output: - sort-results: true - -linters: - disable-all: true - enable: - - asciicheck - - bodyclose - - cyclop - - deadcode - - dogsled - - dupl - - durationcheck - - errcheck - # errname is only available in golangci-lint v1.42.0+ - wait until v1.43 is available to settle - #- errname - - errorlint - - exhaustive - - exportloopref - - forcetypeassert - - gocognit - - goconst - - gocritic - - godot - - gofmt - - goheader - - goimports - - goprintffuncname - - gosimple - - govet - - ifshort - - importas - - ineffassign - - makezero - - misspell - - nakedret - - nestif - - nilerr - - noctx - - nolintlint - - predeclared - # disabling for the initial iteration of the linting tool - #- promlinter - - revive - - rowserrcheck - - sqlclosecheck - - staticcheck - - structcheck - - stylecheck - - thelper - - tparallel - - typecheck - - unconvert - - unparam - - unused - - varcheck - - wastedassign - - whitespace - - # Disabled linters, due to being misaligned with Go practices - # - exhaustivestruct - # - gochecknoglobals - # - gochecknoinits - # - goconst - # - godox - # - goerr113 - # - gomnd - # - lll - # - nlreturn - # - testpackage - # - wsl - # Disabled linters, due to not being relevant to our code base: - # - maligned - # - prealloc "For most programs usage of prealloc will be a premature optimization." - # Disabled linters due to bad error messages or bugs - # - gofumpt - # - gosec - # - tagliatelle - -issues: - # Excluding configuration per-path, per-linter, per-text and per-source - exclude-rules: - - path: _test\.go - linters: - - gocyclo - - errcheck - - dupl - - gosec - - - path: cmd.* - linters: - - noctx - - - path: main\.go - linters: - - noctx - - - path: cmd.* - text: "deep-exit" - - - path: main\.go - text: "deep-exit" - - # This check is of questionable value - - linters: - - tparallel - text: "call t.Parallel on the top level as well as its subtests" - - # Don't hide lint issues just because there are many of them - max-same-issues: 0 - max-issues-per-linter: 0 diff --git a/Makefile b/Makefile deleted file mode 100755 index fc9d0bab..00000000 --- a/Makefile +++ /dev/null @@ -1,36 +0,0 @@ - -# BEGIN: lint-install ../sandbox -# http://github.com/tinkerbell/lint-install - -GOLINT_VERSION ?= v1.42.0 - -SHELLCHECK_VERSION ?= v0.7.2 -LINT_OS := $(shell uname) -LINT_ARCH := $(shell uname -m) -LINT_ROOT := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) - -# shellcheck and hadolint lack arm64 native binaries: rely on x86-64 emulation -ifeq ($(LINT_OS),Darwin) - ifeq ($(LINT_ARCH),arm64) - LINT_ARCH=x86_64 - endif -endif - -LINT_LOWER_OS = $(shell echo $(LINT_OS) | tr '[:upper:]' '[:lower:]') -GOLINT_CONFIG:=$(LINT_ROOT)/.golangci.yml - -lint: out/linters/shellcheck-$(SHELLCHECK_VERSION)-$(LINT_ARCH)/shellcheck out/linters/golangci-lint-$(GOLINT_VERSION)-$(LINT_ARCH) - find . -name go.mod | xargs -n1 dirname | xargs -n1 -I{} sh -c "cd {} && $(LINT_ROOT)/out/linters/golangci-lint-$(GOLINT_VERSION)-$(LINT_ARCH) run -c $(GOLINT_CONFIG)" - out/linters/shellcheck-$(SHELLCHECK_VERSION)-$(LINT_ARCH)/shellcheck $(shell find . -name "*.sh") - -out/linters/shellcheck-$(SHELLCHECK_VERSION)-$(LINT_ARCH)/shellcheck: - mkdir -p out/linters - curl -sSfL https://github.com/koalaman/shellcheck/releases/download/$(SHELLCHECK_VERSION)/shellcheck-$(SHELLCHECK_VERSION).$(LINT_LOWER_OS).$(LINT_ARCH).tar.xz | tar -C out/linters -xJf - - mv out/linters/shellcheck-$(SHELLCHECK_VERSION) out/linters/shellcheck-$(SHELLCHECK_VERSION)-$(LINT_ARCH) - -out/linters/golangci-lint-$(GOLINT_VERSION)-$(LINT_ARCH): - mkdir -p out/linters - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b out/linters $(GOLINT_VERSION) - mv out/linters/golangci-lint out/linters/golangci-lint-$(GOLINT_VERSION)-$(LINT_ARCH) - -# END: lint-install ../sandbox diff --git a/README.md b/README.md index fdf72b60..36c4d055 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ -# Quick-Starts +# Playground + +The playground is an example deployment of the Tinkerbell stack for use in learning and testing. It is not a production reference architecture. +Please use the [Helm chart](https://github.com/tinkerbell/charts) for production deployments. + +## Quick-Starts The following quick-start guides will walk you through standing up the Tinkerbell stack. There are a few options for this. @@ -8,35 +13,28 @@ Pick the one that works best for you. - [Vagrant and VirtualBox](docs/quickstarts/VAGRANTVBOX.md) - [Vagrant and Libvirt](docs/quickstarts/VAGRANTLVIRT.md) -- [Docker Compose](docs/quickstarts/COMPOSE.md) -- [Terraform and Equinix Metal](docs/quickstarts/TERRAFORMEM.md) - [Kubernetes](docs/quickstarts/KUBERNETES.md) -- [Multipass](docs/quickstarts/MULTIPASS.md) ## Next Steps -Now that you have a Tinkerbell stack up and running, you can start provisioning machines. -Tinkerbell.org has a [list of guides](https://docs.tinkerbell.org/deploying-operating-systems/the-deployment/) for provisioning machines. -You can also create your own. -The following docs will help you get started. +By default the Vagrant quickstart guides automatically install Ubuntu on the VM (machine1). You can provide your own OS template. To do this: -1. [Example Hardware object](https://github.com/tinkerbell/tink/tree/main/config/crd/examples/hardware.yaml) -2. [Example Template object](https://github.com/tinkerbell/tink/tree/main/config/crd/examples/template.yaml) - - Template [documentation](https://docs.tinkerbell.org/templates/) -3. [Example Workflow object](https://github.com/tinkerbell/tink/tree/main/config/crd/examples/workflow.yaml) +1. Login to the stack VM -### In the Sandbox + ```bash + vagrant ssh stack + ``` -1. Add your templates +1. Add your template. An example Template object can be found [here](https://github.com/tinkerbell/tink/tree/main/config/crd/examples/template.yaml) and more Template documentation can be found [here](https://docs.tinkerbell.org/templates/). ```bash - kubectl apply -f my-custom-template.yaml + kubectl apply -f my-OS-template.yaml ``` -2. Create the workflow +1. Create the workflow. An example Workflow object can be found [here](https://github.com/tinkerbell/tink/tree/main/config/crd/examples/workflow.yaml). ```bash kubectl apply -f my-custom-workflow.yaml ``` -3. Restart the machine to provision (if using the vagrant sandbox test machine this is done by running `vagrant destroy -f machine1 && vagrant up machine1`) +1. Restart the machine to provision (if using the vagrant sandbox test machine this is done by running `vagrant destroy -f machine1 && vagrant up machine1`) diff --git a/deploy/infrastructure/terraform/.env b/deploy/infrastructure/terraform/.env deleted file mode 100644 index 4b40c976..00000000 --- a/deploy/infrastructure/terraform/.env +++ /dev/null @@ -1,35 +0,0 @@ -# Can be set to your own hook builds -vOSIE=v0.8.0 -OSIE_DOWNLOAD_URLS=https://github.com/tinkerbell/hook/releases/download/${vOSIE}/hook_x86_64.tar.gz,https://github.com/tinkerbell/hook/releases/download/${vOSIE}/hook_aarch64.tar.gz - -# This is the IP and MAC of the machine to be provisioned -# The IP should normally be in the same network as the IP used for the provisioner -TINKERBELL_CLIENT_IP=192.168.56.43 -TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a - -# These are the Gateway and DNS addresses the client should use, required for tink-worker to pull action images -TINKERBELL_CLIENT_GW=192.168.56.4 -TINKERBELL_CLIENT_NAMESERVER_1=1.1.1.1 -TINKERBELL_CLIENT_NAMESERVER_2=8.8.8.8 - -# This should be an IP that's on an interface where you will be provisioning machines -TINKERBELL_HOST_IP=192.168.56.4 - -# Images used by docker compose natively or in terraform/vagrant, update if necessary -BOOTS_IMAGE=quay.io/tinkerbell/boots:v0.7.0 -HEGEL_IMAGE=quay.io/tinkerbell/hegel:v0.8.0 -TINK_VERSION=v0.8.0 -TINK_SERVER_IMAGE=quay.io/tinkerbell/tink:${TINK_VERSION} -TINK_CONTROLLER_IMAGE=quay.io/tinkerbell/tink-controller:${TINK_VERSION} -TINK_WORKER_IMAGE=quay.io/tinkerbell/tink-worker:${TINK_VERSION} -RUFIO_VERSION=v0.1.0 -RUFIO_IMAGE=quay.io/tinkerbell/rufio:${RUFIO_VERSION} -K3S_IMAGE=rancher/k3s:v1.24.4-k3s1 - -# This is the boot/primary disk device and the device for its first partition -# for the machine to be provisioned (as it would appear with lsblk) -DISK_DEVICE=/dev/sda -DISK_DEVICE_PARTITION_1=/dev/sda1 -# Example for a device with an NVME SSD -#DISK_DEVICE=/dev/nvme0n1 -#DISK_DEVICE_PARTITION_1=/dev/nvme0n1p1 diff --git a/deploy/infrastructure/terraform/.terraform.lock.hcl b/deploy/infrastructure/terraform/.terraform.lock.hcl deleted file mode 100644 index 60b41da8..00000000 --- a/deploy/infrastructure/terraform/.terraform.lock.hcl +++ /dev/null @@ -1,99 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/equinix/metal" { - version = "3.2.0" - constraints = "3.2.0" - hashes = [ - "h1:PIotyZNp3/sYe/Zk7yEgHygV5GOtHjAqXr4TJYdtETs=", - "zh:4a53b56d7cab5a75dca16c4a285438f13fe07a37c45967668dae8e4a70b78a85", - "zh:4fa88d43bd2370e420de6238f02f8ad668a0cd9e7f010a24a8bc0a76982ff3bc", - "zh:525b0f6d977437388b7ee7428bccd351e46af39a0883ce08f624b4dd173de8c2", - "zh:5c906ee75fbd1daa63dc40221015bfdcea7cec24ed7aa3687fcc18265556e379", - "zh:6153771a66d1f5058e977a686e706f3ced64cbcb7cd623a9adf7e8ed3f0d08d8", - "zh:79dd26afcc0846864ede59e79ae07fdf6cc084315cd9e50f4e09c700d9d8dfb4", - "zh:992e410067995537565f38ad9f93f4d66fabdc25a8303a1be418aefaf172daae", - "zh:9e52d2d008846cb6db8d0cd0aac7e1c6c635fc65c192b0217b2e673d165def0f", - "zh:c2ca5c36358c03c996d97b8baca6809675f54010c021d5704124bd3815660c86", - "zh:e2d4bfae4489142cfac31fb7939047226335c0fddf59c3544faeb1f3029a36d8", - "zh:e5c6727b6404beb3aa54bbc7eb3145bac29bab8135771f21754e093c178ee23f", - "zh:ecf34c7c8b3eb8cd61b381d8f26ec61b3d8b5d57a87fff97cb24331230286fef", - "zh:fcae7646861ccf3393828ac53d05487ba8547cf9f8a9da13553dcedf8dd2646e", - ] -} - -provider "registry.terraform.io/hashicorp/archive" { - version = "2.2.0" - hashes = [ - "h1:2K5LQkuWRS2YN1/YoNaHn9MAzjuTX8Gaqy6i8Mbfv8Y=", - "zh:06bd875932288f235c16e2237142b493c2c2b6aba0e82e8c85068332a8d2a29e", - "zh:0c681b481372afcaefddacc7ccdf1d3bb3a0c0d4678a526bc8b02d0c331479bc", - "zh:100fc5b3fc01ea463533d7bbfb01cb7113947a969a4ec12e27f5b2be49884d6c", - "zh:55c0d7ddddbd0a46d57c51fcfa9b91f14eed081a45101dbfc7fd9d2278aa1403", - "zh:73a5dd68379119167934c48afa1101b09abad2deb436cd5c446733e705869d6b", - "zh:841fc4ac6dc3479981330974d44ad2341deada8a5ff9e3b1b4510702dfbdbed9", - "zh:91be62c9b41edb137f7f835491183628d484e9d6efa82fcb75cfa538c92791c5", - "zh:acd5f442bd88d67eb948b18dc2ed421c6c3faee62d3a12200e442bfff0aa7d8b", - "zh:ad5720da5524641ad718a565694821be5f61f68f1c3c5d2cfa24426b8e774bef", - "zh:e63f12ea938520b3f83634fc29da28d92eed5cfbc5cc8ca08281a6a9c36cca65", - "zh:f6542918faa115df46474a36aabb4c3899650bea036b5f8a5e296be6f8f25767", - ] -} - -provider "registry.terraform.io/hashicorp/cloudinit" { - version = "2.2.0" - hashes = [ - "h1:siiI0wK6/jUDdA5P8ifTO0yc9YmXHml4hz5K9I9N+MA=", - "zh:76825122171f9ea2287fd27e23e80a7eb482f6491a4f41a096d77b666896ee96", - "zh:795a36dee548e30ca9c9d474af9ad6d29290e0a9816154ad38d55381cd0ab12d", - "zh:9200f02cb917fb99e44b40a68936fd60d338e4d30a718b7e2e48024a795a61b9", - "zh:a33cf255dc670c20678063aa84218e2c1b7a67d557f480d8ec0f68bc428ed472", - "zh:ba3c1b2cd0879286c1f531862c027ec04783ece81de67c9a3b97076f1ce7f58f", - "zh:bd575456394428a1a02191d2e46af0c00e41fd4f28cfe117d57b6aeb5154a0fb", - "zh:c68dd1db83d8437c36c92dc3fc11d71ced9def3483dd28c45f8640cfcd59de9a", - "zh:cbfe34a90852ed03cc074601527bb580a648127255c08589bc3ef4bf4f2e7e0c", - "zh:d6ffd7398c6d1f359b96f5b757e77b99b339fbb91df1b96ac974fe71bc87695c", - "zh:d9c15285f847d7a52df59e044184fb3ba1b7679fd0386291ed183782683d9517", - "zh:f7dd02f6d36844da23c9a27bb084503812c29c1aec4aba97237fec16860fdc8c", - ] -} - -provider "registry.terraform.io/hashicorp/null" { - version = "2.1.2" - constraints = "~> 2.1.2" - hashes = [ - "h1:l0/ASa/TB1exgqdi33sOkFakJL2zAQBu+q5LgO5/SxI=", - "zh:0cc7236c1fbf971b8bad1540a7d0c5ac4579248239fd1034c023b0b660a8d1d5", - "zh:16fc2d9b10cf9e5123bf956e7032c338cc93a03be1ca2e9f3d3b7014c0e866c7", - "zh:1e26465ff40ded59cef1a9e745752eef9744471e69094d12f8bc40a060e8cdb9", - "zh:3c7afd28076245f455d4348af6c124b73409722be4a73680d4e4709a4f25ea91", - "zh:4190a92567efaa444527f19b28d65fac1a01aeba907013b5dceacd9ba2a23709", - "zh:677963437316b088fc1aac70fe7d608d2917c46530c4a25ec86a43e9acaf2811", - "zh:69fe15f6b851ff82700bc749c50a9299770515617e677c18cba2cb697daaff36", - "zh:6b505cc60cc1494e1cab61590bca127b06dd894d0b2a7dcacd23862bce1f492b", - "zh:719aa11ad7be974085af595089478eb24d5a021bc7b08364fa6745d9eb473dac", - "zh:7375b02189e14efbfaab994cd05d81e3ff8e46041fae778598b3903114093a3e", - "zh:c406573b2084a08f8faa0451923fbeb1ca6c5a5598bf039589ec2db13aacc622", - "zh:fb11299a3b20711595713d126abbbe78c554eb5995b02db536e9253686798fb6", - ] -} - -provider "registry.terraform.io/hashicorp/template" { - version = "2.1.2" - constraints = "~> 2.1.2" - hashes = [ - "h1:a61DkglpoCGihJWQDBO0wJovPKXm9K6GLau2l+Q6EdA=", - "zh:149e4bf47ac21b67f6567767afcd29caaf0b0ca43714748093a00a2a98cd17a8", - "zh:2ff61a5eb7550e0df2baefccea78a8b621faef76154aad7ddf9c85c1d69f7ebf", - "zh:3b2d9a9f80754eb0a250a80e0dfdef385501697850a54ead744d1615e60fe648", - "zh:545b93c818035aac59f4a821644276c123a74aa210b1221974d832a6009df201", - "zh:5508512a522152a302591b399512fa736d8f57088c85ca74f7e00014db3a8c26", - "zh:701b56016a6db814ade171877375a2429b45979f97c2d112e4f2103f0433eb08", - "zh:90fc08165958538d8a099f17282c615d5b13f86bb215af33e2ca7551bf81996f", - "zh:affa6d409060c01a610854a395970d76701d0b07696e1ed6776b3f3b58014104", - "zh:b66ffed670bf0ed6714fa4ac26444a8e22f71ec6da134faf0b1f77fb2c13c666", - "zh:bb3d87db22f0ac56717eadde39690e3e27c1c01b10d0ecbe2e6e39f1e5c4d808", - "zh:c54b9693c9f348591432aabc808cbe1786bcda1cb70d312ef62a24545a14f945", - "zh:e7c8f8506cee5fa28f842714857d412a2b09e61127a0efe2a164c2f3d9bf2619", - ] -} diff --git a/deploy/infrastructure/terraform/cloud-config.cfg b/deploy/infrastructure/terraform/cloud-config.cfg deleted file mode 100644 index 519ef3b9..00000000 --- a/deploy/infrastructure/terraform/cloud-config.cfg +++ /dev/null @@ -1,22 +0,0 @@ -packages: -- unzip - -write_files: -- encoding: b64 - content: ${COMPOSE_ZIP} - path: /root/compose.zip - -- encoding: b64 - content: ${SETUPSH} - path: /root/setup.sh - owner: root:root - permissions: "0755" - -- encoding: b64 - content: ${ENVFILE} - path: /root/.env - owner: root:root - permissions: "0755" - -runcmd: -- /root/setup.sh ${WORKER_MAC} diff --git a/deploy/infrastructure/terraform/main.tf b/deploy/infrastructure/terraform/main.tf deleted file mode 100644 index 85539cb4..00000000 --- a/deploy/infrastructure/terraform/main.tf +++ /dev/null @@ -1,107 +0,0 @@ -# Configure the Equinix Metal Provider. -terraform { - required_providers { - metal = { - source = "equinix/metal" - version = "3.2.0" - } - null = { - source = "hashicorp/null" - version = "~> 2.1.2" - } - template = { - source = "hashicorp/template" - version = "~> 2.1.2" - } - } -} - -provider "metal" { - auth_token = var.metal_api_token -} - -# Create a new VLAN in datacenter -resource "metal_vlan" "provisioning_vlan" { - description = "provisioning_vlan" - metro = var.metro - project_id = var.project_id -} - -# Create a device and add it to tf_project_1 -resource "metal_device" "tink_worker" { - hostname = "tink-worker" - plan = var.device_type - metro = var.metro - operating_system = "custom_ipxe" - ipxe_script_url = "https://boot.netboot.xyz" - always_pxe = "true" - billing_cycle = "hourly" - project_id = var.project_id -} - -resource "metal_port" "tink_worker_bond0" { - port_id = [for p in metal_device.tink_worker.ports : p.id if p.name == "bond0"][0] - layer2 = true - bonded = false - # vlan_ids = [metal_vlan.provisioning_vlan.id] - # Can't do this: │ Error: vlan assignment batch could not be created: POST https://api.equinix.com/metal/v1/ports/b0bdf6d8-589e-4988-9000-9f49c97a54e1/vlan-assignments/batches: 422 Can't assign VLANs to port b0bdf6d8-589e-4988-9000-9f49c97a54e1, the port is configured for Layer 3 mode., Port b0bdf6d8-589e-4988-9000-9f49c97a54e1 cannot be assigned to VLANs., Bond disabled -} - -# Attach VLAN to worker -resource "metal_port" "tink_worker_eth0" { - depends_on = [metal_port.tink_worker_bond0] - port_id = [for p in metal_device.tink_worker.ports : p.id if p.name == "eth0"][0] - #layer2 = true - # TODO(displague) the terraform provider is not permitting this, perhaps a bug in the provider validation - # layer2 flag can be set only for bond ports - bonded = false - vlan_ids = [metal_vlan.provisioning_vlan.id] - // vxlan_ids = [1000] -} - -# Create a device and add it to tf_project_1 -resource "metal_device" "tink_provisioner" { - hostname = "tink-provisioner" - plan = var.device_type - metro = var.metro - operating_system = "ubuntu_20_04" - billing_cycle = "hourly" - project_id = var.project_id - user_data = data.cloudinit_config.setup.rendered -} - -# Provisioners eth1 (unbonded) is attached to the provisioning VLAN -resource "metal_port" "eth1" { - port_id = [for p in metal_device.tink_provisioner.ports : p.id if p.name == "eth1"][0] - bonded = false - vlan_ids = [metal_vlan.provisioning_vlan.id] -} - -data "archive_file" "compose" { - type = "zip" - source_dir = "${path.module}/../../stack/compose" - output_path = "${path.module}/compose.zip" -} - -locals { - compose_zip = data.archive_file.compose.output_size > 0 ? filebase64("${path.module}/compose.zip") : "" - worker_macs = flatten([for wp in metal_device.tink_worker[*].ports[*] : [for p in wp : p.mac if p.name == "eth0"]]) -} - -data "cloudinit_config" "setup" { - depends_on = [ - data.archive_file.compose, - ] - gzip = false # not supported on Equinix Metal - base64_encode = false # not supported on Equinix Metal - - part { - content_type = "text/cloud-config" - content = templatefile("${path.module}/cloud-config.cfg", { - COMPOSE_ZIP = local.compose_zip - SETUPSH = filebase64("${path.module}/setup.sh") - ENVFILE = filebase64("${path.module}/.env") - WORKER_MAC = local.worker_macs[0] - }) - } -} diff --git a/deploy/infrastructure/terraform/outputs.tf b/deploy/infrastructure/terraform/outputs.tf deleted file mode 100644 index d3e9e657..00000000 --- a/deploy/infrastructure/terraform/outputs.tf +++ /dev/null @@ -1,23 +0,0 @@ -output "provisioner_ip" { - value = metal_device.tink_provisioner.network[0].address -} - -output "provisioner_id" { - value = metal_device.tink_provisioner.id -} - -output "provisioner_ssh" { - value = format("%s.packethost.net", split("-", metal_device.tink_provisioner.id)[0]) -} - -output "worker_id" { - value = metal_device.tink_worker.id -} - -output "worker_macs" { - value = local.worker_macs -} - -output "worker_sos" { - value = format("%s@sos.%s.platformequinix.com", metal_device.tink_worker.id, metal_device.tink_worker.deployed_facility) -} diff --git a/deploy/infrastructure/terraform/setup.sh b/deploy/infrastructure/terraform/setup.sh deleted file mode 100755 index 8a399b60..00000000 --- a/deploy/infrastructure/terraform/setup.sh +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/env bash - -install_docker() { - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - - add-apt-repository "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" - update_apt - apt-get install --no-install-recommends containerd.io docker-ce docker-ce-cli -} - -install_docker_compose() { - apt-get install --no-install-recommends python3-pip - # Prevents the python X509_V_FLAG_CB_ISSUER_CHECK issue ref: https://stackoverflow.com/questions/73830524/attributeerror-module-lib-has-no-attribute-x509-v-flag-cb-issuer-check - rm -rf /usr/lib/python3/dist-packages/OpenSSL - pip3 install pyopenssl && pip install pyopenssl --upgrade - pip3 install docker-compose -} - -install_kubectl() { - curl -LO https://dl.k8s.io/v1.25.2/bin/linux/amd64/kubectl - chmod +x ./kubectl - mv ./kubectl /usr/local/bin/kubectl -} - -install_iptables_persistent() { - apt-get install --no-install-recommends iptables-persistent -} - -apt-get() { - DEBIAN_FRONTEND=noninteractive command apt-get \ - --allow-change-held-packages \ - --allow-downgrades \ - --allow-remove-essential \ - --allow-unauthenticated \ - --option Dpkg::Options::=--force-confdef \ - --option Dpkg::Options::=--force-confold \ - --yes \ - "$@" -} - -update_apt() { - apt-get update - apt-get upgrade -} - -# get_second_interface_from_bond0 returns the second interface of the bond0 interface -get_second_interface_from_bond0() { - local addr=$1 - - # if the ip is in a file in interfaces.d then lets assume this is a re-run and we can just - # return the basename of the file (which should be named same as the interface) - f=$(grep -lr "${addr}" /etc/network/interfaces.d) - [[ -n ${f-} ]] && basename "$f" && return - - # sometimes the interfaces aren't sorted as expected in the /slaves file - # - # seeing as how this function is named *second* I figured its best to be - # precise (via head -n2) when choosing the iface instead of choosing the last - # iface and hoping there are only 2 - tr ' ' '\n' "/etc/network/interfaces.d/${interface}" <<-EOF - auto ${interface} - iface ${interface} inet static - address ${addr} - EOF -} - -# make_host_gw_server makes the host a gateway server -make_host_gw_server() { - local incoming_interface=$1 - local outgoing_interface=$2 - - # drop all rules, especially interested in droppin docker's we don't want to persist docker's rules - # docker will re-create them when starting back up - systemctl stop docker - netfilter-persistent flush - - iptables -t nat -A POSTROUTING -o "${outgoing_interface}" -j MASQUERADE - iptables -A FORWARD -i "${outgoing_interface}" -o "${incoming_interface}" -m state --state RELATED,ESTABLISHED -j ACCEPT - iptables -A FORWARD -i "${incoming_interface}" -o "${outgoing_interface}" -j ACCEPT - - netfilter-persistent save - systemctl start docker -} - -extract_compose_files() { - mkdir -p /sandbox - unzip -o /root/compose.zip -d /sandbox/compose -} - -setup_compose_env_overrides() { - local worker_mac=$1 - sed -i "s/TINKERBELL_CLIENT_MAC=.*/TINKERBELL_CLIENT_MAC=$worker_mac/" /root/.env - cp /root/.env /sandbox/compose/.env -} - -tweak_bash_interactive_settings() { - grep -q 'cd /sandbox/compose' ~root/.bashrc || echo 'cd /sandbox/compose' >>~root/.bashrc - readarray -t aliases <<-EOF - dc=docker-compose - EOF - for alias in "${aliases[@]}"; do - grep -q "$alias" ~root/.bash_aliases || echo "alias $alias" >>~root/.bash_aliases - done -} - -main() { - worker_mac=$1 - layer2_ip=192.168.56.4 - - update_apt - install_docker - install_docker_compose - install_kubectl - install_iptables_persistent - - local layer2_interface - layer2_interface=$(get_second_interface_from_bond0 ${layer2_ip}) - setup_layer2_network "${layer2_interface}" ${layer2_ip} - make_host_gw_server "${layer2_interface}" bond0 - - extract_compose_files - setup_compose_env_overrides "$worker_mac" - docker-compose -f /sandbox/compose/docker-compose.yml up -d - - tweak_bash_interactive_settings -} - -if [[ ${BASH_SOURCE[0]} == "$0" ]]; then - set -euxo pipefail - - main "$@" - echo "all done!" -fi diff --git a/deploy/infrastructure/terraform/variables.tf b/deploy/infrastructure/terraform/variables.tf deleted file mode 100644 index a0b2bb5b..00000000 --- a/deploy/infrastructure/terraform/variables.tf +++ /dev/null @@ -1,33 +0,0 @@ -variable "metal_api_token" { - description = "Equinix Metal user api token" - type = string -} - -variable "project_id" { - description = "Project ID" - type = string -} - -variable "metro" { - description = "Equinix Metal metro to provision in" - type = string - default = "sv" -} - -variable "device_type" { - type = string - description = "Type of device to provision" - default = "c3.small.x86" -} - -variable "use_ssh_agent" { - type = bool - description = "Use ssh agent to connect to provisioner machine" - default = false -} - -variable "ssh_private_key" { - type = string - description = "ssh private key file to use" - default = "~/.ssh/id_rsa" -} diff --git a/deploy/infrastructure/terraform/versions.tf b/deploy/infrastructure/terraform/versions.tf deleted file mode 100644 index 6b6318de..00000000 --- a/deploy/infrastructure/terraform/versions.tf +++ /dev/null @@ -1,3 +0,0 @@ -terraform { - required_version = ">= 0.13" -} diff --git a/deploy/stack/compose/.env b/deploy/stack/compose/.env deleted file mode 100644 index 4b40c976..00000000 --- a/deploy/stack/compose/.env +++ /dev/null @@ -1,35 +0,0 @@ -# Can be set to your own hook builds -vOSIE=v0.8.0 -OSIE_DOWNLOAD_URLS=https://github.com/tinkerbell/hook/releases/download/${vOSIE}/hook_x86_64.tar.gz,https://github.com/tinkerbell/hook/releases/download/${vOSIE}/hook_aarch64.tar.gz - -# This is the IP and MAC of the machine to be provisioned -# The IP should normally be in the same network as the IP used for the provisioner -TINKERBELL_CLIENT_IP=192.168.56.43 -TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a - -# These are the Gateway and DNS addresses the client should use, required for tink-worker to pull action images -TINKERBELL_CLIENT_GW=192.168.56.4 -TINKERBELL_CLIENT_NAMESERVER_1=1.1.1.1 -TINKERBELL_CLIENT_NAMESERVER_2=8.8.8.8 - -# This should be an IP that's on an interface where you will be provisioning machines -TINKERBELL_HOST_IP=192.168.56.4 - -# Images used by docker compose natively or in terraform/vagrant, update if necessary -BOOTS_IMAGE=quay.io/tinkerbell/boots:v0.7.0 -HEGEL_IMAGE=quay.io/tinkerbell/hegel:v0.8.0 -TINK_VERSION=v0.8.0 -TINK_SERVER_IMAGE=quay.io/tinkerbell/tink:${TINK_VERSION} -TINK_CONTROLLER_IMAGE=quay.io/tinkerbell/tink-controller:${TINK_VERSION} -TINK_WORKER_IMAGE=quay.io/tinkerbell/tink-worker:${TINK_VERSION} -RUFIO_VERSION=v0.1.0 -RUFIO_IMAGE=quay.io/tinkerbell/rufio:${RUFIO_VERSION} -K3S_IMAGE=rancher/k3s:v1.24.4-k3s1 - -# This is the boot/primary disk device and the device for its first partition -# for the machine to be provisioned (as it would appear with lsblk) -DISK_DEVICE=/dev/sda -DISK_DEVICE_PARTITION_1=/dev/sda1 -# Example for a device with an NVME SSD -#DISK_DEVICE=/dev/nvme0n1 -#DISK_DEVICE_PARTITION_1=/dev/nvme0n1p1 diff --git a/deploy/stack/compose/docker-compose.yml b/deploy/stack/compose/docker-compose.yml deleted file mode 100644 index 51923f14..00000000 --- a/deploy/stack/compose/docker-compose.yml +++ /dev/null @@ -1,236 +0,0 @@ -version: "3" -services: - ##### Actual services first ##### - boots: - image: $BOOTS_IMAGE - command: -log-level DEBUG - network_mode: host - environment: - BOOTP_BIND: 0.0.0.0:67 - DATA_MODEL_VERSION: "kubernetes" - FACILITY_CODE: sandbox - HTTP_BIND: $TINKERBELL_HOST_IP:80 - MIRROR_BASE_URL: http://$TINKERBELL_HOST_IP:8080 - BOOTS_OSIE_PATH_OVERRIDE: http://$TINKERBELL_HOST_IP:8080 - PUBLIC_IP: $TINKERBELL_HOST_IP - SYSLOG_BIND: $TINKERBELL_HOST_IP:514 - TFTP_BIND: $TINKERBELL_HOST_IP:69 - TINKERBELL_GRPC_AUTHORITY: $TINKERBELL_HOST_IP:42113 - TINKERBELL_TLS: "false" - BOOTS_KUBECONFIG: /output/kubeconfig.yaml - BOOTS_EXTRA_KERNEL_ARGS: "tink_worker_image=$TINK_WORKER_IMAGE" - depends_on: - tink-crds-apply: - condition: service_completed_successfully - volumes: - - ./state/kube:/output - deploy: - resources: - limits: - cpus: "0.50" - memory: 512M - restart: always - - k3s: - image: $K3S_IMAGE - command: server --disable=traefik,servicelb,metrics-server,local-storage --tls-san=k3s - environment: - K3S_TOKEN: secret - K3S_KUBECONFIG_OUTPUT: /output/kubeconfig.yaml - K3S_KUBECONFIG_MODE: 666 - tmpfs: - - /run - - /var/run - ulimits: - nproc: 65535 - nofile: - soft: 65535 - hard: 65535 - privileged: true - volumes: - - k3s-server:/var/lib/rancher/k3s - - ./state/kube:/output - ports: - - 6443:6443 # Kubernetes API Server - - 8888:80 # Ingress controller port 80 - - 8443:443 # Ingress controller port 443 - healthcheck: - test: - - CMD-SHELL - - kubectl get --raw='/readyz?verbose' - interval: 1s - timeout: 1s - retries: 90 - deploy: - resources: - limits: - cpus: "0.50" - memory: 512M - restart: unless-stopped - - hegel: - image: $HEGEL_IMAGE - environment: - HEGEL_KUBECONFIG: /output/kubeconfig.yaml - HEGEL_KUBERNETES: "https://k3s:6443" - HEGEL_DATA_MODEL: kubernetes - depends_on: - tink-crds-apply: - condition: service_completed_successfully - volumes: - - ./state/kube:/output - ports: - - 50060:50060/tcp - - 50061:50061/tcp - deploy: - resources: - limits: - cpus: "0.50" - memory: 512M - restart: always - - tink-controller: - image: ${TINK_CONTROLLER_IMAGE} - environment: - KUBECONFIG: /output/kubeconfig.yaml - KUBERNETES: https://k3s:6443 - volumes: - - ./state/kube:/output - depends_on: - tink-crds-apply: - condition: service_completed_successfully - restart: always - - tink-server: - image: $TINK_SERVER_IMAGE - environment: - FACILITY: sandbox - BACKEND: "kubernetes" - TLS: "false" - KUBECONFIG: /output/kubeconfig.yaml - KUBERNETES: https://k3s:6443 - volumes: - - ./state/kube:/output - ports: - - 42113:42113/tcp - - 42114:42114/tcp - depends_on: - tink-crds-apply: - condition: service_completed_successfully - deploy: - resources: - limits: - cpus: "0.50" - memory: 512M - healthcheck: - # port needs to match TINKERBELL_HTTP_AUTHORITY - test: - - CMD-SHELL - - wget -qO- 127.0.0.1:42114/healthz - interval: 5s - timeout: 2s - retries: 30 - restart: always - - rufio: - image: $RUFIO_IMAGE - command: - ["--kubeconfig=/output/kubeconfig.yaml", "--kubernetes=https://k3s:6443"] - volumes: - - ./state/kube:/output - depends_on: - rufio-crds-apply: - condition: service_completed_successfully - restart: always - - web-assets-server: - image: nginx:alpine - tty: true - user: root - ports: - - 8080:80/tcp - volumes: - - ./state/boot:/usr/share/nginx/html/:ro - depends_on: - fetch-and-convert-ubuntu-img: - condition: service_completed_successfully - fetch-osie: - condition: service_completed_successfully - deploy: - resources: - limits: - cpus: "0.50" - memory: 512M - restart: unless-stopped - - ## "init" containers; they run until they accomplish their purpose and then exit - tink-crds-apply: - image: bitnami/kubectl:1.24.6 - command: -s "https://k3s:6443" apply -k 'github.com/tinkerbell/tink/config/crd?ref=${TINK_VERSION}' - environment: - KUBECONFIG: /output/kubeconfig.yaml - KUBERNETES_SERVICE_HOST: k3s - depends_on: - k3s: - condition: service_healthy - volumes: - - ./state/kube:/output - restart: on-failure - - rufio-crds-apply: - image: bitnami/kubectl:1.24.6 - command: -s "https://k3s:6443" apply -k 'github.com/tinkerbell/rufio/config/crd?ref=${RUFIO_VERSION}' - environment: - KUBECONFIG: /output/kubeconfig.yaml - KUBERNETES_SERVICE_HOST: k3s - depends_on: - k3s: - condition: service_healthy - volumes: - - ./state/kube:/output - restart: on-failure - - manifest-update: - image: bash:4.4 - command: -c " - apk add gettext; - for i in /manifests/{hardware.yaml,template.yaml,workflow.yaml}; do envsubst < $$i; echo -e '---'; done > /manifests/manifests.yaml;" - env_file: - - ./.env - volumes: - - ./manifests:/manifests - restart: on-failure - - manifest-apply: - image: bitnami/kubectl:1.24.6 - command: -s 'https://k3s:6443' apply -f /manifests/manifests.yaml - environment: - KUBECONFIG: /output/kubeconfig.yaml - KUBERNETES_SERVICE_HOST: k3s - depends_on: - tink-crds-apply: - condition: service_completed_successfully - manifest-update: - condition: service_completed_successfully - volumes: - - ./state/kube:/output - - ./manifests:/manifests - restart: on-failure - - fetch-osie: - image: bash:4.4 - command: /app/fetch.sh "$OSIE_DOWNLOAD_URLS" /workdir - volumes: - - ./scripts/fetch-osie.sh:/app/fetch.sh:ro - - ./state/boot:/workdir - - fetch-and-convert-ubuntu-img: - image: bash:4.4 - entrypoint: /app/fetch.sh - command: https://cloud-images.ubuntu.com/daily/server/focal/current/focal-server-cloudimg-amd64.img /destination - volumes: - - ./scripts/fetch-ubuntu.sh:/app/fetch.sh:ro - - ./state/boot:/destination - -volumes: - k3s-server: {} diff --git a/deploy/stack/compose/manifests/hardware.yaml b/deploy/stack/compose/manifests/hardware.yaml deleted file mode 100644 index f2fd3f99..00000000 --- a/deploy/stack/compose/manifests/hardware.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: "tinkerbell.org/v1alpha1" -kind: Hardware -metadata: - name: machine1 -spec: - disks: - - device: $DISK_DEVICE - metadata: - facility: - facility_code: sandbox - instance: - hostname: "machine1" - id: "$TINKERBELL_CLIENT_MAC" - operating_system: - distro: "ubuntu" - os_slug: "ubuntu_20_04" - version: "20.04" - interfaces: - - dhcp: - arch: x86_64 - hostname: machine1 - ip: - address: $TINKERBELL_CLIENT_IP - gateway: $TINKERBELL_CLIENT_GW - netmask: 255.255.255.0 - lease_time: 86400 - mac: $TINKERBELL_CLIENT_MAC - name_servers: - - $TINKERBELL_CLIENT_NAMESERVER_1 - - $TINKERBELL_CLIENT_NAMESERVER_2 - uefi: false - netboot: - allowPXE: true - allowWorkflow: true diff --git a/deploy/stack/compose/manifests/template.yaml b/deploy/stack/compose/manifests/template.yaml deleted file mode 100644 index 45655eae..00000000 --- a/deploy/stack/compose/manifests/template.yaml +++ /dev/null @@ -1,89 +0,0 @@ -apiVersion: "tinkerbell.org/v1alpha1" -kind: Template -metadata: - name: ubuntu-focal -spec: - data: | - version: "0.1" - name: ubuntu_Focal - global_timeout: 1800 - tasks: - - name: "os-installation" - worker: "{{.device_1}}" - volumes: - - /dev:/dev - - /dev/console:/dev/console - - /lib/firmware:/lib/firmware:ro - actions: - - name: "stream-ubuntu-image" - image: quay.io/tinkerbell-actions/image2disk:v1.0.0 - timeout: 600 - environment: - DEST_DISK: $DISK_DEVICE - IMG_URL: "http://$TINKERBELL_HOST_IP:8080/focal-server-cloudimg-amd64.raw.gz" - COMPRESSED: true - - name: "grow-partition" - image: quay.io/tinkerbell-actions/cexec:v1.0.0 - timeout: 90 - environment: - BLOCK_DEVICE: $DISK_DEVICE_PARTITION_1 - FS_TYPE: ext4 - CHROOT: y - DEFAULT_INTERPRETER: "/bin/sh -c" - CMD_LINE: "growpart $DISK_DEVICE 1 && resize2fs $DISK_DEVICE_PARTITION_1" - - name: "install-openssl" - image: quay.io/tinkerbell-actions/cexec:v1.0.0 - timeout: 90 - environment: - BLOCK_DEVICE: $DISK_DEVICE_PARTITION_1 - FS_TYPE: ext4 - CHROOT: y - DEFAULT_INTERPRETER: "/bin/sh -c" - CMD_LINE: "apt -y update && apt -y install openssl" - - name: "create-user" - image: quay.io/tinkerbell-actions/cexec:v1.0.0 - timeout: 90 - environment: - BLOCK_DEVICE: $DISK_DEVICE_PARTITION_1 - FS_TYPE: ext4 - CHROOT: y - DEFAULT_INTERPRETER: "/bin/sh -c" - CMD_LINE: "useradd -p $(openssl passwd -1 tink) -s /bin/bash -d /home/tink/ -m -G sudo tink" - - name: "enable-ssh" - image: quay.io/tinkerbell-actions/cexec:v1.0.0 - timeout: 90 - environment: - BLOCK_DEVICE: $DISK_DEVICE_PARTITION_1 - FS_TYPE: ext4 - CHROOT: y - DEFAULT_INTERPRETER: "/bin/sh -c" - CMD_LINE: "ssh-keygen -A; systemctl enable ssh.service; sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config" - - name: "disable-apparmor" - image: quay.io/tinkerbell-actions/cexec:v1.0.0 - timeout: 90 - environment: - BLOCK_DEVICE: $DISK_DEVICE_PARTITION_1 - FS_TYPE: ext4 - CHROOT: y - DEFAULT_INTERPRETER: "/bin/sh -c" - CMD_LINE: "systemctl disable apparmor; systemctl disable snapd" - - name: "write-netplan" - image: quay.io/tinkerbell-actions/writefile:v1.0.0 - timeout: 90 - environment: - DEST_DISK: $DISK_DEVICE_PARTITION_1 - FS_TYPE: ext4 - DEST_PATH: /etc/netplan/config.yaml - CONTENTS: | - network: - version: 2 - renderer: networkd - ethernets: - id0: - match: - name: en* - dhcp4: true - UID: 0 - GID: 0 - MODE: 0644 - DIRMODE: 0755 diff --git a/deploy/stack/compose/scripts/fetch-osie.sh b/deploy/stack/compose/scripts/fetch-osie.sh deleted file mode 100755 index 371b81b9..00000000 --- a/deploy/stack/compose/scripts/fetch-osie.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -# This script handles downloading, extracting, and copying/moving files in place -# for OSIE and Hook. For more info on OSIE and Hook, see: https://docs.tinkerbell.org/services/osie/ - -set -euxo pipefail - -# create an array using the urls variable, delimited by commas (IFS=,) -# store the array in the variable "urls" -IFS=, read -ra urls <<<"$1" -destdir=$2 - -for url in "${urls[@]}"; do - filename="$destdir/${url##*/}" - if [[ -f ${filename} ]]; then - echo "$filename already downloaded" - continue - fi - - echo "downloading $url" - wget "$url" -O "$filename.tmp" - echo "extracting files..." - tar -zxvf "$filename.tmp" -C "$destdir" - mv "$filename.tmp" "$filename" -done diff --git a/deploy/stack/compose/scripts/fetch-ubuntu.sh b/deploy/stack/compose/scripts/fetch-ubuntu.sh deleted file mode 100755 index 920e96cd..00000000 --- a/deploy/stack/compose/scripts/fetch-ubuntu.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash -# This script is designed to download a cloud image file (.img) and then convert it to a .raw.gz file. -# This is purpose built so non-raw cloud image files can be used with the "image2disk" action. -# See https://artifacthub.io/packages/tbaction/tinkerbell-community/image2disk. - -set -euxo pipefail - -image_url=$1 -file=$2/${image_url##*/} -file=${file%.*}.raw.gz - -if ! which pigz qemu-img &>/dev/null; then - apk add --update pigz qemu-img -fi - -if ! [[ -f $file ]]; then - wget "$image_url" -O image.img - qemu-img convert -O raw image.img image.raw - pigz "$file" - rm -f image.img image.raw -fi diff --git a/deploy/stack/compose/setup.sh b/deploy/stack/compose/setup.sh deleted file mode 100755 index f651dc28..00000000 --- a/deploy/stack/compose/setup.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env bash - -install_docker() { - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - - add-apt-repository --yes "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" - update_apt - apt-get install --no-install-recommends containerd.io docker-ce docker-ce-cli docker-compose-plugin - gpasswd -a vagrant docker -} - -install_kubectl() { - curl -LO https://dl.k8s.io/v1.25.2/bin/linux/amd64/kubectl - chmod +x ./kubectl - mv ./kubectl /usr/local/bin/kubectl -} - -apt-get() { - DEBIAN_FRONTEND=noninteractive command apt-get \ - --allow-change-held-packages \ - --allow-downgrades \ - --allow-remove-essential \ - --allow-unauthenticated \ - --option Dpkg::Options::=--force-confdef \ - --option Dpkg::Options::=--force-confold \ - --yes \ - "$@" -} - -update_apt() { - apt-get update -} - -create_tink_helper_script() { - local compose_dir=$1 - - mkdir -p ~vagrant/.local/bin - cat >~vagrant/.local/bin/tink <<-____HERE - #!/usr/bin/env bash - - exec docker compose -f $compose_dir/docker-compose.yml exec tink-cli tink "\$@" - ____HERE - chmod +x ~vagrant/.local/bin/tink -} - -tweak_bash_interactive_settings() { - local compose_dir=$1 - - grep -q "cd $compose_dir" ~vagrant/.bashrc || echo "cd $compose_dir" >>~vagrant/.bashrc - echo 'export KUBECONFIG='"$compose_dir"'/state/kube/kubeconfig.yaml' >>~vagrant/.bashrc - readarray -t aliases <<-EOF - dc="docker compose" - EOF - for alias in "${aliases[@]}"; do - grep -q "$alias" ~vagrant/.bash_aliases || echo "alias $alias" >>~vagrant/.bash_aliases - done -} - -main() { - update_apt - install_docker - install_kubectl - - local compose_dir="/sandbox/stack/compose" - docker compose -f "$compose_dir"/docker-compose.yml up -d - - create_tink_helper_script "$compose_dir" - tweak_bash_interactive_settings "$compose_dir" -} - -if [[ ${BASH_SOURCE[0]} == "$0" ]]; then - set -euxo pipefail - - main "$@" - echo "all done!" -fi diff --git a/deploy/stack/compose/state/.keep b/deploy/stack/compose/state/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/deploy/stack/helm/manifests/workflow.yaml b/deploy/stack/helm/manifests/workflow.yaml deleted file mode 100644 index 8cd9ec8d..00000000 --- a/deploy/stack/helm/manifests/workflow.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: "tinkerbell.org/v1alpha1" -kind: Workflow -metadata: - name: sandbox-workflow -spec: - templateRef: ubuntu-focal - hardwareRef: machine1 - hardwareMap: - device_1: $TINKERBELL_CLIENT_MAC diff --git a/docs/images/stack.jpeg b/docs/images/stack.jpeg deleted file mode 100644 index 443cc3ff..00000000 Binary files a/docs/images/stack.jpeg and /dev/null differ diff --git a/docs/quickstarts/COMPOSE.md b/docs/quickstarts/COMPOSE.md deleted file mode 100644 index 841d262d..00000000 --- a/docs/quickstarts/COMPOSE.md +++ /dev/null @@ -1,131 +0,0 @@ -# Quick start guide for Docker Compose - -This option will stand up the provisioner using Docker Compose. -You will need to bring your own machines to provision. - -## Prerequisites - -- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) is installed -- [Docker](https://docs.docker.com/get-docker/) is installed (version >= 19.03) -- [Docker Compose](https://docs.docker.com/compose/install/) is installed (version >= 2.10.2) - -Both the Tinkerbell host and client require internet access to pull images, this sandbox is not designed to work in an isolated network. - -## Steps - -1. Clone this repository - - ```bash - git clone https://github.com/tinkerbell/sandbox.git - cd sandbox/deploy/stack/compose - ``` - -2. Modify the [.env file](https://github.com/tinkerbell/sandbox/blob/47cfd6d0a0b659f1e364a78a4e63e08cdf168ca8/deploy/stack/compose/.env) - - ```bash - # This should be an IP that's on an interface where you will be provisioning machines - # This is the IP and MAC of the machine to be provisioned - # The IP should normally be in the same network as the IP used for the provisioner - TINKERBELL_CLIENT_IP=192.168.56.43 - TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a - - # These are the Gateway and DNS addresses the client should use, required for tink-worker to pull action images - TINKERBELL_CLIENT_GW=192.168.56.1 - TINKERBELL_CLIENT_NAMESERVER_1=1.1.1.1 - TINKERBELL_CLIENT_NAMESERVER_2=8.8.8.8 - - # This should be an IP that's on an interface where you will be provisioning machines - TINKERBELL_HOST_IP=192.168.56.4 - ``` - - If you are provisioning bare metal machines with NVME SSDs, use NVME device paths: - - ```bash - # This is the boot/primary disk device and the device for its first partition - # for the machine to be provisioned (as it would appear with lsblk) - #DISK_DEVICE=/dev/sda - #DISK_DEVICE_PARTITION_1=/dev/sda1 - # Example for a device with an NVME SSD - DISK_DEVICE=/dev/nvme0n1 - DISK_DEVICE_PARTITION_1=/dev/nvme0n1p1 - ``` - - > Optionally modify the [hardware.yaml](../../deploy/stack/compose/manifests/hardware.yaml), as needed, for your machine. - -3. Start the provisioner - - ```bash - docker compose up -d - # This process will take about 5-10 minutes depending on your internet connection. - # Hook (OSIE) is about 400MB in size and the Ubuntu Focal image is about 500MB - ``` - -
- expected output - - ```bash - [+] Running 15/15 - ⠿ Network compose_default Created 0.0s - ⠿ Volume "compose_k3s-server" Created 0.0s - ⠿ Container compose-fetch-and-convert-ubuntu-img-1 Exited 2.9s - ⠿ Container compose-fetch-osie-1 Exited 1.7s - ⠿ Container compose-manifest-update-1 Started 1.2s - ⠿ Container compose-k3s-1 Healthy 99.7s - ⠿ Container compose-web-assets-server-1 Started 3.1s - ⠿ Container compose-tink-crds-apply-1 Exited 128.0s - ⠿ Container compose-rufio-crds-apply-1 Exited 127.5s - ⠿ Container compose-tink-controller-1 Started 128.5s - ⠿ Container compose-boots-1 Started 128.0s - ⠿ Container compose-tink-server-1 Started 128.8s - ⠿ Container compose-hegel-1 Started 128.9s - ⠿ Container compose-manifest-apply-1 Started 128.9s - ⠿ Container compose-rufio-1 Started 127.7s - ``` - -
- -4. Power up the machine to be provisioned - -5. Watch for the provisioner to complete - - ```bash - # watch for the workflow to completion - # once the workflow is complete (see the expected output below for completion), move on to the next step - KUBECONFIG=./state/kube/kubeconfig.yaml kubectl get -n default workflow sandbox-workflow --watch - ``` - -
- expected output - - ```bash - NAME TEMPLATE STATE - sandbox-workflow ubuntu-focal STATE_PENDING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_SUCCESS - ``` - -
- -6. Reboot the machine - -7. Login to the machine - - The machine has been provisioned with Ubuntu Focal. - You can now SSH into the machine. - - ```bash - # crtl-c to exit the watch - ssh tink@${TINKERBELL_CLIENT_IP} # user/pass => tink/tink - ``` diff --git a/docs/quickstarts/KUBERNETES.md b/docs/quickstarts/KUBERNETES.md index d8532d92..421fd4f9 100644 --- a/docs/quickstarts/KUBERNETES.md +++ b/docs/quickstarts/KUBERNETES.md @@ -1,3 +1,65 @@ # Quick start guide for Kubernetes -See the [README.md](https://github.com/tinkerbell/charts/tree/main/tinkerbell/stack) in the Helm chart repository for more information on how to use the Helm chart. +This option will walk through creating a light weight Kubernetes cluster, after which you will be able to deploy the Tinkerbell stack via the Helm chart, and then provision a machine. +You will need to bring your own hardware (machine) for this guide. + +## Prerequisites + +- [Docker](https://docs.docker.com/get-docker/) +- [K3D](https://k3d.io/#installation) +- [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) +- [Helm](https://helm.sh/docs/intro/install/) +- A machine to provision + +## Steps + +1. Create a Kubernetes cluster with K3D + + ```bash + k3d cluster create --network host --no-lb --k3s-arg "--disable=traefik,servicelb,metrics-server,local-storage" + # `--network host` : host network is used to allow the load balancer to advertise a layer 2 address. + # `--no-lb` : the K3D built in load balancer is disabled so we don't have conflicts with the stack load balancer. + # `--k3s-arg "--disable=traefik,servicelb,metrics-server,local-storage"` : disable the built in K3S load balancer, metrics server, and local storage. + ``` + +1. Install the Tinkerbell stack Helm chart + + ```bash + trusted_proxies=$(kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' | tr ' ' ',') + LB_IP= + STACK_CHART_VERSION=0.4.2 + helm install tink-stack oci://ghcr.io/tinkerbell/charts/stack --version "$STACK_CHART_VERSION" --create-namespace --namespace tink-system --wait --set "smee.trustedProxies={${trusted_proxies}}" --set "hegel.trustedProxies={${trusted_proxies}}" --set "stack.loadBalancerIP=$LB_IP" --set "smee.publicIP=$LB_IP" + ``` + + > These instructions above should be checked against the Charts repo before using. See the [README.md](https://github.com/tinkerbell/charts/tree/main/tinkerbell/stack) in the Helm chart repository for more information on how to use the Helm chart. + +1. Verify the stack is up and running + + ```bash + kubectl get pods -n tink-system # verify all pods are running + kubectl get svc -n tink-system # Verify the tink-stack service has the IP you specified with $LB_IP under the EXTERNAL-IP column + ``` + +1. Download and convert a cloud image to a raw image + + ```bash + kubectl apply -f https://raw.githubusercontent.com/tinkerbell/sandbox/main/vagrant/ubuntu-download.yaml + # This will download and convert the Ubuntu Jammy 22.04 cloud image. + ``` + +1. Create and/or customize Hardware, Template, and Workflow objects and apply them to the cluster. You can use the Hardware, Template, and Workflow in this repo, in the `vagrant/` directory, as a base from which to start. + + ```bash + kubectl apply -f my-hardware.yaml + kubectl apply -f my-template.yaml + kubectl apply -f my-workflow.yaml + ``` + +1. Start the machine provision process by rebooting, into a netbooting state, the machine you have specified in the Hardware object above. + +1. Watch the progress of the workflow. + + ```bash + kubectl get workflow -n tink-system --watch + # Once the workflow is state is `STATE_SUCCESS`, you can login to the machine via the console or via SSH. + ``` diff --git a/docs/quickstarts/MULTIPASS.md b/docs/quickstarts/MULTIPASS.md deleted file mode 100644 index 51c40aeb..00000000 --- a/docs/quickstarts/MULTIPASS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Quick start guide for Multipass - -> coming soon... diff --git a/docs/quickstarts/TERRAFORMEM.md b/docs/quickstarts/TERRAFORMEM.md deleted file mode 100644 index eb05c610..00000000 --- a/docs/quickstarts/TERRAFORMEM.md +++ /dev/null @@ -1,127 +0,0 @@ -# Quick start guide for Terraform on Equinix Metal - -This option will stand up the provisioner on a Bare Metal machine using Terraform with Equinix Metal. -This option will also show you how to create a machine to provision. - -## Prerequisites - -- [Terraform](https://www.vagrantup.com/downloads) is installed - -## Steps - -1. Clone this repository - - ```bash - git clone https://github.com/tinkerbell/sandbox.git - cd sandbox - ``` - -2. Set your Equinix Metal project id and access token - - ```bash - cd deploy/infrastructure/terraform - cat << EOF > terraform.tfvars - metal_api_token = "awegaga4gs4g" - project_id = "235-23452-245-345" - EOF - ``` - -3. Start the provisioner - - ```bash - terraform init - terraform apply - # This process will take about 5-10 minutes. - # Most of the time will be to download OSIE. - # OSIE is about 2GB in size and the Ubuntu Focal image is about 500MB - ``` - -4. Confirm setup.sh script has finished - - ```bash - # log in to the provisioner - ssh root@$(terraform output -raw provisioner_ssh) - - # verify that the /root/setup.sh script has finished running - ps -aux | grep setup.sh - ``` - -5. Reboot the machine - - In the [Equinix Metal Web UI](https://console.equinix.com), find the `tink_worker` and reboot it. - Or if you have the [Equinix Metal CLI](https://github.com/equinix/metal-cli) installed run the following: - - ```bash - metal device reboot -i $(terraform output -raw worker_id) - ``` - -6. Watch the provision complete - - Follow the docker-compose logs: - - ```bash - # log in to the provisioner - ssh root@$(terraform output -raw provisioner_ssh) - - # watch the docker-compose logs - # you should see Boots offer tink-worker an IP address and see tink-worker downloading files from the web server - docker-compose -f /sandbox/compose/docker-compose.yml logs -f - - ``` - - Some of the steps can take a while to complete. In particular, it may look like tink-worker is hanging and not interacting with the provisioner after pulling the LinuxKit image. It may take a few minutes before it starts any of the workflows. - - In a separate SSH session, watch the status of workflow tasks: - - ```bash - # log in to the provisioner - ssh root@$(terraform output -raw provisioner_ssh) - - # watch for the workflow to completion - # once the workflow is complete (see the expected output below for completion), move on to the next step - KUBECONFIG=/sandbox/compose/state/kube/kubeconfig.yaml kubectl get -n default workflow sandbox-workflow --watch - ``` - -
- expected output - - ```bash - NAME TEMPLATE STATE - sandbox-workflow ubuntu-focal STATE_PENDING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_SUCCESS - ``` - -
- -7. Reboot the machine - - Now reboot the `tink-worker` via the [Equinix Metal Web UI](https://console.equinix.com), or if you have the [Equinix Metal CLI](https://github.com/equinix/metal-cli) installed run the following: - - ```bash - metal device reboot -i $(terraform output -raw worker_id) - ``` - -8. Login to the machine - - The `tink-worker` machine has been provisioned with Ubuntu Focal. - Wait for the reboot to complete and then you can SSH into it from the `tink-provisioner` machine. - It may take some time for the worker to become available via SSH. - - ```bash - # Continuing on the tink-provisioner machine - # crtl-c to exit the watch - ssh tink@192.168.56.43 # user/pass => tink/tink - ``` diff --git a/docs/quickstarts/VAGRANTLVIRT.md b/docs/quickstarts/VAGRANTLVIRT.md index e3398852..0d5b1e85 100644 --- a/docs/quickstarts/VAGRANTLVIRT.md +++ b/docs/quickstarts/VAGRANTLVIRT.md @@ -1,354 +1,400 @@ # Quick start guide for Vagrant and Libvirt -This option will stand up the provisioner in Libvirt using Vagrant. -This option will also show you how to create a machine to provision. +This option will create the stack in a Libvirt VM using Vagrant. +This option will also create a VM and provision an OS onto it. ## Prerequisites - [Vagrant](https://www.vagrantup.com/downloads) is installed - [Libvirt](https://ubuntu.com/server/docs/virtualization-libvirt) is installed - Vagrant Libvirt plugin is installed: `vagrant plugin install vagrant-libvirt` +- A connection to the public internet (air gapped and proxied environments are not supported) ## Steps 1. Clone this repository ```bash - git clone https://github.com/tinkerbell/sandbox.git - cd sandbox + git clone https://github.com/tinkerbell/playground.git + cd playground ``` -2. Start the provisioner +1. Start the stack ```bash - cd deploy/infrastructure/vagrant + cd vagrant vagrant up # This process will take about 5-10 minutes depending on your internet connection. - # Hook is about 400MB in size and the Ubuntu Focal image is about 500MB + # Hook is about 400MB in size and the Ubuntu jammy image is about 500MB ```
expected output ```bash - Bringing machine 'provisioner' up with 'libvirt' provider... - ==> provisioner: Checking if box 'generic/ubuntu2204' version '4.1.14' is up to date... - ==> provisioner: Creating image (snapshot of base box volume). - ==> provisioner: Creating domain with the following settings... - ==> provisioner: -- Name: vagrant_provisioner - ==> provisioner: -- Description: Source: /home/tink/repos/tinkerbell/sandbox/deploy/infrastructure/vagrant/Vagrantfile - ==> provisioner: -- Domain type: kvm - ==> provisioner: -- Cpus: 2 - ==> provisioner: -- Feature: acpi - ==> provisioner: -- Feature: apic - ==> provisioner: -- Feature: pae - ==> provisioner: -- Clock offset: utc - ==> provisioner: -- Memory: 2048M - ==> provisioner: -- Management MAC: - ==> provisioner: -- Loader: - ==> provisioner: -- Nvram: - ==> provisioner: -- Base box: generic/ubuntu2204 - ==> provisioner: -- Storage pool: default - ==> provisioner: -- Image(vda): /var/lib/libvirt/images/vagrant_provisioner.img, virtio, 128G - ==> provisioner: -- Disk driver opts: cache='default' - ==> provisioner: -- Kernel: - ==> provisioner: -- Initrd: - ==> provisioner: -- Graphics Type: vnc - ==> provisioner: -- Graphics Port: -1 - ==> provisioner: -- Graphics IP: 127.0.0.1 - ==> provisioner: -- Graphics Password: Not defined - ==> provisioner: -- Video Type: cirrus - ==> provisioner: -- Video VRAM: 256 - ==> provisioner: -- Video 3D accel: false - ==> provisioner: -- Sound Type: - ==> provisioner: -- Keymap: en-us - ==> provisioner: -- TPM Backend: passthrough - ==> provisioner: -- TPM Path: - ==> provisioner: -- INPUT: type=mouse, bus=ps2 - ==> provisioner: Creating shared folders metadata... - ==> provisioner: Starting domain. - ==> provisioner: Waiting for domain to get an IP address... - ==> provisioner: Waiting for machine to boot. This may take a few minutes... - provisioner: SSH address: 192.168.121.254:22 - 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: Rsyncing folder: /home/tink/repos/tinkerbell/sandbox/deploy/stack/compose/ => /sandbox/compose - ==> provisioner: Running provisioner: shell... - provisioner: Running: /tmp/vagrant-shell20221004-689177-1x7ep6c.sh - provisioner: + main 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/compose - provisioner: + local host_ip=192.168.56.4 - provisioner: + local worker_ip=192.168.56.43 - provisioner: + local worker_mac=08:00:27:9e:f5:3a - provisioner: + local compose_dir=/sandbox/compose - provisioner: + update_apt - provisioner: + apt-get update - provisioner: + DEBIAN_FRONTEND=noninteractive - provisioner: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update - provisioner: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease - provisioner: Get:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease [114 kB] - provisioner: Get:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease [99.8 kB] - provisioner: Get:4 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease [110 kB] - provisioner: Get:5 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 Packages [611 kB] - provisioner: Get:6 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main Translation-en [144 kB] - provisioner: Get:7 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 c-n-f Metadata [8,788 B] - provisioner: Get:8 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted amd64 Packages [344 kB] - provisioner: Get:9 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted Translation-en [53.5 kB] - provisioner: Get:10 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe amd64 Packages [425 kB] - provisioner: Get:11 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe Translation-en [108 kB] - provisioner: Get:12 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 Packages [6,752 B] - provisioner: Get:13 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 c-n-f Metadata [352 B] - provisioner: Get:14 https://mirrors.edge.kernel.org/ubuntu jammy-security/main amd64 Packages [352 kB] - provisioner: Get:15 https://mirrors.edge.kernel.org/ubuntu jammy-security/main Translation-en [81.8 kB] - provisioner: Get:16 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted amd64 Packages [308 kB] - provisioner: Get:17 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted Translation-en [47.8 kB] - provisioner: Get:18 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe amd64 Packages [287 kB] - provisioner: Get:19 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe Translation-en [63.2 kB] - provisioner: Fetched 3,164 kB in 7s (425 kB/s) - provisioner: Reading package lists... - provisioner: + install_docker - provisioner: + curl -fsSL https://download.docker.com/linux/ubuntu/gpg - provisioner: + sudo apt-key add - - provisioner: Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). - provisioner: OK - provisioner: ++ lsb_release -cs - provisioner: + add-apt-repository 'deb https://download.docker.com/linux/ubuntu jammy stable' - provisioner: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease - provisioner: Hit:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease - provisioner: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease - provisioner: Get:4 https://download.docker.com/linux/ubuntu jammy InRelease [48.9 kB] - provisioner: Hit:5 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease - provisioner: Get:6 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [7,065 B] - provisioner: Fetched 55.9 kB in 1s (94.7 kB/s) - provisioner: Reading package lists... - provisioner: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. - provisioner: Repository: 'deb https://download.docker.com/linux/ubuntu jammy stable' - provisioner: Description: - provisioner: Archive for codename: jammy components: stable - provisioner: More info: https://download.docker.com/linux/ubuntu - provisioner: Adding repository. - provisioner: Adding deb entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list - provisioner: Adding disabled deb-src entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list - provisioner: + update_apt - provisioner: + apt-get update - provisioner: + DEBIAN_FRONTEND=noninteractive - provisioner: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update - provisioner: Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease - provisioner: Hit:2 https://mirrors.edge.kernel.org/ubuntu jammy InRelease - provisioner: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease - provisioner: Hit:4 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease - provisioner: Hit:5 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease - provisioner: Reading package lists... - provisioner: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. - provisioner: + apt-get install --no-install-recommends containerd.io docker-ce docker-ce-cli docker-compose-plugin - provisioner: + DEBIAN_FRONTEND=noninteractive - provisioner: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes install --no-install-recommends containerd.io docker-ce docker-ce-cli docker-compose-plugin - provisioner: Reading package lists... - provisioner: Building dependency tree... - provisioner: Reading state information... - provisioner: Suggested packages: - provisioner: aufs-tools cgroupfs-mount | cgroup-lite - provisioner: Recommended packages: - provisioner: docker-ce-rootless-extras libltdl7 pigz docker-scan-plugin - provisioner: The following NEW packages will be installed: - provisioner: containerd.io docker-ce docker-ce-cli docker-compose-plugin - provisioner: 0 upgraded, 4 newly installed, 0 to remove and 4 not upgraded. - provisioner: Need to get 96.7 MB of archives. - provisioner: After this operation, 390 MB of additional disk space will be used. - provisioner: Get:1 https://download.docker.com/linux/ubuntu jammy/stable amd64 containerd.io amd64 1.6.8-1 [28.1 MB] - provisioner: Get:2 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce-cli amd64 5:20.10.18~3-0~ubuntu-jammy [41.5 MB] - provisioner: Get:3 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce amd64 5:20.10.18~3-0~ubuntu-jammy [20.4 MB] - provisioner: Get:4 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-compose-plugin amd64 2.10.2~ubuntu-jammy [6,693 kB] - provisioner: Fetched 96.7 MB in 3s (36.5 MB/s) - provisioner: Selecting previously unselected package containerd.io. - (Reading database ... 75347 files and directories currently installed.) - provisioner: Preparing to unpack .../containerd.io_1.6.8-1_amd64.deb ... - provisioner: Unpacking containerd.io (1.6.8-1) ... - provisioner: Selecting previously unselected package docker-ce-cli. - provisioner: Preparing to unpack .../docker-ce-cli_5%3a20.10.18~3-0~ubuntu-jammy_amd64.deb ... - provisioner: Unpacking docker-ce-cli (5:20.10.18~3-0~ubuntu-jammy) ... - provisioner: Selecting previously unselected package docker-ce. - provisioner: Preparing to unpack .../docker-ce_5%3a20.10.18~3-0~ubuntu-jammy_amd64.deb ... - provisioner: Unpacking docker-ce (5:20.10.18~3-0~ubuntu-jammy) ... - provisioner: Selecting previously unselected package docker-compose-plugin. - provisioner: Preparing to unpack .../docker-compose-plugin_2.10.2~ubuntu-jammy_amd64.deb ... - provisioner: Unpacking docker-compose-plugin (2.10.2~ubuntu-jammy) ... - provisioner: Setting up containerd.io (1.6.8-1) ... - provisioner: Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service. - provisioner: Setting up docker-compose-plugin (2.10.2~ubuntu-jammy) ... - provisioner: Setting up docker-ce-cli (5:20.10.18~3-0~ubuntu-jammy) ... - provisioner: Setting up docker-ce (5:20.10.18~3-0~ubuntu-jammy) ... - provisioner: Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service. - provisioner: Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket. - provisioner: Processing triggers for man-db (2.10.2-1) ... - provisioner: NEEDRESTART-VER: 3.5 - provisioner: NEEDRESTART-KCUR: 5.15.0-48-generic - provisioner: NEEDRESTART-KEXP: 5.15.0-48-generic - provisioner: NEEDRESTART-KSTA: 1 - provisioner: + gpasswd -a vagrant docker - provisioner: Adding user vagrant to group docker - provisioner: + install_kubectl - provisioner: + curl -LO https://dl.k8s.io/v1.25.2/bin/linux/amd64/kubectl - provisioner: % Total % Received % Xferd Average Speed Time Time Time Current - provisioner: Dload Upload Total Spent Left Speed - 100 138 100 138 0 0 537 0 --:--:-- --:--:-- --:--:-- 536 - 100 42.9M 100 42.9M 0 0 29.3M 0 0:00:01 0:00:01 --:--:-- 61.2M - provisioner: + chmod +x ./kubectl - provisioner: + mv ./kubectl /usr/local/bin/kubectl - provisioner: + setup_layer2_network 192.168.56.4 - provisioner: + local host_ip=192.168.56.4 - provisioner: + ip addr show dev eth1 - provisioner: + grep -q 192.168.56.4 - provisioner: + ip addr add 192.168.56.4/24 dev eth1 - provisioner: + ip link set dev eth1 up - provisioner: + setup_compose_env_overrides 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/compose - provisioner: + local host_ip=192.168.56.4 - provisioner: + local worker_ip=192.168.56.43 - provisioner: + local worker_mac=08:00:27:9e:f5:3a - provisioner: + local compose_dir=/sandbox/compose - provisioner: + local disk_device - provisioner: + disk_device=/dev/sda - provisioner: + lsblk - provisioner: + grep -q vda - provisioner: + disk_device=/dev/vda - provisioner: + [[ /sandbox/compose == *\p\o\s\t\g\r\e\s* ]] - provisioner: + readarray -t lines - provisioner: + for line in "${lines[@]}" - provisioner: + grep -q 'TINKERBELL_HOST_IP="192.168.56.4"' /sandbox/compose/.env - provisioner: + echo 'TINKERBELL_HOST_IP="192.168.56.4"' - provisioner: + for line in "${lines[@]}" - provisioner: + grep -q 'TINKERBELL_CLIENT_IP="192.168.56.43"' /sandbox/compose/.env - provisioner: + echo 'TINKERBELL_CLIENT_IP="192.168.56.43"' - provisioner: + for line in "${lines[@]}" - provisioner: + grep -q 'TINKERBELL_CLIENT_MAC="08:00:27:9e:f5:3a"' /sandbox/compose/.env - provisioner: + echo 'TINKERBELL_CLIENT_MAC="08:00:27:9e:f5:3a"' - provisioner: + for line in "${lines[@]}" - provisioner: + grep -q 'DISK_DEVICE="/dev/vda"' /sandbox/compose/.env - provisioner: + echo 'DISK_DEVICE="/dev/vda"' - provisioner: + docker compose -f /sandbox/compose/docker-compose.yml up -d - provisioner: manifest-update Pulling - provisioner: rufio Pulling - provisioner: manifest-apply Pulling - provisioner: boots Pulling - provisioner: fetch-and-convert-ubuntu-img Pulling - provisioner: rufio-crds-apply Pulling - provisioner: fetch-osie Pulling - provisioner: tink-controller Pulling - provisioner: tink-crds-apply Pulling - provisioner: k3s Pulling - provisioner: hegel Pulling - provisioner: tink-server Pulling - provisioner: web-assets-server Pulling - provisioner: web-assets-server Pulled - provisioner: Network compose_default Creating - provisioner: Network compose_default Created - provisioner: Volume "compose_k3s-server" Creating - provisioner: Volume "compose_k3s-server" Created - provisioner: Container compose-k3s-1 Creating - provisioner: Container compose-fetch-osie-1 Creating - provisioner: Container compose-manifest-update-1 Creating - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Creating - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Created - provisioner: Container compose-manifest-update-1 Created - provisioner: Container compose-fetch-osie-1 Created - provisioner: Container compose-web-assets-server-1 Creating - provisioner: Container compose-k3s-1 Created - provisioner: Container compose-tink-crds-apply-1 Creating - provisioner: Container compose-rufio-crds-apply-1 Creating - provisioner: Container compose-tink-crds-apply-1 Created - provisioner: Container compose-manifest-apply-1 Creating - provisioner: Container compose-hegel-1 Creating - provisioner: Container compose-tink-server-1 Creating - provisioner: Container compose-boots-1 Creating - provisioner: Container compose-tink-controller-1 Creating - provisioner: Container compose-web-assets-server-1 Created - provisioner: Container compose-rufio-crds-apply-1 Created - provisioner: Container compose-rufio-1 Creating - provisioner: Container compose-boots-1 Created - provisioner: Container compose-hegel-1 Created - provisioner: Container compose-manifest-apply-1 Created - provisioner: Container compose-rufio-1 Created - provisioner: Container compose-tink-controller-1 Created - provisioner: Container compose-tink-server-1 Created - provisioner: Container compose-manifest-update-1 Starting - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Starting - provisioner: Container compose-fetch-osie-1 Starting - provisioner: Container compose-k3s-1 Starting - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Started - provisioner: Container compose-manifest-update-1 Started - provisioner: Container compose-k3s-1 Started - provisioner: Container compose-k3s-1 Waiting - provisioner: Container compose-k3s-1 Waiting - provisioner: Container compose-fetch-osie-1 Started - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Waiting - provisioner: Container compose-fetch-osie-1 Waiting - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Exited - provisioner: Container compose-fetch-osie-1 Exited - provisioner: Container compose-web-assets-server-1 Starting - provisioner: Container compose-web-assets-server-1 Started - provisioner: Container compose-k3s-1 Healthy - provisioner: Container compose-k3s-1 Healthy - provisioner: Container compose-rufio-crds-apply-1 Starting - provisioner: Container compose-tink-crds-apply-1 Starting - provisioner: Container compose-rufio-crds-apply-1 Started - provisioner: Container compose-rufio-crds-apply-1 Waiting - provisioner: Container compose-tink-crds-apply-1 Started - provisioner: Container compose-tink-crds-apply-1 Waiting - provisioner: Container compose-tink-crds-apply-1 Waiting - provisioner: Container compose-tink-crds-apply-1 Waiting - provisioner: Container compose-tink-crds-apply-1 Waiting - provisioner: Container compose-tink-crds-apply-1 Waiting - provisioner: Container compose-rufio-crds-apply-1 Exited - provisioner: Container compose-rufio-1 Starting - provisioner: Container compose-rufio-1 Started - provisioner: Container compose-tink-crds-apply-1 Exited - provisioner: Container compose-boots-1 Starting - provisioner: Container compose-tink-crds-apply-1 Exited - provisioner: Container compose-tink-crds-apply-1 Exited - provisioner: Container compose-tink-crds-apply-1 Exited - provisioner: Container compose-tink-crds-apply-1 Exited - provisioner: Container compose-manifest-apply-1 Starting - provisioner: Container compose-tink-server-1 Starting - provisioner: Container compose-hegel-1 Starting - provisioner: Container compose-tink-controller-1 Starting - provisioner: Container compose-boots-1 Started - provisioner: Container compose-tink-server-1 Started - provisioner: Container compose-tink-controller-1 Started - provisioner: Container compose-manifest-apply-1 Started - provisioner: Container compose-hegel-1 Started - provisioner: + create_tink_helper_script /sandbox/compose - provisioner: + local compose_dir=/sandbox/compose - provisioner: + mkdir -p /home/vagrant/.local/bin - provisioner: + cat - provisioner: + chmod +x /home/vagrant/.local/bin/tink - provisioner: + tweak_bash_interactive_settings /sandbox/compose - provisioner: + local compose_dir=/sandbox/compose - provisioner: + grep -q 'cd /sandbox/compose' /home/vagrant/.bashrc - provisioner: + echo 'cd /sandbox/compose' - provisioner: + echo 'export KUBECONFIG=/sandbox/compose/state/kube/kubeconfig.yaml' - provisioner: + readarray -t aliases - provisioner: + for alias in "${aliases[@]}" - provisioner: + grep -q 'dc="docker compose"' /home/vagrant/.bash_aliases - provisioner: grep: /home/vagrant/.bash_aliases: No such file or directory - provisioner: + echo 'alias dc="docker compose"' - provisioner: all done! - provisioner: + echo 'all done!' + Bringing machine 'stack' up with 'libvirt' provider... + ==> stack: Checking if box 'generic/ubuntu2204' version '4.3.4' is up to date... + ==> stack: Creating image (snapshot of base box volume). + ==> stack: Creating domain with the following settings... + ==> stack: -- Name: vagrant_stack + ==> stack: -- Description: Source: /home/tink/repos/tinkerbell/sandbox/vagrant/Vagrantfile + ==> stack: -- Domain type: kvm + ==> stack: -- Cpus: 2 + ==> stack: -- Feature: acpi + ==> stack: -- Feature: apic + ==> stack: -- Feature: pae + ==> stack: -- Clock offset: utc + ==> stack: -- Memory: 2048M + ==> stack: -- Base box: generic/ubuntu2204 + ==> stack: -- Storage pool: default + ==> stack: -- Image(vda): /var/lib/libvirt/images/vagrant_stack.img, virtio, 128G + ==> stack: -- Disk driver opts: cache='default' + ==> stack: -- Graphics Type: vnc + ==> stack: -- Video Type: cirrus + ==> stack: -- Video VRAM: 256 + ==> stack: -- Video 3D accel: false + ==> stack: -- Keymap: en-us + ==> stack: -- TPM Backend: passthrough + ==> stack: -- INPUT: type=mouse, bus=ps2 + ==> stack: Creating shared folders metadata... + ==> stack: Starting domain. + ==> stack: Domain launching with graphics connection settings... + ==> stack: -- Graphics Port: 5900 + ==> stack: -- Graphics IP: 127.0.0.1 + ==> stack: -- Graphics Password: Not defined + ==> stack: -- Graphics Websocket: 5700 + ==> stack: Waiting for domain to get an IP address... + ==> stack: Waiting for machine to boot. This may take a few minutes... + stack: SSH address: 192.168.121.127:22 + stack: SSH username: vagrant + stack: SSH auth method: private key + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: Warning: Connection refused. Retrying... + stack: + stack: Vagrant insecure key detected. Vagrant will automatically replace + stack: this with a newly generated keypair for better security. + stack: + stack: Inserting generated public key within guest... + stack: Removing insecure key from the guest if it's present... + stack: Key inserted! Disconnecting and reconnecting using new SSH key... + ==> stack: Machine booted and ready! + ==> stack: Rsyncing folder: /home/tink/repos/tinkerbell/sandbox/vagrant/ => /sandbox/stack + ==> stack: Configuring and enabling network interfaces... + ==> stack: Running provisioner: shell... + stack: Running: /tmp/vagrant-shell20231031-285946-1krhzm0.sh + stack: + main 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 0.4.2 eth1 1.28.3 v5.6.0 '' + stack: + local host_ip=192.168.56.4 + stack: + local worker_ip=192.168.56.43 + stack: + local worker_mac=08:00:27:9e:f5:3a + stack: + local manifests_dir=/sandbox/stack/ + stack: + local loadbalancer_ip=192.168.56.5 + stack: + local helm_chart_version=0.4.2 + stack: + local loadbalancer_interface=eth1 + stack: + local kubectl_version=1.28.3 + stack: + local k3d_version=v5.6.0 + stack: + update_apt + stack: + apt-get update + stack: + DEBIAN_FRONTEND=noninteractive + stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update + stack: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease + stack: Get:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease [119 kB] + stack: Get:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease [109 kB] + stack: Get:4 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease [110 kB] + stack: Get:5 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 Packages [1,148 kB] + stack: Get:6 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main Translation-en [245 kB] + stack: Get:7 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 c-n-f Metadata [16.1 kB] + stack: Get:8 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted amd64 Packages [1,103 kB] + stack: Get:9 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted Translation-en [179 kB] + stack: Get:10 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted amd64 c-n-f Metadata [536 B] + stack: Get:11 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe amd64 Packages [998 kB] + stack: Get:12 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe Translation-en [218 kB] + stack: Get:13 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe amd64 c-n-f Metadata [22.0 kB] + stack: Get:14 https://mirrors.edge.kernel.org/ubuntu jammy-backports/main amd64 Packages [64.2 kB] + stack: Get:15 https://mirrors.edge.kernel.org/ubuntu jammy-backports/main amd64 c-n-f Metadata [388 B] + stack: Get:16 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 Packages [27.8 kB] + stack: Get:17 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 c-n-f Metadata [644 B] + stack: Get:18 https://mirrors.edge.kernel.org/ubuntu jammy-security/main amd64 Packages [938 kB] + stack: Get:19 https://mirrors.edge.kernel.org/ubuntu jammy-security/main Translation-en [185 kB] + stack: Get:20 https://mirrors.edge.kernel.org/ubuntu jammy-security/main amd64 c-n-f Metadata [11.4 kB] + stack: Get:21 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted amd64 Packages [1,079 kB] + stack: Get:22 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted Translation-en [175 kB] + stack: Get:23 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted amd64 c-n-f Metadata [536 B] + stack: Get:24 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe amd64 Packages [796 kB] + stack: Get:25 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe Translation-en [146 kB] + stack: Get:26 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe amd64 c-n-f Metadata [16.8 kB] + stack: Fetched 7,709 kB in 2s (4,266 kB/s) + stack: Reading package lists... + stack: + install_docker + stack: + curl -fsSL https://download.docker.com/linux/ubuntu/gpg + stack: + sudo apt-key add - + stack: Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). + stack: OK + stack: ++ lsb_release -cs + stack: + add-apt-repository 'deb https://download.docker.com/linux/ubuntu jammy stable' + stack: Get:1 https://download.docker.com/linux/ubuntu jammy InRelease [48.8 kB] + stack: Get:2 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [22.7 kB] + stack: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy InRelease + stack: Hit:4 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease + stack: Hit:5 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease + stack: Hit:6 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease + stack: Fetched 71.5 kB in 6s (11.8 kB/s) + stack: Reading package lists... + stack: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. + stack: Repository: 'deb https://download.docker.com/linux/ubuntu jammy stable' + stack: Description: + stack: Archive for codename: jammy components: stable + stack: More info: https://download.docker.com/linux/ubuntu + stack: Adding repository. + stack: Adding deb entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list + stack: Adding disabled deb-src entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list + stack: + update_apt + stack: + apt-get update + stack: + DEBIAN_FRONTEND=noninteractive + stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update + stack: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease + stack: Hit:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease + stack: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease + stack: Hit:4 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease + stack: Hit:5 https://download.docker.com/linux/ubuntu jammy InRelease + stack: Reading package lists... + stack: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. + stack: + apt-get install --no-install-recommends containerd.io docker-ce docker-ce-cli + stack: + DEBIAN_FRONTEND=noninteractive + stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes install --no-install-recommends containerd.io docker-ce docker-ce-cli + stack: Reading package lists... + stack: Building dependency tree... + stack: Reading state information... + stack: Suggested packages: + stack: aufs-tools cgroupfs-mount | cgroup-lite + stack: Recommended packages: + stack: docker-ce-rootless-extras libltdl7 pigz docker-buildx-plugin + stack: docker-compose-plugin + stack: The following NEW packages will be installed: + stack: containerd.io docker-ce docker-ce-cli + stack: 0 upgraded, 3 newly installed, 0 to remove and 29 not upgraded. + stack: Need to get 64.5 MB of archives. + stack: After this operation, 249 MB of additional disk space will be used. + stack: Get:1 https://download.docker.com/linux/ubuntu jammy/stable amd64 containerd.io amd64 1.6.24-1 [28.6 MB] + stack: Get:2 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce-cli amd64 5:24.0.7-1~ubuntu.22.04~jammy [13.3 MB] + stack: Get:3 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce amd64 5:24.0.7-1~ubuntu.22.04~jammy [22.6 MB] + stack: Fetched 64.5 MB in 1s (77.3 MB/s) + stack: Selecting previously unselected package containerd.io. + (Reading database ... 76025 files and directories currently installed.) + stack: Preparing to unpack .../containerd.io_1.6.24-1_amd64.deb ... + stack: Unpacking containerd.io (1.6.24-1) ... + stack: Selecting previously unselected package docker-ce-cli. + stack: Preparing to unpack .../docker-ce-cli_5%3a24.0.7-1~ubuntu.22.04~jammy_amd64.deb ... + stack: Unpacking docker-ce-cli (5:24.0.7-1~ubuntu.22.04~jammy) ... + stack: Selecting previously unselected package docker-ce. + stack: Preparing to unpack .../docker-ce_5%3a24.0.7-1~ubuntu.22.04~jammy_amd64.deb ... + stack: Unpacking docker-ce (5:24.0.7-1~ubuntu.22.04~jammy) ... + stack: Setting up containerd.io (1.6.24-1) ... + stack: Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service. + stack: Setting up docker-ce-cli (5:24.0.7-1~ubuntu.22.04~jammy) ... + stack: Setting up docker-ce (5:24.0.7-1~ubuntu.22.04~jammy) ... + stack: Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service. + stack: Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket. + stack: Processing triggers for man-db (2.10.2-1) ... + stack: NEEDRESTART-VER: 3.5 + stack: NEEDRESTART-KCUR: 5.15.0-86-generic + stack: NEEDRESTART-KEXP: 5.15.0-86-generic + stack: NEEDRESTART-KSTA: 1 + stack: + gpasswd -a vagrant docker + stack: Adding user vagrant to group docker + stack: + sudo ethtool -K eth1 tx off sg off tso off + stack: Actual changes: + stack: tx-scatter-gather: off + stack: tx-checksum-ip-generic: off + stack: tx-generic-segmentation: off [not requested] + stack: tx-tcp-segmentation: off + stack: tx-tcp-ecn-segmentation: off + stack: tx-tcp6-segmentation: off + stack: + install_kubectl 1.28.3 + stack: + local kubectl_version=1.28.3 + stack: + curl -LO https://dl.k8s.io/v1.28.3/bin/linux/amd64/kubectl + stack: % Total % Received % Xferd Average Speed Time Time Time Current + stack: Dload Upload Total Spent Left Speed + 100 138 100 138 0 0 410 0 --:--:-- --:--:-- --:--:-- 410 + 100 47.5M 100 47.5M 0 0 24.8M 0 0:00:01 0:00:01 --:--:-- 37.9M + stack: + chmod +x ./kubectl + stack: + mv ./kubectl /usr/local/bin/kubectl + stack: + run_helm 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 0.4.2 eth1 v5.6.0 + stack: + local host_ip=192.168.56.4 + stack: + local worker_ip=192.168.56.43 + stack: + local worker_mac=08:00:27:9e:f5:3a + stack: + local manifests_dir=/sandbox/stack/ + stack: + local loadbalancer_ip=192.168.56.5 + stack: + local helm_chart_version=0.4.2 + stack: + local loadbalancer_interface=eth1 + stack: + local k3d_version=v5.6.0 + stack: + local namespace=tink-system + stack: + install_k3d v5.6.0 + stack: + local k3d_Version=v5.6.0 + stack: + wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh + stack: + TAG=v5.6.0 + stack: + bash + stack: Preparing to install k3d into /usr/local/bin + stack: k3d installed into /usr/local/bin/k3d + stack: Run 'k3d --help' to see what you can do with it. + stack: + start_k3d + stack: + k3d cluster create --network host --no-lb --k3s-arg --disable=traefik,servicelb --k3s-arg --kube-apiserver-arg=feature-gates=MixedProtocolLBService=true --host-pid-mode + stack: INFO[0000] [SimpleConfig] Hostnetwork selected - disabling injection of docker host into the cluster, server load balancer and setting the api port to the k3s default + stack: WARN[0000] No node filter specified + stack: WARN[0000] No node filter specified + stack: INFO[0000] [ClusterConfig] Hostnetwork selected - disabling injection of docker host into the cluster, server load balancer and setting the api port to the k3s default + stack: INFO[0000] Prep: Network + stack: INFO[0000] Re-using existing network 'host' (2ecf52da28c15a6bbe026b5e71f3af288fefbbb222b2762bafc29e9b1791ff8b) + stack: INFO[0000] Created image volume k3d-k3s-default-images + stack: INFO[0000] Starting new tools node... + stack: INFO[0001] Creating node 'k3d-k3s-default-server-0' + stack: INFO[0001] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.6.0' + stack: INFO[0002] Pulling image 'docker.io/rancher/k3s:v1.27.4-k3s1' + stack: INFO[0003] Starting Node 'k3d-k3s-default-tools' + stack: INFO[0010] Using the k3d-tools node to gather environment information + stack: INFO[0011] Starting cluster 'k3s-default' + stack: INFO[0011] Starting servers... + stack: INFO[0011] Starting Node 'k3d-k3s-default-server-0' + stack: INFO[0014] All agents already running. + stack: INFO[0014] All helpers already running. + stack: INFO[0014] Cluster 'k3s-default' created successfully! + stack: INFO[0014] You can now use it like this: + stack: kubectl cluster-info + stack: + mkdir -p /root/.kube/ + stack: + k3d kubeconfig get -a + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: error: no matching resources found + stack: + sleep 1 + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: error: no matching resources found + stack: + sleep 1 + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: error: no matching resources found + stack: + sleep 1 + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: error: no matching resources found + stack: + sleep 1 + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: error: no matching resources found + stack: + sleep 1 + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: node/k3d-k3s-default-server-0 condition met + stack: + install_helm + stack: + helm_ver=v3.9.4 + stack: + curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 + stack: + chmod 700 get_helm.sh + stack: + ./get_helm.sh --version v3.9.4 + stack: Downloading https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz + stack: Verifying checksum... Done. + stack: Preparing to install helm into /usr/local/bin + stack: helm installed into /usr/local/bin/helm + stack: + helm_install_tink_stack tink-system 0.4.2 eth1 192.168.56.5 + stack: + local namespace=tink-system + stack: + local version=0.4.2 + stack: + local interface=eth1 + stack: + local loadbalancer_ip=192.168.56.5 + stack: + trusted_proxies= + stack: + '[' '' '!=' '' ']' + stack: ++ kubectl get nodes -o 'jsonpath={.items[*].spec.podCIDR}' + stack: ++ tr ' ' , + stack: + trusted_proxies= + stack: + '[' '' '!=' '' ']' + stack: ++ kubectl get nodes -o 'jsonpath={.items[*].spec.podCIDR}' + stack: ++ tr ' ' , + stack: + trusted_proxies=10.42.0.0/24 + stack: + '[' 10.42.0.0/24 '!=' '' ']' + stack: + helm install tink-stack oci://ghcr.io/tinkerbell/charts/stack --version 0.4.2 --create-namespace --namespace tink-system --wait --set 'smee.trustedProxies={10.42.0.0/24}' --set 'hegel.trustedProxies={10.42.0.0/24}' --set stack.kubevip.interface=eth1 --set stack.relay.sourceInterface=eth1 --set stack.loadBalancerIP=192.168.56.5 --set smee.publicIP=192.168.56.5 + stack: NAME: tink-stack + stack: LAST DEPLOYED: Tue Oct 31 21:56:58 2023 + stack: NAMESPACE: tink-system + stack: STATUS: deployed + stack: REVISION: 1 + stack: TEST SUITE: None + stack: + apply_manifests 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 tink-system + stack: + local worker_ip=192.168.56.43 + stack: + local worker_mac=08:00:27:9e:f5:3a + stack: + local manifests_dir=/sandbox/stack/ + stack: + local host_ip=192.168.56.5 + stack: + local namespace=tink-system + stack: + disk_device=/dev/sda + stack: + lsblk + stack: + grep -q vda + stack: + disk_device=/dev/vda + stack: + export DISK_DEVICE=/dev/vda + stack: + DISK_DEVICE=/dev/vda + stack: + export TINKERBELL_CLIENT_IP=192.168.56.43 + stack: + TINKERBELL_CLIENT_IP=192.168.56.43 + stack: + export TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a + stack: + TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a + stack: + export TINKERBELL_HOST_IP=192.168.56.5 + stack: + TINKERBELL_HOST_IP=192.168.56.5 + stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} + stack: + envsubst + stack: + echo -e --- + stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} + stack: + envsubst + stack: + echo -e --- + stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} + stack: + envsubst + stack: + echo -e --- + stack: + kubectl apply -n tink-system -f /tmp/manifests.yaml + stack: hardware.tinkerbell.org/machine1 created + stack: template.tinkerbell.org/ubuntu-jammy created + stack: workflow.tinkerbell.org/sandbox-workflow created + stack: + kubectl apply -n tink-system -f /sandbox/stack//ubuntu-download.yaml + stack: configmap/download-image created + stack: job.batch/download-ubuntu-jammy created + stack: + kubectl_for_vagrant_user + stack: + runuser -l vagrant -c 'mkdir -p ~/.kube/' + stack: + runuser -l vagrant -c 'k3d kubeconfig get -a > ~/.kube/config' + stack: + chmod 600 /home/vagrant/.kube/config + stack: + echo 'export KUBECONFIG="/home/vagrant/.kube/config"' + stack: all done! + stack: + echo 'all done!' ```
-3. Start the machine to be provisioned +1. Wait for HookOS and Ubuntu image to be downloaded + + ```bash + vagrant ssh stack + kubectl get jobs -n tink-system --watch + exit + # There are 2 Kubernetes jobs that run to download HookOS and the Ubuntu image. + # Once both jobs are complete exit the stack VM. + ``` + +
+ example output + + ```bash + NAME COMPLETIONS DURATION AGE + download-hook 1/1 27s 72s + download-ubuntu-jammy 0/1 49s 49s + download-ubuntu-jammy 0/1 70s 70s + download-ubuntu-jammy 0/1 72s 72s + download-ubuntu-jammy 1/1 72s 72s + ``` + +
+ +1. Start the machine to be provisioned ```bash vagrant up machine1 # This will start a VM to pxe boot. + # The `vagrant up machine1` command will exit quickly and show the following message. This is expected. + # Once the command line control is returned to you, you can move on to the next step. ```
@@ -358,44 +404,41 @@ This option will also show you how to create a machine to provision. Bringing machine 'machine1' up with 'libvirt' provider... ==> machine1: Creating domain with the following settings... ==> machine1: -- Name: vagrant_machine1 + ==> machine1: -- Description: Source: /home/tink/repos/tinkerbell/sandbox/vagrant/Vagrantfile ==> machine1: -- Domain type: kvm ==> machine1: -- Cpus: 2 ==> machine1: -- Feature: acpi ==> machine1: -- Feature: apic ==> machine1: -- Feature: pae + ==> machine1: -- Clock offset: utc ==> machine1: -- Memory: 4096M - ==> machine1: -- Management MAC: - ==> machine1: -- Loader: - ==> machine1: -- Nvram: ==> machine1: -- Storage pool: default - ==> machine1: -- Image: (G) - ==> machine1: -- Volume Cache: default - ==> machine1: -- Kernel: - ==> machine1: -- Initrd: + ==> machine1: -- Disk driver opts: cache='default' ==> machine1: -- Graphics Type: vnc - ==> machine1: -- Graphics Port: -1 - ==> machine1: -- Graphics IP: 0.0.0.0 - ==> machine1: -- Graphics Password: Not defined ==> machine1: -- Video Type: cirrus - ==> machine1: -- Video VRAM: 9216 - ==> machine1: -- Sound Type: + ==> machine1: -- Video VRAM: 16384 + ==> machine1: -- Video 3D accel: false ==> machine1: -- Keymap: en-us - ==> machine1: -- TPM Path: + ==> machine1: -- TPM Backend: passthrough ==> machine1: -- Boot device: hd ==> machine1: -- Boot device: network - ==> machine1: -- Disks: vdb(qcow2,20G) - ==> machine1: -- Disk(vdb): /var/lib/libvirt/images/vagrant_machine1-vdb.qcow2 Not created - using existed. + ==> machine1: -- Disk(vda): /var/lib/libvirt/images/vagrant_machine1-vda.qcow2, virtio, 20G ==> machine1: -- INPUT: type=mouse, bus=ps2 ==> machine1: Starting domain. + ==> machine1: Domain launching with graphics connection settings... + ==> machine1: -- Graphics Port: 5901 + ==> machine1: -- Graphics IP: 0.0.0.0 + ==> machine1: -- Graphics Password: Not defined + ==> machine1: -- Graphics Websocket: 5701 ```
-4. Watch the provision complete +1. Watch the provision complete ```bash - # log in to the provisioner - vagrant ssh provisioner + # log in to the stack VM + vagrant ssh stack # watch for the workflow to complete # once the workflow is complete (see the expected output below for completion), move on to the next step @@ -407,42 +450,30 @@ This option will also show you how to create a machine to provision. ```bash NAME TEMPLATE STATE - sandbox-workflow ubuntu-focal STATE_PENDING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_SUCCESS + sandbox-workflow ubuntu-jammy STATE_PENDING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_SUCCESS ``` -5. Reboot the machine - - ```bash - # crtl-c to exit the watch - # exit the provisioner - vagrant@ubuntu2204:~$ 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 - ``` - -6. Login to the machine +1. Login to the machine - The machine has been provisioned with Ubuntu Focal. + The machine has been provisioned with Ubuntu. You can now SSH into the machine. ```bash - vagrant ssh provisioner ssh tink@192.168.56.43 # user/pass => tink/tink ``` diff --git a/docs/quickstarts/VAGRANTVBOX.md b/docs/quickstarts/VAGRANTVBOX.md index d2be9681..fb3e08c6 100644 --- a/docs/quickstarts/VAGRANTVBOX.md +++ b/docs/quickstarts/VAGRANTVBOX.md @@ -1,12 +1,13 @@ # 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. +This option will create the stack in a Virtualbox VM using Vagrant. +This option will also create a VM and provision an OS onto it. ## Prerequisites - [Vagrant](https://www.vagrantup.com/downloads) is installed - [VirtualBox](https://www.virtualbox.org/) is installed +- A connection to the public internet (air gapped and proxied environments are not supported) ## Steps @@ -17,295 +18,362 @@ This option will also show you how to create a machine to provision. cd sandbox ``` -2. Start the provisioner +1. Start the stack ```bash - cd deploy/infrastructure/vagrant + cd 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 + # This process will take up to 10 minutes depending on your internet connection. + # It will download HookOS, which is a couple hundred megabytes in size, and an Ubuntu cloud image, which is about 600MB. ```
- expected output + example output ```bash - Bringing machine 'provisioner' up with 'virtualbox' provider... - ==> provisioner: Importing base box 'generic/ubuntu2204'... - ==> provisioner: Matching MAC address for NAT networking... - ==> provisioner: Checking if box 'generic/ubuntu2204' version '4.1.14' is up to date... - ==> provisioner: Setting the name of the VM: vagrant_provisioner_1664925397569_14454 - ==> 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: Mounting shared folders... - provisioner: /sandbox/compose => /private/tmp/sandbox/deploy/stack/compose - ==> provisioner: Running provisioner: shell... - provisioner: Running: /var/folders/xt/8w5g0fv54tj4njvjhk_0_25r0000gr/T/vagrant-shell20221004-97370-3zoxlv.sh - provisioner: + main 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/compose - provisioner: + local host_ip=192.168.56.4 - provisioner: + local worker_ip=192.168.56.43 - provisioner: + local worker_mac=08:00:27:9e:f5:3a - provisioner: + local compose_dir=/sandbox/compose - provisioner: + update_apt - provisioner: + apt-get update - provisioner: + DEBIAN_FRONTEND=noninteractive - provisioner: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update - provisioner: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease - provisioner: Get:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease [114 kB] - provisioner: Get:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease [99.8 kB] - provisioner: Get:4 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease [110 kB] - provisioner: Get:5 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 Packages [611 kB] - provisioner: Get:6 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main Translation-en [144 kB] - provisioner: Get:7 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 c-n-f Metadata [8,788 B] - provisioner: Get:8 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted amd64 Packages [344 kB] - provisioner: Get:9 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted Translation-en [53.5 kB] - provisioner: Get:10 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe amd64 Packages [425 kB] - provisioner: Get:11 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe Translation-en [108 kB] - provisioner: Get:12 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 Packages [6,752 B] - provisioner: Get:13 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 c-n-f Metadata [352 B] - provisioner: Get:14 https://mirrors.edge.kernel.org/ubuntu jammy-security/main amd64 Packages [352 kB] - provisioner: Get:15 https://mirrors.edge.kernel.org/ubuntu jammy-security/main Translation-en [81.8 kB] - provisioner: Get:16 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted amd64 Packages [308 kB] - provisioner: Get:17 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted Translation-en [47.8 kB] - provisioner: Get:18 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe amd64 Packages [287 kB] - provisioner: Get:19 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe Translation-en [63.2 kB] - provisioner: Fetched 3,164 kB in 6s (529 kB/s) - provisioner: Reading package lists... - provisioner: + install_docker - provisioner: + sudo apt-key add - - provisioner: + curl -fsSL https://download.docker.com/linux/ubuntu/gpg - provisioner: Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). - provisioner: OK - provisioner: ++ lsb_release -cs - provisioner: + add-apt-repository 'deb https://download.docker.com/linux/ubuntu jammy stable' - provisioner: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease - provisioner: Hit:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease - provisioner: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease - provisioner: Get:4 https://download.docker.com/linux/ubuntu jammy InRelease [48.9 kB] - provisioner: Hit:5 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease - provisioner: Get:6 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [7,065 B] - provisioner: Fetched 55.9 kB in 1s (89.9 kB/s) - provisioner: Reading package lists... - provisioner: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. - provisioner: Repository: 'deb https://download.docker.com/linux/ubuntu jammy stable' - provisioner: Description: - provisioner: Archive for codename: jammy components: stable - provisioner: More info: https://download.docker.com/linux/ubuntu - provisioner: Adding repository. - provisioner: Adding deb entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list - provisioner: Adding disabled deb-src entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list - provisioner: + update_apt - provisioner: + apt-get update - provisioner: + DEBIAN_FRONTEND=noninteractive - provisioner: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update - provisioner: Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease - provisioner: Hit:2 https://mirrors.edge.kernel.org/ubuntu jammy InRelease - provisioner: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease - provisioner: Hit:4 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease - provisioner: Hit:5 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease - provisioner: Reading package lists... - provisioner: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. - provisioner: + apt-get install --no-install-recommends containerd.io docker-ce docker-ce-cli docker-compose-plugin - provisioner: + DEBIAN_FRONTEND=noninteractive - provisioner: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes install --no-install-recommends containerd.io docker-ce docker-ce-cli docker-compose-plugin - provisioner: Reading package lists... - provisioner: Building dependency tree... - provisioner: Reading state information... - provisioner: Suggested packages: - provisioner: aufs-tools cgroupfs-mount | cgroup-lite - provisioner: Recommended packages: - provisioner: docker-ce-rootless-extras libltdl7 pigz docker-scan-plugin - provisioner: The following NEW packages will be installed: - provisioner: containerd.io docker-ce docker-ce-cli docker-compose-plugin - provisioner: 0 upgraded, 4 newly installed, 0 to remove and 4 not upgraded. - provisioner: Need to get 96.7 MB of archives. - provisioner: After this operation, 390 MB of additional disk space will be used. - provisioner: Get:1 https://download.docker.com/linux/ubuntu jammy/stable amd64 containerd.io amd64 1.6.8-1 [28.1 MB] - provisioner: Get:2 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce-cli amd64 5:20.10.18~3-0~ubuntu-jammy [41.5 MB] - provisioner: Get:3 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce amd64 5:20.10.18~3-0~ubuntu-jammy [20.4 MB] - provisioner: Get:4 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-compose-plugin amd64 2.10.2~ubuntu-jammy [6,693 kB] - provisioner: Fetched 96.7 MB in 4s (25.0 MB/s) - provisioner: Selecting previously unselected package containerd.io. - (Reading database ... 75348 files and directories currently installed.) - provisioner: Preparing to unpack .../containerd.io_1.6.8-1_amd64.deb ... - provisioner: Unpacking containerd.io (1.6.8-1) ... - provisioner: Selecting previously unselected package docker-ce-cli. - provisioner: Preparing to unpack .../docker-ce-cli_5%3a20.10.18~3-0~ubuntu-jammy_amd64.deb ... - provisioner: Unpacking docker-ce-cli (5:20.10.18~3-0~ubuntu-jammy) ... - provisioner: Selecting previously unselected package docker-ce. - provisioner: Preparing to unpack .../docker-ce_5%3a20.10.18~3-0~ubuntu-jammy_amd64.deb ... - provisioner: Unpacking docker-ce (5:20.10.18~3-0~ubuntu-jammy) ... - provisioner: Selecting previously unselected package docker-compose-plugin. - provisioner: Preparing to unpack .../docker-compose-plugin_2.10.2~ubuntu-jammy_amd64.deb ... - provisioner: Unpacking docker-compose-plugin (2.10.2~ubuntu-jammy) ... - provisioner: Setting up containerd.io (1.6.8-1) ... - provisioner: Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service. - provisioner: Setting up docker-compose-plugin (2.10.2~ubuntu-jammy) ... - provisioner: Setting up docker-ce-cli (5:20.10.18~3-0~ubuntu-jammy) ... - provisioner: Setting up docker-ce (5:20.10.18~3-0~ubuntu-jammy) ... - provisioner: Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service. - provisioner: Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket. - provisioner: Processing triggers for man-db (2.10.2-1) ... - provisioner: NEEDRESTART-VER: 3.5 - provisioner: NEEDRESTART-KCUR: 5.15.0-48-generic - provisioner: NEEDRESTART-KEXP: 5.15.0-48-generic - provisioner: NEEDRESTART-KSTA: 1 - provisioner: + gpasswd -a vagrant docker - provisioner: Adding user vagrant to group docker - provisioner: + install_kubectl - provisioner: + curl -LO https://dl.k8s.io/v1.25.2/bin/linux/amd64/kubectl - provisioner: % Total % Received % Xferd Average Speed Time Time Time Current - provisioner: Dload Upload Total Spent Left Speed - 100 138 100 138 0 0 428 0 --:--:-- --:--:-- --:--:-- 429 - 100 42.9M 100 42.9M 0 0 35.1M 0 0:00:01 0:00:01 --:--:-- 49.7M - provisioner: + chmod +x ./kubectl - provisioner: + mv ./kubectl /usr/local/bin/kubectl - provisioner: + setup_layer2_network 192.168.56.4 - provisioner: + local host_ip=192.168.56.4 - provisioner: + ip addr show dev eth1 - provisioner: + grep -q 192.168.56.4 - provisioner: + ip addr add 192.168.56.4/24 dev eth1 - provisioner: + ip link set dev eth1 up - provisioner: + setup_compose_env_overrides 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/compose - provisioner: + local host_ip=192.168.56.4 - provisioner: + local worker_ip=192.168.56.43 - provisioner: + local worker_mac=08:00:27:9e:f5:3a - provisioner: + local compose_dir=/sandbox/compose - provisioner: + local disk_device - provisioner: + disk_device=/dev/sda - provisioner: + lsblk - provisioner: + grep -q vda - provisioner: + readarray -t lines - provisioner: + for line in "${lines[@]}" - provisioner: + grep -q 'TINKERBELL_HOST_IP="192.168.56.4"' /sandbox/compose/.env - provisioner: + continue - provisioner: + for line in "${lines[@]}" - provisioner: + grep -q 'TINKERBELL_CLIENT_IP="192.168.56.43"' /sandbox/compose/.env - provisioner: + continue - provisioner: + for line in "${lines[@]}" - provisioner: + grep -q 'TINKERBELL_CLIENT_MAC="08:00:27:9e:f5:3a"' /sandbox/compose/.env - provisioner: + continue - provisioner: + for line in "${lines[@]}" - provisioner: + grep -q 'DISK_DEVICE="/dev/sda"' /sandbox/compose/.env - provisioner: + continue - provisioner: + docker compose -f /sandbox/compose/docker-compose.yml up -d - provisioner: tink-controller Pulling - provisioner: boots Pulling - provisioner: tink-server Pulling - provisioner: web-assets-server Pulling - provisioner: fetch-osie Pulling - provisioner: manifest-update Pulling - provisioner: fetch-and-convert-ubuntu-img Pulling - provisioner: tink-crds-apply Pulling - provisioner: manifest-apply Pulling - provisioner: k3s Pulling - provisioner: hegel Pulling - provisioner: k3s Pulled - provisioner: Network compose_default Creating - provisioner: Network compose_default Created - provisioner: Volume "compose_k3s-server" Creating - provisioner: Volume "compose_k3s-server" Created - provisioner: Container compose-k3s-1 Creating - provisioner: Container compose-fetch-osie-1 Creating - provisioner: Container compose-manifest-update-1 Creating - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Creating - provisioner: Container compose-fetch-osie-1 Created - provisioner: Container compose-k3s-1 Created - provisioner: Container compose-tink-crds-apply-1 Creating - provisioner: Container compose-manifest-update-1 Created - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Created - provisioner: Container compose-web-assets-server-1 Creating - provisioner: Container compose-tink-crds-apply-1 Created - provisioner: Container compose-tink-server-1 Creating - provisioner: Container compose-manifest-apply-1 Creating - provisioner: Container compose-hegel-1 Creating - provisioner: Container compose-tink-controller-1 Creating - provisioner: Container compose-boots-1 Creating - provisioner: Container compose-boots-1 Created - provisioner: Container compose-tink-controller-1 Created - provisioner: Container compose-tink-server-1 Created - provisioner: Container compose-web-assets-server-1 Created - provisioner: Container compose-manifest-apply-1 Created - provisioner: Container compose-hegel-1 Created - provisioner: Container compose-manifest-update-1 Starting - provisioner: Container compose-fetch-osie-1 Starting - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Starting - provisioner: Container compose-k3s-1 Starting - provisioner: Container compose-manifest-update-1 Started - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Started - provisioner: Container compose-k3s-1 Started - provisioner: Container compose-k3s-1 Waiting - provisioner: Container compose-fetch-osie-1 Started - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Waiting - provisioner: Container compose-fetch-osie-1 Waiting - provisioner: Container compose-fetch-osie-1 Exited - provisioner: Container compose-fetch-and-convert-ubuntu-img-1 Exited - provisioner: Container compose-web-assets-server-1 Starting - provisioner: Container compose-web-assets-server-1 Started - provisioner: Container compose-k3s-1 Healthy - provisioner: Container compose-tink-crds-apply-1 Starting - provisioner: Container compose-tink-crds-apply-1 Started - provisioner: Container compose-tink-crds-apply-1 Waiting - provisioner: Container compose-tink-crds-apply-1 Waiting - provisioner: Container compose-tink-crds-apply-1 Waiting - provisioner: Container compose-tink-crds-apply-1 Waiting - provisioner: Container compose-tink-crds-apply-1 Waiting - provisioner: Container compose-tink-crds-apply-1 Exited - provisioner: Container compose-tink-controller-1 Starting - provisioner: Container compose-tink-crds-apply-1 Exited - provisioner: Container compose-tink-server-1 Starting - provisioner: Container compose-tink-crds-apply-1 Exited - provisioner: Container compose-boots-1 Starting - provisioner: Container compose-tink-crds-apply-1 Exited - provisioner: Container compose-hegel-1 Starting - provisioner: Container compose-tink-crds-apply-1 Exited - provisioner: Container compose-manifest-apply-1 Starting - provisioner: Container compose-boots-1 Started - provisioner: Container compose-manifest-apply-1 Started - provisioner: Container compose-hegel-1 Started - provisioner: Container compose-tink-server-1 Started - provisioner: Container compose-tink-controller-1 Started - provisioner: + create_tink_helper_script /sandbox/compose - provisioner: + local compose_dir=/sandbox/compose - provisioner: + mkdir -p /home/vagrant/.local/bin - provisioner: + cat - provisioner: + chmod +x /home/vagrant/.local/bin/tink - provisioner: + tweak_bash_interactive_settings /sandbox/compose - provisioner: + local compose_dir=/sandbox/compose - provisioner: + grep -q 'cd /sandbox/compose' /home/vagrant/.bashrc - provisioner: + echo 'cd /sandbox/compose' - provisioner: + echo 'export KUBECONFIG=/sandbox/compose/state/kube/kubeconfig.yaml' - provisioner: + readarray -t aliases - provisioner: + for alias in "${aliases[@]}" - provisioner: + grep -q 'dc="docker compose"' /home/vagrant/.bash_aliases - provisioner: grep: /home/vagrant/.bash_aliases: No such file or directory - provisioner: all done! - provisioner: + echo 'alias dc="docker compose"' - provisioner: + echo 'all done!' + Bringing machine 'stack' up with 'virtualbox' provider... + ==> stack: Importing base box 'generic/ubuntu2204'... + ==> stack: Matching MAC address for NAT networking... + ==> stack: Checking if box 'generic/ubuntu2204' version '4.1.14' is up to date... + ==> stack: Setting the name of the VM: vagrant_stack_1698780219785_94529 + ==> stack: Clearing any previously set network interfaces... + ==> stack: Preparing network interfaces based on configuration... + stack: Adapter 1: nat + stack: Adapter 2: hostonly + ==> stack: Forwarding ports... + stack: 22 (guest) => 2222 (host) (adapter 1) + ==> stack: Running 'pre-boot' VM customizations... + ==> stack: Booting VM... + ==> stack: Waiting for machine to boot. This may take a few minutes... + stack: SSH address: 127.0.0.1:2222 + stack: SSH username: vagrant + stack: SSH auth method: private key + stack: Warning: Connection reset. Retrying... + stack: + stack: Vagrant insecure key detected. Vagrant will automatically replace + stack: this with a newly generated keypair for better security. + stack: + stack: Inserting generated public key within guest... + stack: Removing insecure key from the guest if it's present... + stack: Key inserted! Disconnecting and reconnecting using new SSH key... + ==> stack: Machine booted and ready! + ==> stack: Checking for guest additions in VM... + stack: The guest additions on this VM do not match the installed version of + stack: VirtualBox! In most cases this is fine, but in rare cases it can + stack: prevent things such as shared folders from working properly. If you see + stack: shared folder errors, please make sure the guest additions within the + stack: virtual machine match the version of VirtualBox you have installed on + stack: your host and reload your VM. + stack: + stack: Guest Additions Version: 6.1.38 + stack: VirtualBox Version: 7.0 + ==> stack: Configuring and enabling network interfaces... + ==> stack: Mounting shared folders... + stack: /sandbox/stack => ~/tinkerbell/sandbox/vagrant + ==> stack: Running provisioner: shell... + stack: Running: /var/folders/xt/8w5g0fv54tj4njvjhk_0_25r0000gr/T/vagrant-shell20231031-54683-k09nai.sh + stack: + main 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 0.4.2 eth1 1.28.3 v5.6.0 '' + stack: + local host_ip=192.168.56.4 + stack: + local worker_ip=192.168.56.43 + stack: + local worker_mac=08:00:27:9e:f5:3a + stack: + local manifests_dir=/sandbox/stack/ + stack: + local loadbalancer_ip=192.168.56.5 + stack: + local helm_chart_version=0.4.2 + stack: + local loadbalancer_interface=eth1 + stack: + local kubectl_version=1.28.3 + stack: + local k3d_version=v5.6.0 + stack: + update_apt + stack: + apt-get update + stack: + DEBIAN_FRONTEND=noninteractive + stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update + stack: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease + stack: Get:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease [119 kB] + stack: Get:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease [109 kB] + stack: Get:4 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease [110 kB] + stack: Get:5 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 Packages [1,148 kB] + stack: Get:6 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main Translation-en [245 kB] + stack: Get:7 https://mirrors.edge.kernel.org/ubuntu jammy-updates/main amd64 c-n-f Metadata [16.1 kB] + stack: Get:8 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted amd64 Packages [1,103 kB] + stack: Get:9 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted Translation-en [179 kB] + stack: Get:10 https://mirrors.edge.kernel.org/ubuntu jammy-updates/restricted amd64 c-n-f Metadata [536 B] + stack: Get:11 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe amd64 Packages [998 kB] + stack: Get:12 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe Translation-en [218 kB] + stack: Get:13 https://mirrors.edge.kernel.org/ubuntu jammy-updates/universe amd64 c-n-f Metadata [22.0 kB] + stack: Get:14 https://mirrors.edge.kernel.org/ubuntu jammy-updates/multiverse amd64 Packages [41.6 kB] + stack: Get:15 https://mirrors.edge.kernel.org/ubuntu jammy-updates/multiverse Translation-en [9,768 B] + stack: Get:16 https://mirrors.edge.kernel.org/ubuntu jammy-updates/multiverse amd64 c-n-f Metadata [472 B] + stack: Get:17 https://mirrors.edge.kernel.org/ubuntu jammy-backports/main amd64 Packages [64.2 kB] + stack: Get:18 https://mirrors.edge.kernel.org/ubuntu jammy-backports/main Translation-en [10.5 kB] + stack: Get:19 https://mirrors.edge.kernel.org/ubuntu jammy-backports/main amd64 c-n-f Metadata [388 B] + stack: Get:20 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 Packages [27.8 kB] + stack: Get:21 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe Translation-en [16.4 kB] + stack: Get:22 https://mirrors.edge.kernel.org/ubuntu jammy-backports/universe amd64 c-n-f Metadata [644 B] + stack: Get:23 https://mirrors.edge.kernel.org/ubuntu jammy-security/main amd64 Packages [938 kB] + stack: Get:24 https://mirrors.edge.kernel.org/ubuntu jammy-security/main Translation-en [185 kB] + stack: Get:25 https://mirrors.edge.kernel.org/ubuntu jammy-security/main amd64 c-n-f Metadata [11.4 kB] + stack: Get:26 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted amd64 Packages [1,079 kB] + stack: Get:27 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted Translation-en [175 kB] + stack: Get:28 https://mirrors.edge.kernel.org/ubuntu jammy-security/restricted amd64 c-n-f Metadata [536 B] + stack: Get:29 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe amd64 Packages [796 kB] + stack: Get:30 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe Translation-en [146 kB] + stack: Get:31 https://mirrors.edge.kernel.org/ubuntu jammy-security/universe amd64 c-n-f Metadata [16.8 kB] + stack: Get:32 https://mirrors.edge.kernel.org/ubuntu jammy-security/multiverse amd64 Packages [36.5 kB] + stack: Get:33 https://mirrors.edge.kernel.org/ubuntu jammy-security/multiverse Translation-en [7,060 B] + stack: Get:34 https://mirrors.edge.kernel.org/ubuntu jammy-security/multiverse amd64 c-n-f Metadata [260 B] + stack: Fetched 7,831 kB in 2s (3,321 kB/s) + stack: Reading package lists... + stack: + install_docker + stack: + curl -fsSL https://download.docker.com/linux/ubuntu/gpg + stack: + sudo apt-key add - + stack: Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). + stack: OK + stack: ++ lsb_release -cs + stack: + add-apt-repository 'deb https://download.docker.com/linux/ubuntu jammy stable' + stack: Hit:1 https://mirrors.edge.kernel.org/ubuntu jammy InRelease + stack: Hit:2 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease + stack: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease + stack: Hit:4 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease + stack: Get:5 https://download.docker.com/linux/ubuntu jammy InRelease [48.8 kB] + stack: Get:6 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [22.7 kB] + stack: Fetched 71.5 kB in 1s (72.5 kB/s) + stack: Reading package lists... + stack: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. + stack: Repository: 'deb https://download.docker.com/linux/ubuntu jammy stable' + stack: Description: + stack: Archive for codename: jammy components: stable + stack: More info: https://download.docker.com/linux/ubuntu + stack: Adding repository. + stack: Adding deb entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list + stack: Adding disabled deb-src entry to /etc/apt/sources.list.d/archive_uri-https_download_docker_com_linux_ubuntu-jammy.list + stack: + update_apt + stack: + apt-get update + stack: + DEBIAN_FRONTEND=noninteractive + stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes update + stack: Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease + stack: Hit:2 https://mirrors.edge.kernel.org/ubuntu jammy InRelease + stack: Hit:3 https://mirrors.edge.kernel.org/ubuntu jammy-updates InRelease + stack: Hit:4 https://mirrors.edge.kernel.org/ubuntu jammy-backports InRelease + stack: Hit:5 https://mirrors.edge.kernel.org/ubuntu jammy-security InRelease + stack: Reading package lists... + stack: W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. + stack: + apt-get install --no-install-recommends containerd.io docker-ce docker-ce-cli + stack: + DEBIAN_FRONTEND=noninteractive + stack: + command apt-get --allow-change-held-packages --allow-downgrades --allow-remove-essential --allow-unauthenticated --option Dpkg::Options::=--force-confdef --option Dpkg::Options::=--force-confold --yes install --no-install-recommends containerd.io docker-ce docker-ce-cli + stack: Reading package lists... + stack: Building dependency tree... + stack: Reading state information... + stack: Suggested packages: + stack: aufs-tools cgroupfs-mount | cgroup-lite + stack: Recommended packages: + stack: docker-ce-rootless-extras libltdl7 pigz docker-buildx-plugin + stack: docker-compose-plugin + stack: The following NEW packages will be installed: + stack: containerd.io docker-ce docker-ce-cli + stack: 0 upgraded, 3 newly installed, 0 to remove and 195 not upgraded. + stack: Need to get 64.5 MB of archives. + stack: After this operation, 249 MB of additional disk space will be used. + stack: Get:1 https://download.docker.com/linux/ubuntu jammy/stable amd64 containerd.io amd64 1.6.24-1 [28.6 MB] + stack: Get:2 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce-cli amd64 5:24.0.7-1~ubuntu.22.04~jammy [13.3 MB] + stack: Get:3 https://download.docker.com/linux/ubuntu jammy/stable amd64 docker-ce amd64 5:24.0.7-1~ubuntu.22.04~jammy [22.6 MB] + stack: Fetched 64.5 MB in 1s (53.8 MB/s) + stack: Selecting previously unselected package containerd.io. + (Reading database ... 75348 files and directories currently installed.) + stack: Preparing to unpack .../containerd.io_1.6.24-1_amd64.deb ... + stack: Unpacking containerd.io (1.6.24-1) ... + stack: Selecting previously unselected package docker-ce-cli. + stack: Preparing to unpack .../docker-ce-cli_5%3a24.0.7-1~ubuntu.22.04~jammy_amd64.deb ... + stack: Unpacking docker-ce-cli (5:24.0.7-1~ubuntu.22.04~jammy) ... + stack: Selecting previously unselected package docker-ce. + stack: Preparing to unpack .../docker-ce_5%3a24.0.7-1~ubuntu.22.04~jammy_amd64.deb ... + stack: Unpacking docker-ce (5:24.0.7-1~ubuntu.22.04~jammy) ... + stack: Setting up containerd.io (1.6.24-1) ... + stack: Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service. + stack: Setting up docker-ce-cli (5:24.0.7-1~ubuntu.22.04~jammy) ... + stack: Setting up docker-ce (5:24.0.7-1~ubuntu.22.04~jammy) ... + stack: Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service. + stack: Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket. + stack: Processing triggers for man-db (2.10.2-1) ... + stack: NEEDRESTART-VER: 3.5 + stack: NEEDRESTART-KCUR: 5.15.0-48-generic + stack: NEEDRESTART-KEXP: 5.15.0-48-generic + stack: NEEDRESTART-KSTA: 1 + stack: + gpasswd -a vagrant docker + stack: Adding user vagrant to group docker + stack: + sudo ethtool -K eth1 tx off sg off tso off + stack: Actual changes: + stack: tx-scatter-gather: off + stack: tx-checksum-ip-generic: off + stack: tx-generic-segmentation: off [not requested] + stack: tx-tcp-segmentation: off + stack: + install_kubectl 1.28.3 + stack: + local kubectl_version=1.28.3 + stack: + curl -LO https://dl.k8s.io/v1.28.3/bin/linux/amd64/kubectl + stack: % Total % Received % Xferd Average Speed Time Time Time Current + stack: Dload Upload Total Spent Left Speed + 100 138 100 138 0 0 242 0 --:--:-- --:--:-- --:--:-- 242 + 100 47.5M 100 47.5M 0 0 21.3M 0 0:00:02 0:00:02 --:--:-- 31.6M + stack: + chmod +x ./kubectl + stack: + mv ./kubectl /usr/local/bin/kubectl + stack: + run_helm 192.168.56.4 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 0.4.2 eth1 v5.6.0 + stack: + local host_ip=192.168.56.4 + stack: + local worker_ip=192.168.56.43 + stack: + local worker_mac=08:00:27:9e:f5:3a + stack: + local manifests_dir=/sandbox/stack/ + stack: + local loadbalancer_ip=192.168.56.5 + stack: + local helm_chart_version=0.4.2 + stack: + local loadbalancer_interface=eth1 + stack: + local k3d_version=v5.6.0 + stack: + local namespace=tink-system + stack: + install_k3d v5.6.0 + stack: + local k3d_Version=v5.6.0 + stack: + wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh + stack: + TAG=v5.6.0 + stack: + bash + stack: Preparing to install k3d into /usr/local/bin + stack: k3d installed into /usr/local/bin/k3d + stack: Run 'k3d --help' to see what you can do with it. + stack: + start_k3d + stack: + k3d cluster create --network host --no-lb --k3s-arg --disable=traefik,servicelb --k3s-arg --kube-apiserver-arg=feature-gates=MixedProtocolLBService=true --host-pid-mode + stack: INFO[0000] [SimpleConfig] Hostnetwork selected - disabling injection of docker host into the cluster, server load balancer and setting the api port to the k3s default + stack: WARN[0000] No node filter specified + stack: WARN[0000] No node filter specified + stack: INFO[0000] [ClusterConfig] Hostnetwork selected - disabling injection of docker host into the cluster, server load balancer and setting the api port to the k3s default + stack: INFO[0000] Prep: Network + stack: INFO[0000] Re-using existing network 'host' (0dfc7dbbdde7db0b7a7a5eba280e71248bb0cf010603bfaa0a0a09928df8d555) + stack: INFO[0000] Created image volume k3d-k3s-default-images + stack: INFO[0000] Starting new tools node... + stack: INFO[0001] Creating node 'k3d-k3s-default-server-0' + stack: INFO[0001] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.6.0' + stack: INFO[0002] Pulling image 'docker.io/rancher/k3s:v1.27.4-k3s1' + stack: INFO[0002] Starting Node 'k3d-k3s-default-tools' + stack: INFO[0008] Using the k3d-tools node to gather environment information + stack: INFO[0008] Starting cluster 'k3s-default' + stack: INFO[0008] Starting servers... + stack: INFO[0008] Starting Node 'k3d-k3s-default-server-0' + stack: INFO[0013] All agents already running. + stack: INFO[0013] All helpers already running. + stack: INFO[0013] Cluster 'k3s-default' created successfully! + stack: INFO[0013] You can now use it like this: + stack: kubectl cluster-info + stack: + mkdir -p /root/.kube/ + stack: + k3d kubeconfig get -a + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: error: no matching resources found + stack: + sleep 1 + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: error: no matching resources found + stack: + sleep 1 + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: error: no matching resources found + stack: + sleep 1 + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: error: no matching resources found + stack: + sleep 1 + stack: + kubectl wait --for=condition=Ready nodes --all --timeout=600s + stack: node/k3d-k3s-default-server-0 condition met + stack: + install_helm + stack: + helm_ver=v3.9.4 + stack: + curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 + stack: + chmod 700 get_helm.sh + stack: + ./get_helm.sh --version v3.9.4 + stack: Downloading https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz + stack: Verifying checksum... Done. + stack: Preparing to install helm into /usr/local/bin + stack: helm installed into /usr/local/bin/helm + stack: + helm_install_tink_stack tink-system 0.4.2 eth1 192.168.56.5 + stack: + local namespace=tink-system + stack: + local version=0.4.2 + stack: + local interface=eth1 + stack: + local loadbalancer_ip=192.168.56.5 + stack: + trusted_proxies= + stack: + '[' '' '!=' '' ']' + stack: ++ tr ' ' , + stack: ++ kubectl get nodes -o 'jsonpath={.items[*].spec.podCIDR}' + stack: + trusted_proxies= + stack: + '[' '' '!=' '' ']' + stack: + trusted_proxies= + stack: + '[' '' '!=' '' ']' + stack: ++ kubectl get nodes -o 'jsonpath={.items[*].spec.podCIDR}' + stack: ++ tr ' ' , + stack: + trusted_proxies=10.42.0.0/24 + stack: + '[' 10.42.0.0/24 '!=' '' ']' + stack: + helm install tink-stack oci://ghcr.io/tinkerbell/charts/stack --version 0.4.2 --create-namespace --namespace tink-system --wait --set 'smee.trustedProxies={10.42.0.0/24}' --set 'hegel.trustedProxies={10.42.0.0/24}' --set stack.kubevip.interface=eth1 --set stack.relay.sourceInterface=eth1 --set stack.loadBalancerIP=192.168.56.5 --set smee.publicIP=192.168.56.5 + stack: NAME: tink-stack + stack: LAST DEPLOYED: Tue Oct 31 19:25:06 2023 + stack: NAMESPACE: tink-system + stack: STATUS: deployed + stack: REVISION: 1 + stack: TEST SUITE: None + stack: + apply_manifests 192.168.56.43 08:00:27:9e:f5:3a /sandbox/stack/ 192.168.56.5 tink-system + stack: + local worker_ip=192.168.56.43 + stack: + local worker_mac=08:00:27:9e:f5:3a + stack: + local manifests_dir=/sandbox/stack/ + stack: + local host_ip=192.168.56.5 + stack: + local namespace=tink-system + stack: + disk_device=/dev/sda + stack: + lsblk + stack: + grep -q vda + stack: + export DISK_DEVICE=/dev/sda + stack: + DISK_DEVICE=/dev/sda + stack: + export TINKERBELL_CLIENT_IP=192.168.56.43 + stack: + TINKERBELL_CLIENT_IP=192.168.56.43 + stack: + export TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a + stack: + TINKERBELL_CLIENT_MAC=08:00:27:9e:f5:3a + stack: + export TINKERBELL_HOST_IP=192.168.56.5 + stack: + TINKERBELL_HOST_IP=192.168.56.5 + stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} + stack: + envsubst + stack: + echo -e --- + stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} + stack: + envsubst + stack: + echo -e --- + stack: + for i in "$manifests_dir"/{hardware.yaml,template.yaml,workflow.yaml} + stack: + envsubst + stack: + echo -e --- + stack: + kubectl apply -n tink-system -f /tmp/manifests.yaml + stack: hardware.tinkerbell.org/machine1 created + stack: template.tinkerbell.org/ubuntu-jammy created + stack: workflow.tinkerbell.org/sandbox-workflow created + stack: + kubectl apply -n tink-system -f /sandbox/stack//ubuntu-download.yaml + stack: configmap/download-image created + stack: job.batch/download-ubuntu-jammy created + stack: + kubectl_for_vagrant_user + stack: + runuser -l vagrant -c 'mkdir -p ~/.kube/' + stack: + runuser -l vagrant -c 'k3d kubeconfig get -a > ~/.kube/config' + stack: + chmod 600 /home/vagrant/.kube/config + stack: + echo 'export KUBECONFIG="/home/vagrant/.kube/config"' + stack: all done! + stack: + echo 'all done!' + + ``` + +
+ +1. Wait for HookOS and Ubuntu image to be downloaded + + ```bash + vagrant ssh stack + kubectl get jobs -n tink-system --watch + exit + # There are 2 Kubernetes jobs that run to download HookOS and the Ubuntu image. + # Once both jobs are complete exit the stack VM. + ``` + +
+ example output + + ```bash + NAME COMPLETIONS DURATION AGE + download-hook 1/1 27s 72s + download-ubuntu-jammy 0/1 49s 49s + download-ubuntu-jammy 0/1 70s 70s + download-ubuntu-jammy 0/1 72s 72s + download-ubuntu-jammy 1/1 72s 72s ```
-3. Start the machine to be provisioned +1. Start the machine to be provisioned ```bash vagrant up machine1 @@ -315,7 +383,7 @@ This option will also show you how to create a machine to provision. ```
- expected output + example output ```bash Bringing machine 'machine1' up with 'virtualbox' provider... @@ -359,58 +427,46 @@ This option will also show you how to create a machine to provision.
-4. Watch the provision complete +1. Watch the provision complete ```bash - # log in to the provisioner - vagrant ssh provisioner + # log in to the stack VM + vagrant ssh stack # watch for the workflow to complete - # once the workflow is complete (see the expected output below for completion), move on to the next step + # once the workflow is complete (see the example output below for completion), move on to the next step kubectl get -n tink-system workflow sandbox-workflow --watch ```
- Expected output + example output ```bash NAME TEMPLATE STATE - sandbox-workflow ubuntu-focal STATE_PENDING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_RUNNING - sandbox-workflow ubuntu-focal STATE_SUCCESS + sandbox-workflow ubuntu-jammy STATE_PENDING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_RUNNING + sandbox-workflow ubuntu-jammy STATE_SUCCESS ```
-5. Reboot the machine - - ```bash - # crtl-c to exit the watch - # exit the provisioner - vagrant@ubuntu2204:~$ 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 - ``` - -6. Login to the machine +1. Login to the machine - The machine has been provisioned with Ubuntu Focal. + The machine has been provisioned with Ubuntu. You can now SSH into the machine. ```bash - vagrant ssh provisioner ssh tink@192.168.56.43 # user/pass => tink/tink ``` diff --git a/docs/quickstarts/cloud-config.yaml b/docs/quickstarts/cloud-config.yaml deleted file mode 100644 index 93d8b10a..00000000 --- a/docs/quickstarts/cloud-config.yaml +++ /dev/null @@ -1,42 +0,0 @@ -#cloud-config - -package_update: true -package_reboot_if_required: true - -apt: - sources: - docker.list: - source: deb [arch=amd64] https://download.docker.com/linux/ubuntu $RELEASE stable - keyid: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 - -packages: - - make - - apt-transport-https - - ca-certificates - - curl - - gnupg-agent - - gnupg2 - - software-properties-common - - docker-ce - - docker-ce-cli - - containerd.io - -write_files: - - path: /etc/netplan/60-cloud-init.yaml - content: | - network: - version: 2 - renderer: networkd - ethernets: - enp0s8: - dhcp4: no - addresses: - - 192.168.2.111/24 - nameservers: - addresses: [1.1.1.1, 8.8.8.8] - -runcmd: - - usermod -aG docker ubuntu - - curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - - chmod +x /usr/local/bin/docker-compose - - netplan apply diff --git a/docs/quickstarts/images/disable-pxe-boot.png b/docs/quickstarts/images/disable-pxe-boot.png deleted file mode 100644 index 65e80ba3..00000000 Binary files a/docs/quickstarts/images/disable-pxe-boot.png and /dev/null differ diff --git a/shell.nix b/shell.nix index 2ad9ad81..037dd770 100644 --- a/shell.nix +++ b/shell.nix @@ -11,16 +11,10 @@ with pkgs; mkShell { buildInputs = [ - docker-compose - go nodePackages.prettier jq shellcheck shfmt - terraform_0_14 - gpgme - packer rufo - vagrant ]; } diff --git a/test/vagrant/go.mod b/test/vagrant/go.mod deleted file mode 100644 index be4124ac..00000000 --- a/test/vagrant/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module vagrant_test - -go 1.16 - -require ( - github.com/gianarb/vagrant-go v0.0.0-20200902133321-62ba563fe383 - github.com/tinkerbell/tink v0.0.0-20210705055947-8ea8a0e511be -) diff --git a/test/vagrant/go.sum b/test/vagrant/go.sum deleted file mode 100644 index 8aefad56..00000000 --- a/test/vagrant/go.sum +++ /dev/null @@ -1,675 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/briandowns/spinner v1.8.0/go.mod h1://Zf9tMcxfRUA36V23M6YGEAv+kECGfvpnLTnb8n4XQ= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denisenkom/go-mssqldb v0.0.0-20191001013358-cfbb681360f0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v17.12.0-ce-rc1.0.20200916142827-bd33bbf0497b+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.8.0/go.mod h1:3l45GVGkyrnYNl9HoIjnp2NnNWvh6hLAqD8yTfGjnw8= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gianarb/vagrant-go v0.0.0-20200902133321-62ba563fe383 h1:cy+lc/KmNnrmcyiAYqc8rIsBFK2tK5/H1Kg1CN4C8Vs= -github.com/gianarb/vagrant-go v0.0.0-20200902133321-62ba563fe383/go.mod h1:CeXdKywZ6zpJTvtfljhOUg4pxsCnlMY4AE540C70+C4= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w= -github.com/gobuffalo/logger v1.0.1/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= -github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= -github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/godror/godror v0.13.3/go.mod h1:2ouUT4kdhUBk7TAkHWD4SN0CdI0pgEQbo8FVHhbSKWg= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.15.2 h1:HC+hWRWf+v5zTMPyoaYTKIJih+4sd4XRWmj0qlG87Co= -github.com/grpc-ecosystem/grpc-gateway v1.15.2/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jedib0t/go-pretty v4.3.0+incompatible/go.mod h1:XemHduiw8R651AF9Pt4FwCTKeG3oo7hrHJAoznj9nag= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.1-0.20191011153232-f91d3411e481/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-oci8 v0.0.7/go.mod h1:wjDx6Xm9q7dFtHJvIlrI99JytznLw5wQ4R+9mNXJwGI= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.5/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.12.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/packethost/pkg v0.0.0-20200903155310-0433e0605550/go.mod h1:GSv7cTtIjns4yc0pyajaM1RE/KE4djJONoblFIRDrxA= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rollbar/rollbar-go v1.0.2/go.mod h1:AcFs5f0I+c71bpHlXNNDbOWJiKwjFDtISeXco0L5PKQ= -github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351/go.mod h1:DCgfY80j8GYL7MLEfvcpSFvjD0L5yZq/aZUJmhZklyg= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.0.1-0.20200713175500-884edc58ad08/go.mod h1:yk5b0mALVusDL5fMM6Rd1wgnoO5jUPhwsQ6LQAJTidQ= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stormcat24/protodep v0.0.0-20200505140716-b02c9ba62816/go.mod h1:mBd5PI4uI6NkqJpCyiWiYzWyTFs4QRDss/JTMC2b4kc= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/testcontainers/testcontainers-go v0.9.0/go.mod h1:b22BFXhRbg4PJmeMVWh6ftqjyZHgiIl3w274e9r3C2E= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tinkerbell/tink v0.0.0-20210705055947-8ea8a0e511be h1:OFLz/0N8t7xUtcDXqXn6+DR2EpsJdrKlFb6EsJ/rMPo= -github.com/tinkerbell/tink v0.0.0-20210705055947-8ea8a0e511be/go.mod h1:s4k7CORR0OMWd4cYwBqNBFPSJZhnSQxeKdDtMa/aspk= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180202135801-37707fdb30a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180810170437-e96c4e24768d/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190708153700-3bdd9d9f5532/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20201026171402-d4b8fe4fd877 h1:d4k3uIU763E31Rk4UZPA47oOoBymMsDImV3U4mGhX9E= -google.golang.org/genproto v0.0.0-20201026171402-d4b8fe4fd877/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.32.0 h1:zWTV+LMdc3kaiJMSTOFz2UgSBgx8RNQoTGiZu3fR9S0= -google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= -gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v0.0.0-20181223230014-1083505acf35/go.mod h1:R//lfYlUuTOTfblYI3lGoAAAebUdzjvbmQsuB7Ykd90= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/test/vagrant/vagrant_test.go b/test/vagrant/vagrant_test.go deleted file mode 100644 index 6759bfb1..00000000 --- a/test/vagrant/vagrant_test.go +++ /dev/null @@ -1,223 +0,0 @@ -package vagrant_test - -import ( - "context" - "encoding/json" - "net/http" - "os" - "testing" - "time" - - "github.com/gianarb/vagrant-go" - "github.com/tinkerbell/tink/client" - "github.com/tinkerbell/tink/pkg" - "github.com/tinkerbell/tink/protos/hardware" - "github.com/tinkerbell/tink/protos/template" - "github.com/tinkerbell/tink/protos/workflow" -) - -func TestVagrantSetupGuide(t *testing.T) { - _, ok := os.LookupEnv("TEST_WITH_VAGRANT") - if !ok { - t.Skip("You can run e2e tests that depends from Vagrant setting the envvar TEST_WITH_VAGRANT") - } - - ctx := context.Background() - - machine, err := vagrant.Up(ctx, - vagrant.WithLogger(t.Logf), - vagrant.WithMachineName("provisioner"), - vagrant.WithWorkdir("../../deploy/infrastructure/vagrant"), - ) - if err != nil { - t.Fatal(err) - } - - defer func() { - err := machine.Destroy(ctx) - if err != nil { - t.Error(err) - } - }() - - _, err = machine.Exec(ctx, "cd /vagrant/deploy && source ../.env && docker-compose up -d") - if err != nil { - t.Fatal(err) - } - - _, err = machine.Exec(ctx, "docker pull hello-world") - if err != nil { - t.Fatal(err) - } - - _, err = machine.Exec(ctx, "docker tag hello-world 192.168.1.1/hello-world") - if err != nil { - t.Fatal(err) - } - - _, err = machine.Exec(ctx, "docker push 192.168.1.1/hello-world") - if err != nil { - t.Fatal(err) - } - - for ii := 0; ii < 5; ii++ { - req, err := http.NewRequestWithContext(ctx, "GET", "http://localhost:42114/healthz", nil) - if err != nil { - t.Errorf("error forming request: %v", err) - } - - h := &http.Client{} - resp, err := h.Do(req) - if err != nil || resp.StatusCode != http.StatusOK { - if err != nil { - t.Logf("err tinkerbell healthcheck... retrying: %s", err) - } else { - t.Logf("err tinkerbell healthcheck... expected status code 200 got %d retrying", resp.StatusCode) - } - time.Sleep(10 * time.Second) - } - if err := resp.Body.Close(); err != nil { - t.Logf("error closing body: %v", err) - } - } - - t.Log("Tinkerbell is up and running") - - conn, err := client.NewClientConn(&client.ConnOptions{ - CertURL: "http://127.0.0.1:42114/cert", - GRPCAuthority: "127.0.0.1:42113", - }) - if err != nil { - t.Fatal(err) - } - cl := client.NewFullClient(conn) - - _, err = cl.HardwareClient.All(ctx, &hardware.Empty{}) - if err != nil { - t.Fatal(err) - } - err = registerHardware(ctx, cl) - if err != nil { - t.Fatal(err) - } - - templateID, err := registerTemplate(ctx, cl) - if err != nil { - t.Fatal(err) - } - - t.Logf("templateID: %s", templateID) - - workflowID, err := createWorkflow(ctx, cl, templateID) - if err != nil { - t.Fatal(err) - } - - t.Logf("WorkflowID: %s", workflowID) - - worker, err := vagrant.Up(ctx, - vagrant.WithLogger(t.Logf), - vagrant.WithMachineName("worker"), - vagrant.WithWorkdir("../../deploy/infrastructure/vagrant"), - vagrant.RunAsync(), - ) - if err != nil { - t.Fatal(err) - } - - defer func() { - err := worker.Destroy(ctx) - if err != nil { - t.Error(err) - } - }() - - for iii := 0; iii < 30; iii++ { - events, err := cl.WorkflowClient.ShowWorkflowEvents(ctx, &workflow.GetRequest{ - Id: workflowID, - }) - if err != nil { - t.Fatal(err) - } - for event, err := events.Recv(); err == nil && event != nil; event, err = events.Recv() { - if event.ActionName == "hello_world" && event.ActionStatus == workflow.State_STATE_SUCCESS { - t.Logf("event %s SUCCEEDED as expected", event.ActionName) - return - } - } - time.Sleep(10 * time.Second) - } - t.Fatal("Workflow never got to a complite state or it didn't make it on time (10m)") -} - -func createWorkflow(ctx context.Context, cl *client.FullClient, templateID string) (string, error) { - res, err := cl.WorkflowClient.CreateWorkflow(ctx, &workflow.CreateRequest{ - Template: templateID, - Hardware: `{"device_1":"08:00:27:00:00:01"}`, - }) - if err != nil { - return "", err - } - return res.Id, nil -} - -func registerTemplate(ctx context.Context, cl *client.FullClient) (string, error) { - resp, err := cl.TemplateClient.CreateTemplate(ctx, &template.WorkflowTemplate{ - Name: "hello-world", - Data: `version: "0.1" -name: hello_world_workflow -global_timeout: 600 -tasks: - - name: "hello world" - worker: "{{.device_1}}" - actions: - - name: "hello_world" - image: hello-world - timeout: 60`, - }) - if err != nil { - return "", err - } - - return resp.Id, nil -} - -func registerHardware(_ context.Context, cl *client.FullClient) error { - data := []byte(`{ - "id": "ce2e62ed-826f-4485-a39f-a82bb74338e2", - "metadata": { - "facility": { - "facility_code": "onprem" - }, - "instance": {}, - "state": "" - }, - "network": { - "interfaces": [ - { - "dhcp": { - "arch": "x86_64", - "ip": { - "address": "192.168.1.5", - "gateway": "192.168.1.1", - "netmask": "255.255.255.248" - }, - "mac": "08:00:27:00:00:01", - "uefi": false - }, - "netboot": { - "allow_pxe": true, - "allow_workflow": true - } - } - ] - } -}`) - hw := pkg.HardwareWrapper{Hardware: &hardware.Hardware{}} - err := json.Unmarshal(data, &hw) - if err != nil { - return err - } - _, err = cl.HardwareClient.Push(context.Background(), &hardware.PushRequest{Data: hw.Hardware}) - return err -} diff --git a/deploy/infrastructure/vagrant/.env b/vagrant/.env similarity index 76% rename from deploy/infrastructure/vagrant/.env rename to vagrant/.env index fb12b0fc..7c9b5ff0 100644 --- a/deploy/infrastructure/vagrant/.env +++ b/vagrant/.env @@ -4,8 +4,7 @@ LOADBALANCER_IP=192.168.56.5 MACHINE1_IP=192.168.56.43 MACHINE1_MAC=08:00:27:9e:f5:3a -# USE_HELM=true -USE_HELM=true - # https://github.com/tinkerbell/charts/pkgs/container/charts%2Fstack -HELM_CHART_VERSION=0.1.2 +HELM_CHART_VERSION=0.4.2 +KUBECTL_VERSION=1.28.3 +K3D_VERSION=v5.6.0 diff --git a/deploy/infrastructure/vagrant/Vagrantfile b/vagrant/Vagrantfile similarity index 52% rename from deploy/infrastructure/vagrant/Vagrantfile rename to vagrant/Vagrantfile index 847f4ff7..1f310807 100644 --- a/deploy/infrastructure/vagrant/Vagrantfile +++ b/vagrant/Vagrantfile @@ -12,54 +12,41 @@ open(".env", "r").readlines.each { LIBVIRT_HOST_IP = ENV["LIBVIRT_HOST_IP"] || "192.168.56.1" PROVISIONER_IP = ENV["PROVISIONER_IP"] || "192.168.56.4" LOADBALANCER_IP = ENV["LOADBALANCER_IP"] || "192.168.56.4" +GATEWAY_IP = ENV["GATEWAY_IP"] || "" MACHINE1_IP = ENV["MACHINE1_IP"] || "192.168.56.43" MACHINE1_MAC = (ENV["MACHINE1_MAC"] || "08:00:27:9E:F5:3A").downcase -USE_HELM = ENV["USE_HELM"] || "" -HELM_CHART_VERSION = ENV["HELM_CHART_VERSION"] || "0.1.2" +HELM_CHART_VERSION = ENV["HELM_CHART_VERSION"] || "0.4.0" +KUBECTL_VERSION = ENV["KUBECTL_VERSION"] || "1.28.3" +K3D_VERSION = ENV["K3D_VERSION"] || "v5.6.0" HELM_LOADBALANCER_INTERFACE = ENV["HELM_LOADBALANCER_INTERFACE"] || "eth1" -STACK_OPT = "compose/" -STACK_BASE_DIR = "../../stack/" -STACK_DIR = STACK_BASE_DIR + STACK_OPT DEST_DIR_BASE = "/sandbox/stack/" -DEST_DIR = DEST_DIR_BASE + STACK_OPT -ENV_FILE = ".env_compose" Vagrant.configure("2") do |config| config.vm.provider :libvirt do |libvirt| libvirt.qemu_use_session = false end - config.vm.define "provisioner" do |provisioner| - if USE_HELM == "true" - STACK_DIR = STACK_BASE_DIR + "helm/" - DEST_DIR = DEST_DIR_BASE + "helm/" - end - provisioner.vm.box = "generic/ubuntu2204" - provisioner.vm.synced_folder STACK_BASE_DIR, DEST_DIR_BASE - provisioner.vm.network "private_network", ip: "192.168.56.4", netmask: "255.255.255.0", - libvirt__network_name: "tink_network", - libvirt__host_ip: LIBVIRT_HOST_IP, - libvirt__netmask: "255.255.255.0", - libvirt__dhcp_enabled: false + config.vm.define "stack" do |stack| + stack.vm.box = "generic/ubuntu2204" + stack.vm.synced_folder "", DEST_DIR_BASE + stack.vm.network "private_network", ip: "192.168.56.4", netmask: "255.255.255.0", + libvirt__network_name: "tink_network", + libvirt__host_ip: LIBVIRT_HOST_IP, + libvirt__netmask: "255.255.255.0", + libvirt__dhcp_enabled: false - provisioner.vm.provider "virtualbox" do |v, override| + stack.vm.provider "virtualbox" do |v, override| v.memory = 2048 v.cpus = 2 - override.vm.synced_folder STACK_BASE_DIR, DEST_DIR_BASE end - provisioner.vm.provider "libvirt" do |l, override| + stack.vm.provider "libvirt" do |l, override| l.memory = 2048 l.cpus = 2 - override.vm.synced_folder STACK_BASE_DIR, DEST_DIR_BASE, type: "rsync" + override.vm.synced_folder "", DEST_DIR_BASE, type: "rsync" end - if USE_HELM == "true" - provisioner.vm.provision :shell, path: STACK_DIR + "/setup.sh", args: [PROVISIONER_IP, MACHINE1_IP, MACHINE1_MAC, DEST_DIR, LOADBALANCER_IP, HELM_CHART_VERSION, HELM_LOADBALANCER_INTERFACE] - else - provisioner.vm.provision "file", source: ENV_FILE, destination: DEST_DIR + ".env" - provisioner.vm.provision :shell, path: STACK_DIR + "/setup.sh" - end + stack.vm.provision :shell, path: "setup.sh", args: [PROVISIONER_IP, MACHINE1_IP, MACHINE1_MAC, DEST_DIR_BASE, LOADBALANCER_IP, HELM_CHART_VERSION, HELM_LOADBALANCER_INTERFACE, KUBECTL_VERSION, K3D_VERSION, GATEWAY_IP] end config.vm.define :machine1, autostart: false do |machine1| @@ -88,7 +75,8 @@ Vagrant.configure("2") do |config| v.memory = 2048 v.cpus = 2 v.gui = true - v.customize ["modifyvm", :id, "--nic1", "hostonly", "--nic2", "nat", "--boot1", "disk", "--boot2", "net"] + v.customize ["modifyvm", :id, "--nic1", "hostonlynet", "--nic2", "nat", "--boot1", "disk", "--boot2", "net"] + v.customize ["modifyvm", :id, "--macaddress1", MACHINE1_MAC.gsub(/[:-]/, "").strip] v.customize ["setextradata", :id, "GUI/ScaleFactor", "3.0"] v.check_guest_additions = false end diff --git a/deploy/stack/helm/manifests/hardware.yaml b/vagrant/hardware.yaml similarity index 94% rename from deploy/stack/helm/manifests/hardware.yaml rename to vagrant/hardware.yaml index 9c21058c..666e1d8a 100644 --- a/deploy/stack/helm/manifests/hardware.yaml +++ b/vagrant/hardware.yaml @@ -21,7 +21,6 @@ spec: hostname: machine1 ip: address: $TINKERBELL_CLIENT_IP - gateway: $TINKERBELL_CLIENT_GW netmask: 255.255.255.0 lease_time: 86400 mac: $TINKERBELL_CLIENT_MAC diff --git a/vagrant/ipxe.efi b/vagrant/ipxe.efi new file mode 100644 index 00000000..fd4c0b26 Binary files /dev/null and b/vagrant/ipxe.efi differ diff --git a/deploy/stack/helm/setup.sh b/vagrant/setup.sh similarity index 67% rename from deploy/stack/helm/setup.sh rename to vagrant/setup.sh index e8bd9589..0160a22e 100644 --- a/deploy/stack/helm/setup.sh +++ b/vagrant/setup.sh @@ -9,7 +9,9 @@ install_docker() { } install_kubectl() { - curl -LO https://dl.k8s.io/v1.25.2/bin/linux/amd64/kubectl + local kubectl_version=$1 + + curl -LO https://dl.k8s.io/v"$kubectl_version"/bin/linux/amd64/kubectl chmod +x ./kubectl mv ./kubectl /usr/local/bin/kubectl } @@ -39,7 +41,9 @@ update_apt() { } install_k3d() { - wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | TAG=v5.4.6 bash + local k3d_Version=$1 + + wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | TAG="$k3d_version" bash } start_k3d() { @@ -56,21 +60,27 @@ kubectl_for_vagrant_user() { echo 'export KUBECONFIG="/home/vagrant/.kube/config"' >>~vagrant/.bashrc } -helm_customize_values() { - local loadbalancer_ip=$1 - local helm_chart_version=$2 - - helm inspect values oci://ghcr.io/tinkerbell/charts/stack --version "$helm_chart_version" >/tmp/stack-values.yaml - sed -i "s/192.168.2.111/${loadbalancer_ip}/g" /tmp/stack-values.yaml -} - helm_install_tink_stack() { local namespace=$1 local version=$2 local interface=$3 - - trusted_proxies=$(kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' | tr ' ' ',') - helm install stack-release oci://ghcr.io/tinkerbell/charts/stack --version "$version" --create-namespace --namespace "$namespace" --wait --set "boots.boots.trustedProxies=${trusted_proxies}" --set "hegel.hegel.trustedProxies=${trusted_proxies}" --set "kubevip.interface=$interface" --values /tmp/stack-values.yaml + local loadbalancer_ip=$4 + + trusted_proxies="" + until [ "$trusted_proxies" != "" ]; do + trusted_proxies=$(kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' | tr ' ' ',') + done + helm install tink-stack oci://ghcr.io/tinkerbell/charts/stack \ + --version "$version" \ + --create-namespace \ + --namespace "$namespace" \ + --wait \ + --set "smee.trustedProxies={${trusted_proxies}}" \ + --set "hegel.trustedProxies={${trusted_proxies}}" \ + --set "stack.kubevip.interface=$interface" \ + --set "stack.relay.sourceInterface=$interface" \ + --set "stack.loadBalancerIP=$loadbalancer_ip" \ + --set "smee.publicIP=$loadbalancer_ip" } apply_manifests() { @@ -105,31 +115,35 @@ run_helm() { local loadbalancer_ip=$5 local helm_chart_version=$6 local loadbalancer_interface=$7 + local k3d_version=$8 local namespace="tink-system" - install_k3d + install_k3d "$k3d_version" start_k3d install_helm - helm_customize_values "$loadbalancer_ip" "$helm_chart_version" - helm_install_tink_stack "$namespace" "$helm_chart_version" "$loadbalancer_interface" + helm_install_tink_stack "$namespace" "$helm_chart_version" "$loadbalancer_interface" "$loadbalancer_ip" apply_manifests "$worker_ip" "$worker_mac" "$manifests_dir" "$loadbalancer_ip" "$namespace" kubectl_for_vagrant_user } main() { - local host_ip=$1 - local worker_ip=$2 - local worker_mac=$3 - local manifests_dir=$4 - local loadbalancer_ip=$5 - local helm_chart_version=$6 - local loadbalancer_interface=$7 + local host_ip="$1" + local worker_ip="$2" + local worker_mac="$3" + local manifests_dir="$4" + local loadbalancer_ip="$5" + local helm_chart_version="$6" + local loadbalancer_interface="$7" + local kubectl_version="$8" + local k3d_version="$9" update_apt install_docker - install_kubectl - - run_helm "$host_ip" "$worker_ip" "$worker_mac" "$manifests_dir"/manifests "$loadbalancer_ip" "$helm_chart_version" "$loadbalancer_interface" + # https://github.com/ipxe/ipxe/pull/863 + # Needed after iPXE increased the default TCP window size to 2MB. + sudo ethtool -K eth1 tx off sg off tso off + install_kubectl "$kubectl_version" + run_helm "$host_ip" "$worker_ip" "$worker_mac" "$manifests_dir" "$loadbalancer_ip" "$helm_chart_version" "$loadbalancer_interface" "$k3d_version" } if [[ ${BASH_SOURCE[0]} == "$0" ]]; then diff --git a/deploy/stack/helm/manifests/template.yaml b/vagrant/template.yaml similarity index 86% rename from deploy/stack/helm/manifests/template.yaml rename to vagrant/template.yaml index 65e6d35a..89e76985 100644 --- a/deploy/stack/helm/manifests/template.yaml +++ b/vagrant/template.yaml @@ -20,7 +20,7 @@ spec: timeout: 600 environment: DEST_DISK: {{ index .Hardware.Disks 0 }} - IMG_URL: "http://$TINKERBELL_HOST_IP:8080/focal-server-cloudimg-amd64.raw.gz" + IMG_URL: "http://$TINKERBELL_HOST_IP:8080/jammy-server-cloudimg-amd64.raw.gz" COMPRESSED: true - name: "grow-partition" image: quay.io/tinkerbell-actions/cexec:v1.0.0 @@ -87,3 +87,14 @@ spec: GID: 0 MODE: 0644 DIRMODE: 0755 + - name: "kexec" + image: ghcr.io/jacobweinstock/waitdaemon:latest + timeout: 90 + pid: host + environment: + BLOCK_DEVICE: {{ formatPartition ( index .Hardware.Disks 0 ) 1 }} + FS_TYPE: ext4 + IMAGE: quay.io/tinkerbell-actions/kexec:v1.0.0 + WAIT_SECONDS: 10 + volumes: + - /var/run/docker.sock:/var/run/docker.sock diff --git a/deploy/stack/helm/manifests/ubuntu-download.yaml b/vagrant/ubuntu-download.yaml similarity index 89% rename from deploy/stack/helm/manifests/ubuntu-download.yaml rename to vagrant/ubuntu-download.yaml index 0512eb8a..a11d56f6 100644 --- a/deploy/stack/helm/manifests/ubuntu-download.yaml +++ b/vagrant/ubuntu-download.yaml @@ -26,17 +26,17 @@ data: apiVersion: batch/v1 kind: Job metadata: - name: download-ubuntu-focal + name: download-ubuntu-jammy spec: template: spec: containers: - - name: download-ubuntu-focal + - name: download-ubuntu-jammy image: bash:5.2.2 command: ["/script/entrypoint.sh"] args: [ - "https://cloud-images.ubuntu.com/daily/server/focal/current/focal-server-cloudimg-amd64.img", + "https://cloud-images.ubuntu.com/daily/server/jammy/current/jammy-server-cloudimg-amd64.img", "/output", ] volumeMounts: diff --git a/deploy/stack/compose/manifests/workflow.yaml b/vagrant/workflow.yaml similarity index 100% rename from deploy/stack/compose/manifests/workflow.yaml rename to vagrant/workflow.yaml