package org.opennaas.core.resources.shell; import java.util.List; import org.apache.felix.gogo.commands.Command; import org.apache.felix.gogo.commands.Option; import org.opennaas.core.resources.IResource; import org.opennaas.core.resources.IResourceManager; import org.opennaas.core.resources.descriptor.ResourceDescriptor; import org.opennaas.core.resources.descriptor.network.Device; import org.opennaas.core.resources.descriptor.network.Interface; import org.opennaas.core.resources.descriptor.network.InterfaceId; import org.opennaas.core.resources.descriptor.network.NetworkTopology; /** * List the Resources that are in the IaaS Container * * */ @Command(scope = "resource", name = "list", description = "List all resources in the platform") public class ListResourcesCommand extends GenericKarafCommand { @Option(name = "--type", aliases = { "-t" }, description = "Specifies the type of resources to list (if specified, only resources of this type will be listed)", required = false, multiValued = false) private String resourceType = null; @Option(name = "--all", aliases = { "-a" }, description = "Extensive version ", required = false, multiValued = false) private boolean flagAll = false; @Override protected Object doExecute() throws Exception { printInitCommand("list resources"); try { IResourceManager manager = getResourceManager(); List<IResource> resources = manager.listResourcesByType(resourceType); // if resourceType is null return all the resources if (resources == null) { printError("Didn't find a repository of type " + resourceType); printEndCommand(); return null; } if (resources.isEmpty()) { printInfo("There are no resources registered."); printEndCommand(); return null; } printInfo("Found " + resources.size() + " resources."); // printSymbol(horizontalSeparator); // if (resourceType != null) { // printInfo("Listing resources of type " + resourceType); // printSymbol(underLine); // // for (IResource resource : resources) { // printInfo(doubleTab + "ID: " + resource // .getResourceDescriptor() // .getInformation().getName() + doubleTab + "STATE: " + resource // .getState()); // if (flagAll) // printAll(resource.getResourceDescriptor()); // } // // printSymbol(horizontalSeparator); // // } else { // printInfo("Listing all resources "); // printSymbol(underLine); for (IResource resource : resources) { printInfo(doubleTab + "TYPE: " + resource.getResourceDescriptor().getInformation().getType() + doubleTab + "ID: " + resource.getResourceDescriptor().getInformation().getName() + doubleTab + "STATE: " + resource.getState()); if (flagAll) printAll(resource.getResourceDescriptor()); } // printSymbol(horizontalSeparator); // } } catch (Exception e) { printError(e); printError("Error listing resources. "); } printEndCommand(); return null; } private void printAll(ResourceDescriptor resourceDescriptor) { // TODO get network info /* network descriptor */ if (resourceDescriptor.getNetworkTopology() != null) printNetworkTopology(resourceDescriptor.getNetworkTopology()); } private void printNetworkTopology(NetworkTopology networkTopology) { printInfo("-> Devices <-"); if (networkTopology.getDevices() != null) { for (Device device : networkTopology.getDevices()) { printInfo(paintResource(device).toString()); } } printInfo("-> Connections <-"); if (networkTopology.getInterfaces() != null) paintConnections(networkTopology.getInterfaces()); } private StringBuilder paintConnections(List<Interface> interfaces) { StringBuilder message = new StringBuilder(); for (Interface interf : interfaces) { message.append(String.format("\t ยท %s ---> %s (%s)", interf.getName(), interf.getLinkTo(), interf.getCapacity())); } return message; } public StringBuilder paintResource(Device device) { StringBuilder message = new StringBuilder(); message.append("Device id: " + device.getName()); message.append("\nInterfaces: "); for (InterfaceId interfaceId : device.getHasInterfaces()) { message.append("\t" + interfaceId.getResource()); } return message; } }