Go to main content
Guide d'administration des systèmes Oracle® ZFS Storage Appliance, version OS8.6.x

Quitter la vue de l'impression

Mis à jour : Septembre 2016
 
 

Utilisation de 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.

  1. L'exemple de script ci-dessous itère 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 ..');
           }
  2. 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
    ...
  3. 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 ..');
           }
  4. La sortie obtenue après l'exécution de ce nouveau script, enregistré dans le fichier "prettyspace.aksh", est présentée 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      
    ...
  5. La fonction list prend en charge les arguments facultatifs depth et filter.

    Son format est le suivant : list ([depth, [filter]]). L'argument depth peut être défini par un nombre. Plus le nombre pour depth est élevé, plus le nombre de détails affichés sera important. L'argument filter se présente sous la forme suivante : {<prop1>:<val1>, <prop2>:<val2> ...}. Si filter est indiqué, depth doit l'être également.

    Syntaxe et comportement de l'entrée :

    • list() - Renvoie uniquement des noms de noeuds.

    • list(0) - Renvoie les propriétés de noeud et uniquement les noms des enfants.

    • list(0, {kiosk_mode: true}) - Renvoie une liste filtrée lorsque la commande kiosk_mode est définie sur true avec les noms des enfants.

    • list(1) - Renvoie les propriétés de noeud, les noms et les propriétés des enfants, et uniquement les noms des petits-enfants.

    • list(1, {kiosk_mode: true}) - Renvoie une liste filtrée lorsque la commande kiosk_mode est définie sur true avec des détails jusqu'à depth=1.

    • list(2) - Renvoie les propriétés de noeud, les noms et propriétés des enfants, et la sortie list(0) des petits-enfants.

    • list(2, {fullname:'Super*', kiosk_mode: true}) - Renvoie une liste filtrée pour fullname contenant Super, lorsque la commande kiosk_mode est définie sur true avec des détails jusqu'à depth=2.

  6. Voici un exemple de sortie pour une liste avec depth=2 :

    Le libellé name indique le nom de l'élément de liste (à savoir, un noeud). Le libellé properties indique les propriétés de l'élément de liste. Le libellé children indique les enfants statiques de l'élément de liste. Le libellé list indique les enfants dynamiques de l'élément de liste.

    script
            ("." to run)> dump(list(2));
            ("." to run)> .
    
            [{
                name: 'restuser',
                properties: {
                    kiosk_screen: 'status/dashboard',
                    kiosk_mode: false,
                    roles: ['basic'],
                    require_annotation: false,
                    initial_password: 'DummyPassword',
                    fullname: 'REST User',
                    logname: 'restuser'
                },
                children: [{
                    name: 'preferences',
                    properties: {
                        advanced_analytics: false,
                        session_timeout: 15,
                        login_screen: 'status/dashboard',
                        locale: 'C'
                    }
                }, {
                    name: 'exceptions',
                    list: [{
                        name: 'auth-000',
                        properties: {
                             allow_configure: false,
                             scope: 'alert'
                        }
                    }, {
                        name: 'auth-001',
                        properties: {
                             allow_workgroup: false,
                             allow_domain: false,
                             name: '*',
                             scope: 'ad'
                        } 
                    }]
                }]
            }]