I’m making an update to my script.
If the computer belongs to several groups at the same time, this can cause problems.
I now return all the groups, then the script selects only the group starting with GROUP_AUTOMATE_ …
This will copy only this folder to the local directory of the client machine : clientfolderpath=“/ntfs/FOG/Sites/$SITE_GROUP”
Le script
#!/bin/bash
#Variables
FOG_HOSTNAME=$hostname
FOG_API_TOKEN="deleted for privacy reasons"
FOG_USER_TOKEN="deleted for privacy reasons"
FOG_SERVER="deleted for privacy reasons" # Adresse IP ou nom d'hôte de votre serveur FOG
echo "Serveur FOG: $FOG_SERVER"
# Fonction pour appeler l'API FOG
function invoke_fog_api() {
local fog_api_token="$1"
local fog_user_token="$2"
local fog_server="$3"
local uri_path="$4"
local method="${5:-GET}"
local json_data="$6"
local base_uri="http://$fog_server/fog"
local uri="$base_uri/$uri_path"
# Construct headers
local headers=(
-H "fog-api-token: $fog_api_token"
-H "fog-user-token: $fog_user_token"
-H "Content-Type: application/json"
)
# Make API call and store response in a variable
if [ "$method" == "GET" ]; then
response=$(curl -s -X GET "$uri" "${headers[@]}")
else
response=$(curl -s -X "$method" "$uri" "${headers[@]}" -d "$json_data")
fi
echo "$response"
}
# Fonction pour obtenir les détails de l'hôte
function get_fog_host() {
local fog_api_token="$1"
local fog_user_token="$2"
local fog_server="$3"
local fog_hostname="$4"
response=$(invoke_fog_api "$fog_api_token" "$fog_user_token" "$fog_server" "host?name=$fog_hostname")
# Vérifiez si la réponse est vide
if [ -z "$response" ]; then
echo "Erreur: La réponse de l'API pour l'hôte est vide."
return 1
fi
# Vérifiez la validité du JSON
if ! echo "$response" | jq . > /dev/null 2>&1; then
echo "Erreur: La réponse de l'API pour l'hôte n'est pas un JSON valide."
echo "Réponse brute de l'API: $response"
return 1
fi
# Extraire les détails de l'hôte
local host_info
host_info=$(echo "$response" | jq --arg hostname "$fog_hostname" '.hosts[] | select(.name == $hostname)')
if [ -z "$host_info" ]; then
echo "Erreur: Aucun détail trouvé pour l'hôte $fog_hostname."
return 1
fi
echo "$host_info"
}
# Fonction pour obtenir les groupes associés à un hôte
function get_fog_groups_for_host() {
local fog_api_token="$1"
local fog_user_token="$2"
local fog_server="$3"
local host_id="$4"
# Récupérer les associations de groupes
local response
response=$(invoke_fog_api "$fog_api_token" "$fog_user_token" "$fog_server" "groupassociation")
# Vérifiez la validité du JSON
if ! echo "$response" | jq . >/dev/null 2>&1; then
echo "Erreur: La réponse de l'API pour les associations de groupes n'est pas un JSON valide."
echo "Réponse brute de l'API: $response"
return 1
fi
# Extraire les IDs des groupes associés à l'hôte
local group_ids
group_ids=$(echo "$response" | jq -r --arg host_id "$host_id" '.groupassociations[] | select(.hostID == ($host_id | tonumber)) | .groupID')
# Récupérer les détails des groupes
response=$(invoke_fog_api "$fog_api_token" "$fog_user_token" "$fog_server" "group")
# Vérifiez la validité du JSON
if ! echo "$response" | jq . >/dev/null 2>&1; then
echo "Erreur: La réponse de l'API pour les groupes n'est pas un JSON valide."
echo "Réponse brute de l'API: $response"
return 1
fi
# Afficher les détails des groupes associés dans un format simple
local group_ids_array
group_ids_array=$(echo "$group_ids" | jq -R -s -c 'split("\n") | map(select(length > 0) | tonumber)')
echo "$response" | jq -r --argjson group_ids "$group_ids_array" \
'.groups[] | select(.id as $id | $group_ids | index($id)) | "\(.id) \(.name)"'
}
# Fonction pour traiter et afficher les groupes dont le nom commence par GROUP_AUTOMATE_
function process_fog_groups() {
local group_data="$1"
echo "Groupes associés à l'hôte (commençant par GROUP_AUTOMATE_) :"
# Initialiser les index
local group_index=1
# Extraire les groupes et définir les variables d'environnement
while IFS= read -r line; do
id=$(echo "$line" | awk '{print $1}')
name=$(echo "$line" | awk '{$1=""; print $0}' | sed 's/^ *//') # Remove leading spaces from the name
if [[ "$name" == GROUP_AUTOMATE_* ]]; then
# Définir les variables d'environnement pour le nom et l'ID du groupe
export FOG_GROUP_NAME_$group_index="$name"
export FOG_GROUP_ID_$group_index="$id"
# Afficher le groupe
echo "GROUP NAME = $name"
echo "GROUP ID = $id"
export FOG_GROUP_NAME_AUTOMATE=$name
export FOG_GROUP_NAME_ID=$id
# Incrémenter l'index pour le prochain groupe
group_index=$((group_index + 1))
fi
done <<< "$group_data"
}
# Fonction principale pour la simulation
function GetInfo_host() {
local fog_api_token="$FOG_API_TOKEN"
local fog_user_token="$FOG_USER_TOKEN"
local fog_server="$FOG_SERVER"
local fog_hostname="$FOG_HOSTNAME"
# Obtenez les détails de l'hôte
local local_host
local_host=$(get_fog_host "$fog_api_token" "$fog_user_token" "$fog_server" "$fog_hostname")
# Vérifiez si local_host est vide
if [ -z "$local_host" ]; then
echo "Erreur: Aucune information sur l'hôte trouvée."
return 1
fi
# Obtenez l'ID de l'hôte
local host_id
host_id=$(echo "$local_host" | jq -r '.id')
if [ -z "$host_id" ]; then
echo "Erreur: Impossible d'extraire l'ID de l'hôte."
return 1
fi
# Obtenez les groupes associés à l'hôte
local host_groups
host_groups=$(get_fog_groups_for_host "$fog_api_token" "$fog_user_token" "$fog_server" "$host_id")
# Vérifiez si host_groups est vide
if [ -z "$host_groups" ]; then
echo "Erreur: Aucune information sur les groupes trouvée pour l'hôte."
return 1
fi
# Traitement des groupes et affichage des détails
process_fog_groups "$host_groups"
# Accès aux variables d'environnement pour chaque groupe
for i in $(seq 1 $((group_index - 1))); do
echo "Nom du groupe $i: ${!FOG_GROUP_NAME_$i}"
echo "ID du groupe $i: ${!FOG_GROUP_ID_$i}"
done
# Affichage des détails
echo "---------------------------------------"
echo "Détails de l'hôte pour: $fog_hostname"
echo "---------------------------------------"
echo "Détails de l'hôte récupérés :"
echo "$local_host"
echo "---------------------------------------"
# Afficher le contenu de host_groups => ALL GROUPS
echo "---------------------------------------"
echo "ALL GROUPS :"
echo "$host_groups"
echo "---------------------------------------"
# Affichage des détails du groupe AUTOMATION
#echo $FOG_GROUP_NAME_AUTOMATE
#echo $FOG_GROUP_NAME_ID
echo "Détails du groupe automation"
echo "Nom du groupe: $FOG_GROUP_NAME_AUTOMATE"
echo "ID du groupe: $FOG_GROUP_NAME_ID"
echo "---------------------------------------"
# Définir les variables d'environnement pour le nom et l'ID du groupe
export FOG_GROUP_NAME_AUTOMATE
export FOG_GROUP_NAME_ID
}
GetInfo_host
SITE_GROUP="${FOG_GROUP_NAME_AUTOMATE##*_}"
echo "Target Site $SITE_GROUP"
echo "Try to copy this folder if existing : /images/Sites/$SITE_GROUP"
# Vérification de la présence du disque système
echo "Verifying we've found the OS disk"
if [[ ! -d /ntfs/windows && ! -d /ntfs/Windows && ! -d /ntfs/WINDOWS ]]; then
echo "! OS root Not found !"
# Assurez-vous que 'debugPause' est défini, sinon utilisez une alternative appropriée
# debugPause
exit 1
fi
echo "Found"
# Préparer le chemin des dossiers
clientfolderpath="/ntfs/FOG/Sites/$SITE_GROUP"
remotefolderpath="/images/Sites/$SITE_GROUP"
# Créer le répertoire /tmp/sites s'il n'existe pas déjà
if [[ ! -d /tmp/sites ]]; then
mkdir -p /tmp/sites
fi
# Créer le sous-répertoire avec le nom contenu dans $SITE_GROUP
if [[ -n "$SITE_GROUP" ]]; then
mkdir -p "/tmp/sites/$SITE_GROUP"
echo "Le répertoire /tmp/sites/$SITE_GROUP a été créé."
else
echo "Erreur : \$SITE_GROUP est vide. Impossible de créer le répertoire."
exit 1
fi
# Créer le répertoire clientfolderpath s'il n'existe pas déjà
if [[ ! -d "$clientfolderpath" ]]; then
mkdir -p "$clientfolderpath"
echo "Répertoire client créé : $clientfolderpath"
fi
# Copier le dossier avec rsync
echo -n "In Progress"
rsync -aqz "$remotefolderpath/" "$clientfolderpath/" >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo "Dossier copié avec succès."
else
echo "Erreur : Échec de la copie du dossier."
exit 1
fi
debugPause