- this.networkTransactionService = nts;
- }
-
- @Override
- public ListenableFuture<RpcResult<CreateConnectivityServiceOutput>> createConnectivityService(
- CreateConnectivityServiceInput input) {
- // TODO: later version of TAPI models include Name as an input parameter in connectivity.yang
- LOG.info("RPC create-connectivity received: {}", input.getEndPoint());
- Uuid serviceUuid = new Uuid(UUID.randomUUID().toString());
- this.pceListenerImpl.setInput(input);
- this.pceListenerImpl.setServiceUuid(serviceUuid);
- this.rendererListenerImpl.setServiceUuid(serviceUuid);
- ListenableFuture<RpcResult<ServiceCreateOutput>> output = null;
- OperationResult validationResult = CreateConnectivityServiceValidation.validateCreateConnectivityServiceRequest(
- input);
- if (validationResult.isSuccess()) {
- LOG.info("input parameter of RPC create-connectivity are being handled");
- // check uuid of SIP in tapi context
- Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap = this.tapiContext.getTapiContext()
- .getServiceInterfacePoint();
- if (sipMap == null) {
- return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
- .withError(ErrorType.RPC, "SIP list is empty")
- .buildFuture();
- }
- if (sipMap.containsKey(new ServiceInterfacePointKey(input.getEndPoint().values().stream().findFirst()
- .orElseThrow().getServiceInterfacePoint().getServiceInterfacePointUuid()))
- && sipMap.containsKey(new ServiceInterfacePointKey(input.getEndPoint().values().stream().skip(1)
- .findFirst().orElseThrow().getServiceInterfacePoint().getServiceInterfacePointUuid()))) {
- LOG.info("SIPs found in sipMap");
- // TODO: differentiate between OTN service and GbE service in TAPI
- ServiceCreateInput sci = this.connectivityUtils.createORServiceInput(input, serviceUuid);
- if (sci == null) {
- return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
- .withError(ErrorType.RPC, "Couldnt map Service create input")
- .buildFuture();
- }
- LOG.info("Service Create input = {}", sci);
- output = this.serviceHandler.serviceCreate(sci);
- if (!output.isDone()) {
- return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
- .withError(ErrorType.RPC, "Service create RPC failed")
- .buildFuture();
- }
- } else {
- LOG.error("Unknown UUID");
- return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
- .withError(ErrorType.RPC, "SIPs do not exist in tapi context")
- .buildFuture();
- }
- }
- try {
- if (output == null) {
- return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
- .withError(ErrorType.RPC, "Failed to create service")
- .buildFuture();
- }
- LOG.info("Service create request was successful");
- if (output.get().getResult().getConfigurationResponseCommon().getResponseCode()
- .equals(ResponseCodes.RESPONSE_FAILED)) {
- return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
- .withError(ErrorType.RPC, "Failed to create service")
- .buildFuture();
- }
- LOG.info("Output of service request = {}", output.get().getResult());
- } catch (InterruptedException | ExecutionException e) {
- LOG.error("Error checking response code of service create", e);
- }
- // Connections and states should be created/updated when the pce and renderer are done :)
- Map<EndPointKey, EndPoint> endPointList = createEndPoints(input.getEndPoint());
- Name name = new NameBuilder()
- .setValueName("Connectivity Service Name")
- .setValue(serviceUuid.getValue())
- .build();
- ConnectivityConstraint conConstr = new ConnectivityConstraintBuilder()
- .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY)
- .setServiceLevel(input.getConnectivityConstraint().getServiceLevel()).build();
-
- ConnectivityService service = new ConnectivityServiceBuilder()
- .setUuid(serviceUuid)
- .setAdministrativeState(AdministrativeState.LOCKED)
- .setOperationalState(OperationalState.DISABLED)
- .setLifecycleState(LifecycleState.PLANNED)
- .setLayerProtocolName(input.getLayerProtocolName())
- .setConnectivityConstraint(conConstr)
- .setDirection(ForwardingDirection.BIDIRECTIONAL)
- .setName(Map.of(name.key(), name))
- .setConnection(new HashMap<>())
- .setEndPoint(endPointList)
- .build();
- // add to tapi context
- this.tapiContext.updateConnectivityContext(Map.of(service.key(), service), new HashMap<>());
- LOG.info("Created locked service in Datastore. Waiting for PCE and Renderer to complete tasks...");
- // return ConnectivityServiceCreateOutput
- return RpcResultBuilder.success(new CreateConnectivityServiceOutputBuilder()
- .setService(new ServiceBuilder(service).build()).build()).buildFuture();
- }
-
- @Override
- public ListenableFuture<RpcResult<GetConnectivityServiceDetailsOutput>> getConnectivityServiceDetails(
- GetConnectivityServiceDetailsInput input) {
- // TODO Auto-generated method stub
- Uuid serviceUuid = input.getUuid();
- ConnectivityService service = this.tapiContext.getConnectivityService(serviceUuid);
- if (service == null) {
- LOG.error("Service {} doesnt exist in tapi context", input.getUuid());
- return RpcResultBuilder.<GetConnectivityServiceDetailsOutput>failed()
- .withError(ErrorType.RPC, "Service doesnt exist in datastore")
- .buildFuture();
- }
- return RpcResultBuilder.success(new GetConnectivityServiceDetailsOutputBuilder().setService(
- new org.opendaylight.yang.gen.v1.urn
- .onf.otcc.yang.tapi.connectivity.rev221121.get.connectivity.service.details.output.ServiceBuilder(
- service).build()).build()).buildFuture();
- }
-
- @Override
- public ListenableFuture<RpcResult<UpdateConnectivityServiceOutput>> updateConnectivityService(
- UpdateConnectivityServiceInput input) {
- // TODO Auto-generated method stub. More complicated as it depends on what needs to be updated... left aside
- return RpcResultBuilder.<UpdateConnectivityServiceOutput>failed()
- .withError(ErrorType.RPC, ErrorTag.OPERATION_NOT_SUPPORTED, "RPC not implemented yet")
- .buildFuture();
- }
-
- @Override
- public ListenableFuture<RpcResult<GetConnectionDetailsOutput>> getConnectionDetails(
- GetConnectionDetailsInput input) {
- // TODO Auto-generated method stub
- Uuid connectionUuid = input.getUuid();
- Connection connection = this.tapiContext.getConnection(connectionUuid);
- if (connection == null) {
- LOG.error("Connection {} doesnt exist in tapi context", input.getUuid());
- return RpcResultBuilder.<GetConnectionDetailsOutput>failed()
- .withError(ErrorType.RPC, "Connection doesnt exist in datastore")
- .buildFuture();
- }
- return RpcResultBuilder.success(new GetConnectionDetailsOutputBuilder().setConnection(
- new ConnectionBuilder(connection).build()).build()).buildFuture();