[Emu] ONOS-3512 CLI for new resource subsystem
- "resources" command to print available resources on new resource service.
- "allocations" command to dump current allocations
- "test-allocate-resource" command to allocate a resource
Change-Id: I89e531c71ef288b8c06dcd355a3a819d667c8225
diff --git a/cli/src/main/java/org/onosproject/cli/net/TestAllocateResource.java b/cli/src/main/java/org/onosproject/cli/net/TestAllocateResource.java
new file mode 100644
index 0000000..843361f
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/TestAllocateResource.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.cli.net;
+
+import static org.onosproject.net.newresource.ResourcePath.discrete;
+
+import java.util.Optional;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.GridType;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.intent.IntentId;
+import org.onosproject.net.newresource.ResourceAllocation;
+import org.onosproject.net.newresource.ResourceConsumer;
+import org.onosproject.net.newresource.ResourcePath;
+import org.onosproject.net.newresource.ResourceService;
+
+/**
+ * Test tool to allocate resources.
+ */
+@Command(scope = "onos", name = "test-allocate-resources",
+ description = "Test tool to allocate resources")
+public class TestAllocateResource extends AbstractShellCommand {
+
+ // TODO add support for other resource types
+
+ // FIXME provide a proper way to specify a lambda and lambda ranges
+ @Option(name = "-l", aliases = "--lambda",
+ description = "Lambda Resource to allocate",
+ required = false, multiValued = false)
+ private String lambda = "1";
+
+ @Option(name = "-i", aliases = "--intentId",
+ description = "IntentId to use for allocation",
+ required = false, multiValued = false)
+ private int nIntendId = 42;
+
+
+ @Argument(index = 0, name = "deviceIdString", description = "Device ID",
+ required = true, multiValued = false)
+ String deviceIdStr = null;
+
+ @Argument(index = 1, name = "portNumberString", description = "PortNumber",
+ required = true, multiValued = false)
+ String portNumberStr = null;
+
+ private ResourceService resourceService;
+
+ @Override
+ protected void execute() {
+ resourceService = get(ResourceService.class);
+ DeviceId did = DeviceId.deviceId(deviceIdStr);
+ PortNumber portNum = PortNumber.fromString(portNumberStr);
+
+ ResourceConsumer consumer = IntentId.valueOf(nIntendId);
+
+ ResourcePath resource = discrete(did, portNum,
+ createLambda(Integer.parseInt(lambda)));
+
+ Optional<ResourceAllocation> allocate = resourceService.allocate(consumer, resource);
+ if (allocate.isPresent()) {
+ print("Allocated: %s", allocate.get());
+ } else {
+ print("Failed to allocate %s for %s", resource, consumer);
+ }
+ }
+
+ private OchSignal createLambda(int i) {
+ return new OchSignal(GridType.FLEX,
+ ChannelSpacing.CHL_12P5GHZ,
+ i,
+ 1);
+ }
+
+}