Skip to content

Instantly share code, notes, and snippets.

@csantanapr
Last active October 20, 2018 16:26
Show Gist options
  • Save csantanapr/dbf5c360f7912947253e083345b76b46 to your computer and use it in GitHub Desktop.
Save csantanapr/dbf5c360f7912947253e083345b76b46 to your computer and use it in GitHub Desktop.
OpenWhisk Scala Action

Create Directory structure

$ tree
.
├── Hello.scala
├── build.sbt
└── project
    └── plugins.sbt

Create Action Hello.scala

$ cat Hello.scala
import com.google.gson.JsonObject
object Hello {
  def main(args: JsonObject): JsonObject = {
    println("Log something")
    val name = if (args.has("name")) args.getAsJsonPrimitive("name").getAsString() else "stranger"
    val response = new JsonObject()
    response.addProperty("greeting", "Hello " + name + "!")
    response
  }
}

Setup Project

$ cat build.sbt

scalaVersion := "2.11.8"
libraryDependencies ++= Seq (
  "com.google.code.gson" % "gson" % "latest.integration"
)
$ cat project/plugins.sbt
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")

Build Jar

$ sbt assembly
[info] Loading global plugins from /Users/csantanapr/.sbt/0.13/plugins
[info] Loading project definition from /Users/csantanapr/Documents/dev/whisk/demos/scala_action/project
[info] Set current project to scala_action (in build file:/Users/csantana23/Documents/dev/whisk/demos/scala_action/)
[info] Including from cache: gson-2.8.2.jar
[info] Including from cache: scala-library-2.11.8.jar
[info] Checking every *.class/*.jar file's SHA-1.
[info] Merging files...
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'
[warn] Merging 'META-INF/maven/com.google.code.gson/gson/pom.properties' with strategy 'discard'
[warn] Merging 'META-INF/maven/com.google.code.gson/gson/pom.xml' with strategy 'discard'
[warn] Strategy 'discard' was applied to 3 files
[info] Assembly up to date: /Users/csantanapr/Documents/dev/whisk/demos/scala_action/target/scala-2.11/scala_action-assembly-0.1-SNAPSHOT.jar
[success] Total time: 1 s, completed Apr 23, 2018 8:53:44 PM

Deploy Action

$ wsk action update scala target/scala-2.11/scala_action-assembly-0.1-SNAPSHOT.jar --kind java --main Hello
ok: updated action scala

Run Action

$ wsk action invoke scala -p name Carlos -r
{
    "greeting": "Hello Carlos!"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment