TECH::Become a clustered Data ONTAP CLI Ninja

From HowStuffWorks.com

Ninjas. They move silently through the night, hunting their prey and striking with a swift ferocity before darting out, unseen and without a trace. Highly skilled and trained, they are efficient and accurate. And yes, I know they are also kind of assholes…

With this blog entry, I hope to arm you, clustered Data ONTAP CLI lovers, with the skills necessary to become CLI Ninjas.

If you attended Insight or have access to the slides from Insight, GV Govindasamy did an excellent session (CR-2-2177) on much of what is covered below. I even borrowed some of his graphics/content :). Follow him on Twitter. Bug him to tweet more.

https://twitter.com/GvgNtap

What is this clustered Data ONTAP you speak of?

Clustered Data ONTAP is NetApp’s scale-out storage operating system.

You can have up to 24 nodes in a NAS cluster, 8 in a SAN cluster. Despite having so many entry points into a cluster, the operating system allows you to use a single point of entry to manage the entire thing.

With Data ONTAP 8.3, there is a management GUI called OnCommand System Manager that is loaded on-box, which means you can access it any time, any where (well, provided you can access that network), with a simple web browser.

But what if you hate GUIs? What if you prefer the cold, dark screen of a PuTTY terminal as you comb your neck beard, drink your Tab cola and listen to your Steely Dan 8-tracks?

There’s good news!

The good news is that clustered Data ONTAP’s CLI is pretty powerful and easy to use.

If you’ve ever used Cisco IOS, you are familiar with the concept of tab completion. If you aren’t familiar, you basically can use the TAB key to help give you hints on what comes next.

It all comes full circle…

Shortcuts!

Additionally, like Cisco IOS, you can use shortcuts for commands. So rather than typing out “volume,” you can use “vol.” Just look out for command ambiguity, where a command with the same few first letters as another command won’t work with a shortcut.

cluster1::*> v
Error: Ambiguous command.  Possible matches include:
      volume
      vserver

Another way shortcuts work is based on how the CLI in clustered Data ONTAP is architected. Every command is considered a “directory” and as you drill down the command tree, you get deeper and deeper into the tree.

For example:

cluster::> vserver services name-services dns

OR

cluster::> dns

Directories!

Folders!

Commands live in directories in clustered Data ONTAP. As such, you can “cd” into these directories by typing a command. With our DNS command example…

cluster::> dns
cluster::vserver services name-services dns>

We dropped down two directory levels! But how do I get back up… Up perhaps?

cluster::vserver services name-services dns> up
cluster::vserver services name-services>

What if I want to go all the way to the top?

cluster::vserver services name-services dns> top
cluster::>

Well, that was easy… what else can we do?

Stuck on a command?

If tab completion isn’t enough for you, or if you want to see all command options, use the ?:

cluster::> vserver ?
 active-directory>           Manage Active Directory
 add-aggregates              Add aggregates to the Vserver
 add-protocols               Add protocols to the Vserver
 audit>                      Manage auditing of protocol requests that the
                             Vserver services
 check>                      The check directory
 cifs>                       Manage the CIFS configuration of a Vserver
 context                     Set Vserver context
 create                      Create a Vserver
 dashboard>                  The dashboard directory
 data-policy>                Manage data policy
 delete                      Delete a Vserver
 export-policy>              Manage export policies and rules
 fcp>                        Manage the FCP service on a Vserver
 fpolicy>                    Manage FPolicy
 group-mapping>              The group-mapping directory
 iscsi>                      Manage the iSCSI services on a Vserver
 locks>                      Manage Client Locks
 modify                      Modify a Vserver
 name-mapping>               The name-mapping directory
 nfs>                        Manage the NFS configuration of a Vserver
 peer>                       Create and manage Vserver peer relationships
 remove-aggregates           Remove aggregates from the Vserver
 remove-protocols            Remove protocols from the Vserver
 rename                      Rename a Vserver
 security>                   Manage ontap security
 services>                   The services directory
 show                        Display Vservers
 show-protocols              Show protocols for Vserver
 smtape>                     The smtape directory
 start                       Start a Vserver
 stop                        Stop a Vserver
 vscan>                      Manage Vscan

Want to know what the command does/is or want to see examples? Use the man command. It will open a “window” similar to vi (ok, a LOT like vi) that allows you to scroll using the space bar, arrow keys and search using the / operand.

cluster::> man volume create

volume create                   Data ONTAP 8.3                   volume create

NAME
    volume create -- Create a new volume

AVAILABILITY
    This command is available to cluster and Vserver administrators at the admin privilege level.

DESCRIPTION
    The volume create command creates a volume on a specified Vserver and storage aggregate. You can optionally specify the following  attributes for the new volume:

Want to see more detailed output from a command?

When  you type a command like “volume show” you might see this:

cluster::> volume show
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
NAS       mixed        aggr1_node1  online     RW         20MB    18.86MB    5%
NAS       ntfs         aggr1_node1  online     RW         20MB    18.86MB    5%
NAS       unix         aggr1_node1  online     RW         20MB    18.87MB    5%
NAS       unix2        aggr1_node1  online     RW         20MB    18.88MB    5%
NAS       vsroot       aggr1_node1  online     RW         20MB    18.84MB    5%
TRUST     ntfs         aggr1_node2  online     RW         20MB    18.82MB    5%
TRUST     unix         aggr1_node1  online     RW         20MB    18.88MB    5%
TRUST     vsroot       aggr1_node1  online     RW         20MB    18.78MB    6%
parisi-fs-01 vol0      aggr0_root_node1 online RW       2.86GB    560.2MB   80%
parisi-fs-02 vol0      aggr0_root_node2 online RW       2.86GB    650.1MB   77%
10 entries were displayed.

What if you want more? Use -instance!

cluster::> volume show -vserver NAS -volume unix -instance 

                                  Vserver Name: NAS
                                   Volume Name: unix
                                Aggregate Name: aggr1_node1
                                   Volume Size: 20MB
                            Volume Data Set ID: 1036
                     Volume Master Data Set ID: 2147484684
                                  Volume State: online
                                   Volume Type: RW
                                  Volume Style: flex
                        Is Cluster-Mode Volume: true
                         Is Constituent Volume: false
                                 Export Policy: allow_all
                                       User ID: 0
                                      Group ID: 0
                                Security Style: unix
                              UNIX Permissions: ---rwxrwxrwx
                                 Junction Path: /unix
                          Junction Path Source: RW_volume
                               Junction Active: true
                        Junction Parent Volume: vsroot
                                       Comment: 
                                Available Size: 18.87MB
                               Filesystem Size: 20MB
                       Total User-Visible Size: 19MB
                                     Used Size: 132KB
                               Used Percentage: 5%
          Volume Nearly Full Threshold Percent: 95%
                 Volume Full Threshold Percent: 98%
          Maximum Autosize (for flexvols only): 24MB
(DEPRECATED)-Autosize Increment (for flexvols only): 1MB
                              Minimum Autosize: 20MB
            Autosize Grow Threshold Percentage: 85%
          Autosize Shrink Threshold Percentage: 50%
                                 Autosize Mode: off
          Autosize Enabled (for flexvols only): false
           Total Files (for user-visible data): 566
            Files Used (for user-visible data): 100
                         Space Guarantee Style: volume
                     Space Guarantee in Effect: true
             Snapshot Directory Access Enabled: false
            Space Reserved for Snapshot Copies: 5%
                         Snapshot Reserve Used: 71%
                               Snapshot Policy: default
                                 Creation Time: Tue Aug 26 14:13:19 2014
                                      Language: C.UTF-8
                                  Clone Volume: false
                                     Node name: parisi-fs-01
                                 NVFAIL Option: off
                         Volume's NVFAIL State: false
       Force NVFAIL on MetroCluster Switchover: off
                     Is File System Size Fixed: false
                                 Extent Option: off
                 Reserved Space for Overwrites: 0B
                            Fractional Reserve: 100%
             Primary Space Management Strategy: volume_grow
                      Read Reallocation Option: off
              Inconsistency in the File System: false
                  Is Volume Quiesced (On-Disk): false
                Is Volume Quiesced (In-Memory): false
     Volume Contains Shared or Compressed Data: false
             Space Saved by Storage Efficiency: 0B
        Percentage Saved by Storage Efficiency: 0%
                  Space Saved by Deduplication: 0B
             Percentage Saved by Deduplication: 0%
                 Space Shared by Deduplication: 0B
                    Space Saved by Compression: 0B
         Percentage Space Saved by Compression: 0%
           Volume Size Used by Snapshot Copies: 728KB
                                    Block Type: 64-bit
                              Is Volume Moving: false
                Flash Pool Caching Eligibility: read-write
 Flash Pool Write Caching Ineligibility Reason: -
                    Managed By Storage Service: -
Create Namespace Mirror Constituents For SnapDiff Use: -
                       Constituent Volume Role: -
                         QoS Policy Group Name: -
                           Caching Policy Name: -
               Is Volume Move in Cutover Phase: false
       Number of Snapshot Copies in the Volume: 10
VBN_BAD may be present in the active filesystem: false
               Is Volume on a hybrid aggregate: false
                      Total Physical Used Size: 860KB
                      Physical Used Percentage: 4%

Information… overload…

Ok, so -instance is too much. What if you want to know specifics about a volume that aren’t found in volume show, but you don’t want all the noise? Use -fields to filter!

For instance, what if you only care about what space is available and used?

cluster::> volume show -vserver NAS -volume unix -fields used,available,percent-used 
vserver volume available used  percent-used 
------- ------ --------- ----- ------------ 
NAS     unix   18.87MB   132KB 5%

Awesome! Now, how do I *exclude* things? What if I want to see all disks in my system that are *not* spares? Use bang(!):

cluster::> disk show -state !spare
                     Usable           Disk    Container   Container   
Disk                   Size Shelf Bay Type    Type        Name      Owner
---------------- ---------- ----- --- ------- ----------- --------- --------
VMw-1.1              3.55GB     -   0 VMDISK  aggregate   aggr0_root_node1 parisi-fs-01
VMw-1.2              3.55GB     -   1 VMDISK  aggregate   aggr0_root_node1 parisi-fs-01
VMw-1.3              3.55GB     -   2 VMDISK  aggregate   aggr0_root_node1 parisi-fs-01
VMw-1.4             82.75MB     -   3 VMDISK  aggregate   aggr1_node1 parisi-fs-01
VMw-1.5             82.75MB     -   4 VMDISK  aggregate   aggr1_node1 parisi-fs-01
VMw-1.6             82.75MB     -   5 VMDISK  aggregate   aggr1_node1 parisi-fs-01
VMw-1.7             82.75MB     -   6 VMDISK  aggregate   aggr1_node1 parisi-fs-01
VMw-1.8             82.75MB     -   8 VMDISK  aggregate   aggr1_node1 parisi-fs-01
VMw-1.15            82.75MB     -   0 VMDISK  aggregate   aggr1_node1 parisi-fs-01
VMw-1.16            82.75MB     -   1 VMDISK  aggregate   aggr1_node1 parisi-fs-01
Press  to page down,  for next line, or 'q' to quit...

That’s a lot of output. And I know I have more than 16 disks…

Sick of having to hit the space bar to see more output from a command?

When a command exceeds the default of 24 lines (or rows), the system will ask you to hit the space bar to continue. This is done because, in a 24 node cluster, you can end up with a LOT of objects. Thousands of volumes, potentially.

If you truly want to see them all, use the rows command to set to 0:

cluster::> rows 0

Or, if you’d rather, set the rows to a larger number:

cluster::> rows 50

Tired of typing the same command over and over and over…?

Built in to the clustered Data ONTAP CLI is the ability to use !, history and redo commands that Linux admins know and love. This is great for repetitive tasks, or even for commands that get super long.

cluster1::> history
   1  rows
   2  rows 0
   3  rows 24
   4  vol show
   5  vserver
   6  up
   7  vserver
   8  ..
   9  man job
  10  man rows
  11  man top
  12  vserver
  13  top
  14  man man
  15  man redo
  16  history
  17  storage
  18  ..
  19  history

To run a specific command you ran already (such as #4, vol show), use one of the following:

cluster::> redo 4  
cluster::> !4

Wildcards!

Clustered Data ONTAP CLI also supports the use of wildcards with most commands. This allows you to show a filtered set of objects, based on name. For example, if you have multiple volumes with “unix” in the name:

cluster::> vol show -volume *unix*
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
NAS       unix         aggr1_node1  online     RW         20MB    18.87MB    5%
NAS       unix2        aggr1_node1  online     RW         20MB    18.88MB    5%
TRUST     unix         aggr1_node1  online     RW         20MB    18.88MB    5%
3 entries were displayed.

You could combine wildcards with excludes as well.

cluster::> vol show -volume *unix*,!unix2
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
NAS       unix         aggr1_node1  online     RW         20MB    18.87MB    5%
TRUST     unix         aggr1_node1  online     RW         20MB    18.88MB    5%
2 entries were displayed.

Either Or

In addition to excluding using !, you can also use | to include multiple instances of a field. This really comes in handy when trying to look at statistics on a cluster.

Without filters, it becomes a minefield of text:

cluster::*> statistics show-periodic -interval 2 -iterations 0 -summary true -object nfsv3 -instance NAS 
cluster: nfsv3.NAS: 2/13/2015 15:59:46
  access                                      commit                                                         create                                      fsinfo                                      fsstat                                     getattr                                                          link                                      lookup                                       mkdir                                       mknod                                       nfsv3             nfsv3      nfsv3               nfsv3      nfsv3     null                                    pathconf                                                  read                           read_symlink     read    read     read     read           readdir                   readdir                   readdirplus                         readdirplus                           remove                                      rename                                       rmdir                                     setattr                                     symlink                                       write
     avg   access  access   access   access      avg   commit  commit   commit   commit                        avg   create  create   create   create      avg   fsinfo  fsinfo   fsinfo   fsinfo      avg   fsstat  fsstat   fsstat   fsstat      avg  getattr getattr  getattr  getattr instance instance      avg     link    link     link     link      avg   lookup  lookup   lookup   lookup      avg    mkdir   mkdir    mkdir    mkdir      avg    mknod   mknod    mknod    mknod     dnfs    nfsv3     read       read      nfsv3    write      write      avg     null    null     null     null      avg pathconf pathconf pathconf pathconf raidprop      avg     read    read     read          avg  symlink symlink  symlink  symlink     read      avg  readdir readdir   postop  readdir  readdir         avg readdirplus readdirplus      postop readdirplus readdirplus      avg   remove  remove   remove   remove      avg   rename  rename   rename   rename      avg    rmdir   rmdir    rmdir    rmdir      avg  setattr setattr  setattr  setattr      avg  symlink symlink  symlink  symlink      avg    write   write    write    write    Complete    Number of
 latency    error percent  success    total  latency    error percent  success    total   cpu_id cpu_name  latency    error percent  success    total  latency    error percent  success    total  latency    error percent  success    total  latency    error percent  success    total     name     uuid  latency    error percent  success    total  latency    error percent  success    total  latency    error percent  success    total  latency    error percent  success    total      ops      ops      ops throughput throughput      ops throughput  latency    error percent  success    total  latency    error  percent  success    total    error  latency    error percent  success      latency    error percent  success    total    total  latency    error percent    error  success    total     latency       error     percent       error     success       total  latency    error percent  success    total  latency    error percent  success    total  latency    error percent  success    total  latency    error percent  success    total  latency    error percent  success    total  latency    error percent  success    total Aggregation Constituents
-------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- -------- ---------- ---------- -------- ---------- -------- -------- ------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- ------- -------- ------------ -------- ------- -------- -------- -------- -------- -------- ------- -------- -------- -------- ----------- ----------- ----------- ----------- ----------- ----------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- ----------- ------------
     0us        0      0%        0        0      0us        0      0%        0        0 Multiple_Values Multiple_Values 0us 0    0%        0        0      0us        0      0%        0        0      0us        0      0%        0        0      0us        0      0%        0        0      NAS        5      0us        0      0%        0        0      0us        0      0%        0        0      0us        0      0%        0        0      0us        0      0%        0        0        0        0        0          0          0        0          0      0us        0      0%        0        0      0us        0       0%        0        0        0      0us        0      0%        0          0us        0      0%        0        0        0      0us        0      0%        0        0        0         0us           0          0%           0           0           0      0us        0      0%        0        0      0us        0      0%        0        0      0us        0      0%        0        0      0us        0      0%        0        0      0us        0      0%        0        0      0us        0      0%        0        0      Yes      4

Yikes!

If you use | to include only the stats you want:

cluster::*> statistics show-periodic -interval 2 -iterations 0 -summary true -object nfsv3 -instance NAS -counter  nfsv3_read_ops|nfsv3_throughput|nfsv3_write_ops
cluster: nfsv3.NAS: 2/13/2015 16:02:25
   nfsv3               nfsv3
    read      nfsv3    write    Complete    Number of
     ops throughput      ops Aggregation Constituents
-------- ---------- -------- ----------- ------------
       0          0        0      Yes      4
       0          0        0      Yes      4
cluster: nfsv3.NAS: 2/13/2015 16:02:29
   nfsv3               nfsv3
    read      nfsv3    write    Complete    Number of
     ops throughput      ops Aggregation Constituents
-------- ---------- -------- ----------- ------------
Minimums:
        0          0        0       -       - 
Averages for 2 samples:
        0          0        0       -       - 
Maximums:
       0          0        0       -       -

Now that’s nice and readable…

If

(Thanks to Doug Moore, TME for Multi-tenancy at NetApp for assistance with this portion)

In the clustered Data ONTAP CLI, there is also a way to use “if” statements by way of the curly bracket thingies.

{these!}

One use case for them could be during upgrades. Each node has 2 images that can be used to store ONTAP.

cluster::> system image show
                 Is      Is                                Install
Node     Image   Default Current Version                   Date
-------- ------- ------- ------- ------------------------- -------------------
node1
         image1  true    true    8.2.3                     8/27/2014 15:20:52
         image2  false   false   8.2.2                     10/15/2014 12:39:58

When you update an image (upgrade), the current image will remain the default image until you change it. That enables the system to boot on the new image when you reboot. If you have 24 nodes and each node has a different image that is the default image, trying to set the default image on each node can become tiresome. However, with the use of an “if” statement in our command, we can set every node’s default image to the image we just upgraded to. The command below will use all instances of “iscurrent=false” and change them to “isdefault=true.”

cluster::> system image modify {-iscurrent false} -isdefault true

If you noticed in the “system image show” command, my default image is image1. When I run the command with the “if” statement, it changes my default image to image2.

cluster::> system image modify {-iscurrent false} -isdefault true

After a clean shutdown, image2 will be set as the default boot image on node
node1.

1 entry was modified.

Now image2 is the default image:

cluster::> system image show
                 Is      Is                                Install
Node     Image   Default Current Version                   Date
-------- ------- ------- ------- ------------------------- -------------------
node1
         image1  false   true    8.2.3                     8/27/2014 15:20:52
         image2  true    false   8.2.2                     10/15/2014 12:39:58

Another use case for “if” is modifying snapshot policies. You can run a command to query for all instances of a policy that is enabled and tell the system to disable it.

cluster::> volume snapshot policy modify {-enabled true} -enabled false
2 entries were modified.

cluster::> volume snapshot policy show -enabled true
There are no entries matching your query.

Sorting your output

So let’s say you want to see a list of your volumes in a cluster but sort them by percent of space available. Guess what? You can do that in the CLI! Use -sort-by.

cluster::*> vol show -fields percent-used -sort-by percent-used
vserver      volume percent-used                                      
------------ ------ ------------ 
NAS          mixed  5%           
NAS          ntfs   5%           
NAS          unix   5%           
NAS          unix2  5%           
NAS          vsroot 5%           
TRUST        ntfs   5%           
TRUST        unix   5%           
TRUST        vsroot 6%

Sort-tastic!

But can I sort stats?

Of course you can! You can use the -sort-key option to do that. Find that problem volume fast!

cluster::> statistics volume show -sort-key latency -max 3

cluster : 9/18/2014 15:13:33
                     Total Read Write Other    Read   Write *Latency
  Volume     Vserver   Ops  Ops   Ops   Ops   (Bps)   (Bps)     (us)
--------- ----------- ----- ---- ----- ----- ------- ------- --------
basevol_5 VS_2_802002   268  166    81    21 3322384 1618744   119387
basevol_5 VS_9_802009   325  177   124    23 3539789 2494725   103094
basevol_5 VS_1_802001   399  215   158    25 4307034 3163792    97657

Viewing event logs

You can use a combination of the tricks above to effectively view event logs to search for errors.

Maybe you want to see only error messages:

cluster::> event log show -severity err
Time                Node             Severity      Event
------------------- ---------------- ------------- ---------------------------
2/13/2015 15:10:07  clusternode-02     ERROR         secd.ldap.connectFailure: vserver (TRUST) could not make a connection over the network to LDAP server (italy) at address (10.228.225.125) and received error (Invalid credentials)
2/13/2015 11:06:33  clusternode-02     ERROR         secd.ldap.connectFailure: vserver (TRUST) could not make a connection over the network to LDAP server (italy) at address (10.228.225.125) and received error (Invalid credentials)
2/13/2015 06:57:58  clusternode-02     ERROR         secd.ldap.connectFailure: vserver (TRUST) could not make a connection over the network to LDAP server (italy) at address (10.228.225.125) and received error (Invalid credentials)
2/13/2015 02:59:22  clusternode-02     ERROR         secd.ldap.connectFailure: vserver (TRUST) could not make a connection over the network to LDAP server (italy) at address (10.228.225.125) and received error (Invalid credentials)

Maybe you want to see messages from a specific event type:

cluster::> event log show -messagename secd*
Time                Node             Severity      Event
------------------- ---------------- ------------- ---------------------------
2/13/2015 15:10:07  clusternode-02     ERROR         secd.ldap.connectFailure: vserver (TRUST) could not make a connection over the network to LDAP server (italy) at address (10.228.225.125) and received error (Invalid credentials)
2/13/2015 11:06:33  clusternode-02     ERROR         secd.ldap.connectFailure: vserver (TRUST) could not make a connection over the network to LDAP server (italy) at address (10.228.225.125) and received error (Invalid credentials)
2/13/2015 06:57:58  clusternode-02     ERROR         secd.ldap.connectFailure: vserver (TRUST) could not make a connection over the network to LDAP server (italy) at address (10.228.225.125) and received error (Invalid credentials)
2/13/2015 02:59:22  clusternode-02     ERROR         secd.ldap.connectFailure: vserver (TRUST) could not make a connection over the network to LDAP server (italy) at address (10.228.225.125) and received error (Invalid credentials)

Or maybe you only want to see errors for the last 2 hours:

cluster::> event log show -time >120m -severity err
Time                Node             Severity      Event
------------------- ---------------- ------------- ---------------------------
2/13/2015 15:10:07  clusternode-02     ERROR         secd.ldap.connectFailure: vserver (TRUST) could not make a connection over the network to LDAP server (italy) at address (10.228.225.125) and received error (Invalid credentials)

Question marks in LUN serial numbers, etc?

In cDOT, the question mark (?) automatically triggers a help screen whenever you type it. This is useful in many cases, but not when you want to set a LUN serial number with a question mark in it. However, there is a way to disable the help function:

cluster::> set -active-help false

Once you do that, the ? will no longer trigger the help screen!

Lots more you can do from the CLI… But the stuff above should get you more than ready!

To close this out, let’s play a ninja song (NSFW, btw).

20 thoughts on “TECH::Become a clustered Data ONTAP CLI Ninja

  1. Pingback: Partial Givebacks during Storage Failovers in NetApp's Clustered Data ONTAP - Datacenter Dude

  2. Pingback: Why Is the Internet Broken: Greatest Hits | Why Is The Internet Broken?

      • I am able to get the line wrap issue to go away by using ‘rows 0’ (not sure why that fixes the column length, but it works). In some case, commands are still going to cause a wrap. However, I’m able to get around most of these issues by using the -fields to consolidate the output a bit.
        Good info here! Thanks JP!

        Like

  3. You can also use signs to show everything above or below a value or date for many things. As in, show me every volume over 1TB, vol show -size >1TB, or vol show -create-time <Fri Jan 01 00:00:00 2016 will show all volumes create before 2016. I bet there's even more I haven't found yet as well.

    Like

  4. Thanks Justin, lots of good information here.

    I’m wondering if there is a way to explicitly exclude information from a command output? The example I’ll use is “vol show -fields volume,size” will present me with vserver, volume and size when I run the command but what I’d really like to do is exclude vserver so I can get a nice long list that’s formatted in a way that I can use to build other commands.

    Like

  5. Pingback: ONTAP CLI comparison tool | Why Is The Internet Broken?

  6. Thanks for the useful info! One issue I am having, is that I am not able to get “-sort-by” to work in ontap 9. Has this switch been deprecated?

    Like

    • You can use grep/awk/sed with ONTAP CLI if you use passthrough SSH commands from a linux client or you use systemshell. To run a cluster command from systemshell, you can type in “ngsh -c [command]” and use grep/awk/sed there.

      REST API is not currently available in ONTAP. Right now, we provide ZAPIs.

      Like

  7. For multiple systems I recommend using ssh keys and using the cli on the linux/unix host. Then you can issue your commands from the cli & use grep or awk or sed etc.. I setup alias ie) somecluster=’ssh -i /export/home/myuserid/.ssh/id_rsa -2 myuserid@somecluster’ this way I can issue commands by typing the alias followed by a command, for diag etc ie) somecluster “set d; version ” to use the ? same deal encapsulate with double quotes, same for use of -date you can end a double quote & continue to enter the remainder of a command… also single quotes on either side of a ! statement & use of braces for comments with white space.. {comment here} this way you can use bash to write simple scripts to mass produce volumes, LUNs, mappings etc. all depends on your experience but you can also use this to grow your skills. one off systems the GUI is fine.. multiple systems in a larger environment you will waste a tonne of time.
    my 2 cents

    Like

Leave a comment