diff --git a/.github/workflows/vagrant-install.yaml b/.github/workflows/vagrant-install.yaml new file mode 100644 index 000000000..28dc352d6 --- /dev/null +++ b/.github/workflows/vagrant-install.yaml @@ -0,0 +1,96 @@ +name: Vagrant install + +on: + pull_request: + types: [opened, reopened, synchronize] + +env: + LIBVIRT_DEFAULT_URI: "qemu:///system" + +jobs: + main: + name: Build and deploy + runs-on: + - self-hosted + - Linux + - kvm + - vagrant + - equinix + steps: + - uses: actions/checkout@v3 + - name: Build Harvester artifacts + run: | + make + - name: Clone and checkout ipxe-examples + id: ipxe + run: | + cd $HOME + if [ ! -d ipxe-examples ]; then + git clone https://github.com/harvester/ipxe-examples.git + fi + + cd ipxe-examples + git reset && git checkout . + git clean -fd + git pull + echo "VAGRANT_HOME=$HOME/ipxe-examples/vagrant-pxe-harvester" >> $GITHUB_OUTPUT + - name: Clean up previous vagrant deployment + working-directory: ${{ steps.ipxe.outputs.VAGRANT_HOME }} + run: | + vagrant destroy -f + - name: Remove OVMF.fd line if needed + working-directory: ${{ steps.ipxe.outputs.VAGRANT_HOME }} + run: | + if [ ! -f /usr/share/qemu/OVMF.fd ]; then + echo "Remove libvirt loader: can't find UEFI firmware" + sed 's/libvirt.loader.*/#libvirt.loader = /' Vagrantfile + fi + - name: Generate SSH keys + run: | + ssh-keygen -t rsa -q -N "" -f ./ci/terraform/tmp-ssh-key + - name: Set SSH key in ipxe-examples settings + run: | + export PUB_KEY=$(cat ./ci/terraform/tmp-ssh-key.pub) + yq e -i ".harvester_config.ssh_authorized_keys += [ strenv(PUB_KEY) ]" ${{ steps.ipxe.outputs.VAGRANT_HOME }}/settings.yml + - name: Set artifacts in ipxe-examples settings + run: | + yq e -i ".harvester_iso_url = \"file://${{ github.workspace }}/dist/artifacts/harvester-master-amd64.iso\"" ${{ steps.ipxe.outputs.VAGRANT_HOME }}/settings.yml + yq e -i ".harvester_kernel_url = \"file://${{ github.workspace }}/dist/artifacts/harvester-master-vmlinuz-amd64\"" ${{ steps.ipxe.outputs.VAGRANT_HOME }}/settings.yml + yq e -i ".harvester_ramdisk_url = \"file://${{ github.workspace }}/dist/artifacts/harvester-master-initrd-amd64\"" ${{ steps.ipxe.outputs.VAGRANT_HOME }}/settings.yml + yq e -i ".harvester_rootfs_url = \"file://${{ github.workspace }}/dist/artifacts/harvester-master-rootfs-amd64.squashfs\"" ${{ steps.ipxe.outputs.VAGRANT_HOME }}/settings.yml + - name: Setup cluster + working-directory: ${{ steps.ipxe.outputs.VAGRANT_HOME }} + run: | + ./setup_harvester.sh + - name: Enable soft emulation + working-directory: ./ci/terraform + run: | + ./enable_soft_emulation.sh ${{ steps.ipxe.outputs.VAGRANT_HOME }}/settings.yml + - name: Clean the previous temp files + working-directory: ./ci/terraform + run: | + ./cleanup_test_files.sh + - name: Testing existing files + working-directory: ./ci/terraform + run: | + ./check_files.sh ${{ steps.ipxe.outputs.VAGRANT_HOME }}/settings.yml + - name: Testing services status + working-directory: ./ci/terraform + run: | + ./check_services_status.sh ${{ steps.ipxe.outputs.VAGRANT_HOME }}/settings.yml + - name: Testing basic operations with terraform + working-directory: ./ci/terraform + run: | + curl https://releases.hashicorp.com/terraform/1.3.7/terraform_1.3.7_linux_amd64.zip -o terraform_bin.zip + unzip -o terraform_bin.zip + ./get_kubeconfig.sh ${{ steps.ipxe.outputs.VAGRANT_HOME }}/settings.yml + ./terraform init -no-color + ./terraform apply -auto-approve -no-color + - name: Test network on the VMs + working-directory: ./ci/terraform + run: | + ./test_terraform_vm.sh ${{ steps.ipxe.outputs.VAGRANT_HOME }}/settings.yml + - name: Clean up vagrant cluster + working-directory: ${{ steps.ipxe.outputs.VAGRANT_HOME }} + run: | + vagrant destroy -f