class Chef::Provider::OneFlowTemplate

Implementation of Provider class.

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/chef/provider/one_flow_template.rb, line 34
def initialize(*args)
  super
  if !@new_resource.flow_url.nil?
    flow_url = @new_resource.flow_url
  elsif !run_context.chef_provisioning.flow_url.nil?
    flow_url = run_context.chef_provisioning.flow_url
  elsif !ENV['ONE_FLOW_URL'].nil?
    flow_url = ENV['ONE_FLOW_URL']
  else
    fail 'OneFlow API URL must be specified.'
  end
  @flow_lib = Chef::Provisioning::OpenNebulaDriver::FlowLib.new(flow_url, driver.one.client.one_auth)
end

Public Instance Methods

load_current_resource() click to toggle source
# File lib/chef/provider/one_flow_template.rb, line 52
def load_current_resource
  @current_resource = Chef::Resource::OneFlowTemplate.new(@new_resource.name, run_context)

  template_name = @new_resource.name

  unless @new_resource.template.nil?
    tpl = load_template_hash
    if tpl.nil?
      @current_resource.exists = false
      return
    end
    tpl = @flow_lib.merge_template(tpl, @new_resource.template_options, true, false)
    template_name = tpl[:name] if tpl.key?(:name)
  end

  template_id = @flow_lib.get_unique_template_id(template_name, true)

  @current_resource.exists = !template_id.nil?
  return unless @current_resource.exists

  @current_resource.template(@flow_lib.get_template(template_id))
  @current_resource.mode(@flow_lib.get_template_permissions(template_id))

  @current_resource.template_equal = @new_resource.template.nil? ? true : @flow_lib.hash_eq?(
    @current_resource.template,
    @flow_lib.normalize_template(@new_resource.name, driver, @flow_lib.merge_template(@current_resource.template, tpl), true)
  )
  @current_resource.mode_equal = @current_resource.mode == @new_resource.mode
  @current_resource.equal = @current_resource.template_equal && @current_resource.mode_equal
end
load_template_hash() click to toggle source
# File lib/chef/provider/one_flow_template.rb, line 83
def load_template_hash
  template = {}
  case @new_resource.template
  when Hash
    template = @new_resource.template
  when Fixnum
    template = @flow_lib.get_template(@new_resource.template)
  when String
    case @new_resource.template
    when %r{^file://(.*)$}
      template = JSON.parse(::File.read(Regexp.last_match[1]), :symbolize_names => true)
    when %r{^(?:(\w+)(?::(.*?))?@)?(https?://.*)$}
      response = RestClient::Request.execute(
        method: :get,
        url: Regexp.last_match[3],
        user: Regexp.last_match[1],
        password: Regexp.last_match[2]
      )
      template = JSON.parse(response, :symbolize_names => true)
    else
      tid = @flow_lib.get_unique_template_id(@new_resource.template)
      template = @flow_lib.get_template(tid)
    end
  end
  template
end
whyrun_supported?() click to toggle source
# File lib/chef/provider/one_flow_template.rb, line 48
def whyrun_supported?
  true
end

Protected Instance Methods

driver() click to toggle source
# File lib/chef/provider/one_flow_template.rb, line 170
def driver
  @new_resource.driver.nil? ? run_context.chef_provisioning.current_driver : run_context.chef_provisioning.driver_for(@new_resource.driver)
end