Make the filters/finders for two or more resources depend on each on each other?

I am not sure the best way to explain this so let me give an example and see what everyone else thinks:


I have multiple controllers each with multiple aggregates and multiple vfilers, I want to create a new volume and assign it to a vfiler with as little as input as possible, basically protocol, volname and size, basically let WFA select the controller, vfiler, and aggregate and I can make that work, however lets say I have criteria for vfilers (vfiler with fewest volumes under a certain max volume count) and aggregates (aggr with space used less than a certain %) and basically what happens is I find my vfiler first and then whatever controller that is on I look for an aggregate on that same controller as well, but sometimes it fails because no aggregate matches, however I do have a controller that matches my vfiler and aggregate criteria, just not the one it selects, which is the vfiler with the least volumes.  You can also make the aggregate determine the controller and run into the issue where vfiler does not meet the appropriate criteria...

So long story short is there a way to tie two or more resources together and say hey it needs to meet the criteria for both resources not just this one?

I can do it via SQL sure, but it feels a little clunky to place into a filter, any other thoughts or a better way to do this?


Re: Make the filters/finders for two or more resources depend on each on each other?


I had something similar, which I ended up doing in SQL - you select the requirements you need in one part of the user mask and this influences the set of possible candidates in a drop-down, which lets you 'override' the systemic decision of aggregate and vfiler. In my case the location, vlan, and storage class are proxies for controller/aggregate and vfiler.

I haven't come up with a more clever solution yet. Doing it this way lets the user see if their selection criteria has any matches and correct the selection necessary (or create new resources) before execution...

The workflow is here: