Class: Chef::Provisioning::AWSDriver::AWSResource

Inherits:
SuperLWRP
  • Object
show all
Defined in:
lib/chef/provisioning/aws_driver/aws_resource.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from SuperLWRP

#load_prior_resource

Constructor Details

#initialize(name, run_context = nil) ⇒ AWSResource

Returns a new instance of AWSResource.



11
12
13
14
15
16
17
18
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 11

def initialize(name, run_context=nil)
  name = name.public_send(self.class.aws_sdk_class_id) if name.is_a?(self.class.aws_sdk_class)
  super
  if run_context
    driver run_context.chef_provisioning.current_driver
    chef_server run_context.cheffish.current_chef_server
  end
end

Class Method Details

.get_aws_object(value, resource: nil, run_context: nil, driver: nil, managed_entry_store: nil, required: true) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 93

def self.get_aws_object(value, resource: nil, run_context: nil, driver: nil, managed_entry_store: nil, required: true)
  return nil if value.nil?

  if resource
    run_context         ||= resource.run_context
    driver              ||= resource.driver
    managed_entry_store ||= resource.managed_entry_store
  end
  if value.is_a?(self)
    resource = value
  else
    resource = new(value, run_context)
    resource.driver driver if driver
    resource.managed_entry_store managed_entry_store if managed_entry_store
  end
  result = resource.aws_object
  if required && result.nil?
    raise "#{self}[#{value}] does not exist!"
  end
  result
end

.get_aws_object_id(value, **options) ⇒ Object



115
116
117
118
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 115

def self.get_aws_object_id(value, **options)
  aws_object = get_aws_object(value, **options)
  aws_object.public_send(aws_sdk_class_id) if aws_object
end

.lookup_options(options, **handler_options) ⇒ Object

Look up an AWS options list, translating standard names using the appropriate classes.

For example, ‘load_balancer_options` is passed into `lookup_options`, and if it looks like this: `{ subnets: `[ ’subnet1’, ‘subnet2’ ] }‘, then `AWSResource.lookup_options` will translate each ID with `AwsSubnet.get_aws_object(’subnet1’)‘, which supports Chef names (`mysubnet`) as well as AWS subnet Ids (`subnet-1234abcd`) or AWS objects (`AWS::EC2::Subnet`).

Keys that represent non-AWS-objects (such as ‘timeout`) are left alone.



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 76

def self.lookup_options(options, **handler_options)
  options = options.dup
  options.each do |name, value|
    if name.to_s.end_with?('s')
      handler_name = :"#{name[0..-2]}"
      if aws_option_handlers[handler_name]
        options[name] = [options[name]].flatten.map { |value| aws_option_handlers[handler_name].get_aws_object_id(value, **handler_options) }
      end
    else
      if aws_option_handlers[name]
        options[name] = aws_option_handlers[name].get_aws_object_id(value, **handler_options)
      end
    end
  end
  options
end

Instance Method Details

#action(*args) ⇒ Object

Backwards compatibility for action :destroy



21
22
23
24
25
26
27
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 21

def action(*args)
  if args == [ :delete ]
    super(:destroy)
  else
    super
  end
end

#action=(value) ⇒ Object



28
29
30
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 28

def action=(value)
  action(value)
end

#aws_objectObject

Get the current AWS object.

Raises:

  • (NotImplementedError)


59
60
61
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 59

def aws_object
  raise NotImplementedError, :aws_object
end