Active IQ Unified Manager Articles and Resources

Day-0 Workflow Example - Tons of automated setup


UPDATE 4/4/2013: Adding an example built under WFA 2.0.  I haven't tested it fully because I wanted to make it available ASAP.  If you run into any issues, please let me know.  Thanks! 


Hi all,


I created a ton of commands and a workflow that shows them off for configuring a new controller.  Unfortunately, I couldn't go all the way to bare metal.  This workflow requires the controller to already have an IP address and SSH enabled.  Other than that, it can do the rest of the config for you.  This met the needs of several customers looking for this level of consistent startup functionality.  It's not perfect and you may need more or different actions for your builds, but it gives you a good idea of what's possible.


As it is, it's so large that it busted the 1.1.1 GUI for editing a workflow, and it's not like typical labs have a lot of unboxed systems that need deploying, but it does Preview nicely to give you a good feel for what you could do.


If you were to actually use this, you would need a Linux host to act as a "Jump Host" / software repository to store approved versions of OnTap software, firmware, disk firmware, SSH keys, etc.


Here's a flowchart of what the workflow does:



This sample workflow also contains a sample of using a function for mapping between small sets of data.  There's a function called "DatacenterToDFMServer" that takes a datacenter name and returns the DFM server IP address for that datacenter. 


Further, there's an example of creating your own object definition in this workflow as well.  There's a custom "Ontap Security Admin Options" object definition that is used in a FindChart for defining the SSL parameters and for generating a custom SSL Certificate / Certificate Signing Request.


Finally, there are about 35 additional commands in the workflow specific for Day-0 automation.  The commands use PowerShell cmdlets where possible, SSH as a second alternative.  SSH is required on the DFM server for this example.


Have fun and looking forward to comments and questions.





*NOTE* Feb-11-2013 - PowerShell hashtables are no longer supported as WFA command parameters in WFA 2.0, so if you're trying to use these commands on a WFA 2.0 system, please use the other command attached for setting OnTap options.  And, understand that each field in WFA 2.0 is limited to 256 characters. So, you may have to break up your list of options to set onto multiple workflow rows, as in the example.  Once I have completed it, I will update the entire workflow example for WFA 2.0. Thanks and sorry for the inconvenience. Dave.

Please Note:

All content posted on the NetApp Community is publicly searchable and viewable. Participation in the NetApp Community is voluntary.

In accordance with our Code of Conduct and Community Terms of Use, DO NOT post or attach the following:

  • Software files (compressed or uncompressed)
  • Files that require an End User License Agreement (EULA)
  • Confidential information
  • Personal data you do not want publicly available
  • Another’s personally identifiable information (PII)
  • Copyrighted materials without the permission of the copyright owner

Continued non-compliance may result in NetApp Community account restrictions or termination.



Dave, thanks for your hard work on this and more importantly for sharing.  I'm positive this will be very useful for many, many people for a wide variety of use cases.

Excellent stuff!



This is awesome, Dave!  Excellent work.  I have some systems in my lab that I can definitely with which I can test.


This is great stuff Dave!  We have a customer who is using this as the basis for controller builds.  We're running into an error with the SetOnTap Options with a Hashtable command.  If I run your unmodified workflow, it works fine.  However, if I create a new one, add the command, even copy/pasting your sample options, I get the following error:

Cannot process argument transformation on parameter 'Options'. Cannot convert the "@{"autosupport.enable" = "off"}" value of type "System.String" to type "System.Collections.Hashtable".

I don't understand, as the syntax seems to be straightforward.  Any suggestions?


Geoff Kleemola


Make sure you use single quotes on the outside and double quotes on the inside.  In the example above, looks like you're using double-quotes for both. 


"@{"autosupport.enable" = "off"}"


'@{"autosupport.enable" = "off"}'

(Single quote before the @ sign and after the close brace } sign.  All other quotes are double-quotes.

That way, WFA doesn't try to process it as anything but a string and passes the whole thing to powershell.

Hope this helps,



That was my first guess, but that's not it.  That's just the way WFA is quoting the error.  In the command configuration, it's a single on the outside, and double on the inside.  I tried removing the single, removing the quotes for numbers.  I thought maybe it was the overall length of the parameter being passed (the customer's was slightly longer).  I copied and pasted your example into a new command, and I get the error.


BTW, it previews fine, it's just at execution...


Is this with WFA 2.0?


It would seem WFA 1.1.1 commands that used PowerShell hashtables may not be working in the released WFA 2.0 build.  I've got a question in to one of the engineering managers whether this is a bug or intentional.  Until then, you can replace the (more convenient) command that tries to use a hashtable with this command (that I will attach to the original post).  This command will only set one option at a time, so you'll need a new row in your workflow for each option you want set.  Sorry for the hassle.



Yes, sorry I should have mentioned, it's (the release build).


Thanks for the quick response.  I'll pass this on to the customer.


Just FYI, it's confirmed to be a bug in WFA 2.0.  PowerShell hashtables don't work as WFA Command parameters anymore.  It'll probably be 2.1 before it gets fixed.

I've got a better workaround coming, where I use a PowerShell array, and each array element contains a string in the form of "ontap_option_name=ontap_option_value", then I just split that on the = sign and voila!  I've written it, but need to test it before sharing here. 



Any updates on that WFA 2.0 version? Also, any possibility of a clustered ONTAP specific version?


It will be available in the next release coming up in late April 2013.


I have been trying to get this to work against a FAS2020 system I have in the lab.  Do you have any instructions of how to get this example working?  My lab has Windows 2008 servers and I can use the WFA create volume workflow without issue.  So Windows, DFM, WFA 2.0 and NetApp filers are all playing nice together.  However the basic 0 day fails to run.  Have been troubleshooting the individual powershell commands but I am really thinking that I am trying to fly before understanding what crawling is.




Hi Bren,

Where are you getting stuck?  Can you post a screenshot or maybe we can do a webex to see what's going on.


On the basic unchanged 007 - Example, the preview fails at the final stage with the error

"Element existence issue detected during validation of command 'Remove Export'.

It is possible that you are trying to create an element that already exists/reserved or trying to remove an element that does not exist."


Yep, the auto-import/upgrade of 1.1 workflows into WFA 2.0 does great on most workflows, but I think this one is a little too complex for it to be clean.  If you're just learning WFA, this might be a bit daunting to try to pull off on its own.  There are a lot of moving pieces in this workflow, and setup required.  A lot of which is not necessary to everyone.  Better to pick it apart, use the Day-0 commands, and build a new day-0 workflow with your specific requirements.  I'll publish an updated workflow that should be cleaner in WFA 2.0, but still, it's just an example not to be used as-is.


New 7-mode version for 2.0 posted just now.  WFA 2.0.1 will have the fix for hashtables included, but the version posted today uses the PowerShell array workaround.  I will start working on a clustered ONTAP version next.