37 Replies Latest reply: Feb 10, 2014 9:52 PM by aashray RSS

NetApp Manageability SDK Feedback

Cyclist
Currently Being Moderated

Folks,

 

We've now merged the Manage ONTAP SDK and the initial version of NetApp Manageability SDK into one single SDK.  Also, added new features like Web Services.  Would like to hear your feedback...

  • Re: NetApp Manageability SDK Feedback
    lwei NetApp Employee Kart Racer
    Currently Being Moderated

    That's great! Could you please post the link to the new SDK? Thanks,   -Wei

  • Re: NetApp Manageability SDK Feedback
    mihall@primustel.ca Novice
    Currently Being Moderated

    How about an application form that people who don't have Office 2007 can open?

  • Re: NetApp Manageability SDK Feedback
    chris_algar Sprinter
    Currently Being Moderated

    I'd be interested in what you mean by merged. Do you mean that there is a common set of libraries is NaElement and NaServer? Because in my mind these are just XML constructors and represent a small benifit to using either api. The API functionality is still very different between ontapi and dfm,

     

    In general I think there is far too much work left to the user of the API with regard to buiding NaElements and unpacking returned data structures. It makes for very messy code. Imbedding this level of complexity in any code which does something even remotely complex leads to unreadable and hard to maintain code. There is also a lack of consistency between the methods.

     

    e.g.     a lot of methods use invoke ("method-name",

                                                         "object-name-or-id",

                                                          $name);

     

    so why break this convention sometimes? as in

     

                                            invoke( "dp-policy-list-iter-start",

                                                       "dp-policy-name-or-id",

                                                        $name );

     

    The same comments apply to the return output and it's child elements. This leads to a ot o debugging, or Data::Dumper printing to work out what changed. I expect that there is a lot of client code out there which beraks you intended methods by using direct data structure access on the returned XML. I could understand why people would give up on endless get_child type operations.

     

     

    These are all hurdles to wide adoption of your API. It is for these reasons that I am writtng an object oriented wrapper for the dfm api, so that I go throught he pain once and then consume this oo api many times in our functional code.

     

    I'd be interested to know other oppinions on this. I'd also be interested in understanding if there is a demand for the perl OO version. I there is then I may post it on CPAN at some point.

     

    Chris

    • Re: NetApp Manageability SDK Feedback
      sens NetApp Employee Cyclist
      Currently Being Moderated

      Hi Chris,

       

      Thanks for your feedback.

       

      Are you expecting to see class-based approach for handling the APIs?

      In other words, do you want to have each API to be represented by a class and the invoke method be a class method?

       

      Just to make sure we understood your requirements properly, we are trying to represent it in the form of sample code/script:

       

       

           use NaServer;

           use DfmServerApi::Dataset::DatasetCreate;  # the DatasetCreate.pm would contain API class and methods for invocation and parameter handling

       

           my $s = NaServer->new($filer, 1, 1);

           $s->set_admin_user($user, $password);

       

           my $input = new DatasetCreate();   # create the object for the API which is represented as a class

           $input->DatasetName = $dataset_name;

       

           my $output = $input->invoke($s);

       

           print "Dataset created with id: $output->DatasetId \n";

       

       

      Please let us know if our undertsanding of your expectations/requirements is correct.

      We will surely keep this in consideration for future releases of NM SDK.

       

      Regards,

      Sen.

      • Re: NetApp Manageability SDK Feedback
        chris_algar Sprinter
        Currently Being Moderated

        I have one module NetApp.pm which consumes NaElement and NaServer as well as my own modules for DfmServer, Policy, DataSet etc... All the complexity of itter-start and itter-next as well as the datastructure access with get_child_string and get_child (which depends on a lot of implied knowledge of the returned data structure) is abstracted in these modules.

         

        Using these modules I think the code looks cleaner. More importantly the resultant code does not require any knowledge of the returned data structure, protects against future changes by an abstration interface; it always passes back an inside out object with defined accessor methods. The end user can not abuse the datastructure with direct hash element access.

         

         

        An example of use is shown below for comment.

         

         

        use NetApp;     # consumes NaElement, NaServer and NetApp::DFM

        use warnings;

        use strict;

         

        use vars qw (

         

             $DFMSERVER

             $DFMUSER

             $DFMPASSWORD

             $POLICY

             $DATASET

             $VOLUME

        );

         

        # not real values obviously

         

        $DFMSERVER       = 'host1';

        $DFMUSER            = 'username';

        $DFMPASSWOR    = 'password';

        $POLCY                 = 'Backup';

        $DATASET             = 'MyDataSet';

        $VOLUME              = 'filer1:/vol0';

         

         

         

        my $dfm          = NetApp::DFM::DfmServer->new(

             {

                  hostname     =>     $DFMSERVER,

                  username     =>     $DFMUSER,

                  password     =>     $DFMPASSWORD,

             }

          );

         

        # fetch a volume

        my $volume        = $dfm->get_volume($VOLUME);

         

        # fetch a policy

        my $policy          = $dfm->get_polict($POLICY)

         

        # create a dataset

        my $dataset       = $dfm->create_dataset($DATASET);

         

        # assign the policy to the dataset (returns the updated dataset)

        my $dataset = $dataset->add_policy($policy->get_name);

         

        # add a volume to the source node of the dataset as defined by the policy (returns the new list of members)

        my @members    = $dataset->add_member(

                                           { name => $volume->get_name,

                                             node => $policy->get_from_name, }

                                      );

         

         

        The code just expresses the actions. I don't have to clutter it up with itter-start,next,end and there are no nested get_child('magic-name').

         

        Does that make sense?

         

        Chris

  • Re: NetApp Manageability SDK Feedback
    AdvUni-MD Hall of Fame Certified Cyclist
    Currently Being Moderated

    I'm looking for the remote fpolicy interface. It seems (from some posts in the communities) that what I need is the fprequest.idl and/or fpcompletion.idl.

     

    However, I can't find these files. Neither in the NM SDK 4.0 nor in the Manage OnTap SDK 3.5.1

     

    Where can I get these APIs? Also, are there any samples available?

     

    Regards

    -Michael

  • Re: NetApp Manageability SDK Feedback
    rksindwani Sprinter
    Currently Being Moderated

    Hi!

     

    Can you pls let me know if the NetApp NM SDK can be used for simulating NetApp System Manager of File Manager functionalities through a third party solution?

  • Re: NetApp Manageability SDK Feedback
    MOREONTAP Novice
    Currently Being Moderated

    In the perl module NaElement.pm there is a child_add but no child_remove, can this be added.

     

    I am working to update nfs exports. The implemention for an add is easy:

         invoke nfs-exportfs-list-rules

         retrieve exports-rule-info

         child_add to root, read-only and/or read-write

         Wrap it in a nfs-exportfs-modify-rule

     

    But to remove a host is more complex,

         invoke nfs-exportfs-list-rules

         retrieve exports-rule-info

         loop over exports-hostname-info, if it is not to be delete then it gets added to a new set for root, read-only and/or read-write

         Wrap the new set in a nfs-exportfs-modify-rule

     

    A child_remove would push the logic down to a lower level of code where I think it should belong...perhaps this could be utilized in other methods of manipulation.

  • NetApp Manageability SDK Feedback
    MOREONTAP Novice
    Currently Being Moderated

    What is the proper way to report a bug ?

     

    According to this post: http://communities.netapp.com/message/3284 a bug was identified with nfs-exportfs-delete-rules on Aug 26, 2008 9:55 AM with 3.0R1 API.

     

    I am still seeing this issue as not resolved with netapp-manageability-sdk-4.0P1.

    • NetApp Manageability SDK Feedback
      rle NetApp Employee Kart Racer
      Currently Being Moderated

      This is burt 323518.  I just made it public, so it should appear in NOW is a day or so.

       

      This is not an SDK issue, but an ONTAP documentation problem that the SDK imports ONTAP documentation.  Please use <name>

      instead of <pathname>, because the documentation will change, but not the implementation.

  • NetApp Manageability SDK Feedback
    kevin.peirce Novice
    Currently Being Moderated

    Hi,

     

    We've just started to use the net-* features of the SDK and have some feedback on it.

     

    1. It would be great if one were able to add comments into the persistent config.  In the RC we've put in comments that help a Human make sense and link certain lines (logically) to the other filer head.  Typically we would add comments for the ifconfig lines.

     

    2. It's a shame all the sets/gets/create/add commands are all named inconsistently - if they matched it would look much better.

     

    3. Some of our company experts thing the "savecore" command should be towards the top of the RC file.

     

    4. Backups....it would be good if the "set-persistent" command could have a flag that would back up, say, the last 10 RC files.

     

    5. vlan/ifconfig/ipspace - add/removes....it would be great if these commands had a boolean flag to persist their config into the RC file too.

     

    Hopefully this is all helpful stuff.

     

    Thanks,

     

    Kevin Peirce

  • NetApp Manageability SDK Feedback
    MOREONTAP Novice
    Currently Being Moderated


    Element definition: quota-entry is missing the disk-limit and file-limit values.

     

    I should be able execute quota-list-entries and add up values for disk-limit and file-limit.

    • NetApp Manageability SDK Feedback
      rle NetApp Employee Kart Racer
      Currently Being Moderated

      I agree that quota-entry could use the disk-limit and file-limit values.  Currently there are 3 choices

      1. Call quota-get-entry for each interested quota.  (Could take a long time for all quotas in the file.)

      2. Parse the line element in quota-entry.  (Less time calling APIs, but code has to parse the quota line.)

      3. Invoke quota-report API.  (Only returns data on quotas that have been turned-on.)

       

      Regards,

       

         - Rick -

  • NetApp Manageability SDK Feedback
    MOREONTAP Novice
    Currently Being Moderated

    I started a new thread about an issue I am seeing with the SDK "No response received from nfs-exportfs-modify-rule"

    http://communities.netapp.com/message/57722

     

    What can be done to debug this issue ?

  • Re: NetApp Manageability SDK Feedback
    DEVELOPER Novice
    Currently Being Moderated

    I have a much more basic problem with the NM SDK:

     

    As an independent third-party consultant without a valid system serial number, support contract, or reseller agreement, I am apparently not entitled to download the SDK. This means I am unable to engage clients who need custom tools, thereby limiting the usefulness of their NetApp installations.

     

    Do not suggest that I have clients obtain the SDK on my behalf, or provide me with their NOW credentials; either of these is unprofessional enough that I would rather just turn them down. Which is apparently what I'm doing.

     

    Rephrased in the form of a question: does NetApp have any mechanism to support independent third-party developers?

  • Re: NetApp Manageability SDK Feedback
    sven_kirsten Novice
    Currently Being Moderated

    Hello,

     

    we use the Monitoring Agent for NetApp Storage Version 710. And have Operations Manager 5.0 running.

    Some Performance Values (CPU Counters) will not be shown in the Tivoli GUI.

     

    In the log file knu_data_provider_bkup_0.log I see a lot of error like this:

     

    2012-07-24 16:15:08 11 SEVERE: Inventory.getAvailablePerformanceCounters: Invocation of perf-object-counter-list-info failed: netapp.manage.NaAPIFailedException: There is no controller named '75383'. (errno=13001). Aborting.

    2012-07-24 16:15:09 11 SEVERE: Inventory.getAvailablePerformanceCounters: Invocation of perf-object-counter-list-info failed: netapp.manage.NaAPIFailedException: There is no controller named '75394'. (errno=13001). Aborting.

    2012-07-24 16:15:13 11 SEVERE: Inventory.getAvailablePerformanceCounters: Invocation of perf-object-counter-list-info failed: netapp.manage.NaAPIFailedException: There is no controller named '51620'. (errno=13001). Aborting.

    2012-07-24 16:15:13 11 SEVERE: Inventory.getAvailablePerformanceCounters: Invocation of perf-object-counter-list-info failed: netapp.manage.NaAPIFailedException: There is no controller named '99677'. (errno=13001). Aborting.

    2012-07-24 16:15:13 11 SEVERE: Inventory.getAvailablePerformanceCounters: Invocation of perf-object-counter-list-info failed: netapp.manage.NaAPIFailedException: There is no controller named '99684'. (errno=13001). Aborting.

    2012-07-24 16:15:16 11 SEVERE: Inventory.getAvailablePerformanceCounters: Invocation of perf-object-counter-list-info failed: netapp.manage.NaAPIFailedException: There is no controller named '75384'. (errno=13001). Aborting.

    2012-07-24 16:15:16 11 SEVERE: Inventory.getAvailablePerformanceCounters: Invocation of perf-object-counter-list-info failed: netapp.manage.NaAPIFailedException: There is no controller named '126941'. (errno=13001). Aborting.

    2012-07-24 16:15:16 11 SEVERE: Inventory.getAvailablePerformanceCounters: Invocation of perf-object-counter-list-info failed: netapp.manage.NaAPIFailedException: There is no controller named '125983'. (errno=13001). Aborting.

    2012-07-24 16:15:16 11 SEVERE: Inventory.getAvailablePerformanceCounters: Invocation of perf-object-counter-list-info failed: netapp.manage.NaAPIFailedException: There is no controller named '76435'. (errno=13001). Aborting.

     

    The Controller that ask for, does not exist.

     

    What is the reason why the Performance Counters will not be shown ?

     

    Greetings

    Sven

     

    Nachricht wurde geändert durch: Sven Kirsten also I see these error messages in the BKUP_knuagent_xxxx.log : (501F7682.0000-890:cps_socket.cpp,1377,"collectData") Requested attribute group 'Aggregates' does not exist (501F7682.0001-890:cps_socket.cpp,1377,"collectData") Requested attribute group 'Volumes' does not exist (501F7682.0002-890:cps_socket.cpp,1377,"collectData") Requested attribute group 'Hosts' does not exist

  • Re: NetApp Manageability SDK Feedback
    ematthew NetApp Employee Novice
    Currently Being Moderated

    Looks like there is a bug in the Python bindings in 5.1.  I was adding iteration support to a Nagios plugin I wrote and came across a strange behavior.  When adding the tag parameter to 'volume-get-iter' the api would fail with the reason of 'Extra content at the end of the document'.  Comparing the XML to the vollist.pl example I noticed the contents of the <tag> parameter were not escaped into HTML entities:

     

    Python XML:

    <?xml version='1.0' encoding='utf-8'?>

    <!DOCTYPE netapp SYSTEM 'file:/etc/netapp_filer.dtd'><netapp version="1.15" xmlns="http://www.netapp.com/filer/admin"><volume-get-iter><tag><volume-get-iter-key-td>

            <key-0>vs1</key-0>

            <key-1>test_vol_7</key-1>

    </volume-get-iter-key-td></volume-get-iter></netapp>

     

    Perl XML:

    <?xml version='1.0' encoding='utf-8'?>

    <!DOCTYPE netapp SYSTEM 'file:/etc/netapp_filer.dtd'><netapp version="1.15" xmlns="http://www.netapp.com/filer/admin"><volume-get-iter><tag>&lt;volume-get-iter-key-td&gt;

             &lt;key-0&gt;vs1&lt;/key-0&gt;

             &lt;key-1&gt;test_vol_7&lt;/key-1&gt;

    &lt;/volume-get-iter-key-td&gt;

    </tag></volume-get-iter></netapp>

     

    The sample script:

    #!/usr/bin/python -tt

    import cgi

    import sys

    sys.path.append("../../../../../lib/python/NetApp")

    from NaServer import *

     

    username = 'admin'

    password = 'xxxxx'

    cluster = 'xxxxx'

     

    server = NaServer(cluster, 1, 15)

    server.set_admin_user(username, password)

     

    query = NaElement('volume-get-iter')

    result = server.invoke_elem(query)

     

    if result.results_errno() > 0:

            raise Exception(result.results_reason())

     

    tag = result.child_get_string('next-tag')

    # uncomment next line to make this work

    # tag = cgi.escape(tag)

    query.child_add_string('tag', tag)

     

    result = server.invoke_elem(query)

     

    if result.results_errno() > 0:

            raise Exception(result.results_reason())

  • Re: NetApp Manageability SDK Feedback
    BLACKBIRD2 Novice
    Currently Being Moderated

    Who do I contact to get the FPolicy SDK to develop an external fpolicy server now that it has been separated from the main SDK?

  • Re: NetApp Manageability SDK Feedback
    scheckel NetApp Employee Cyclist
    Currently Being Moderated

    Hi,

     

    cDOT API 1.20 for 8.2

     

    qtree create and delete need to specify /vol/

    aswell on delete file.

     

    Would be better as it on the CLI without.

     

    -volume

    -qtreename

    -vserver

     

     

    Best wishes,

    Markus.

  • Re: NetApp Manageability SDK Feedback
    gpablo NetApp Employee Certified Novice
    Currently Being Moderated

    Hi,

     

    I was testing the 'net-port-get-iter' with Cluster Data ONTAP 8.2. The element definition of the 'net-port-info' shows 'port' as a string type, but really the port name in cDOT must  be named using the syntax "a/e<number><letter>", where <number> is an integer in the range [0-999] without leading zeros and <letter> is a lowercase letter. 'e' is used for ethernet ports and 'a' for ifgrps.

     

    So it has to be checked in the apps/scripts instead of do it the API. Maybe in the next version...

     

    Thanks & best regards,

    Pablo