Les Scripts
Voici un complément d'information au sujet des scripts de routing.
La création des scripts se fait via le Wizards se trouvant dans Settings \ ceBox® \ Wizards \ Script name
Rappel
Le script de routing est attribué lors de la création de votre VM.
Il permet de mettre en place un certain nombre de paramètres personnalisables sur votre VM du type intégration dans le domaine, auto-résolution, IGD, Full VirtIO, ...
Vous avez la possibilité de créer, modifier, renommer et supprimer vos scripts.
Lors de la création du compte client, nous mettons à votre disposition plusieurs scripts.
Information
Nous vous conseillons de garder les scripts de base que vous utilisez et de supprimer les scripts que vous n'avez pas besoin.
Si vous avez besoin d'un script avec une jonction dans le domaine créer un nouveau script en vous basant sur le script fournit.
Attention
Ne jamais mettre d'accent et/ou de caractères spéciaux, ni d'espace dans le nom d'un script
Script Windows_FullVirtIO_rename_autoresolution
# ------------------------------------------------ CLIENT NEEDED -----------------------------------
# ------------------------------------------------ VARIABLES -------
# Template used
TEMPLATEVMXML=windows_FullVirtIO.xml
# Pour les reponses Y, c'est No Case Sensitive (Y et y fonctionne)
# --- Variables rename VM --- #
s_rename="Y"
# --- Variables autoResolution VM --- #
s_autoResolution="Y"
# --- Variables pour autologon --- #
s_autoLogon="N"
userName="Neocoretech"
userPassword="neo"
# --Facultatif-- "domainNameAutoLogon" => utile si utilisateur du domaine
s_DomainAuto="N"
domainNameAutoLogon="neocoretech.com"
# --- Variables pour domaine --- #
s_domain="N"
isLdap=false
domainName="neocoretech.com"
domainNetBiosName="NEOCORETECH"
domainUserName="user"
domainPassword="password"
# --Facultatif-- "domainOU" => Si OU definie
s_OU="N"
domainOU="OU=VM,OU=Neo,DC=neocoretech,DC=com"
# --- Variables pour workgroup --- #
s_workgroup="N"
workgroupName="workgroupTest"
# --- Variables pour reboot --- #
s_reboot="Y"
reboot_message="Merci d\'attendre votre ordinateur va redémarrer"
# --- Variables pour OEM --- #
s_oemKey="N"
# --- Variables pour execute script --- #
s_executeScript="N"
scriptPath="C:/Users/neo/testBat.bat"
s_scriptArgs="N"
script_argList="[\"arg1\",\"arg2\",\"arg3\"]"
# ------------------------------------------------ PROTOTYPES DES FONCTIONS UTILISABLES -------
## ------- Windows et linux ------
# changeVmResolution <vmName> <resolution>
# changeVmName <vmName>
# executeScript <vmName> \'"<scriptPath>"\' "<scriptArgList>"
## -------- Windows uniquement
# autoLogon <vmName> \'"<userName>"\' \'"<userPassword>"\' \'"[domainNameAutoLogon]"\'
# joinDomain <vmName> <isLdap> \'"<domainName>"\' \'"<domainNetBiosName>"\' \'"<domainUserName>"\' \'"<domainPassword>"\' \'"[domainOU]"\'
# joinWorkgroup <vmName> \'"<workgroupName>"\'
# rebootOs <vmName> \'"<reboot_message>"\'
# setOemLicense <vmName>
# ------------------------------------------------- CODE EXECUTE----------------------------------
source /etc/conf.d/nhc/guest_agent_commands
# --- Recuperation du nom de la VM --- #
vmName=$1
# --- Gestion du double ecran --- #
if [ "${s_doubleScreen^^}" == "Y" ] ; then
HEAD=`xrandr -q |grep -w 'connected'|cut -f1 -d' '`
HEAD1=`echo $HEAD | cut -f2 -d' '`
HEAD2=`echo $HEAD | cut -f1 -d' '`
if ( [ ! -z $displayResolution ] && [ "$displayResolution" != "native" ] ) ; then
xrandr --output $HEAD1 --right-of $HEAD2 --mode $displayResolution --output $HEAD2 --mode $displayResolution
else
xrandr --output $HEAD1 --right-of $HEAD2
fi
SCREEN_0_WIDTH=`xrandr -q |grep '*' |head -n 1 | cut -f1 -d'x'|tr -d ' ' `
wmctrl -r :ACTIVE: -e 0,$SCREEN_0_WIDTH,-1,-1,-1
fi
# --- Renommer la VM --- #
if [ "${s_rename^^}" == "Y" ] ; then
resultRename=`changeVmName $vmName`
fi
# --- Joindre le domaine --- #
if [ "${s_domain^^}" == "Y" ] ; then
if [ "${s_OU^^}" == "N" ] ; then
resultJoinDomain=`joinDomain $vmName $isLdap \'"$domainName"\' \'"$domainNetBiosName"\' \'"$domainUserName"\' \'"$domainPassword"\'`
else
resultJoinDomain=`joinDomain $vmName $isLdap \'"$domainName"\' \'"$domainNetBiosName"\' \'"$domainUserName"\' \'"$domainPassword"\' \'"$domainOU"\'`
fi
fi
# --- Autologon --- #
# Sur le meme principe, on peut mettre l'autologon ici avec 2 cas : Normal et dans un domaine
if [ "${s_autoLogon^^}" == "Y" ] ; then
if [ "${s_DomainAuto^^}" == "N" ] ; then
resultAutoLogon=`autoLogon $vmName $userName $userPassword`
else
resultAutoLogon=`autoLogon $vmName $userName $userPassword \'"$domainNameAutoLogon"\'`
fi
fi
# --- Changement Resolution pour la VM --- #
if [ "${s_autoResolution^^}" == "Y" ] ; then
resolution=`xrandr |grep '*'|awk '{print $1}'`
resultResolution=`changeVmResolution $vmName $resolution`
fi
# --- clef OEM --- #
if [ "${s_oemKey^^}" == "Y" ] ; then
resultOEM=`setOemLicense $vmName`
fi
# --- Utilisation d'un script --- #
if [ "${s_executeScript^^}" == "Y" ] ; then
if [ "${s_scriptArgs^^}" == "N" ] ; then
resultExecuteScript=`executeScript $vmName \'"$scriptPath"\' "[]"`
else
resultExecuteScript=`executeScript $vmName \'"$scriptPath"\' "$script_argList"`
fi
fi
# --- Reboot de la VM --- #
# --- Si la variable s_reboot est à Y et si la variable s_domain est à Y, on vient vérifier que la VM est bien entrée dans le domaine --- #
Si oui, reboot => donc création d'un snapshot.
Si non, pas de reboot. --- #
if [ "${s_reboot^^}" == "Y" ] ; then
if [ "${s_domain^^}" == "Y" ]; then
if ( $resultJoinDomain ); then
sleep 15
resultReboot=`rebootOs $vmName`
fi
else
sleep 15
resultReboot=`rebootOs $vmName`
fi
fi
# --- Pour debug R&D / n'a aucune incidence sur la prod --- #
globalResult=1
if ( $resultResolution && $resultRename && $resultReboot ); then
globalResult=0
else
globalResult=1
fi
echo "result=$globalResult"
L'ensemble des scripts fonctionne de façon très simple. Prenons comme exemple le script Windows_FullVirtIO_rename_autoresolution
Le contenu du script est divisé en 3 paragraphes distincts :
- VARIABLES
- PROTOTYPES DES FONCTIONS UTILISABLES
- CODE EXECUTE
Les seules modifications que vous pouvez effectuer se trouvent dans le paragraphe VARIABLES
VARIABLES
Descriptif des VARIABLES
Pour activer une variable il vous suffit de mettre Y (Yes), Si la variable est à N (No) elle n'est pas utilisé.
Exemple :
s_rename="Y"
la machine sera renommée, car la variable est à Y (Yes). Elle prendre le nom que vous lui avez donné dans le routing de la VM.
s_rename="N"
la machine ne sera pas renommée, car la variable est à N (No)
# Template used
TEMPLATEVMXML=windows_FullVirtIO.xml
TEMPLATEVMXML est la variable qui désigne la liaison avec un Template particulier ; par exemple si on utilise du Windows, du Linux, ou la carte graphique native Intel® NUC...
Dans notre exemple nous utilisons un template Windows avec des pilotes Full VirtIO → cela veut dire que nous utilisons le virt IO pour les interfaces réseaux et le contrôleur disque
# Pour les reponses Y, c'est No Case Sensitive (Y et y fonctionne)
Les lignes commençant par # sont des commentaires
# --- Variables rename VM --- #
s_rename="Y"
s_rename la variable qui désigne le renommage de la machine virtuelle
# --- Variables autoResolution VM --- #
s_autoResolution="Y"
s_autoResolution est la variable qui désigne l'auto-résolution graphique de la machine virtuelle en fonction de la taille de l'écran branché à l'intel® NUC
Information
Depuis la version 1.0.34 et la nouvelle version des Utilities vous pourrez avec l'IGD utiliser l’auto-résolution. Il faut utiliser les Utility 1.2.9 au minimum.
# --- Variables pour autologon --- #
s_autoLogon="N"
userName="Neocoretech"
userPassword="neo"
# --Facultatif-- "domainNameAutoLogon" => utile si utilisateur du domaine
domainNameAutoLogon="neocoretech.com"
s_autoLogon est la variable qui désigne l'ouverture de session automatique dans la machine virtuelle. Elle permet la mise en place d'un autologon avec un compte générique d'un domaine ou hors d'un domaine (compte utilisateur local).
Pour effectuer un autologon dans votre machine virtuelle, la variable doit être s_autoLogon="Y". Vous devez ensuite renseigner les variables userName et userPassword pour indiquer les identifiants du compte autologon
Information
L'autologon fonctionne correctement avec un utilisateur local avec ou sans mot de passe.
Cela fonctionne aussi avec un utilisateur du domaine à condition que celui-ci ait un mot de passe. Autrement dit, le script ne permet pas d'autologon avec un utilisateur du domaine sans mot de passe.
# --- Variables pour domaine --- #
s_domain="N"
isLdap=false
domainName="neocoretech.com"
domainNetBiosName="NEOCORETECH"
domainUserName="jean"
domainPassword="Claude"
# --Facultatif-- "domainOU" => Si OU définie
s_OU="N"
domainOU="OU=VM,OU=Neo,DC=neocoretech,DC=com"
Les Variables pour l'intégration dans un annuaire (Active Directory) :
s_domain est la variable qui désigne l'intégration de la machine virtuelle dans un annuaire.
Pour intégrer une machine virtuelle dans un annuaire, la variable doit être s_domain="Y".
Si l'annuaire est de type Active Directory, alors la variable suivante isLdap doit être isLdap=false. S'il s'agit d'un annuaire de type LDAP, alors la variable isLdap doit être isLdap=true.
Dans les deux cas, vous devez ensuite renseigner les informations d'intégration dans l'annuaire :
domainName="neocoretech.com" ← Indiquer le nom complet du domaine (FQDN)
domainNetBiosName="NEOCORETECH" ← Indiquer le nom NETBIOS du domaine
domainUserName="jean" ← Indiquer le compte utilisateur autorisé pour créer des comptes ordinateur dans l'annuaire
domainPassword="Claude" ← Indiquer le mot de passe associé au compte utilisateur autorisé pour créer des comptes ordinateur dans l'annuaire
Attention
Si vous avez un mot de passe avec des caractères spéciaux il faut mettre un "" avant ce caractère
Attention
Ne confondez pas le nom NETBIOS du domaine avec le nom NETBIOS (au sens hostname) du contrôleur du domaine
Attention
Pour des raisons de sécurité, il faut éviter d'utiliser le compte builtIn Administrateur ou root du domaine. Il est préférable de créer un compte de service - par exemple pour Active Directory - le compte sera membre du groupe de sécurité buitIn "Opérateur de Compte"
# --- Variables pour workgroup --- #
s_workgroup="N"
workgroupName="workgroupTest"
s_workgroup est la variable qui désigne l'intégration de la machine virtuelle dans un groupe de travail d’ordinateurs particuliers.
Si vous souhaitez intégrer la machine virtuelle dans un groupe de travail particulier, la variable doit être s_workgroup="Y". Vous devez ensuite indiquer le nom du groupe de travail dans la variable workgroupName
Attention
Dans le cas où le nom du groupe de travail est laissé par défaut "WORKGROUP", la variable s_workgroup="N" doit être maintenue
# --- Variables pour reboot --- #
s_reboot="Y"
reboot_message="Merci de bien vouloir patienter, votre ordinateur est en cours de preparation. Vous pourrez ouvrir votre session au prochain demarrage."
s_reboot="Y" est la variable qui désigne le redémarrage automatique de la machine virtuelle de type Microsoft.
Le redémarrage automatique de la machine virtuelle Read-Only Windows est appliqué pour lui assurer un nom et un SID unique (afin d'éviter les doublons)
Un message avant le redémarrage peut être affiché à l'écran de l'utilisateur, il est personnalisable grâce à la variable reboot_message.
Attention
Il est préférable d'éviter de mettre des caractères spéciaux dans votre message d'avertissement.
# --- Variables pour OEM --- #
oemKey="1245-4575"
oemKey est la variable qui désigne une clé de licence OEM Windows pour la machine virtuelle.
Cette variable permet l'usage d'une licence OEM dans la VM
Information
Il est préconisé dans la mesure du possible, d'utiliser une clé de licence en volume (KMS ou MAK), à entrer et à activer dans le master Windows. Au cas où vous ne disposez pas de clé de licence en volume, il vous est permis d'utiliser des clés de licence OEM (cf. FAQ licensing Microsoft)
# --- Variables pour execute script --- #
s_executeScript="N"
scriptPath="C:/Users/neo/testBat.bat"
s_scriptArgs="N"
script_argList="[\"arg1\",\"arg2\",\"arg3\"]"
scriptPath est une variable pour exécuter un script au démarrage de la machine virtuelle
script_argList est une liste d'arguments cela n'est pas obligatoire
Information
Il vous est possible d'utiliser un fichier "cmd", "bat", "exe", ....
Le script est exécuté par le compte système.
Il faut savoir que le script est lancé après la jonction dans le domaine et avant le redémarrage de la VM.
Attention
Pour la définition des variables, protéger les caractères spéciaux (les espaces, les anti-slashs, …) par des .
Ex : si chemin d’accès au script est C :/Users/neo/Documents/script auto resolution
alors
scriptPath= "C :/Users/neo/Documents/script\ auto\ resolution"
PROTOTYPES DES FONCTIONS UTILISABLES
Le paragraphe prototypes est un commentaire qui nous permet de savoir comment sont utilisées les fonctions
## ------- Windows et linux ------
# changeVmResolution <vmName> <resolution>
# changeVmName <vmName>
# executeScript <vmName> \'"<scriptPath>"\' "<scriptArgList>"
## -------- Windows uniquement
# autoLogon <vmName> \'"<userName>"\' \'"<userPassword>"\' \'"[domainNameAutoLogon]"\'
# executeScript <vmName> \'"<scriptPath>"\'
# joinDomain <vmName> <isLdap> \'"<domainName>"\' \'"<domainNetBiosName>"\' \'"<domainUserName>"\' \'"<domainPassword>"\' \'"[domainOU]"\'
# joinWorkgroup <vmName> \'"<workgroupName>"\'
# rebootOs <vmName> \'"<reboot_message>"\'
# setOemLicense <vmName> <oemKey>
CODE EXECUTE
Le dernier paragraphe CODE EXECUTE est le code exécuté par l'agent ceBox-Utility au démarrage de la VM (service qemu Guest Agent de la machine virtuelle)
Attention
Le CODE EXECUTE ne doit pas être modifié
source /etc/conf.d/nhc/guest_agent_commands
# --- Recuperation du nom de la VM --- #
vmName=$1
# --- Gestion du double ecran --- #
if [ "${s_doubleScreen^^}" == "Y" ] ; then
HEAD=`xrandr -q |grep -w 'connected'|cut -f1 -d' '`
HEAD1=`echo $HEAD | cut -f2 -d' '`
HEAD2=`echo $HEAD | cut -f1 -d' '`
if ( [ ! -z $displayResolution ] && [ "$displayResolution" != "native" ] ) ; then
xrandr --output $HEAD1 --right-of $HEAD2 --mode $displayResolution --output $HEAD2 --mode $displayResolution
else
xrandr --output $HEAD1 --right-of $HEAD2
fi
SCREEN_0_WIDTH=`xrandr -q |grep '*' |head -n 1 | cut -f1 -d'x'|tr -d ' ' `
wmctrl -r :ACTIVE: -e 0,$SCREEN_0_WIDTH,-1,-1,-1
fi
# --- Renommer la VM --- #
if [ "${s_rename^^}" == "Y" ] ; then
resultRename=`changeVmName $vmName`
fi
# --- Joindre le domaine --- #
if [ "${s_domain^^}" == "Y" ] ; then
if [ "${s_OU^^}" == "N" ] ; then
resultJoinDomain=`joinDomain $vmName $isLdap \'"$domainName"\' \'"$domainNetBiosName"\' \'"$domainUserName"\' \'"$domainPassword"\'`
else
resultJoinDomain=`joinDomain $vmName $isLdap \'"$domainName"\' \'"$domainNetBiosName"\' \'"$domainUserName"\' \'"$domainPassword"\' \'"$domainOU"\'`
fi
fi
# --- Autologon --- #
# Sur le meme principe, on peut mettre l'autologon ici avec 2 cas : Normal et dans un domaine
if [ "${s_autoLogon^^}" == "Y" ] ; then
if [ "${s_DomainAuto^^}" == "N" ] ; then
resultAutoLogon=`autoLogon $vmName $userName $userPassword`
else
resultAutoLogon=`autoLogon $vmName $userName $userPassword \'"$domainNameAutoLogon"\'`
fi
fi
# --- Changement Resolution pour la VM --- #
if [ "${s_autoResolution^^}" == "Y" ] ; then
resolution=`xrandr |grep '*'|awk '{print $1}'`
resultResolution=`changeVmResolution $vmName $resolution`
fi
# --- clef OEM --- #
if [ "${s_oemKey^^}" == "Y" ] ; then
resultOEM=`setOemLicense $vmName`
fi
# --- Utilisation d'un script --- #
if [ "${s_executeScript^^}" == "Y" ] ; then
if [ "${s_scriptArgs^^}" == "N" ] ; then
resultExecuteScript=`executeScript $vmName \'"$scriptPath"\' "[]"`
else
resultExecuteScript=`executeScript $vmName \'"$scriptPath"\' "$script_argList"`
fi
fi
# --- Reboot de la VM --- #
# --- Si la variable s_reboot est à Y et si la variable s_domain est à Y, on vient vérifier que la VM est bien entrée dans le domaine --- #
Si oui, reboot => donc création d'un snapshot.
Si non, pas de reboot. --- #
if [ "${s_reboot^^}" == "Y" ] ; then
if [ "${s_domain^^}" == "Y" ]; then
if ( $resultJoinDomain ); then
sleep 15
resultReboot=`rebootOs $vmName`
fi
else
sleep 15
resultReboot=`rebootOs $vmName`
fi
fi
# --- Pour debug R&D / n'a aucune incidence sur la prod --- #
globalResult=1
if ( $resultResolution && $resultRename && $resultReboot ); then
globalResult=0
else
globalResult=1
fi
echo "result=$globalResult"
Updated about 1 year ago