korczis/apollon

View on GitHub
lib/apollon/provider/digital_ocean.rb

Summary

Maintainability
A
0 mins
Test Coverage
# encoding: utf-8

require 'barge'
require_relative 'provider_base'

# Apollon Module
module Apollon
  # Apollon Provider Module
  module Provider
    # Apollon DigitalOcean Provider
    class DigitalOcean < ProviderBase
      attr_reader :barge

      # Apollon DigitalOcean Machine
      class Machine < ProviderBase::Machine
      end

      REGIONS = %w(
        ams2
        ams3
        lon1
        nyc2
        nyc3
        sfo1
        sgp1
      )

      def initialize(client)
        super(client)

        opts = {
          provider: 'DigitalOcean',
          digitalocean_api_key: config['key'],
          digitalocean_client_id: config['id']
        }

        @compute = Fog::Compute.new(opts)
        @barge = Barge::Client.new(access_token: config['token'])
        self
      end

      def create_machine(opts = {})
        res = @barge.droplet.create(opts)
        @compute.servers.select { |s| s.id == res['droplet']['id'] }.first
      end

      def regions
        REGIONS
        # @regions ||= @compute.regions.map(&:slug)
      end

      def ssh_keys
        @compute.ssh_keys.to_a
      end
    end
  end
end