*/
package org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor.api
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor.utils.ModifyAction
+import org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor.utils.NetconfDatastore
+
interface NetconfRpcService {
/**
* Lock
- * @param messageId message id of the request.
- * @param configTarget datastore ( running or candidate)
- * @param messageTimeout message timeout of the request.
+ *
+ * @param configTarget running or candidate, default candidate
* @return Device response
*/
- fun lock(messageId: String, configTarget: String, messageTimeout: Int): DeviceResponse
+ fun lock(configTarget: String = NetconfDatastore.CANDIDATE.datastore): DeviceResponse
/**
* Get-config
- * @param messageId message id of the request.
- * @param filter filter content.
- * @param configTarget config target ( running or candidate)
- * @param messageTimeout message timeout of the request.
+ *
+ * @param filter filter content, default empty
+ * @param configTarget running or candidate, default running
* @return Device response
*/
- fun getConfig(messageId: String, filter: String, configTarget: String, messageTimeout: Int): DeviceResponse
+ fun getConfig(filter: String = "", configTarget: String = NetconfDatastore.RUNNING.datastore): DeviceResponse
/**
- * Delete config from datastore
- * @param messageId message id of the request.
- * @param configTarget config target ( running or candidate)
- * @param messageTimeout message timeout of the request.
+ * Delete config
+ *
+ * @param configTarget running or candidate, default candidate
* @return Device response
*/
- fun deleteConfig(messageId: String, configTarget: String, messageTimeout: Int): DeviceResponse
+ fun deleteConfig(configTarget: String = NetconfDatastore.CANDIDATE.datastore): DeviceResponse
/**
* Edit-config
- * @param messageId message id of the request.
+ *
* @param messageContent edit config content.
- * @param lock lock the device before performing edit.
- * @param configTarget config target ( running or candidate)
- * @param editDefaultOperation edit default operation (merge | replace | create | delete | remove or
- * delete)
- * @param clearCandidate commit after edit config
- * @param commit clear candiate store before edit
- * @param discardChanges Rollback on failure
- * @param validate validate the config before commit
- * @param unlock unlock device after edit
- * @param messageTimeout message timeout of the request.
+ * @param configTarget running or candidate, default candidate
+ * @param editDefaultOperation, default set to none. Valid values: merge, replace, create, delete, none
* @return Device response
*/
- fun editConfig(messageId: String, messageContent: String, lock: Boolean, configTarget: String,
- editDefaultOperation: String, deleteConfig: Boolean, validate: Boolean, commit: Boolean,
- discardChanges: Boolean, unlock: Boolean, messageTimeout: Int): DeviceResponse
+ fun editConfig(messageContent: String, configTarget: String = NetconfDatastore.CANDIDATE.datastore,
+ editDefaultOperation: String = ModifyAction.NONE.action): DeviceResponse
/**
* Validate
- * @param messageId message id of the request.
- * @param configTarget config target ( running or candidate)
- * @param messageTimeout message timeout of the request.
+ *
+ * @param configTarget running or candidate, default candidate
* @return Device response
*/
- fun validate(messageId: String, configTarget: String, messageTimeout: Int): DeviceResponse
+ fun validate(configTarget: String = NetconfDatastore.CANDIDATE.datastore): DeviceResponse
/**
* Commit
- * @param messageId message id of the request.
- * @param discardChanges Rollback on failure
- * @param messageTimeout message timeout of the request.
+ *
* @return Device response
*/
- fun commit(messageId: String, discardChanges: Boolean, messageTimeout: Int): DeviceResponse
+ fun commit(): DeviceResponse
/**
* Unlock
- * @param messageId message id of the request.
- * @param configTarget config target ( running or candidate)
- * @param messageTimeout message timeout of the request.
+ *
+ * @param configTarget running or candidate, default candidate
* @return Device response
*/
- fun unLock(messageId: String, configTarget: String, messageTimeout: Int): DeviceResponse
+ fun unLock(configTarget: String = NetconfDatastore.CANDIDATE.datastore): DeviceResponse
/**
* Discard config
- * @param messageId message id of the request.
- * @param messageTimeout message timeout of the request.
+ *
* @return Device response
*/
- fun discardConfig(messageId: String, messageTimeout: Int): DeviceResponse
+ fun discardConfig(): DeviceResponse
/**
* Close session
- * @param messageId message id of the request.
+ *
* @param force force closeSession
- * @param messageTimeout message timeout of the request.
* @return Device response
*/
- fun closeSession(messageId: String, force: Boolean, messageTimeout: Int): DeviceResponse
+ fun closeSession(force: Boolean): DeviceResponse
/**
* Executes an RPC request to the netconf server.
*
* @param request the XML containing the RPC request for the server.
- * @param messageId message id of the request.
- * @param messageTimeout message timeout of the request.
* @return Device response
*/
- fun asyncRpc(request: String, messageId: String, messageTimeout: Int): DeviceResponse
+ fun asyncRpc(request: String, messageId: String): DeviceResponse
}
\ No newline at end of file
import org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor.api.NetconfException
import org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor.api.NetconfRpcService
import org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor.api.NetconfSession
-import org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor.utils.NetconfDatastore
import org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor.utils.NetconfMessageUtils
import org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor.utils.RpcStatus
import org.slf4j.LoggerFactory
import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicInteger
-class NetconfRpcServiceImpl(private val deviceInfo: DeviceInfo) : NetconfRpcService {
+class NetconfRpcServiceImpl(private var deviceInfo: DeviceInfo) : NetconfRpcService {
private val log = LoggerFactory.getLogger(NetconfRpcService::class.java)
+ private var responseTimeout: Int = deviceInfo.replyTimeout
+
private lateinit var netconfSession: NetconfSession
+ private val messageIdInteger = AtomicInteger(1)
+
fun setNetconfSession(netconfSession: NetconfSession) {
this.netconfSession = netconfSession
}
- override fun getConfig(messageId: String, filter: String, configTarget: String,
- messageTimeout: Int): DeviceResponse {
+ override fun getConfig(filter: String, configTarget: String): DeviceResponse {
var output = DeviceResponse()
+ val messageId = messageIdInteger.getAndIncrement().toString()
log.info("$deviceInfo: getConfig: messageId($messageId)")
try {
val message = NetconfMessageUtils.getConfig(messageId, configTarget, filter)
- output = asyncRpc(message, messageId, messageTimeout)
+ output = asyncRpc(message, messageId)
} catch (e: Exception) {
output.status = RpcStatus.FAILURE
output.errorMessage = "$deviceInfo: failed in get-config command $e.message"
return output
}
- override fun deleteConfig(messageId: String, configTarget: String, messageTimeout: Int): DeviceResponse {
+ override fun deleteConfig(configTarget: String): DeviceResponse {
var output = DeviceResponse()
+ val messageId = messageIdInteger.getAndIncrement().toString()
log.info("$deviceInfo: deleteConfig: messageId($messageId)")
try {
val deleteConfigMessage = NetconfMessageUtils.deleteConfig(messageId, configTarget)
output.requestMessage = deleteConfigMessage
- output = asyncRpc(deleteConfigMessage, messageId, messageTimeout)
+ output = asyncRpc(deleteConfigMessage, messageId)
} catch (e: Exception) {
output.status = RpcStatus.FAILURE
output.errorMessage = "$deviceInfo: failed in delete config command $e.message"
return output
}
- override fun lock(messageId: String, configTarget: String, messageTimeout: Int): DeviceResponse {
+ override fun lock(configTarget: String): DeviceResponse {
var output = DeviceResponse()
+ val messageId = messageIdInteger.getAndIncrement().toString()
log.info("$deviceInfo: lock: messageId($messageId)")
try {
val lockMessage = NetconfMessageUtils.lock(messageId, configTarget)
output.requestMessage = lockMessage
- output = asyncRpc(lockMessage, messageId, messageTimeout)
+ output = asyncRpc(lockMessage, messageId)
} catch (e: Exception) {
output.status = RpcStatus.FAILURE
output.errorMessage = "$deviceInfo: failed in lock command $e.message"
return output
}
- override fun unLock(messageId: String, configTarget: String, messageTimeout: Int): DeviceResponse {
+ override fun unLock(configTarget: String): DeviceResponse {
var output = DeviceResponse()
+ val messageId = messageIdInteger.getAndIncrement().toString()
log.info("$deviceInfo: unLock: messageId($messageId)")
try {
val unlockMessage = NetconfMessageUtils.unlock(messageId, configTarget)
output.requestMessage = unlockMessage
- output = asyncRpc(unlockMessage, messageId, messageTimeout)
+ output = asyncRpc(unlockMessage, messageId)
} catch (e: Exception) {
output.status = RpcStatus.FAILURE
output.errorMessage = "$deviceInfo: failed in lock command $e.message"
return output
}
- override fun commit(messageId: String, discardChanges: Boolean, messageTimeout: Int): DeviceResponse {
+ override fun commit(): DeviceResponse {
var output = DeviceResponse()
+ val messageId = messageIdInteger.getAndIncrement().toString()
log.info("$deviceInfo: commit: messageId($messageId)")
try {
val messageContent = NetconfMessageUtils.commit(messageId)
- output = asyncRpc(messageContent, messageId, messageTimeout)
+ output = asyncRpc(messageContent, messageId)
} catch (e: Exception) {
output.status = RpcStatus.FAILURE
output.errorMessage = "$deviceInfo: failed in commit command $e.message"
-
- // If commit failed apply discard changes
- if (discardChanges) {
- val discardChangesConfigMessageId = "$messageId-discard-changes"
- val discardOutput = discardConfig(discardChangesConfigMessageId, deviceInfo.replyTimeout)
- output.addSubDeviceResponse(discardChangesConfigMessageId, discardOutput)
- }
}
return output
}
- override fun discardConfig(messageId: String, messageTimeout: Int): DeviceResponse {
+ override fun discardConfig(): DeviceResponse {
var output = DeviceResponse()
+ val messageId = messageIdInteger.getAndIncrement().toString()
log.info("$deviceInfo: discard: messageId($messageId)")
try {
val discardChangesMessage = NetconfMessageUtils.discardChanges(messageId)
output.requestMessage = discardChangesMessage
- output = asyncRpc(discardChangesMessage, messageId, messageTimeout)
+ output = asyncRpc(discardChangesMessage, messageId)
} catch (e: Exception) {
output.status = RpcStatus.FAILURE
output.errorMessage = "$deviceInfo: failed in discard changes command " + e.message
return output
}
- override fun closeSession(messageId: String, force: Boolean, messageTimeout: Int): DeviceResponse {
+ override fun editConfig(messageContent: String, configTarget: String,
+ editDefaultOperation: String): DeviceResponse {
+ var response = DeviceResponse()
+ val messageId = messageIdInteger.getAndIncrement().toString()
+ log.info("$deviceInfo: editConfig: messageId($messageId)")
+ try {
+ val editMessage =
+ NetconfMessageUtils.editConfig(messageId, configTarget, editDefaultOperation, messageContent)
+ response.requestMessage = editMessage
+ response = asyncRpc(editMessage, messageId)
+ } catch (e: Exception) {
+ response.status = RpcStatus.FAILURE
+ response.errorMessage = e.message
+ }
+ return response
+ }
+
+ override fun validate(configTarget: String): DeviceResponse {
+ var output = DeviceResponse()
+ val messageId = messageIdInteger.getAndIncrement().toString()
+ try {
+ val validateMessage = NetconfMessageUtils.validate(messageId, configTarget)
+ output.requestMessage = validateMessage
+ output = asyncRpc(validateMessage, messageId)
+ } catch (e: Exception) {
+ output.status = RpcStatus.FAILURE
+ output.errorMessage = "$deviceInfo: failed in validate command " + e.message
+ }
+ return output
+ }
+
+ override fun closeSession(force: Boolean): DeviceResponse {
var output = DeviceResponse()
+ val messageId = messageIdInteger.getAndIncrement().toString()
log.info("$deviceInfo: closeSession: messageId($messageId)")
try {
val messageContent = NetconfMessageUtils.closeSession(messageId, force)
- output = asyncRpc(messageContent, messageId, messageTimeout)
+ output = asyncRpc(messageContent, messageId)
} catch (e: Exception) {
output.status = RpcStatus.FAILURE
output.errorMessage = "$deviceInfo: failed in closeSession command " + e.message
}
@Throws(NetconfException::class)
- override fun asyncRpc(request: String, messageId: String, messageTimeout: Int): DeviceResponse {
+ override fun asyncRpc(request: String, messageId: String): DeviceResponse {
val response = DeviceResponse()
log.info("$deviceInfo: send asyncRpc with messageId($messageId)")
response.requestMessage = request
- val rpcResponse = netconfSession.asyncRpc(request, messageId).get(messageTimeout.toLong(), TimeUnit.SECONDS)
+ val rpcResponse = netconfSession.asyncRpc(request, messageId).get(responseTimeout.toLong(), TimeUnit.SECONDS)
if (!NetconfMessageUtils.checkReply(rpcResponse)) {
throw NetconfException(rpcResponse)
}
response.errorMessage = null
return response
}
-
- override fun editConfig(messageId: String, messageContent: String, lock: Boolean, configTarget: String,
- editDefaultOperation: String, deleteConfig: Boolean, validate: Boolean, commit: Boolean,
- discardChanges: Boolean, unlock: Boolean, messageTimeout: Int): DeviceResponse {
- var editConfigDeviceResponse =
- DeviceResponse()
-
- try {
- val editMessage =
- NetconfMessageUtils.editConfig(messageId, configTarget, editDefaultOperation, messageContent)
- editConfigDeviceResponse.requestMessage = editMessage
-
- if (lock) {
- val lockMessageId = "$messageId-lock"
- val lockDeviceResponse = lock(lockMessageId, configTarget, deviceInfo.replyTimeout)
- editConfigDeviceResponse.addSubDeviceResponse(lockMessageId, lockDeviceResponse)
- if (!RpcStatus.SUCCESS.equals(lockDeviceResponse.status, ignoreCase = true)) {
- throw NetconfException(
- lockDeviceResponse.errorMessage!!)
- }
- }
-
- if (deleteConfig) {
- val deleteConfigMessageId = "$messageId-delete"
- val deleteConfigDeviceResponse = deleteConfig(deleteConfigMessageId,
- NetconfDatastore.CANDIDATE, deviceInfo.replyTimeout)
- editConfigDeviceResponse.addSubDeviceResponse(deleteConfigMessageId, deleteConfigDeviceResponse)
- if (!RpcStatus.SUCCESS.equals(deleteConfigDeviceResponse.status,
- ignoreCase = true)) {
- throw NetconfException(
- deleteConfigDeviceResponse.errorMessage!!)
- }
- }
-
- if (discardChanges) {
- val discardConfigMessageId = "$messageId-discard"
- val discardConfigDeviceResponse = discardConfig(discardConfigMessageId, deviceInfo.replyTimeout)
- editConfigDeviceResponse.addSubDeviceResponse(discardConfigMessageId, discardConfigDeviceResponse)
- if (!RpcStatus.SUCCESS.equals(discardConfigDeviceResponse.status,
- ignoreCase = true)) {
- throw NetconfException(
- discardConfigDeviceResponse.errorMessage!!)
- }
- }
-
- editConfigDeviceResponse = asyncRpc(editMessage, messageId, messageTimeout)
- if (!RpcStatus.SUCCESS.equals(editConfigDeviceResponse.status, ignoreCase = true)) {
- throw NetconfException(
- editConfigDeviceResponse.errorMessage!!)
- }
-
- if (validate) {
- val validateMessageId = "$messageId-validate"
- val validateDeviceResponse = validate(validateMessageId,
- NetconfDatastore.CANDIDATE, deviceInfo.replyTimeout)
- editConfigDeviceResponse.addSubDeviceResponse(validateMessageId, validateDeviceResponse)
- if (!RpcStatus.SUCCESS.equals(validateDeviceResponse.status, ignoreCase = true)) {
- throw NetconfException(
- validateDeviceResponse.errorMessage!!)
- }
- }
-
- /**
- * If Commit is enable, the commit response is treated as Edit config response, If commit failed, we
- * need not to throw an exception, until we unlock the device.
- */
- if (commit) {
- val commitMessageId = "$messageId-commit"
- val commitDeviceResponse =
- commit(commitMessageId, discardChanges, deviceInfo.replyTimeout)
- editConfigDeviceResponse.addSubDeviceResponse(commitMessageId, commitDeviceResponse)
- if (!RpcStatus.SUCCESS.equals(commitDeviceResponse.status, ignoreCase = true)) {
- throw NetconfException(
- commitDeviceResponse.errorMessage!!)
- }
- }
-
- } catch (e: Exception) {
- editConfigDeviceResponse.status = RpcStatus.FAILURE
- editConfigDeviceResponse.errorMessage = e.message
- } finally {
- if (unlock) {
- val unlockMessageId = "$messageId-unlock"
- val unlockDeviceResponse = unLock(unlockMessageId, configTarget, deviceInfo.replyTimeout)
- editConfigDeviceResponse.addSubDeviceResponse(unlockMessageId, unlockDeviceResponse)
- if (!RpcStatus.SUCCESS.equals(unlockDeviceResponse.status, ignoreCase = true)) {
- editConfigDeviceResponse.status = RpcStatus.FAILURE
- editConfigDeviceResponse.errorMessage = unlockDeviceResponse.errorMessage
- }
- }
- }
- return editConfigDeviceResponse
- }
-
- override fun validate(messageId: String, configTarget: String, messageTimeout: Int): DeviceResponse {
- var output = DeviceResponse()
- try {
- val validateMessage = NetconfMessageUtils.validate(messageId, configTarget)
- output.requestMessage = validateMessage
- output = asyncRpc(validateMessage, messageId, messageTimeout)
- } catch (e: Exception) {
- output.status = RpcStatus.FAILURE
- output.errorMessage = "$deviceInfo: failed in validate command " + e.message
- }
- return output
- }
}
\ No newline at end of file