Sha256: 8abe19d86bc9108552f451ccc0fdb5264c79a7580cde3c996111fcc21975ab24

Contents?: true

Size: 1.45 KB

Versions: 1

Compression:

Stored size: 1.45 KB

Contents

require 'log4r'
require 'restclient'
require 'json'

require 'vagrant-openstack-provider/client/http_utils'
require 'vagrant-openstack-provider/client/domain'

module VagrantPlugins
  module Openstack
    class HeatClient
      include Singleton
      include VagrantPlugins::Openstack::HttpUtils
      include VagrantPlugins::Openstack::Domain

      def initialize
        @logger = Log4r::Logger.new('vagrant_openstack::glance')
        @session = VagrantPlugins::Openstack.session
      end

      def create_stack(env, options)
        stack = {}.tap do |s|
          s['stack_name'] = options[:name] if options[:name]
          s['template'] = options[:template]
        end
        stack_res = post(env, "#{@session.endpoints[:orchestration]}/stacks", stack.to_json)
        JSON.parse(stack_res)['stack']['id']
      end

      def get_stack_details(env, stack_name, stack_id)
        stack_exists do
          server_details = get(env, "#{@session.endpoints[:orchestration]}/stacks/#{stack_name}/#{stack_id}")
          JSON.parse(server_details)['stack']
        end
      end

      def delete_stack(env, stack_name, stack_id)
        stack_exists do
          delete(env, "#{@session.endpoints[:orchestration]}/stacks/#{stack_name}/#{stack_id}")
        end
      end

      def stack_exists
        return yield
      rescue Errors::VagrantOpenstackError => e
        raise Errors::StackNotFound if e.extra_data[:code] == 404
        raise e
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vagrant-openstack-provider-0.6.0 lib/vagrant-openstack-provider/client/heat.rb