NetApp Community Update
This site will enter Read Only mode on July 23 as we prepare to move to a new platform. You will still be able to view content, but posting and replying will be temporarily disabled.
We're excited to launch our new Community experience on July 30 and more information will follow soon.
Stay connected during the transition - Join our Discord community today.

Software Development Kit (SDK) and API Discussions

8.3.0 NMSDK Unable to find API: aggr-list-info

howd
4,003 Views

Ultimately, I want a list of volumes on the cluster.  I've tried using several of the classes available in the ontap-api-8.3.jar, but with mixed results.  Here is snippet of code I've tried using to get a list of AggrInfo objects from a cluster:

Protocol protocol = Protocol.HTTP;
try { ApiRunner runner = new ApiRunner(ApiTarget.builder() .withHost("192.168.0.10") .withUserName("admin") .withPassword("password1!") .withTargetType(TargetType.FILER) .useProtocol(protocol) .build()); AggrListInfoRequest aggrLiInReq = new AggrListInfoRequest(); AggrListInfoResponse aggrLiInResp = runner.run(aggrLiInReq); List<AggrInfo> aggrInfoList = aggrLiInResp.getAggregates(); for (AggrInfo aggrInfo : aggrInfoList){ aggrInfo.getVolumeCount(); } } catch(Exception e) {; e.printStackTrace(); }

Here is the error I am encountering

com.netapp.nmsdk.ApiExecutionException: Unable to find API: aggr-list-info

I'm confused.  The AggrListInfoResponse class is in the ontap-api-8.3.jar.  How can the api not be avaliable?

 

Can someone please help me with this?

1 REPLY 1

michael_england
3,865 Views

I'm no using APIRunner but here are a couple of code snippets for you:

 

Aggregate List (needs to be done at the cluster level)

 

private NaElement request, response;

NaServer server = new NaServer("cluster_ip");
server.setTransportType(NaServer.TRANSPORT_TYPE_HTTPS);
server.setPort(443);
server.setStyle(NaServer.STYLE_LOGIN_PASSWORD);
server.setAdminUser("username", "password");

request = new NaElement("aggr-get-iter");
response = server.invokeElem(request);
NaElement aggrAttributes = response.getChildByName("attributes-list");

@SuppressWarnings("unchecked")
List<NaElement> aggrList = aggrAttributes.getChildren();
for (NaElement aggr : aggrList) {
     String aggrName = aggr.getChildContent("aggregate-name");
}

 

Volume List (needs to be done at the vserver level)

 

private NaElement request, response;

NaServer server = new NaServer("vserver_ip");
server.setTransportType(NaServer.TRANSPORT_TYPE_HTTPS);
server.setPort(443);
server.setStyle(NaServer.STYLE_LOGIN_PASSWORD);
server.setAdminUser("username", "password");

ArrayList<String> volumeList = new ArrayList<String>();
request = new NaElement("volume-get-iter");
request.addNewChild("max-records",  "4294967295");
NaElement desiredAttributes = new NaElement("desired-attributes");
NaElement volAttributes = new NaElement("volume-attributes");
NaElement volIDAttributes = new NaElement("volume-id-attributes");
NaElement name = new NaElement("name");
volIDAttributes.addChildElem(name);
volAttributes.addChildElem(volIDAttributes);
desiredAttributes.addChildElem(volAttributes);
request.addChildElem(desiredAttributes);
response = server.invokeElem(request);

@SuppressWarnings("unchecked")
List<NaElement> attributes = response.getChildByName("attributes-list").getChildren();
for (NaElement attribute : attributes) {
        // because the response is nested within volume-id-attributes, we need to get children again
	@SuppressWarnings("unchecked")
	List<NaElement> volIDs = attribute.getChildren();
	for (NaElement id : volIDs) {
		volumeList.add(id.getChildContent("name"));
	}
}

 

I'm splicing those together from other bits of code so no promises it'll just run but it should be close.

 

 

Public