Cisco rest Driver- remove controller & Parsing multi Controller info

Change-Id: I1ceb013f4dacca342730f54df96b567ef19995dd
This commit is contained in:
sdn 2018-06-10 17:39:11 +09:00 committed by Andrea Campanella
parent f3a28b0c36
commit 4eae29804f

View File

@ -22,7 +22,10 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.onlab.packet.IpAddress;
import org.onosproject.drivers.cisco.rest.NxApiRequest.CommandType;
import org.onosproject.net.DeviceId;
import org.onosproject.net.behaviour.ControllerConfig;
@ -72,6 +75,7 @@ public class ControllerConfigCiscoImpl extends AbstractHandlerBehaviour implemen
if (json.has("result")) {
JsonNode res = json.get("result");
String msg = res.findValue("msg").asText();
controllers.addAll(parseControllerInfo(msg));
} else if (json.has("error")) {
log.error("{} Response has IllegalStateException Error/null", deviceId);
return controllers;
@ -117,4 +121,51 @@ public class ControllerConfigCiscoImpl extends AbstractHandlerBehaviour implemen
log.error("Exception thrown", e);
}
}
@Override
public void removeControllers(List<ControllerInfo> controllers) {
DriverHandler handler = handler();
DeviceId deviceId = handler.data().deviceId();
List<String> cmds = new ArrayList<>();
cmds.add(OPENFLOW_CMD);
cmds.add(DELETE_OF_CONFIG);
cmds.add(COPY_RUNNING_CONFIG);
String response = NxApiRequest.postClis(handler, cmds);
if (Objects.isNull(response)) {
log.error(" Device {} Response is null", deviceId);
return;
}
try {
ObjectMapper om = new ObjectMapper();
JsonNode json = om.readTree(response);
if (json.has("errors")) {
log.error("{} Response has JSON Format Error {}", deviceId, json);
return;
}
//TODO parse error messages.
} catch (IOException e) {
log.error("Exception thrown", e);
}
}
private List<ControllerInfo> parseControllerInfo(String data) {
final String regex = "(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}):(\\d{1,5})";
Pattern pattern = Pattern.compile(regex);
Matcher match = pattern.matcher(data);
List<ControllerInfo> controllers = new ArrayList<ControllerInfo>();
while (match.find()) {
String str = match.group();
String[] ips = str.split(":");
ControllerInfo info = new ControllerInfo(IpAddress.valueOf(ips[0]),
Integer.parseInt(ips[1]), "tcp");
controllers.add(info);
}
return controllers;
}
}