Initial commit.
This commit is contained in:
88
Vagrantfile
vendored
Normal file
88
Vagrantfile
vendored
Normal file
@ -0,0 +1,88 @@
|
||||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
# --- USER CUSTOMIZATION ---
|
||||
# Change the values below to your desired settings.
|
||||
|
||||
# 1. The username for the new user account with sudo permissions.
|
||||
USERNAME = "pkhamre"
|
||||
|
||||
# 2. The absolute path to your SSH public key.
|
||||
PUBLIC_KEY_PATH = File.expand_path("~/.ssh/id_ed25519.pub")
|
||||
|
||||
# --- VM & CLUSTER CONFIGURATION ---
|
||||
|
||||
# Base box for all VMs
|
||||
VAGRANT_BOX = "cloud-image/ubuntu-24.04"
|
||||
VAGRANT_BOX_VERSION = "20250704.0.0"
|
||||
|
||||
# Predefined static IP addresses and configurations for each node
|
||||
NODES = [
|
||||
{ hostname: "k8s-cp-1", ip: "192.168.122.101", memory: 2048, cpus: 2 },
|
||||
{ hostname: "k8s-cp-2", ip: "192.168.122.102", memory: 2048, cpus: 2 },
|
||||
{ hostname: "k8s-cp-3", ip: "192.168.122.103", memory: 2048, cpus: 2 },
|
||||
{ hostname: "k8s-worker-1", ip: "192.168.122.111", memory: 2048, cpus: 4 },
|
||||
{ hostname: "k8s-worker-2", ip: "192.168.122.112", memory: 2048, cpus: 4 }
|
||||
]
|
||||
|
||||
Vagrant.configure("2") do |config|
|
||||
config.vm.box = VAGRANT_BOX
|
||||
config.vm.box_version = VAGRANT_BOX_VERSION
|
||||
|
||||
# Verify that the specified SSH public key file exists before proceeding.
|
||||
if !File.exist?(PUBLIC_KEY_PATH)
|
||||
raise "SSH public key not found at path: #{PUBLIC_KEY_PATH}. Please update the PUBLIC_KEY_PATH variable in the Vagrantfile."
|
||||
end
|
||||
publicKey = File.read(PUBLIC_KEY_PATH).strip
|
||||
|
||||
# --- DEFINE VMS FROM THE NODES LIST ---
|
||||
NODES.each do |node_config|
|
||||
config.vm.define node_config[:hostname] do |node|
|
||||
node.vm.hostname = node_config[:hostname]
|
||||
|
||||
# ** CORRECTED NETWORK CONFIGURATION **
|
||||
# Use 'private_network' to assign a static IP and 'libvirt__network_name'
|
||||
# to connect to an existing libvirt virtual network.
|
||||
node.vm.network "private_network",
|
||||
ip: node_config[:ip],
|
||||
libvirt__network_name: "default"
|
||||
|
||||
node.vm.provider "libvirt" do |libvirt|
|
||||
libvirt.memory = node_config[:memory]
|
||||
libvirt.cpus = node_config[:cpus]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# --- COMMON PROVISIONING SCRIPT ---
|
||||
# This script runs on all nodes to create a user and set up SSH access.
|
||||
config.vm.provision "shell", inline: <<-SHELL
|
||||
echo ">>> Starting user and SSH configuration..."
|
||||
|
||||
# Create the user with a home directory and add to the sudo group
|
||||
if ! id -u #{USERNAME} >/dev/null 2>&1; then
|
||||
echo ">>> Creating user '#{USERNAME}'"
|
||||
useradd #{USERNAME} --create-home --shell /bin/bash --groups sudo
|
||||
else
|
||||
echo ">>> User '#{USERNAME}' already exists"
|
||||
fi
|
||||
|
||||
# Grant passwordless sudo to the new user
|
||||
echo ">>> Configuring passwordless sudo for '#{USERNAME}'"
|
||||
echo '#{USERNAME} ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/#{USERNAME}
|
||||
chmod 0440 /etc/sudoers.d/#{USERNAME}
|
||||
|
||||
# Set up SSH key-based authentication
|
||||
echo ">>> Adding SSH public key for '#{USERNAME}'"
|
||||
HOME_DIR=$(eval echo ~#{USERNAME})
|
||||
mkdir -p $HOME_DIR/.ssh
|
||||
echo '#{publicKey}' > $HOME_DIR/.ssh/authorized_keys
|
||||
|
||||
# Set correct permissions for the .ssh directory and authorized_keys file
|
||||
chown -R #{USERNAME}:#{USERNAME} $HOME_DIR/.ssh
|
||||
chmod 700 $HOME_DIR/.ssh
|
||||
chmod 600 $HOME_DIR/.ssh/authorized_keys
|
||||
|
||||
echo ">>> User configuration complete!"
|
||||
SHELL
|
||||
end
|
Reference in New Issue
Block a user