Skip to content

Commit 718efb8

Browse files
committed
Proxmox script for kind
1 parent 4ea28d6 commit 718efb8

File tree

1 file changed

+251
-0
lines changed

1 file changed

+251
-0
lines changed
Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
#!/usr/bin/env bash
2+
export TERM=xterm-256color
3+
4+
apt update -qq
5+
apt install jq curl -y -qq
6+
7+
function header_info() {
8+
clear
9+
cat <<"EOF"
10+
11+
███████╗██████╗ ██╗ ██╗ ██╗███╗ ██╗██╗ ██╗ ██╗
12+
██╔════╝██╔══██╗██║ ██║ ██║████╗ ██║██║ ██╔╝ ╚██╗
13+
███████╗██████╔╝██║ ██║ ██║██╔██╗ ██║█████╔╝ ╚██╗
14+
╚════██║██╔═══╝ ██║ ██║ ██║██║╚██╗██║██╔═██╗ ██╔╝
15+
███████║██║ ███████╗╚██████╔╝██║ ╚████║██║ ██╗ ██╔╝
16+
╚══════╝╚═╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝
17+
EOF
18+
}
19+
20+
YW=$(echo "\033[33m")
21+
BL=$(echo "\033[36m")
22+
HA=$(echo "\033[1;34m")
23+
RD=$(echo "\033[01;31m")
24+
BGN=$(echo "\033[4;92m")
25+
GN=$(echo "\033[1;92m")
26+
DGN=$(echo "\033[32m")
27+
CL=$(echo "\033[m")
28+
29+
if whiptail --backtitle "Splunk" --title "Observability Workshop VM" --yesno "This will create a Observability Workshop VM. Proceed?" 10 58; then
30+
:
31+
else
32+
header_info && echo -e "${RD}User exited script${CL}\n" && exit
33+
fi
34+
35+
if SWIPE_ID=$(whiptail --backtitle "Splunk" --title "SWiPE ID" --inputbox "Enter your SWiPE ID:" 10 58 3>&1 1>&2 2>&3); then
36+
#SWIPE_ID=$REPLY
37+
if [[ -n "$SWIPE_ID" ]]; then
38+
echo -e "SWiPE ID: ${YW}${SWIPE_ID}${CL}"
39+
else
40+
header_info && echo -e "${RD}Invalid SWiPE ID. Exiting script.${CL}\n" && exit
41+
fi
42+
else
43+
header_info && echo -e "${RD}User exited script${CL}\n" && exit
44+
fi
45+
46+
# Call the API and store the response
47+
JSON_RESPONSE=$(curl -s https://swipe.splunk.show/api?id=${SWIPE_ID})
48+
49+
# Check if Workshop ID not found
50+
if [[ "$JSON_RESPONSE" == '{"message":"Workshop ID not found"}' ]]; then
51+
header_info && echo -e "${RD}Workshop ID not found. Exiting script.${CL}\n" && exit
52+
fi
53+
54+
# Parse the JSON response and extract values
55+
REALM=$(echo ${JSON_RESPONSE} | jq -r '.REALM')
56+
RUM_TOKEN=$(echo ${JSON_RESPONSE} | jq -r '.RUM')
57+
INGEST_TOKEN=$(echo ${JSON_RESPONSE} | jq -r '.INGEST')
58+
API_TOKEN=$(echo ${JSON_RESPONSE} | jq -r '.API')
59+
HEC_TOKEN=$(echo ${JSON_RESPONSE} | jq -r '.HEC_TOKEN')
60+
HEC_URL=$(echo ${JSON_RESPONSE} | jq -r '.HEC_URL')
61+
62+
NEXTID=$(pvesh get /cluster/nextid)
63+
64+
UNIQUE_HOST_ID=$(echo $RANDOM | md5sum | head -c 4)
65+
RANDOM_ADDITION=$((4000 + RANDOM % 1001))
66+
VMID=$((NEXTID + RANDOM_ADDITION))
67+
STORAGE=local-lvm
68+
HOSTNAME=$UNIQUE_HOST_ID-workshop-$VMID
69+
USER=splunk
70+
PASSWORD=Splunk123!
71+
LATEST_K9S_VERSION=$(curl -s https://api.github.com/repos/derailed/k9s/releases/latest | jq -r '.tag_name')
72+
LATEST_TERRAFORM_VERSION=$(curl -s https://api.github.com/repos/hashicorp/terraform/releases/latest | jq -r '.tag_name | ltrimstr("v")')
73+
74+
echo -e "Hostname: ${YW}${HOSTNAME}${CL}\n"
75+
#set -x
76+
77+
cat << EOF | tee /var/lib/vz/snippets/ubuntu.yaml >/dev/null
78+
#cloud-config
79+
package_update: true
80+
package_upgrade: true
81+
package_reboot_if_required: false
82+
83+
hostname: $HOSTNAME
84+
manage_etc_hosts: true
85+
fqdn: $HOSTNAME
86+
user: $USER
87+
password: $PASSWORD
88+
chpasswd:
89+
expire: False
90+
users:
91+
- name: $USER
92+
sudo: ALL=(ALL) NOPASSWD:ALL
93+
shell: /bin/bash
94+
ssh_pwauth: True
95+
packages:
96+
- bash
97+
- ansible
98+
- docker
99+
- docker-buildx
100+
- curl
101+
- docker-compose
102+
- jq
103+
- maven
104+
- net-tools
105+
- openjdk-17-jdk
106+
- python3-venv
107+
- python3-pip
108+
- unzip
109+
- zsh
110+
- git
111+
- wget
112+
- qemu-guest-agent
113+
snap:
114+
commands:
115+
- snap install kubectl --classic
116+
write_files:
117+
- path: /etc/environment
118+
append: true
119+
content: |
120+
# Splunk environment variables
121+
export TERM=xterm-256color
122+
export RUM_TOKEN="$RUM_TOKEN"
123+
export ACCESS_TOKEN="$INGEST_TOKEN"
124+
export API_TOKEN="$API_TOKEN"
125+
export HEC_TOKEN="$HEC_TOKEN"
126+
export HEC_URL="$HEC_URL"
127+
export REALM="$REALM"
128+
129+
INSTANCE="$HOSTNAME"
130+
CLUSTER_NAME="$HOSTNAME-cluster"
131+
132+
export INSTANCE CLUSTER_NAME
133+
134+
export KUBECONFIG=/home/splunk/.kube/config
135+
alias kc='kubectl'
136+
alias dc='docker-compose'
137+
138+
- path: /tmp/workshop-secrets.yaml
139+
permissions: '0755'
140+
content: |
141+
apiVersion: v1
142+
kind: Secret
143+
metadata:
144+
name: workshop-secret
145+
namespace: default
146+
type: Opaque
147+
stringData:
148+
app: $HOSTNAME-store
149+
env: $HOSTNAME-workshop
150+
deployment: "deployment.environment=$HOSTNAME-workshop"
151+
realm: $REALM
152+
access_token: $INGEST_TOKEN
153+
api_token: $API_TOKEN
154+
rum_token: $RUM_TOKEN
155+
hec_token: $HEC_TOKEN
156+
hec_url: $HEC_URL
157+
url: frontend
158+
159+
- path: /tmp/3-node.yaml
160+
permissions: '0755'
161+
content: |
162+
kind: Cluster
163+
apiVersion: kind.x-k8s.io/v1alpha4
164+
nodes:
165+
- role: control-plane
166+
- role: worker
167+
- role: worker
168+
169+
runcmd:
170+
- systemctl start qemu-guest-agent
171+
- systemctl enable qemu-guest-agent
172+
173+
#- chsh -s $(which zsh) splunk
174+
#- echo "source /etc/skel/.profile" >> /home/splunk/.zshrc
175+
176+
# Install Helm
177+
- curl -s https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
178+
179+
# Install K9s (Kubernetes UI) - Version: ${LATEST_K9S_VERSION}
180+
- curl -S -OL https://github.com/derailed/k9s/releases/download/${LATEST_K9S_VERSION}/k9s_Linux_amd64.tar.gz
181+
- tar xfz k9s_Linux_amd64.tar.gz -C /usr/local/bin/ k9s
182+
183+
# Download Workshop
184+
- curl -s -OL https://github.com/splunk/observability-workshop/archive/main.zip
185+
- unzip -qq main.zip -d /home/splunk/
186+
- mkdir /home/splunk/workshop
187+
- mv /home/splunk/observability-workshop-main/workshop/* /home/splunk/workshop
188+
- mv /home/splunk/workshop/ansible/diab-v3.yml /home/splunk
189+
- rm -rf /home/splunk/observability-workshop-main
190+
- rm -rf /home/splunk/workshop/aws /home/splunk/workshop/cloud-init /home/splunk/workshop/ansible
191+
- mv /home/splunk/workshop/k3s/demo-in-a-box.zip /home/splunk
192+
193+
# Download Splunk Observability Content Contrib Repo
194+
- curl -s -L https://github.com/splunk/observability-content-contrib/archive/main.zip -o content-contrib.zip
195+
- unzip -qq content-contrib.zip -d /home/splunk/
196+
- mv /home/splunk/observability-content-contrib-main /home/splunk/observability-content-contrib
197+
198+
# Install Terraform (latest) - Version: ${LATEST_TERRAFORM_VERSION}
199+
- curl -S -OL https://releases.hashicorp.com/terraform/${LATEST_TERRAFORM_VERSION}/terraform_${LATEST_TERRAFORM_VERSION}_linux_amd64.zip
200+
- unzip -qq terraform_${LATEST_TERRAFORM_VERSION}_linux_amd64.zip -d /usr/local/bin
201+
202+
# Install kind
203+
- [ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.30.0/kind-linux-amd64
204+
- chmod +x ./kind
205+
- mv ./kind /usr/local/bin/kind
206+
207+
# Create 3 node k3d cluster
208+
- kind create cluster --config /tmp/3-node.yaml
209+
210+
# Add user splunk to docker group
211+
- usermod -aG docker splunk
212+
213+
# Create kube config and set correct permissions on splunk user home directory
214+
- mkdir /home/splunk/.kube && kubectl config view --raw > /home/splunk/.kube/config
215+
- chmod 400 /home/splunk/.kube/config
216+
- chown -R splunk:splunk /home/splunk
217+
218+
# Deploy private registry
219+
- /snap/bin/kubectl apply -f /home/splunk/workshop/k3s/registry/registry.yaml
220+
221+
# Chaos Mesh
222+
- curl -sSL https://mirrors.chaos-mesh.org/v2.7.1/install.sh | bash -s -- --k3s
223+
224+
# Deploy Splunk secrets
225+
- /snap/bin/kubectl apply -f /tmp/workshop-secrets.yaml
226+
EOF
227+
228+
#qm destroy $VMID >/dev/null
229+
rm -f jammy-server-cloudimg-amd64.img >/dev/null
230+
wget -q https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
231+
qemu-img resize jammy-server-cloudimg-amd64.img 40G >/dev/null
232+
qm create $VMID --name $HOSTNAME --ostype l26 \
233+
--memory 8192 --balloon 0 \
234+
--agent 1 \
235+
--bios ovmf --machine q35 --efidisk0 $STORAGE:0,pre-enrolled-keys=0 \
236+
--cpu host --socket 1 --cores 4 \
237+
--net0 virtio,bridge=vmbr0 >/dev/null
238+
qm importdisk $VMID jammy-server-cloudimg-amd64.img $STORAGE >/dev/null
239+
qm set $VMID --scsihw virtio-scsi-pci --virtio0 $STORAGE:vm-$VMID-disk-1,discard=on >/dev/null
240+
qm set $VMID --boot order=virtio0 >/dev/null
241+
qm set $VMID --ide2 $STORAGE:cloudinit >/dev/null
242+
243+
qm set $VMID --cicustom "user=local:snippets/ubuntu.yaml" >/dev/null
244+
qm set $VMID --tags o11y-workshop,jammy,cloudinit >/dev/null
245+
#qm set $VMID --ciuser ubuntu
246+
#qm set $VMID --cipassword Splunk123!
247+
#qm set $VMID --ciupdate 0
248+
qm set $VMID --ipconfig0 ip=dhcp >/dev/null
249+
qm cloudinit update $VMID >/dev/null
250+
#qm template $VMID
251+
qm start $VMID >/dev/null

0 commit comments

Comments
 (0)