nefilim / scalachefclient   0.2

GitHub

Very minimal Chef Server asynchronous client written in Scala with Spray

Scala versions: 2.10

ChefClientScala

Very minimal Chef Server async client written in Scala (2.10) with Spray (1.3.1). The motivation for this library is to do network discovery and drive an operational dashboard. Also used by https://github.com/nefilim/SNSMonitor

Supported operations

  • List all nodes
  • Search the node index
  • Deleting a node
  • Deleting a client

Sample Usage

Operations returns:

Future[Either[ChefClientFailedResult, T]]

Usage:

      val chefClient = ChefClient(keyPath, "theuser", "api.opscode.com", Some("/organizations/myorg"))
      val f1 = chefClient.nodeList()
      f1.onComplete {
        case Success(success) =>
          success match {
            case Right(r) =>
              r.foreach(logger.info("node {}", _))
            case Left(l) =>
              logger.error("failed {}", l)
          }
        case Failure(failure) =>
          logger.error("node list failure {}", failure)
      }

      val f2 = chefClient.searchNodeIndex("name:*")
      f2.onComplete {
        case Success(searchResult) =>
          searchResult match {
            case Right(r) =>
              r.rows.foreach(logger.info("node {}", _))
            case Left(l) =>
              logger.error("failed {}", l)
          }
        case Failure(failure) =>
          logger.error("search result failure {}", failure)
      }

      val f3 = chefClient.deleteClient("app-i-e3ade6eb")
      f3.onComplete {
        case Success(result) =>
          logger.info("deleted client {}", result)
          result.isRight should be (true)
          result.right.get.status should be (StatusCodes.OK)
        case Failure(failure) =>
          logger.error("delete client failure {}", failure)
      }

      val f4 = chefClient.deleteNode("app-i-e3ade6eb")
      f4.onComplete {
        case Success(result) =>
          logger.info("deleted node {}", result)
          result.isRight should be (true)
        case Failure(failure) =>
          logger.error("delete node failure {}", failure)
      }