123 lines
5.9 KiB
Bash
123 lines
5.9 KiB
Bash
#!/bin/bash
|
|
set -o pipefail
|
|
|
|
echo ">>>>>> DEBUG: Liste des variables d'environnement reçues par le script <<<<<<"
|
|
env | sort
|
|
echo ">>>>>>>>>>>>>>>>>>>> FIN DEBUG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
|
|
|
|
|
|
|
|
DEFAULT_OPENSTACK_DOMAIN="default"
|
|
DEFAULT_USER_ROLE="_member_"
|
|
PROJECT_NAME="${PROJECT_NAME:?Le nom du projet (variable PROJECT_NAME) est requis}"
|
|
QUOTA_INSTANCES="${QUOTA_INSTANCES:?Le quota d'instances (variable QUOTA_INSTANCES) est requis}"
|
|
QUOTA_CORES="${QUOTA_CORES:?Le quota de CPU/cores (variable QUOTA_CORES) est requis}"
|
|
QUOTA_RAM="${QUOTA_RAM:?Le quota de RAM (variable QUOTA_RAM en MB) est requis}"
|
|
QUOTA_VOLUMES="${QUOTA_VOLUMES:?Le quota de volumes (variable QUOTA_VOLUMES) est requis}"
|
|
QUOTA_VOLUME_SNAPSHOTS="${QUOTA_VOLUME_SNAPSHOTS:?Le quota de snapshots de volume (variable QUOTA_VOLUME_SNAPSHOTS) est requis}"
|
|
QUOTA_VOLUME_GIGABYTES="${QUOTA_VOLUME_GIGABYTES:?Le quota de stockage volume (variable QUOTA_VOLUME_GIGABYTES) est requis}"
|
|
QUOTA_FLOATING_IPS="${QUOTA_FLOATING_IPS:?Le quota d'IPs flottantes (variable QUOTA_FLOATING_IPS) est requis}"
|
|
QUOTA_SECURITY_GROUPS="${QUOTA_SECURITY_GROUPS:?Le quota de groupes de sécurité (variable QUOTA_SECURITY_GROUPS) est requis}"
|
|
QUOTA_SECURITY_GROUP_RULES="${QUOTA_SECURITY_GROUP_RULES:?Le quota de règles de sécurité (variable QUOTA_SECURITY_GROUP_RULES) est requis}"
|
|
QUOTA_NETWORKS="${QUOTA_NETWORKS:?Le quota de réseaux (variable QUOTA_NETWORKS) est requis}"
|
|
QUOTA_PORTS="${QUOTA_PORTS:?Le quota de ports (variable QUOTA_PORTS) est requis}"
|
|
QUOTA_ROUTERS="${QUOTA_ROUTERS:?Le quota de routeurs (variable QUOTA_ROUTERS) est requis}"
|
|
PROJECT_DESCRIPTION="${PROJECT_DESCRIPTION:-""}"
|
|
USER_EMAILS="${USER_EMAILS:-""}"
|
|
|
|
# --- Vérification des dépendances ---
|
|
if ! command -v openstack &> /dev/null; then
|
|
echo "ERREUR: La commande 'openstack' est introuvable. Le client OpenStack doit être installé."
|
|
exit 1
|
|
fi
|
|
if ! command -v jq &> /dev/null; then
|
|
echo "ERREUR: La commande 'jq' est introuvable. jq doit être installé pour parser le JSON."
|
|
exit 1
|
|
fi
|
|
|
|
# Afficher la liste des rôles disponibles
|
|
echo "--- Liste des rôles disponibles dans OpenStack ---"
|
|
openstack role list -f table -c ID -c Name
|
|
echo "--- Fin de la liste des rôles ---"
|
|
|
|
echo "--- Début de la création du projet OpenStack ---"
|
|
echo "Nom du projet: ${PROJECT_NAME}"
|
|
echo "Description: ${PROJECT_DESCRIPTION}"
|
|
echo "Domaine OpenStack: ${DEFAULT_OPENSTACK_DOMAIN}"
|
|
echo "1. Création du projet..."
|
|
# Vérifier si le projet existe
|
|
if openstack project show "${PROJECT_NAME}" --domain "${DEFAULT_OPENSTACK_DOMAIN}" > /dev/null 2>&1; then
|
|
echo "ERREUR: Le projet '${PROJECT_NAME}' existe déjà dans le domaine '${DEFAULT_OPENSTACK_DOMAIN}'."
|
|
exit 1
|
|
fi
|
|
|
|
PROJECT_OUTPUT=$(openstack project create --domain "${DEFAULT_OPENSTACK_DOMAIN}" --description "${PROJECT_DESCRIPTION}" -f json "${PROJECT_NAME}")
|
|
PROJECT_ID=$(echo "${PROJECT_OUTPUT}" | jq -r '.id')
|
|
if [ -z "${PROJECT_ID}" ]; then
|
|
echo "ERREUR: Impossible de créer le projet '${PROJECT_NAME}' ou de récupérer son ID."
|
|
exit 1
|
|
fi
|
|
echo "Projet '${PROJECT_NAME}' créé avec succès. ID: ${PROJECT_ID}"
|
|
|
|
#Définir les quotas pour le projet
|
|
echo "2. Définition des quotas pour le projet ID ${PROJECT_ID}..."
|
|
if openstack quota set --quiet \
|
|
--instances "${QUOTA_INSTANCES}" \
|
|
--cores "${QUOTA_CORES}" \
|
|
--ram "${QUOTA_RAM}" \
|
|
--volumes "${QUOTA_VOLUMES}" \
|
|
--snapshots "${QUOTA_VOLUME_SNAPSHOTS}" \
|
|
--gigabytes "${QUOTA_VOLUME_GIGABYTES}" \
|
|
--floating-ips "${QUOTA_FLOATING_IPS}" \
|
|
--secgroups "${QUOTA_SECURITY_GROUPS}" \
|
|
--secgroup-rules "${QUOTA_SECURITY_GROUP_RULES}" \
|
|
--networks "${QUOTA_NETWORKS}" \
|
|
--ports "${QUOTA_PORTS}" \
|
|
--routers "${QUOTA_ROUTERS}" \
|
|
"${PROJECT_ID}"; then
|
|
echo "Quotas définis avec succès."
|
|
else
|
|
echo "ERREUR: Échec de la définition des quotas pour le projet ${PROJECT_ID}."
|
|
exit 1
|
|
fi
|
|
|
|
# Ajouter les utilisateurs au projet (si spécifiés)
|
|
if [ -n "${USER_EMAILS}" ]; then
|
|
echo "3. Ajout des utilisateurs au projet (Rôle: ${DEFAULT_USER_ROLE})..."
|
|
# Convertir la liste d'emails séparés par des virgules en un tableau Bash
|
|
IFS=',' read -r -a email_array <<< "${USER_EMAILS}"
|
|
|
|
for email in "${email_array[@]}"; do
|
|
# Nettoyer l'email (enlever les espaces potentiels au début/fin)
|
|
clean_email=$(echo "${email}" | xargs)
|
|
if [ -z "${clean_email}" ]; then
|
|
continue # Ignorer les emails vides
|
|
fi
|
|
|
|
echo " - Recherche de l'utilisateur OpenStack pour l'email: ${clean_email} dans le domaine ${DEFAULT_OPENSTACK_DOMAIN}..."
|
|
USER_ID=$(openstack user list --domain "${DEFAULT_OPENSTACK_DOMAIN}" --long -f json | jq -r --arg email "${clean_email}" '.[] | select(.Email == $email or .Name == $email) | .ID' | head -n 1)
|
|
|
|
if [ -n "${USER_ID}" ]; then
|
|
USER_NAME=$(openstack user show ${USER_ID} --domain "${DEFAULT_OPENSTACK_DOMAIN}" -f value -c name)
|
|
echo " Utilisateur trouvé: Nom='${USER_NAME}', ID='${USER_ID}'. Assignation du rôle..."
|
|
# Assigner le rôle à l'utilisateur pour ce projet
|
|
if openstack role add --project "${PROJECT_ID}" --user "${USER_ID}" --user-domain "${DEFAULT_OPENSTACK_DOMAIN}" "${DEFAULT_USER_ROLE}"; then
|
|
echo " Rôle '${DEFAULT_USER_ROLE}' assigné avec succès à l'utilisateur '${USER_NAME}' pour le projet '${PROJECT_NAME}'."
|
|
else
|
|
echo " ATTENTION: Impossible d'assigner le rôle '${DEFAULT_USER_ROLE}' à l'utilisateur '${USER_NAME}' (ID: ${USER_ID}) pour le projet '${PROJECT_NAME}'. Vérifiez si l'utilisateur ou le rôle existe et les permissions."
|
|
fi
|
|
else
|
|
echo " ATTENTION: Utilisateur OpenStack non trouvé pour l'email/nom '${clean_email}' dans le domaine '${DEFAULT_OPENSTACK_DOMAIN}'. L'utilisateur doit exister dans OpenStack pour être ajouté au projet."
|
|
fi
|
|
done
|
|
echo "Traitement des utilisateurs terminé."
|
|
else
|
|
echo "3. Aucun utilisateur spécifié (USER_EMAILS vide) à ajouter au projet."
|
|
fi
|
|
|
|
echo "--- Création du projet OpenStack terminée avec succès ---"
|
|
echo "ID du Projet OpenStack: ${PROJECT_ID}"
|
|
exit 0
|
|
|
|
|