first commit

This commit is contained in:
Alessandro Rabiti 2026-01-23 01:34:08 +01:00
commit 4707b71369
6 changed files with 231 additions and 0 deletions

4
.govc.env Normal file
View file

@ -0,0 +1,4 @@
export GOVC_URL="https://xxxx.yyyy.zz/"
export GOVC_USERNAME="username"
export GOVC_PASSWORD="password"
export GOVC_INSECURE=1

32
Containerfile Normal file
View file

@ -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"]

4
README.md Normal file
View file

@ -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`

38
create_db_mk3.sql Normal file
View file

@ -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)
);

119
popola_db_mk3.sh Executable file
View file

@ -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

34
procedura.sh Executable file
View file

@ -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