huxley-cli
Version:
CLI for Huxley Deployment Platform
94 lines (71 loc) • 3.26 kB
text/coffeescript
#===============================================================================
# Huxley - Resource "cluster"
#===============================================================================
# Clusters are the foundation of Huxley's deployment model. This file contains
# functions that configure their creation and deletion.
{async, merge, collect, project} = require "fairmont"
{usage, pull_configuration} = require "../helpers"
{interview} = require "../interview"
api = (require "../api-interface").cluster
#---------------------
# Exposed Methods
#---------------------
module.exports =
# This function prepares the "options" object to ask the API server to create a
# CoreOS cluster using your AWS credentials.
create: async (spec) ->
{build} = (require "./cluster-helpers").create
# Read configuration data from the local config files.
{config} = yield pull_configuration()
# Begin interview
{questions} = require "../interviews/cluster/create.coffee"
answers = yield interview questions config
# Use the interview and raw configuration as context to build an "options" object for panda-hook.
options = yield build config, spec, answers
# With our object built, call the Huxley API.
response = yield api.create options
if spec.wait
while true
{cluster} = yield api.get options
console.log "Waiting for cluster creation..."
if cluster.status == "running"
console.log "Cluster is configured and online."
return
yield sleep 10000
else
return response
# This function prepares the "options" object to ask the API server to delete a
# CoreOS cluster using your AWS credentials.
delete: async (spec) ->
{build, cleanup} = (require "./cluster-helpers").delete
# Read configuration data from the local config files.
{config} = yield pull_configuration()
# Use this raw configuration as context to build an "options" object for panda-cluster.
options = build config, spec
# With our object built, call the Huxley API.
response = yield api.delete options
# Make local changes reflecting the destruction of the cluster.
yield cleanup response
return response.message
describe: async (spec) ->
{build} = (require "./cluster-helpers").describe
# Read configuration data from the local config files.
{config} = yield pull_configuration()
# Use this raw configuration as context to build an "options" object for panda-cluster.
options = build config, spec
# With our object built, call the Huxley API.
response = yield api.get options
message = ""
message += "#{k}: #{v.toString()}\n" for k, v of response.cluster
return message
list: async (spec) ->
{build} = (require "./cluster-helpers").list
# Read configuration data from the local config files.
{config, home_config} = yield pull_configuration()
# Use this raw configuration as context to build an "options" object for panda-cluster.
options = build config
# With our object built, call the Huxley API.
response = yield api.list options
message = ""
message += "#{name}\n" for name in collect project "name", response.clusters
return message