summaryrefslogtreecommitdiffstats
path: root/docs/guides/onap-user/design/parameter_resolution/freeradius_example/before_enrichment/CBA_freeradius/Scripts/kotlin/kotlin.kt
blob: e0d36ca178216a522069d04a5376ca6fa21852ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package org.onap.ccsdk.cds.blueprintsprocessor.services.execution.scripts

import com.fasterxml.jackson.databind.node.ObjectNode
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput
import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractComponentFunction
import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractScriptComponentFunction
import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.ComponentFunctionScriptingService

import java.io.ByteArrayInputStream
import java.io.IOException
import java.io.InputStream
import org.apache.sshd.client.SshClient
import org.apache.sshd.client.channel.ClientChannel
import org.apache.sshd.client.future.AuthFuture
import org.apache.sshd.client.future.ConnectFuture
import org.apache.sshd.client.session.ClientSession
import org.apache.sshd.common.future.SshFutureListener
import org.apache.sshd.common.util.io.NoCloseInputStream
import org.apache.sshd.common.util.io.NoCloseOutputStream
import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.storedContentFromResolvedArtifactNB
import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException
import org.onap.ccsdk.cds.controllerblueprints.core.asListOfString
import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils
import org.slf4j.LoggerFactory
import java.io.ByteArrayOutputStream
import java.util.*

open class SampleScriptComponent : AbstractScriptComponentFunction() {

    private val log = LoggerFactory.getLogger(SampleScriptComponent::class.java)!!

    override suspend fun processNB(executionRequest: ExecutionServiceInput) {
        log.info("Hello Kotlin!")
        val resolution_key = getDynamicProperties("resolution-key").asText()
        log.info("resolution_key: $resolution_key")
        val payload = storedContentFromResolvedArtifactNB(resolution_key, "userconfig")
        val payloadObject = JacksonUtils.jsonNode(payload) as ObjectNode
        val freeradius_ip: String = payloadObject.get("freeradius_ip").asText()
        log.info("freeradius_ip: $freeradius_ip")
        val user_config: String = payloadObject.get("user_config").asText()
        log.info("user_config: $user_config")  
        log.info("Waiting 2 minutes for VM to initialize")
        Thread.sleep(120000)		
        val client = SshClient.setUpDefaultClient()
        client.start()
        log.info("SSH Client Service started successfully")
        val session = client.connect("cloud", freeradius_ip, 22).verify(3000).session
        session.addPasswordIdentity("password")
        log.info("SSH Client authenticating...")
        val authFuture = session.auth().verify(3000)
        log.info("SSH client session($session) created")
        log.info("SSH Authenticated: $authFuture.isSuccess()")
        val command="echo '$user_config' | sudo tee -a /etc/freeradius/users"
        log.info("Executing host($session) command($command)")
        val channel = session.createExecChannel(command)
        val outputStream = ByteArrayOutputStream()
        channel!!.out = outputStream
        channel!!.err = outputStream
        channel!!.open().await()
        //val waitMask = channel!!.waitFor(Collections.unmodifiableSet(EnumSet.of(ClientChannelEvent.CLOSED)), 3000)
        //if (waitMask.contains(ClientChannelEvent.TIMEOUT)) {
        //    throw BluePrintProcessorException("Failed to retrieve command result in time: $command")
        //}
        Thread.sleep(3000)
        val exitStatus = channel!!.exitStatus
        //ClientChannel. .validateCommandExitStatusCode(command, exitStatus!!)
        if (channel != null) {
            channel!!.close()
        }
        if (client.isOpen) {
            client.stop()
        }
        log.info(outputStream.toString())
        log.info("SSH Client Service stopped successfully")


    }


    override suspend fun recoverNB(runtimeException: RuntimeException, executionRequest: ExecutionServiceInput) {
    }
}