Gestion des lots de support à l'aide de la BUI
Génération et téléchargement d'un nouveau lot de support (BUI)
Options pour les lots de support
Gestion des lots de support à l'aide de la CLI
Réinitialisation des paramètres d'usine
Notification de mises à jour logicielles
Programmation de la notification logicielle (BUI)
Programmation de la notification logicielle (CLI)
Vérification des mises à jour (BUI)
Vérification des mises à jour (CLI)
Mise à jour logicielle sur un contrôleur simple (BUI)
Mise à jour logicielle sur un contrôleur simple (CLI)
Mise à jour logicielle sur des contrôleurs inclus dans un cluster
Préparation de mise à jour des contrôleurs (BUI)
Mise à jour du contrôleur A (BUI)
Mise à jour d'un contrôleur B (BUI)
Préparation de mise à jour des contrôleurs (CLI)
Mise à jour d'un contrôleur A (CLI)
Vérification de la mise à jour d'un contrôleur A (CLI)
Mise à jour d'un contrôleur B (CLI)
Vérification de la mise à jour d'un contrôleur B (CLI)
A propos des vérifications de l'état d'intégrité du système
Vérifications de l'intégrité du système à l'aide de la BUI
Vérifications de l'intégrité du système à l'aide de la CLI
Dépannage des échecs de vérifications d'intégrité préalables à la mise à jour
Résolution des alertes de vérification d'intégrité
Résolution des alertes des vérifications d'intégrité
A propos des mises à jour différées
Application de mises à jour différées (BUI)
Application de mises à jour différées (CLI)
A propos des mises à niveau des microprogrammes matériels
Suppression d'un média de mise à jour (BUI)
Suppression d'un média de mise à jour (CLI)
Mise à jour différée Passthrough-x
Mise à jour différée Quotas d'utilisateurs
Mise à jour différée RAID triple parité
Mise à jour différée Suppression des doublons de données
Mise à jour différée Réplication
Mise à jour différée Propriétés reçues
Mise à jour différée Suppression d'instantanés
Mise à jour différée Instantanés récursifs
Mise à jour différée Remplacement multiple
Mise à jour différée RAIDZ/Miroir
Groupes d'initiateurs multiples par LUN
Support pour les blocs de très grande taille
Support pour les blocs de très grande taille
Gestion des sauvegardes de configuration à l'aide de la BUI
Création d'une sauvegarde de configuration
Restauration à partir d'une configuration enregistrée
Suppression d'une configuration enregistrée
Exportation d'une configuration enregistrée
Importation d'une configuration enregistrée
Gestion de sauvegardes de configuration à l'aide de la CLI
Affichage de la liste des configurations
Création d'une sauvegarde de configuration
Restauration à partir d'une configuration enregistrée
Suppression d'une configuration enregistrée
Exportation d'une configuration enregistrée
Importation d'une configuration enregistrée
Affichage des problèmes actifs
Interface de ligne de commande
Affichage de la liste de journaux
Afficher toutes les entrées du journal
Afficher des groupes d'entrées du journal
Affichage des détails d'une entrée
Contexte d'exécution des workflows
Gestion des erreurs des workflows
Validation des entrées des workflows
Audit sur l'exécution de workflows
Rapports sur l'exécution de workflows
Gestion des versions des workflows
Workflows en tant qu'actions d'alerte
Contexte d'exécution des actions d'alerte
Réalisation d'audits sur les actions d'alerte
Utilisation de workflows programmés
L'exemple suivant illustre un workflow créant une feuille de travail à partir d'un type de lecteur donné :
var steps = [ { step: 'Checking for existing worksheet', execute: function (params) { /* * In this step, we're going to see if the worksheet that * we're going to create already exists. If the worksheet * already exists, we blow it away if the user has indicated * that they desire this behavior. Note that we store our * derived worksheet name with the parameters, even though * it is not a parameter per se; this is explicitly allowed, * and it allows us to build state in one step that is * processed in another without requiring additional global * variables. */ params.worksheet = 'Drilling down on ' + params.type + ' disks'; try { run('analytics worksheets select name="' + params.worksheet + '"'); if (params.overwrite) { run('confirm destroy'); return; } throw ('Worksheet called "' + params.worksheet + '" already exists!'); } catch (err) { if (err.code != EAKSH_ENTITY_BADSELECT) throw (err); } } }, { step: 'Finding disks of specified type', execute: function (params) { /* * In this step, we will iterate over all chassis, and for * each chassis iterates over all disks in the chassis, * looking for disks that match the specified type. */ var chassis, name, disks; var i, j; run('cd /'); run('maintenance hardware'); chassis = list(); params.disks = []; for (i = 0; i < chassis.length; i++) { run('select ' + chassis[i]); name = get('name'); run('select disk'); disks = list(); for (j = 0; j < disks.length; j++) { run('select ' + disks[j]); if (get('use') == params.type) { params.disks.push(name + '/' + get('label')); } run('cd ..'); } run('cd ../..'); } if (params.disks.length === 0) throw ('No ' + params.type + ' disks found'); run('cd /'); } }, { step: 'Creating worksheet', execute: function (params) { /* * In this step, we're ready to actually create the worksheet * itself: we have the disks of the specified type and * we know that we can create the worksheet. Note that we * create several datasets: first, I/O bytes broken down * by disk, with each disk of the specified type highlighted * as a drilldown. Then, we create a separate dataset for * each disk of the specified type. Finally, note that we * aren't saving the datasets -- we'll let the user do that * from the created worksheet if they so desire. (It would * be straightforward to add a boolean parameter to this * workflow that allows that last behavior to be optionally * changed.) */ var disks = [], i; run('analytics worksheets'); run('create "' + params.worksheet + '"'); run('select name="' + params.worksheet + '"'); run('dataset'); run('set name=io.bytes[disk]'); for (i = 0; i < params.disks.length; i++) disks.push('"' + params.disks[i] + '"'); run('set drilldowns=' + disks.join(',')); run('commit'); for (i = 0; i < params.disks.length; i++) { run('dataset'); run('set name="io.bytes[disk=' + params.disks[i] + ']"'); run('commit'); } } } ]; var workflow = { name: 'Disk drilldown', description: 'Creates a worksheet that drills down on system, ' + 'cache, or log devices', parameters: { type: { label: 'Create a new worksheet drilling down on', type: 'ChooseOne', options: [ 'cache', 'log', 'system' ], optionlabels: [ 'Cache', 'Log', 'System' ] }, overwrite: { label: 'Overwrite the worksheet if it exists', type: 'Boolean' } }, execute: function (params) { return (steps); } };