Utiliser SSH pour arrêter un ordinateur virtuel à l’aide d’une opération de type workflow

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 2024
  • 8 minutes de lecture
  • Utilisez SSH pour arrêter à distance un ordinateur virtuel à l’aide d’une opération de type workflow. Suivez ce cas d'utilisation pour parcourir toutes les tâches nécessaires pour accomplir ce type d'arrêt.

    Avant de commencer

    Rôle requis : Concepteur de workflow ou sn_cmp.cloud_admin

    Procédure

    1. Pour créer l'activité personnalisée SSH, procédez comme suit :
      1. Accédez à la Portail d’administration > Workflows > Éditeur de workflow.
      2. Cliquez sur l’onglet Personnalisé , puis cliquez sur + (le signe plus) pour créer une activité personnalisée.
      3. Dans la liste des types d'activités, choisissez SSH.
        Choisissez SSH comme type d’activité personnalisé
      4. Le concepteur d’activité s’ouvre avec l’onglet Général affiché
        Entrez un nom unique pour l'activité, puis cliquez sur Continuer.
      5. Dans l'onglet Entrées, ajoutez les variables d'entrée avec les étapes suivantes, puis cliquez sur Continuer :
      6. Dans la table Entrée, cliquez sur le signe + dans un cercle pour créer une variable d'entrée.
      7. Cliquez à droite d'ABC dans la colonne Nom et tapez le nom de l'entrée.

        Les entrées varient en fonction de l'objet à impacter. Vous pouvez arrêter une activité pour arrêter un ordinateur virtuel, afin que les entrées reflètent les valeurs nécessaires pour accomplir cette action.

        Les colonnes Type et Obligatoire sont renseignées automatiquement en fonction de l'entrée que vous saisissez.

      8. Créez un objet d’entrée pour chaque entrée de la table suivante, puis cliquez sur Continuer :
        Variable d'entrée Type Obligatoire
        Hôte Chaîne Non
        Commande Chaîne Non
        Balise d'informations d'identification Chaîne Non
      9. Dans l'onglet Commande d'exécution, effectuez les actions suivantes :
      10. Dans la table Sortie, cliquez sur le signe + dans un cercle pour créer une variable de sortie.
      11. Cliquez à droite d'ABC dans la colonne Nom et tapez le nom de la sortie.
        Les variables de sortie reflètent les résultats possibles lorsque le workflow tente de SSH vers l'ordinateur virtuel. La colonne Type se remplit automatiquement.
        Sorties Type
        erreur Chaîne
        sortie Chaîne
      12. Cliquez et faites glisser la variable erreur vers le champ Nom de variable dans la table Règles d'analyse.
      13. Dans la boîte de dialogue Règle d'analyse des erreurs, dans la liste déroulante Source d'analyse, sélectionnez la source appropriée ; dans ce cas, executionResult.errorMessages.
      14. Faites la même chose pour la variable de sortie, en sélectionnant executionResult.output comme source d'analyse, puis cliquez sur Soumettre.
        Sorties affichées dans les règles d’analyse
      15. Cliquez sur Continuer.
        Les conditions sont facultatives.
      16. Cliquez sur Enregistrer, puis sur Publier pour rendre l’activité disponible à l’utilisation dans le workflow.
    2. Pour créer le workflow SSH nécessaire pour mettre l'ordinateur virtuel hors tension, procédez comme suit :
      Lorsque vous créez un workflow, vous devez l'associer à une table et à une activité.
      • Vous pouvez créer le workflow sur une table au niveau global ou une table au niveau de l'application. Utilisez la table globale pour rendre le workflow disponible à l'utilisation avec toutes les applications ServiceNow. Ici, nous utilisons une table pour Cloud Provisioning and Governance, de sorte que ce workflow ne sera disponible qu'à l'utilisation avec cette application.
      • Vous pouvez créer le workflow à partir de l'éditeur de workflow ou du concepteur d'activité. Ici, le concepteur d'activité est utilisé.
      1. Dans le concepteur d'activité, sélectionnez l'onglet Workflows à droite, puis cliquez sur + (le signe plus) pour ajouter un nouveau workflow.
      2. Dans la fenêtre Nouveau workflow, saisissez un nom unique pour le workflow.
      3. Dans la liste déroulante Table, sélectionnez la table à utiliser.
        Recherchez et utilisez le cmdb_ci_vm_instance d’instance d’ordinateur virtuel pour utiliser le workflow afin de mettre un ordinateur virtuel hors tension.
      4. Cliquez sur Envoyer.
      5. Lorsque le workflow s'affiche dans le canevas, supprimez la ligne de connexion entre le point de début et le point de fin du workflow.
      6. Supprimez la ligne de connexion entre le point de début et le point de terminaison du workflow.
      7. Cliquez-droit sur le canevas Plus d'informations et sélectionnez Modifier les entrées.
      8. Créez les entrées suivantes :
        Remarque :
        Récupérez les noms d'entrée depuis le champ Colonne, et non depuis le champ Étiquette. Si le workflow est associé à une table de niveau global, le nom de l'entrée dans le champ Colonne est précédé de u_, par exemple, u_ipaddress. Ici, la table est au niveau de l'application, elle n'a donc pas besoin de préfixe.
        Tableau 1. Entrées de workflow
        Type Étiquette Colonne (ajoutée automatiquement) Longueur max.
        Chaîne IPAddress ipaddress 100
        Chaîne CredentialTag credentialtag 100
      9. Cliquez sur Envoyer.
      10. Cliquez-droit sur le canevas et sélectionnez Ajouter une activité personnalisée.
      11. Dans la fenêtre Versions, recherchez et sélectionnez l'activité que vous avez créée initialement dans ce cas d'utilisation.
      12. Dans la fenêtre Nouvelle activité pour cette activité (nouvel enregistrement d'activité du workflow [vue Générateur de diagramme]), saisissez un nom pour l'activité.
      13. Dans le champ Hôte, tapez le mappage d'entrée auquel l'activité s'attend.

        Ici, il s’agit de l’adresse IP de l’hôte : ${workflow.inputs.u_ipaddress}. Utilisez cette expression pour obtenir l'adresse IP :

        $(Script:CMPVMUtils.getReachableIp[arg=$(Stack.items[Virtual Server].attributes[sys_id])])

      14. Dans le champ Commande, tapez shutdown -h now
      15. Dans le champ Balise d'informations d'identification, tapez ${workflow.inputs.u_credentialtag}

        Utilisez cette expression pour obtenir la balise d'informations d'identification :

        $(Script:CMPVMUtils.getCredentialAlias[arg=${Stack.items[Virtual Server].attributes[sys_id]}])

      16. Cliquez sur Envoyer.
        L'activité s'affiche dans le canevas du workflow.
      17. Cliquez avec le bouton droit sur le canevas, puis sélectionnez Ajouter une activité principale pour ajouter une activité de script d'exécution.
      18. Dans la fenêtre Définitions d'activité du workflow, recherchez et sélectionnez Exécuter le script.
      19. Dans la fenêtre Nouvelle activité : exécuter un script, tapez un nom pour l'activité.
      20. Coupez et collez un script (approprié pour votre environnement) dans le champ Script.
        Ce script met à jour l'état de l'ordinateur virtuel après son arrêt.
        Exemple de script :
        if ( gs.nil(data.get(3).error)) {
                            current.state = 'off';
                            current.setWorkflow(false);
                            current.update();
        }
        
      21. Cliquez sur Envoyer.
      22. Dans le canevas, connectez les connecteurs entre le point de début, l'activité, le script d'exécution et le point de terminaison.
      23. Validez le workflow à l'aide de la validation du workflow.
        Remarque :
        Le système ne recommande pas l'utilisation de current.update(). Cela peut être ignoré.
    3. Pour ajouter l'opération à un bloc de ressources, procédez comme suit :
      Vous pouvez sélectionner parmi les opérations existantes dans un bloc de ressources pour travailler avec votre workflow ou créer une opération personnalisée.
      1. Dans le portail d'administration du cloud, accédez à Conception > Blocs de ressources.
      2. Sélectionnez un bloc de ressources, par exemple Serveur virtuel.
      3. Déplacez l'état du bloc de ressources de Publié à Brouillon pour le rendre modifiable.
      4. Sélectionnez l’onglet Opérations , puis dans le champ déroulant Interface, sélectionnez une interface disponible pour l’utilisateur.
        L'interface par défaut est l'interface du serveur virtuel.
      5. Cliquez sur + à droite du champ Opération, puis dans la boîte de dialogue Ajouter une opération, saisissez un nom significatif et unique.
      6. Sélectionnez une opération dans la liste déroulante Type d'opération.
      7. Sélectionnez Public dans le champ Type d'accès.
      8. Renseignez le formulaire, puis cliquez sur Soumettre.
        Type d'opération Sélectionnez l'opération à effectuer.
        Type d'accès Pour que l'utilisateur voie l'opération au niveau des ressources pendant la mise en service, sélectionnez Public. Les opérations définies sur Privé ne sont pas visibles pendant la mise en service.
        L'opération est disponible sur la ressource lorsque vous sélectionnez la ressource pour votre workflow.
      9. Pour ajouter une étape d’opération de ressource afin d’appeler le workflow, toujours dans l’onglet Opérations, cliquez sur Étapes > Ajouter une étape.
        Pour permettre l'exportation du workflow dans le cadre des ensembles de mises à jour, vous devez créer une interface d'extension et ajouter la nouvelle opération. Consultez Étendre les blocs de ressources Cloud Provisioning and Governance avec une opération de remplacement pour en savoir plus.
      10. Dans la fenêtre contextuelle Ajouter des étapes pour l'opération, sélectionnez Invoquer un workflow pour Type d'opération.
      11. Sélectionnez le workflow dans la liste des workflows que vous avez créés.
        Le système peut filtrer la liste à l'aide de balises. Pour ajouter une balise :
        1. Accédez à Propriétés système.
        2. Recherchez et sélectionnez la propriété système sn_cmp.workflow_tag_filter.
        3. Modifiez la propriété. Ajoutez une balise ou une liste de balises séparées par des virgules.
        4. Cliquez sur Enregistrer.
      12. Pour filtrer les workflows :
        1. Sur la table de workflow, ouvrez le workflow.
        2. Cliquez sur Ajouter une balise.
        3. Entrez la valeur que vous avez fournie précédemment dans la propriété sn_cmp.workflow_tag_filter
        4. Cliquez sur Entrée pour ajouter la valeur en tant que balise au workflow. La nouvelle étape s'affiche après que le logiciel a généré le nouveau catalogue d'opérations du jour 2.
      13. Des workflows peuvent exister et sont créés sur des tables autres que globales.
        Vous pouvez ajouter un workflow créé sur une telle table. Pour exécuter des opérations sur ce type de workflow, vous avez besoin du sys_id de l'enregistrement dans lequel le workflow s'exécute afin de créer l'enregistrement actuel. Ainsi, lorsque le concepteur ajoute un workflow qui se trouve sur une table autre que globale, le système crée un paramètre wf_current dans le paramètre d'entrée de l'opération. Vous pouvez ensuite écrire une expression pour mapper le sys_id de la ressource dans laquelle l'opération est en cours d'exécution. Une fois cette opération terminée, le concepteur peut utiliser le mot clé « actuel » dans les scripts de workflow.
        Pour ajouter le workflow :
        1. Après avoir créé l'étape, le système ajoute les entrées de workflow aux paramètres d'entrée de l'opération. Vous pouvez ensuite fournir le mappage pour ces paramètres, si nécessaire.
        2. Cliquez sur le bouton Générer le catalogue pour créer l'élément de catalogue pour l'opération.
        3. Une fois le catalogue généré, vous pouvez ajouter des règles de chargement et de changement de champ aux éléments de catalogue.
      14. Définissez le bloc de ressources sur l'état Publié pour rendre le workflow disponible dans le portail de l'utilisateur dans le cloud.
    4. Pour exécuter l'opération à partir du portail de l'utilisateur, procédez comme suit :
      1. Mettez en service un ordinateur virtuel AWS simple à partir du portail.
      2. Une fois la mise en service de l'ordinateur virtuel terminée, accédez à la pile > Ressource d'ordinateur virtuel.
      3. Dans l'option Sélectionner une opération de ressource, sélectionnez l'activité d'arrêt personnalisée que vous avez créée précédemment dans ce cas d'utilisation, puis cliquez sur OK.
        L'opération s'exécute après la création du RITM et l'état de l'ordinateur virtuel change dans la console AWS.
      4. Accédez à la Exploiter  > Pistes pour afficher les journaux de piste et suivre les étapes de l’opération.
    5. Pour résoudre les problèmes, si nécessaire, procédez comme suit :
      1. Utilisez l'élément de demande (RITM) et accédez au tableau de bord RootCauseAnalysis.
        Le RITM a le lien vers le contexte du workflow de l'opération actuellement exécutée.
      2. Vérifiez ces erreurs courantes :
        Tableau 2. Gestion des erreurs
        Symptôme Message d'erreur
        L'ordinateur virtuel s'arrête, mais il y a eu un problème avec la connexion SSH "Error; job finished with status ERROR: Problem in SSH session, job aborted: Connection unexpectedly closed by SSH server: \n",
        L'ordinateur virtuel est déjà arrêté / dans l'impossibilité d'atteindre l'ordinateur virtuel "Cannot connect, status is TCP_CONNECTION_FAILURE. Timed out while waiting for TCP to connect to 10.198.252.224:22: \n",
        Remarque :
        Vérifiez que l'adresse IP de l'ordinateur virtuel dans le wf_context est l'adresse appropriée. L'ordinateur virtuel a peut-être déjà été arrêté. Vérifiez que l'adresse IP est accessible.
        Accès racine non disponible "Failed to issue method call: Access denied\nMust be root.\nExit status: 1\n\n",
        Remarque :
        Vérifiez que la case Sudo est cochée dans l'activité SSH au début de ce cas d'utilisation.