class Cyclid::API::Plugins::Mist

Mist builder. Calls out to Mist to obtain a build host instance.

Public Class Methods

new() click to toggle source
# File lib/cyclid/plugins/builder/mist.rb, line 36
def initialize
  mist_config_file = ENV.fetch('MIST_CONFIG', File.join(%w(/ etc mist config)))
  @config = ::Mist::Config.new(mist_config_file)

  pool = ::Mist::Pool.get(@config.servers)
  @client = ::Mist::Client.new(pool)
end

Public Instance Methods

get(args = {}) click to toggle source

Create & return a build host

# File lib/cyclid/plugins/builder/mist.rb, line 45
def get(args = {})
  args.symbolize_keys!

  Cyclid.logger.debug "mist: args=#{args}"

  # If there is one, split the 'os' into a 'distro' and 'release'
  if args.key? :os
    match = args[:os].match(/\A(\w*)_(.*)\Z/)
    distro = match[1] if match
    release = match[2] if match
  else
    # No OS was specified; use the default
    # XXX Defaults should be configurable
    distro = 'ubuntu'
    release = 'trusty'
  end

  begin
    result = @client.call(:create, distro: distro, release: release)
    Cyclid.logger.debug "mist result=#{result}"

    raise "failed to create build host: #{result['message']}" \
      unless result['status']

    buildhost = MistHost.new(name: result['name'],
                             host: result['ip'],
                             username: result['username'],
                             workspace: "/home/#{result['username']}",
                             password: nil,
                             key: @config.ssh_private_key,
                             server: result['server'],
                             distro: distro,
                             release: release)
  rescue MessagePack::RPC::TimeoutError => ex
    Cyclid.logger.error "Mist create call timedout: #{ex}"
    raise "mist failed: #{ex}"
  rescue StandardError => ex
    Cyclid.logger.error "couldn't get a build host from Mist: #{ex}"
    raise "mist failed: #{ex}"
  end

  Cyclid.logger.debug "mist buildhost=#{buildhost.inspect}"
  return buildhost
end
release(_transport, buildhost) click to toggle source

Destroy the build host

# File lib/cyclid/plugins/builder/mist.rb, line 91
def release(_transport, buildhost)
  name = buildhost[:name]
  server = buildhost[:server]

  begin
    @client.call(:destroy, name: name, server: server)
  rescue MessagePack::RPC::TimeoutError => ex
    Cyclid.logger.error "Mist destroy timed out: #{ex}"
  end
end