Sha256: 0a518e526d9d42890c0b91bce3f1ce4313b0e68a539736efbdf9b443b2b57cd0

Contents?: true

Size: 1.88 KB

Versions: 2

Compression:

Stored size: 1.88 KB

Contents

require 'ipaddr'
require 'thor'
require 'pp'
require 'json'
require 'xmlsimple'

module Hetzner
  class API
    class CLI < Thor
      attr_accessor :api

      desc "boot ACTION [SERVER_IP]", "get available boot options"
      method_options :username => :string
      method_options :password => :string
      method_options :set      => 'get'

      def boot(ip = "")
        require_ip ip
        generate_api_instance

        case options.set
          when 'get'
            require_ip ip
            result = @api.boot? ip
        end

        output(result)
      end

      desc "failover [SERVER_IP] (--to [FAILOVER_IP])", "get/set failover of SERVER_IP (to FAILOVER_IP)"
      method_options :username => :string
      method_options :password => :string
      method_options :to       => :string

      def failover(ip = nil)
        generate_api_instance

        if options.to
          require_ip ip
          require_ip options.to
          result = @api.failover! ip, options.to
        else
          result = @api.failover? ip
        end

        output(result)
      end

      private

      def output(result)
        @render = 'xml'
        case @render
        when 'pp'
          pp result.parsed_response
        when 'xml'
          puts XmlSimple.xml_out result.parsed_response, 'RootName' => 'result', 'AnonymousTag' => '' # dirty
        when 'json'
        else
          jj JSON.parse result.response.body
        end
      end

      def require_ip(ip)
        ip = IPAddr.new ip
      rescue ArgumentError
        raise RequiredArgumentMissingError, "server IP missing!"
      end

      def generate_api_instance
        if options.username && options.password
          @api = Hetzner::API.new options.username, options.password
        else
          # TODO: load from .hetzner
          raise RequiredArgumentMissingError, "missing credentials!"
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hetzner-api-1.2.0 lib/hetzner/api/cli.rb
hetzner-api-1.1.0 lib/hetzner/api/cli.rb