#!/bin/bash

set -ex

# Install dependencies
sudo apt update
sudo apt install -y vagrant python3-pip git

# Set up SSH key pair for passwordless SSH
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa_kubespray
cat ~/.ssh/id_rsa_kubespray.pub >> ~/.ssh/authorized_keys

# Delete existing Kubespray directory if it exists
if [ -d "kubespray" ]; then
  rm -rf kubespray
fi

# Clone Kubespray repository
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray

# Install Kubespray dependencies
sudo pip3 install -r requirements.txt

# Create Vagrant environment with three virtual machines
cat <<EOF > Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.define "test-server-1" do |node|
    node.vm.box = "generic/ubuntu2004"
    node.vm.hostname = "test-server-1.local"
    node.vm.network "private_network", ip: "192.168.56.101"
    node.vm.provider "virtualbox" do |vb|
      vb.memory = "2048"
      vb.cpus = 2
    end
    node.vm.provision "shell", inline: <<-SHELL
      sudo apt-get update
      sudo apt-get install -y docker.io
      sudo usermod -aG docker vagrant
    SHELL
  end

  config.vm.define "test-server-2" do |node|
    node.vm.box = "generic/ubuntu2004"
    node.vm.hostname = "test-server-2.local"
    node.vm.network "private_network", ip: "192.168.56.102"
    node.vm.provider "virtualbox" do |vb|
      vb.memory = "2048"
      vb.cpus = 2
    end
    node.vm.provision "shell", inline: <<-SHELL
      sudo apt-get update
      sudo apt-get install -y docker.io
      sudo usermod -aG docker vagrant
    SHELL
  end
EOF

# Generate inventory file using Kubespray inventory builder
python3 contrib/inventory_builder/inventory.py ${IPS[@]}

# Deploy Kubernetes cluster using Ansible playbook
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml

# Install kubectl on local machine
sudo curl -o /usr/local/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
sudo chmod +x /usr/local/bin/kubectl

echo "Kubernetes cluster has been successfully deployed using Kubespray."
echo "You can now use kubectl to interact with the cluster."
