use of org.onosproject.openstacknode.api.OpenstackNode in project onos by opennetworkinglab.
the class OpenstackManagementWebResource method syncStates.
/**
* Synchronizes the network states with openstack.
*
* @return 200 OK with sync result, 404 not found
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("sync/states")
public Response syncStates() {
Map<String, String> headerMap = new HashMap();
headerMap.put(HTTP_HEADER_ACCEPT, HTTP_HEADER_VALUE_JSON);
Optional<OpenstackNode> node = osNodeAdminService.nodes(CONTROLLER).stream().findFirst();
if (!node.isPresent()) {
log.error(AUTH_INFO_NOT_FOUND);
throw new ItemNotFoundException(AUTH_INFO_NOT_FOUND);
}
OSClient osClient = OpenstackNetworkingUtil.getConnectedClient(node.get());
if (osClient == null) {
log.error(AUTH_INFO_NOT_CORRECT);
throw new ItemNotFoundException(AUTH_INFO_NOT_CORRECT);
}
try {
osClient.headers(headerMap).networking().securitygroup().list().forEach(osSg -> {
if (osSgAdminService.securityGroup(osSg.getId()) != null) {
osSgAdminService.updateSecurityGroup(osSg);
} else {
osSgAdminService.createSecurityGroup(osSg);
}
});
} catch (Exception e) {
log.warn("Failed to retrieve security group due to {}", e.getMessage());
return Response.serverError().build();
}
try {
osClient.headers(headerMap).networking().network().list().forEach(osNet -> {
if (osNetAdminService.network(osNet.getId()) != null) {
osNetAdminService.updateNetwork(osNet);
} else {
osNetAdminService.createNetwork(osNet);
}
});
} catch (Exception e) {
log.warn("Failed to retrieve network due to {}", e.getMessage());
return Response.serverError().build();
}
try {
osClient.headers(headerMap).networking().subnet().list().forEach(osSubnet -> {
if (osNetAdminService.subnet(osSubnet.getId()) != null) {
osNetAdminService.updateSubnet(osSubnet);
} else {
osNetAdminService.createSubnet(osSubnet);
}
});
} catch (Exception e) {
log.warn("Failed to retrieve subnet due to {}", e.getMessage());
return Response.serverError().build();
}
try {
osClient.headers(headerMap).networking().port().list().forEach(osPort -> {
if (osNetAdminService.port(osPort.getId()) != null) {
osNetAdminService.updatePort(osPort);
} else {
osNetAdminService.createPort(osPort);
}
});
} catch (Exception e) {
log.warn("Failed to retrieve port due to {}", e.getMessage());
return Response.serverError().build();
}
try {
osClient.headers(headerMap).networking().router().list().forEach(osRouter -> {
if (osRouterAdminService.router(osRouter.getId()) != null) {
osRouterAdminService.updateRouter(osRouter);
} else {
osRouterAdminService.createRouter(osRouter);
}
osNetAdminService.ports().stream().filter(osPort -> Objects.equals(osPort.getDeviceId(), osRouter.getId()) && Objects.equals(osPort.getDeviceOwner(), DEVICE_OWNER_IFACE)).forEach(osPort -> addRouterIface(osPort, osRouterAdminService));
});
} catch (Exception e) {
log.warn("Failed to retrieve router due to {}", e.getMessage());
return Response.serverError().build();
}
try {
osClient.headers(headerMap).networking().floatingip().list().forEach(osFloating -> {
if (osRouterAdminService.floatingIp(osFloating.getId()) != null) {
osRouterAdminService.updateFloatingIp(osFloating);
} else {
osRouterAdminService.createFloatingIp(osFloating);
}
});
} catch (Exception e) {
log.warn("Failed to retrieve floating IP due to {}", e.getMessage());
return Response.serverError().build();
}
return ok(mapper().createObjectNode()).build();
}
use of org.onosproject.openstacknode.api.OpenstackNode in project onos by opennetworkinglab.
the class OpenstackPortWebResource method updatePort.
/**
* Updates the port with the specified identifier.
*
* @param id port identifier
* @param input port JSON input stream
* @return 200 OK with the updated port, 400 BAD_REQUEST if the requested
* port does not exist
* @throws IOException exception
* @onos.rsModel NeutronPort
*/
@PUT
@Path("{id}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response updatePort(@PathParam("id") String id, InputStream input) throws IOException {
log.trace(String.format(MESSAGE, "UPDATE " + id));
String inputStr = IOUtils.toString(input, REST_UTF8);
if (!haService.isActive() && !DEFAULT_ACTIVE_IP_ADDRESS.equals(haService.getActiveIp())) {
return syncPut(haService, PORTS, id, inputStr);
}
final NeutronPort port = (NeutronPort) jsonToModelEntity(inputStr, NeutronPort.class);
adminService.updatePort(port);
ObjectMapper mapper = new ObjectMapper();
ObjectNode jsonNode = mapper.createObjectNode();
OpenstackNode node = nodeService.node(port.getHostId());
if (node == null) {
return status(Response.Status.OK).build();
} else if (node.datapathType().equals(DpdkConfig.DatapathType.NETDEV)) {
log.debug("UpdatePort for port {} called in netdev device {} " + "so sends vif type as a payload of the response", port.getId(), node.hostname());
jsonNode.put(VIF_TYPE, VHOSTUSER);
if (node.socketDir() != null) {
jsonNode.put(SOCKET_DIR, node.socketDir());
}
return status(Response.Status.OK).entity(jsonNode.toString()).build();
} else {
return status(Response.Status.OK).build();
}
}
use of org.onosproject.openstacknode.api.OpenstackNode in project onos by opennetworkinglab.
the class OpenstackNetworkingUtilTest method testGetGwByComputeDevId.
/**
* Tests the getGwByComputeDevId method.
*/
@Test
public void testGetGwByComputeDevId() {
Set<OpenstackNode> gws = Sets.newConcurrentHashSet();
OpenstackNode nullGw = getGwByComputeDevId(gws, genDeviceId(1));
assertNull(nullGw);
gws.add(genGateway(1));
gws.add(genGateway(2));
gws.add(genGateway(3));
Set<OpenstackNode> cloneOfGws = ImmutableSet.copyOf(gws);
Map<String, Integer> gwCountMap = Maps.newConcurrentMap();
int numOfDev = 99;
for (int i = 1; i < 1 + numOfDev; i++) {
OpenstackNode gw = getGwByComputeDevId(gws, genDeviceId(i));
if (gwCountMap.get(gw.hostname()) == null) {
gwCountMap.put(gw.hostname(), 1);
} else {
gwCountMap.compute(gw.hostname(), (k, v) -> v + 1);
}
new EqualsTester().addEqualityGroup(getGwByComputeDevId(gws, genDeviceId(i)), getGwByComputeDevId(cloneOfGws, genDeviceId(i))).testEquals();
}
int sum = gwCountMap.values().stream().mapToInt(Integer::intValue).sum();
assertEquals(numOfDev, sum);
}
use of org.onosproject.openstacknode.api.OpenstackNode in project onos by opennetworkinglab.
the class OpenstackNodeCheckCommand method doExecute.
@Override
protected void doExecute() {
OpenstackNodeService osNodeService = get(OpenstackNodeService.class);
DeviceService deviceService = get(DeviceService.class);
OpenstackNode osNode = osNodeService.node(hostname);
if (osNode == null) {
print("Cannot find %s from registered nodes", hostname);
return;
}
if (osNode.type() == CONTROLLER) {
print("[Openstack Controller Status]");
OSClient client = getConnectedClient(osNode);
if (client == null) {
error("The given keystone info is incorrect to get authorized to openstack");
print("keystoneConfig=%s", osNode.keystoneConfig());
}
if (osNode.keystoneConfig() != null) {
print("%s keystoneConfig=%s, neutronConfig=%s", osNode.state() == NodeState.COMPLETE && client != null ? MSG_OK : MSG_ERROR, osNode.keystoneConfig(), osNode.neutronConfig());
} else {
print("%s keystoneConfig is missing", MSG_ERROR);
}
} else {
print("[Integration Bridge Status]");
Device device = deviceService.getDevice(osNode.intgBridge());
Device ovsdbDevice = deviceService.getDevice(osNode.ovsdb());
if (device != null) {
print("%s OvsdbDeviceId=%s available=%s", deviceService.isAvailable(ovsdbDevice.id()) ? MSG_OK : MSG_ERROR, ovsdbDevice.id(), deviceService.isAvailable(ovsdbDevice.id()));
print("%s %s=%s available=%s %s", deviceService.isAvailable(device.id()) ? MSG_OK : MSG_ERROR, INTEGRATION_BRIDGE, device.id(), deviceService.isAvailable(device.id()), device.annotations());
if (osNode.dataIp() != null) {
printPortState(deviceService, osNode.intgBridge(), VXLAN_TUNNEL);
printPortState(deviceService, osNode.intgBridge(), GRE_TUNNEL);
printPortState(deviceService, osNode.intgBridge(), GENEVE_TUNNEL);
}
if (osNode.vlanIntf() != null) {
printPortState(deviceService, osNode.intgBridge(), osNode.vlanIntf());
}
osNode.phyIntfs().forEach(intf -> {
printPortState(deviceService, osNode.intgBridge(), structurePortName(INTEGRATION_TO_PHYSICAL_PREFIX + intf.network()));
});
if (osNode.type() == GATEWAY) {
printPortState(deviceService, osNode.intgBridge(), osNode.uplinkPort());
}
} else {
print("%s %s=%s is not available", MSG_ERROR, INTEGRATION_BRIDGE, osNode.intgBridge());
}
}
}
use of org.onosproject.openstacknode.api.OpenstackNode in project onos by opennetworkinglab.
the class OpenstackNodeListCommand method doExecute.
@Override
protected void doExecute() {
OpenstackNodeService osNodeService = get(OpenstackNodeService.class);
List<OpenstackNode> osNodes = Lists.newArrayList(osNodeService.nodes());
osNodes.sort(Comparator.comparing(OpenstackNode::hostname));
if (outputJson()) {
print("%s", json(osNodes));
} else {
print(FORMAT, "Hostname", "Type", "Integration Bridge", "Management IP", "Data IP", "VLAN Intf", "Uplink Port", "State", "SelectedGw");
for (OpenstackNode osNode : osNodes) {
print(FORMAT, osNode.hostname(), osNode.type(), osNode.intgBridge(), osNode.managementIp(), osNode.dataIp() != null ? osNode.dataIp() : "", osNode.vlanIntf() != null ? osNode.vlanIntf() : "", osNode.uplinkPort() != null ? osNode.uplinkPort() : "", osNode.state(), getGwByComputeNode(osNodeService.completeNodes(GATEWAY), osNode));
}
print("Total %s nodes", osNodeService.nodes().size());
}
}
Aggregations