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, ...

356

Pour Accéder au scripts, aller dans le menu Settings \ ceBox® \scripts

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

746

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

330
# 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"