JavaScript is required to for searching.
Ignorer les liens de navigation
Quitter l'aperu
Guide d'administration des systèmes Oracle® ZFS Storage Appliance
Oracle Technology Network
Bibliothque
PDF
Aperu avant impression
Commentaires
search filter icon
search icon

Informations document

Utilisation de la présente documentation

Chapitre 1 Présentation d'Oracle ZFS Storage Appliance

Chapitre 2 Statut

Chapitre 3 Configuration initiale

Chapitre 4 Configuration réseau

Chapitre 5 Configuration de stockage

Chapitre 6 Configuration du réseau de stockage SAN

Chapitre 7 Configuration utilisateur

Chapitre 8 Définition des préférences de ZFSSA

Chapitre 9 Configuration des alertes

Chapitre 10 Configuration de cluster

Chapitre 11 Services ZFSSA

Chapitre 12 Partages, projets et schéma

Chapitre 13 Réplication

Chapitre 14 Migration shadow

Chapitre 15 Ecriture de scripts à l'aide de la CLI

Automatisation de l'accès

Commandes de traitement par lots

Commandes de script

L'environnement de script

Interaction avec le système

La fonction Run

La fonction Get

La fonction List

La fonction Children

La fonction Choices

Génération de sorties

Gestion des erreurs

Chapitre 16 Maintenance des workflows

Chapitre 17 Intégration

Index

Interaction avec le système

Il est évident que les scripts présentent uniquement un intérêt s'ils sont en mesure d'interagir avec le système dans son ensemble. Plusieurs fonctions intégrées permettent à vos scripts d'interagir avec le système :

Tableau 15-1  Fonctions intégrées pour la prise en charge des interactions avec le système
Fonction
Description
get
Récupère la valeur de la propriété spécifiée. Notez que cette fonction renvoie la valeur au format natif (par exemple, les dates sont renvoyées comme des objets Date).
list
Renvoie un tableau de jetons correspondant aux enfants dynamiques du contexte actuel.
run
Exécute la commande spécifiée dans le shell et renvoie les éventuelles sorties en tant que chaînes. Notez que si la sortie contient plusieurs lignes, la chaîne renvoyée contient des nouvelles lignes incorporées.
props
Renvoie un tableau des noms de propriétés du noeud actuel.
set
Nécessite deux chaînes en tant qu'arguments et définit la propriété spécifiée sur la valeur spécifiée.
choicies
Renvoie une série de valeurs de la propriété valide pour toute propriété dont l'ensemble de valeurs est connu et énumérable.

La fonction Run

La manière la plus simple pour les scripts d'interagir avec le système dans son ensemble est l'utilisation de la fonction "run" : celle-ci nécessite une commande à exécuter et renvoie la sortie de cette commande en tant que chaîne. Par exemple :

dory:> configuration version script dump(run('get boot_time'))
'                     boot_time = 2009-10-12 07:02:17\n'

La fonction dump intégrée procède au vidage de l'argument sans accroître les éventuelles nouvelles lignes incorporées. Les fonctionnalités de gestion des chaînes d'ECMAScript peuvent être utilisées pour décomposer la sortie. Voici par exemple le résultat de la scission sur la base des espaces de la sortie ci-dessus :

dory:> configuration version script dump(run('get boot_time').split(/\s+/))
['', 'boot_time', '=', '2009-10-12', '07:02:17', '']

La fonction Get

La fonction run est suffisamment puissante pour que l'utilisateur soit tenté de s'appuyer exclusivement sur l'analyse des sorties afin d'obtenir des informations sur le système. Son indéniable inconvénient est que les scripts correspondants analysent des sorties lisibles à l'oeil qui sont susceptibles de changer à l'avenir. Pour collecter des informations sur le système de manière plus fiable, servez-vous de la fonction "get" intégrée. Dans la cas de la propriété boot_time, cette fonction renvoie l'objet Date d'ECMAScript plutôt que la chaîne, et permet ainsi la manipulation par programmation de cette valeur de propriété. Par exemple, vous pouvez souhaiter utiliser la propriété boot_time conjointement avec l'heure actuelle pour déterminer la durée écoulée depuis l'initialisation :

script
       run('configuration version');
       now = new Date();
       uptime = (now.valueOf() - get('boot_time').valueOf()) / 1000; 
       printf('up %d day%s, %d hour%s, %d minute%s, %d second%s\n',
           d = uptime / 86400, d < 1 || d >= 2 ? 's' : '',
           h = (uptime / 3600) % 24, h < 1 || h >= 2 ? 's': '',
           m = (uptime / 60) % 60, m < 1 || m >= 2 ? 's': '',
           s = uptime % 60, s < 1 || s >= 2 ? 's': '');

En supposant que le script ci-dessus est enregistré dans un fichier "uptime.aksh", vous pouvez l'exécuter de la manière suivante :

% ssh root@dory < uptime.aksh
Pseudo-terminal will not be allocated because stdin is not a terminal.
Password: 
up 2 days, 10 hours, 47 minutes, 48 seconds

Le message concernant l'allocation d'un pseudo-terminal est du au client ssh ; le problème correspondant peut être résolu en spécifiant l'option "-T" pour ssh.

La fonction List

Dans un contexte possédant des enfants dynamiques, il peut s'avérer utile d'itérer ces enfants par programmation. Ceci peut être réalisé à l'aide de la fonction list, qui renvoie un tableau d'enfants dynamiques. Le script ci-dessous itère par exemple chaque partage de chaque projet et imprime la quantité d'espace occupée et la quantité d'espace disponible :

script
       run('shares');
       projects = list();

       for (i = 0; i < projects.length; i++) {
               run('select ' + projects[i]);
               shares = list();

               for (j = 0; j < shares.length; j++) {
                       run('select ' + shares[j]);
                       printf("%s/%s %1.64g %1.64g\n", projects[i], shares[j],
                           get('space_data'), get('space_available'));
                       run('cd ..');
               }

               run('cd ..');
       }

La sortie obtenue après l'exécution du script, enregistré dans le fichier "space.aksh", est présentée ci-dessous :

% ssh root@koi < space.aksh
Password: 
admin/accounts 18432 266617007104
admin/exports 18432 266617007104
admin/primary 18432 266617007104
admin/traffic 18432 266617007104
admin/workflow 18432 266617007104
aleventhal/hw_eng 18432 266617007104
bcantrill/analytx 1073964032 266617007104
bgregg/dashbd 18432 266617007104
bgregg/filesys01 26112 107374156288
bpijewski/access_ctrl 18432 266617007104
...

Pour obtenir une version plus "présentable" (bien que plus difficile à gérer du point de vue de la programmation), il est possible d'analyser directement la sortie de la commande get :

script
       run('shares');
       projects = list();

       printf('%-40s %-10s %-10s\n', 'SHARE', 'USED', 'AVAILABLE');

       for (i = 0; i < projects.length; i++) {
               run('select ' + projects[i]);
               shares = list();

               for (j = 0; j < shares.length; j++) {
                       run('select ' + shares[j]);

                       share = projects[i] + '/' + shares[j];
                       used = run('get space_data').split(/\s+/)[3];
                       avail = run('get space_available').split(/\s+/)[3];

                       printf('%-40s %-10s %-10s\n', share, used, avail);
                       run('cd ..');
               }

               run('cd ..');
       }

Un extrait de la sortie obtenue après l'exécution de ce nouveau script, enregistré dans le fichier "prettyspace.aksh", est présenté ci-dessous :

% ssh root@koi < prettyspace.aksh
Password:
SHARE                                    USED       AVAILABLE 
admin/accounts                           18K        248G      
admin/exports                            18K        248G      
admin/primary                            18K        248G      
admin/traffic                            18K        248G      
admin/workflow                           18K        248G      
aleventhal/hw_eng                        18K        248G      
bcantrill/analytx                        1.00G      248G      
bgregg/dashbd                            18K        248G       
bgregg/filesys01                         25.5K      100G      
bpijewski/access_ctrl                    18K        248G      
...

La fonction Children

Même dans un contexte possédant des enfants statiques, il peut s'avérer utile d'itérer ces enfants par programmation. Ceci peut être réalisé à l'aide de la fonction children, qui renvoie un tableau d'enfants statiques. Voici par exemple un script qui itère chaque service et imprime le statut du service :

configuration services
script
       var svcs = children();
       for (var i = 0; i < svcs.length; ++i) {
                run(svcs[i]);
                try {
                        printf("%-10s %s\n", svcs[i], get('<status>'));
                } catch (err) { }
                run("done");
       }

La sortie obtenue après l'exécution du script, enregistré dans le fichier "svcinfo.aksh", est présentée ci-dessous :

% ssh root@koi < space.aksh
Password: 
cifs       disabled
dns        online
ftp        disabled
http       disabled
identity   online
idmap      online
ipmp       online
iscsi      online
ldap       disabled
ndmp       online
nfs        online
nis        online
ntp        online
scrk       online
sftp       disabled
smtp       online
snmp       disabled
ssh        online
tags       online
vscan      disabled

La fonction Choices

La fonction Choices retourne une série de valeurs de la propriété valide pour toute propriété dont l'ensemble de valeurs est connu et énumérable. Par exemple, le script suivant extrait la liste de tous les pools sur le noeud de partage à l'aide de la fonction Choices, puis itère tous les pools pour répertorier les projets et les partages ainsi que l'espace disponible.

fmt = '%-40s %-15s %-15s\n';
printf(fmt, 'SHARE', 'USED', 'AVAILABLE');
run('cd /');
run('shares');
pools = choices('pool');
for (p = 0; p < pools.length; p++) {
        set('pool', pools[p]);
        projects = list();
        for (i = 0; i < projects.length; i++) {
                run('select ' + projects[i]);
                shares = list();
                for (j = 0; j < shares.length; j++) {
                        run('select ' + shares[j]);
                        share = pools[p] + ':' + projects[i] + '/' + shares[j];
                        printf(fmt, share, get('space_data'),
                            get('space_available'));
                        run('cd ..');
                }
                run('cd ..');
        }
}

La sortie obtenue après l'exécution du script est présentée ci-dessous :

SHARE                                    USED            AVAILABLE     
pond:projectA/fs1                        31744           566196178944  
pond:projectA/fs2                        31744           566196178944  
pond:projectB/lun1                       21474836480     587670999040  
puddle:deptA/share1                      238475          467539219283
puddle:deptB/share1                      129564          467539219283
puddle:deptB/share2                      19283747        467539219283