commit 4707b713691d3f3d3fc3e15e0b8660a3534c76c8 Author: Alessandro Rabiti Date: Fri Jan 23 01:34:08 2026 +0100 first commit diff --git a/.govc.env b/.govc.env new file mode 100644 index 0000000..8ce5620 --- /dev/null +++ b/.govc.env @@ -0,0 +1,4 @@ +export GOVC_URL="https://xxxx.yyyy.zz/" +export GOVC_USERNAME="username" +export GOVC_PASSWORD="password" +export GOVC_INSECURE=1 diff --git a/Containerfile b/Containerfile new file mode 100644 index 0000000..932b0dd --- /dev/null +++ b/Containerfile @@ -0,0 +1,32 @@ +FROM debian:stable-slim + +ENV DEBIAN_FRONTEND=noninteractive + +# Installazione dipendenze +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + tar \ + bash \ + vim \ + jq \ + sqlite3 \ + && rm -rf /var/lib/apt/lists/* + +# Download e installazione govc +RUN curl -L -o - "https://github.com/vmware/govmomi/releases/latest/download/govc_$(uname -s)_$(uname -m).tar.gz" \ + | tar -C /usr/local/bin -xvzf - govc + +# Creo la directory dove importare gli script +RUN mkdir -p /opt/app + +# Importo gli script +COPY procedura.sh /opt/app/ +COPY create_db_mk3.sql /opt/app/ +COPY .govc.env /opt/app/ +COPY popola_db_mk3.sh /opt/app/ + +# Source env e shell interattiva +ENTRYPOINT ["bash", "-c", "source /opt/app/.govc.env && exec bash"] +#ENTRYPOINT ["bash", "-c"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..4cd88f9 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +Il file `.govc.env` contiene i riferimenti per la connessione a sphere +Il file Containerfile serve per la build del container +Per la build dell'immagine usare il comando `podman build -t govc-deb .` +Lanciare il container con il comando `podman run --rm -ti -v.govc.env:/opt/app/.govc.env:z --name container-govc govc-deb` diff --git a/create_db_mk3.sql b/create_db_mk3.sql new file mode 100644 index 0000000..aa35cf8 --- /dev/null +++ b/create_db_mk3.sql @@ -0,0 +1,38 @@ +-- Creazione tabella datacenter +CREATE TABLE IF NOT EXISTS datacenter ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL UNIQUE, + path TEXT NOT NULL UNIQUE +); + +-- Creazione tabella cluster +CREATE TABLE IF NOT EXISTS cluster ( + id INTEGER PRIMARY KEY, + datacenter_id INTEGER NOT NULL, + name TEXT NOT NULL, + path TEXT NOT NULL, + FOREIGN KEY(datacenter_id) REFERENCES datacenter(id) +); + +-- Creazione tabella network +CREATE TABLE IF NOT EXISTS network ( + id INTEGER PRIMARY KEY, + datacenter_id INTEGER NOT NULL, + cluster_id INTEGER NOT NULL, + name TEXT NOT NULL, + path TEXT NOT NULL, + FOREIGN KEY(datacenter_id) REFERENCES datacenter(id), + FOREIGN KEY(cluster_id) REFERENCES cluster(id) +); + +-- Creazione tabella datastore +CREATE TABLE IF NOT EXISTS datastore ( + id INTEGER PRIMARY KEY, + datacenter_id INTEGER NOT NULL, + name TEXT NOT NULL, + path TEXT NOT NULL, + capacity INTEGER NOT NULL, + freespace INTEGER NOT NULL, + type TEXT NOT NULL, + FOREIGN KEY(datacenter_id) REFERENCES datacenter(id) +); diff --git a/popola_db_mk3.sh b/popola_db_mk3.sh new file mode 100755 index 0000000..c8f01ae --- /dev/null +++ b/popola_db_mk3.sh @@ -0,0 +1,119 @@ +#!/bin/bash + +DB=vsphere.db + +### listo i datacenter e li inserisco nel db +echo "Listo i DC e li inserisco nel DB $DB" +echo + +govc ls | while read -r path; do + abs_path="${path#./}" + name=$(basename "$abs_path") + echo datacenter abs_path: $abs_path + echo datacenter name: $name + echo + + ### inserisco nel db + sqlite3 "$DB" "INSERT OR IGNORE INTO datacenter(name, path) VALUES('$name', '$abs_path');" +done +### + +echo stampo il contenuto della tabella datacenter del db: +echo +sqlite3 "$DB" "SELECT * FROM datacenter;" +echo + +### per ogni dc in datacenter trovo i cluster e popolo il db +echo per ogni dc in datacenter trovo i cluster e popolo il db +echo +sqlite3 "$DB" "SELECT name FROM datacenter;" | while read -r dc; do + echo "Datacenter=$dc" + echo + govc ls /$dc/host | while read -r path; do + abs_path="${path#./}" + name=$(basename "$abs_path") + echo cluster abs_path: $abs_path + echo cluster name: $name + echo + echo "Aggiungo cluster $name in datacenter $dc" + sqlite3 "$DB" "INSERT OR IGNORE INTO cluster(datacenter_id, name, path) VALUES ((SELECT id FROM datacenter WHERE name='$dc'), '$name', '$abs_path');" + done +done +### + +echo stampo il contenuto della tabella cluster del db: +echo +sqlite3 "$DB" "SELECT * FROM datacenter;" +echo +sqlite3 "$DB" "SELECT * FROM cluster;" +echo + +### per ogni dc in datacenter e per ogni cluster nella tabella cluster trovo le vlan disponibili e popolo il db +echo per ogni dc in datacenter e per ogni cluster nella tabella cluster trovo le vlan disponibili e popolo il db +echo +sqlite3 "$DB" "SELECT id FROM datacenter;" | while read -r id_dc; do + dc=$(sqlite3 "$DB" "SELECT name FROM datacenter WHERE id='$id_dc'") + echo "Datacenter=$dc Datacenter_id=$id_dc" + echo + sqlite3 "$DB" "SELECT name FROM cluster WHERE datacenter_id='$id_dc' ;" | while read -r cluster; do + echo "Datacenter=$dc Datacenter_id=$id_dc" + echo "Cluster=$cluster" + echo + govc ls /$dc/host/$cluster | grep vlan | while read -r vlan; do + abs_path="${vlan#./}" + name=$(basename "$abs_path") + echo network abs_path: $abs_path + echo network name: $name + echo + echo "aggiungo la vlan nel db" + sqlite3 "$DB" "INSERT OR IGNORE INTO network(datacenter_id, cluster_id, name, path) VALUES ((SELECT id FROM datacenter WHERE name='$dc'), (SELECT id FROM cluster WHERE name='$cluster'), '$name', '$abs_path');" + done + done +done +### + +echo stampo il contenuto delle tabelle del db: +echo +sqlite3 "$DB" "SELECT * FROM datacenter;" +echo +sqlite3 "$DB" "SELECT * FROM cluster;" +echo +sqlite3 "$DB" "SELECT * FROM network;" +echo + +### per ogni datacenter aggiungo i relativi datastore +echo per ogni datacenter aggiungo i relativi datastore +echo +sqlite3 "$DB" "SELECT name FROM datacenter;" | while read -r dc; do + echo "Datacenter=$dc" + echo + govc ls /$dc/datastore | while read -r path; do + abs_dspath="${path#./}" + dsname=$(basename "$abs_dspath") + echo datastore abs_path: $abs_dspath + echo datastore name: $dsname + echo + #echo "Aggiungo il datastore $name nel db" + #sqlite3 "$DB" "INSERT OR IGNORE INTO datastore(datacenter_id, name, path) VALUES ((SELECT id FROM datacenter WHERE name='$dc'), '$name', '$abs_path');" + echo per ogni datastore, estraggo le info e le aggiungo nel db + echo + govc datastore.info -dc=$dc -json $dsname \ + | jq -r '.datastores[] | [.summary.capacity, .summary.freeSpace, .summary.type] | @tsv' \ + | while IFS=$'\t' read -r capacity freeSpace type; do + sqlite3 $DB "INSERT OR IGNORE INTO datastore(datacenter_id, name, path, capacity, freespace, type) VALUES((SELECT id FROM datacenter WHERE name='$dc'), '$dsname', '$abs_dspath', $capacity, $freeSpace, '$type');" + done + done +done +### + + +echo stampo il contenuto delle tabelle del db: +echo +sqlite3 "$DB" "SELECT * FROM datacenter;" +echo +sqlite3 "$DB" "SELECT * FROM cluster;" +echo +sqlite3 "$DB" "SELECT * FROM network;" +echo +sqlite3 "$DB" "SELECT * FROM datastore;" +echo diff --git a/procedura.sh b/procedura.sh new file mode 100755 index 0000000..5fdf30a --- /dev/null +++ b/procedura.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +START=$(date) + +# carico le credenziali per la connessione a vsphere +echo carico le credenziali per la connessione a vsphere +echo +source .govc.env + +# elimino il db se presente +echo elimino il db se presente +echo +rm -f vsphere.db + +# ricreo il db +echo ricreo il db +echo +sqlite3 vsphere.db < create_db_mk3.sql + +# lancio lo script su vcsra +echo lancio lo script su vcsra +echo +export GOVC_URL="https://vcsra.ad.lepida.it/" +./popola_db_mk3.sh + +# lancio lo script su vcspr +echo lancio lo script su vcspr +export GOVC_URL="https://vcspr.ad.lepida.it/" +./popola_db_mk3.sh + +STOP=$(date) + +echo START time: $START +echo STOP time: $STOP