Showing
4 changed files
with
43 additions
and
3 deletions
| ... | @@ -19,6 +19,7 @@ import org.onlab.onos.net.intent.PathIntent; | ... | @@ -19,6 +19,7 @@ import org.onlab.onos.net.intent.PathIntent; |
| 19 | import org.onlab.onos.net.intent.PointToPointIntent; | 19 | import org.onlab.onos.net.intent.PointToPointIntent; |
| 20 | import org.onlab.onos.net.intent.SinglePointToMultiPointIntent; | 20 | import org.onlab.onos.net.intent.SinglePointToMultiPointIntent; |
| 21 | 21 | ||
| 22 | +import java.util.List; | ||
| 22 | import java.util.Set; | 23 | import java.util.Set; |
| 23 | 24 | ||
| 24 | /** | 25 | /** |
| ... | @@ -39,20 +40,24 @@ public class IntentsListCommand extends AbstractShellCommand { | ... | @@ -39,20 +40,24 @@ public class IntentsListCommand extends AbstractShellCommand { |
| 39 | print("id=%s, state=%s, type=%s, appId=%s", | 40 | print("id=%s, state=%s, type=%s, appId=%s", |
| 40 | intent.id(), state, intent.getClass().getSimpleName(), | 41 | intent.id(), state, intent.getClass().getSimpleName(), |
| 41 | intent.appId().name()); | 42 | intent.appId().name()); |
| 42 | - printDetails(intent); | 43 | + printDetails(service, intent); |
| 43 | } | 44 | } |
| 44 | } | 45 | } |
| 45 | } | 46 | } |
| 46 | 47 | ||
| 47 | - private void printDetails(Intent intent) { | 48 | + private void printDetails(IntentService service, Intent intent) { |
| 48 | if (intent.resources() != null && !intent.resources().isEmpty()) { | 49 | if (intent.resources() != null && !intent.resources().isEmpty()) { |
| 49 | print(" resources=%s", intent.resources()); | 50 | print(" resources=%s", intent.resources()); |
| 50 | } | 51 | } |
| 51 | if (intent instanceof ConnectivityIntent) { | 52 | if (intent instanceof ConnectivityIntent) { |
| 52 | ConnectivityIntent ci = (ConnectivityIntent) intent; | 53 | ConnectivityIntent ci = (ConnectivityIntent) intent; |
| 54 | + if (!ci.selector().criteria().isEmpty()) { | ||
| 53 | print(" selector=%s", ci.selector().criteria()); | 55 | print(" selector=%s", ci.selector().criteria()); |
| 56 | + } | ||
| 57 | + if (!ci.treatment().instructions().isEmpty()) { | ||
| 54 | print(" treatment=%s", ci.treatment().instructions()); | 58 | print(" treatment=%s", ci.treatment().instructions()); |
| 55 | } | 59 | } |
| 60 | + } | ||
| 56 | 61 | ||
| 57 | if (intent instanceof PointToPointIntent) { | 62 | if (intent instanceof PointToPointIntent) { |
| 58 | PointToPointIntent pi = (PointToPointIntent) intent; | 63 | PointToPointIntent pi = (PointToPointIntent) intent; |
| ... | @@ -71,6 +76,11 @@ public class IntentsListCommand extends AbstractShellCommand { | ... | @@ -71,6 +76,11 @@ public class IntentsListCommand extends AbstractShellCommand { |
| 71 | print(" links=%s", li.links()); | 76 | print(" links=%s", li.links()); |
| 72 | print(" egress=%s", li.egressPoint()); | 77 | print(" egress=%s", li.egressPoint()); |
| 73 | } | 78 | } |
| 79 | + | ||
| 80 | + List<Intent> installable = service.getInstallableIntents(intent.id()); | ||
| 81 | + if (installable != null && !installable.isEmpty()) { | ||
| 82 | + print(" installable=%s", installable); | ||
| 83 | + } | ||
| 74 | } | 84 | } |
| 75 | 85 | ||
| 76 | // Produces JSON array of the specified intents. | 86 | // Produces JSON array of the specified intents. |
| ... | @@ -86,10 +96,14 @@ public class IntentsListCommand extends AbstractShellCommand { | ... | @@ -86,10 +96,14 @@ public class IntentsListCommand extends AbstractShellCommand { |
| 86 | private JsonNode json(IntentService service, ObjectMapper mapper, Intent intent) { | 96 | private JsonNode json(IntentService service, ObjectMapper mapper, Intent intent) { |
| 87 | ObjectNode result = mapper.createObjectNode() | 97 | ObjectNode result = mapper.createObjectNode() |
| 88 | .put("id", intent.id().toString()) | 98 | .put("id", intent.id().toString()) |
| 89 | - .put("state", service.getIntentState(intent.id()).toString()) | ||
| 90 | .put("type", intent.getClass().getSimpleName()) | 99 | .put("type", intent.getClass().getSimpleName()) |
| 91 | .put("appId", intent.appId().name()); | 100 | .put("appId", intent.appId().name()); |
| 92 | 101 | ||
| 102 | + IntentState state = service.getIntentState(intent.id()); | ||
| 103 | + if (state != null) { | ||
| 104 | + result.put("state", state.toString()); | ||
| 105 | + } | ||
| 106 | + | ||
| 93 | if (intent.resources() != null && !intent.resources().isEmpty()) { | 107 | if (intent.resources() != null && !intent.resources().isEmpty()) { |
| 94 | ArrayNode rnode = mapper.createArrayNode(); | 108 | ArrayNode rnode = mapper.createArrayNode(); |
| 95 | for (NetworkResource resource : intent.resources()) { | 109 | for (NetworkResource resource : intent.resources()) { |
| ... | @@ -136,6 +150,10 @@ public class IntentsListCommand extends AbstractShellCommand { | ... | @@ -136,6 +150,10 @@ public class IntentsListCommand extends AbstractShellCommand { |
| 136 | result.set("links", LinksListCommand.json(li.links())); | 150 | result.set("links", LinksListCommand.json(li.links())); |
| 137 | } | 151 | } |
| 138 | 152 | ||
| 153 | + List<Intent> installable = service.getInstallableIntents(intent.id()); | ||
| 154 | + if (installable != null && !installable.isEmpty()) { | ||
| 155 | + result.set("installable", json(service, installable)); | ||
| 156 | + } | ||
| 139 | return result; | 157 | return result; |
| 140 | } | 158 | } |
| 141 | 159 | ... | ... |
| 1 | package org.onlab.onos.net.intent; | 1 | package org.onlab.onos.net.intent; |
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | +import java.util.List; | ||
| 5 | + | ||
| 4 | /** | 6 | /** |
| 5 | * Service for application submitting or withdrawing their intents. | 7 | * Service for application submitting or withdrawing their intents. |
| 6 | */ | 8 | */ |
| ... | @@ -68,6 +70,15 @@ public interface IntentService { | ... | @@ -68,6 +70,15 @@ public interface IntentService { |
| 68 | IntentState getIntentState(IntentId id); | 70 | IntentState getIntentState(IntentId id); |
| 69 | 71 | ||
| 70 | /** | 72 | /** |
| 73 | + * Returns the list of the installable events associated with the specified | ||
| 74 | + * top-level intent. | ||
| 75 | + * | ||
| 76 | + * @param intentId top-level intent identifier | ||
| 77 | + * @return compiled installable intents | ||
| 78 | + */ | ||
| 79 | + List<Intent> getInstallableIntents(IntentId intentId); | ||
| 80 | + | ||
| 81 | + /** | ||
| 71 | * Adds the specified listener for intent events. | 82 | * Adds the specified listener for intent events. |
| 72 | * | 83 | * |
| 73 | * @param listener listener to be added | 84 | * @param listener listener to be added | ... | ... |
| ... | @@ -196,6 +196,11 @@ public class FakeIntentManager implements TestableIntentService { | ... | @@ -196,6 +196,11 @@ public class FakeIntentManager implements TestableIntentService { |
| 196 | } | 196 | } |
| 197 | 197 | ||
| 198 | @Override | 198 | @Override |
| 199 | + public List<Intent> getInstallableIntents(IntentId intentId) { | ||
| 200 | + return installables.get(intentId); | ||
| 201 | + } | ||
| 202 | + | ||
| 203 | + @Override | ||
| 199 | public void addListener(IntentListener listener) { | 204 | public void addListener(IntentListener listener) { |
| 200 | listeners.add(listener); | 205 | listeners.add(listener); |
| 201 | } | 206 | } | ... | ... |
| ... | @@ -153,6 +153,12 @@ public class IntentManager | ... | @@ -153,6 +153,12 @@ public class IntentManager |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | @Override | 155 | @Override |
| 156 | + public List<Intent> getInstallableIntents(IntentId intentId) { | ||
| 157 | + checkNotNull(intentId, INTENT_ID_NULL); | ||
| 158 | + return store.getInstallableIntents(intentId); | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + @Override | ||
| 156 | public void addListener(IntentListener listener) { | 162 | public void addListener(IntentListener listener) { |
| 157 | listenerRegistry.addListener(listener); | 163 | listenerRegistry.addListener(listener); |
| 158 | } | 164 | } | ... | ... |
-
Please register or login to post a comment