[Powershell Powercli] {Worklow et Parallel}

dans le cadre d’un redémarrage par Lot de Serveurs pour des opérations de Snapshots :

le traitement de tache par serveur générait trop de temps de traitement

les taches étant déjà lancées en job je ne souhaitais pas relancer la tache en job

pour ce faire nous allons utiliser Workflow et  plus particulièrement foreach -parallel

 

la source est un fichier csv avec le nom des vms et le numéro de lot représentant l’ordre d’arrêt et de démarrage (inversé)

le script est composé de 3 Phases

  1. Arrêt des vmsl’arrêt des vms se fait par le biais d’une fonction qui exécute la commande stop-VMGuest et qui en cas d’un délai trop long force l’arrêt de la vm par la commande stop-vm -kill 

     

    Comme pour les Jobs, pour que celle ci fonctionne dans le Workflow elle doit être inclue dans le Workflow.

    début du Workflow :

    celui ci se présente comme une Fonction avec ses paramètres

    ensuite nous incluons la fonction :

    suite a ça nous pouvons commencer la boucle de travail  :

    certaine commande ne sont pas autorisé dans un Worklow

    pour cela nous utilisons un script block InlineScript

    cela nous permet de lancer la connexion au vcenter

    ainsi que les commandes Powercli nécessaire

    enfin nous lançons la fonction ChangeVMPowerState pour lancer l’arrêt de la vm

    EDIT :
    cette méthode générait trop de connexions aux vcenters et régulièrement était en erreur suite a un accès concurrent au vicredentialstoreitem  …

    du coup je suis parti pour récupérer les infos des vms avant le Workflow

    ce qui simplifie beaucoup le Workflow

  2. Prise de snapshot voir précédent billet
  3. démarrage des vms :
    Dans le mème principe que l’arrêt sans prendre en compte le temps d’exécution puisque l’opération de démarrage s’exécute sur l’objet vmla seule chose a prendre en compte est le temps d’attente entre les lots pour le démarrage applicatif .

     

 

 

Le script complet :

 

 

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *