Software Development Kit (SDK) and API Discussions

Managing NetApp filers using Puppet

NETAPPACT
7,262 Views

Afternoon all,

I thought I'd drop by and post up my use of the NetApp OnTAP API for anyone who's interested...

So, in our environment, we've started using Puppet to automate as much of our Oracle/NetApp platform as we can. Storage was a NetApp NFS back-end, which initially we were managing by hand. However that quite quickly became cumbersome and impractical...

Enter Puppet Network Device support. This allows Puppet to manage devices that can't support the traditional agent-based model of Puppet; Instead, it allows Puppet to use SSH or API's to manage the device.

This triggered me to start searching for a suitable 'Module' that integrates Puppet with NetApp storage. However there wasn't one available...

So that left me with 3 options... Continue to manage manually, write some other method to handle our NetApp filers, or write a module to integrate Puppet with our NetApp filers.

Thankfully, I chose the 3rd option, and started writing a module to integrate Puppet with our NetApp filers.

The outcome of that is a Puppet NetApp network device module that allows you to manage most aspects of a NetApp filers configuration, from Users, Groups and Roles, through to Volumes, Qtrees, Exports, Quotas, and also SnapMirror relationships...

The list is also expanding, so if there is something that you think it would be really useful if it did this, then feel free to ask, or even better contribute

If you've got any further questions, feel free to reply to this discussion, drop me an email (fatmcgav[at]gmail[dot]com) or hit me up on Twitter (@fatmcgav).

Cheers

Gavin

5 REPLIES 5

aashray
7,262 Views

Thank you Gavin for sharing this, really inspiring ! Brilliant.

obrakmann
7,262 Views

This is awesome. I have long wondered about how one could achieve managing filers with Puppet, but I did not know about network device support. Thank you! I'll definitly keep an eye on this!

dcain
6,322 Views

Sorry to revive a 2+ year old thread, but I wanted to share a newly released Puppet module that incorporates both clustered Data ONTAP, as well as other enhaned functionality for managing NetApp FAS devices.


Check it out here:

 

NetApp Data ONTAP device module

dcain
5,647 Views

We've published a NetApp Technical Report on this topic.

Check it out here:
http://www.netapp.com/us/media/tr-4477.pdf

ehansen
3,236 Views

I'm looking for how to adapt this to environment automation to programmatically build machines that use NetApp storage on the backend via either iSCSI/FC directly connected to the machine, partitioned with lvm and then mounted to a directory, followed by programmatic installation of databases like Oracle, SQL, etc...

 

I wasn't able to adapt this module to my purposes, and would accept any help on if there is a solution pathway available for this use case. Note that I've already gotten what I've done working the the Puppet module for Pure storage, and from what I can tell this is because Pure supports an additional REST mechanism where the Puppet client agent can communicate with the host directly to accomplish objectives of creating volumes, connections, etc... 

 

In my current design, I'm looking at Foreman creating nodes and programmatically building them via PXE booting. The Puppet classes are integrated into Foreman and user specify the modules like plugins to enable certain functionality. One module is createiscistorage that creates a volume on an external storage system, and works like this...

In the current design prototype,

 

node (<Foreman defined>) {
   class (createiscsistorage) {
      class (Pure storage) {
         create my volume via REST calls to the storage
         via a URL
      }
      // iscsi, lvm, lvmetad, etc...
   }
}

 

From what I can see, it appears as if you must define the node entity through Puppet device.

NetApp Puppet Module Forces you into a node construct to define the storage
node (<Foreman defined through Puppet proxy device for NetApp storage>) {
create my volume
}

I don't see to a way to force this into the following, because node must be at the top of the hierarchy here,

 

node (<Foreman defined>) {
   class (createiscsistorage) { 
      node (<Foreman defined through Puppet proxy device for NetApp storage>) {
         create my volume
      }
      // iscsi, lvm, etc...
   }
}

 

The alternative to get it working may end up dealing with something like,

node (<Foreman defined through Puppet proxy device for NetApp storage>) {
   create my volume
}
node (<Foreman defined>)
   class (createiscsistorage) { 
      ** Find a way to talk to the Puppet proxy node(<NetApp storage>), i.e. non-agent code execution during a puppet agent run
      // iscsi, lvm, etc...
   }
}

 

But, I just don't see it working... in my automation case the client is used to control the storage on the fly rather than a more static node entry in the site manifest.

Public