Class: Chef::Provisioning::AWSDriver::AWSResource
- Inherits:
-
SuperLWRP
- Object
- Resource::LWRPBase
- SuperLWRP
- Chef::Provisioning::AWSDriver::AWSResource
show all
- Defined in:
- lib/chef/provisioning/aws_driver/aws_resource.rb
Direct Known Subclasses
AWSRDSResource, AWSResourceWithEntry, Resource::AwsAutoScalingGroup, Resource::AwsCacheCluster, Resource::AwsCacheReplicationGroup, Resource::AwsCacheSubnetGroup, Resource::AwsCloudsearchDomain, Resource::AwsCloudwatchAlarm, Resource::AwsElasticsearchDomain, Resource::AwsIamInstanceProfile, Resource::AwsIamRole, Resource::AwsKeyPair, Resource::AwsLaunchConfiguration, Resource::AwsLoadBalancer, Resource::AwsS3Bucket, Resource::AwsSecurityGroup, Resource::AwsServerCertificate, Resource::AwsSnsTopic, Resource::AwsSqsQueue
Constant Summary
collapse
- NOT_PASSED =
This supports the introduction of the NOT_PASSED chef constant in chef 12.5 TODO remove when we make 12.5 and higher a dependency
Object.new
Class Method Summary
collapse
-
.attribute(name, aws_id_attribute: false, **validation_opts) ⇒ Object
Add support for aws_id_attribute: true.
-
.aws_id_attribute ⇒ Object
-
.aws_id_prefix ⇒ Object
-
.aws_option_handlers ⇒ Object
-
.aws_sdk_class ⇒ Object
-
.aws_sdk_class_id ⇒ Object
-
.aws_sdk_option_name ⇒ Object
-
.aws_sdk_type(sdk_class, option_names: nil, option_name: NOT_PASSED, load_provider: true, id: :name, aws_id_prefix: nil) ⇒ Object
-
.get_aws_object(value, resource: nil, run_context: nil, driver: nil, managed_entry_store: nil, required: true) ⇒ Object
-
.get_aws_object_id(value, **options) ⇒ Object
-
.lookup_options(options = Hash.new, **handler_options) ⇒ Object
Look up an AWS options list, translating standard names using the appropriate classes.
Instance Method Summary
collapse
Methods inherited from SuperLWRP
#_pv_is, lazy
Constructor Details
#initialize(name, run_context = nil) ⇒ AWSResource
Returns a new instance of AWSResource.
15
16
17
18
19
20
21
22
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 15
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
.attribute(name, aws_id_attribute: false, **validation_opts) ⇒ Object
Add support for aws_id_attribute: true
200
201
202
203
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 200
def self.attribute(name, aws_id_attribute: false, **validation_opts)
@aws_id_attribute = name if aws_id_attribute
super(name, validation_opts)
end
|
.aws_id_attribute ⇒ Object
205
206
207
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 205
def self.aws_id_attribute
@aws_id_attribute
end
|
.aws_id_prefix ⇒ Object
186
187
188
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 186
def self.aws_id_prefix
@aws_id_prefix
end
|
.aws_option_handlers ⇒ Object
195
196
197
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 195
def self.aws_option_handlers
@@aws_option_handlers
end
|
.aws_sdk_class ⇒ Object
178
179
180
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 178
def self.aws_sdk_class
@aws_sdk_class
end
|
.aws_sdk_class_id ⇒ Object
182
183
184
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 182
def self.aws_sdk_class_id
@aws_sdk_class_id
end
|
.aws_sdk_option_name ⇒ Object
190
191
192
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 190
def self.aws_sdk_option_name
@aws_sdk_option_name
end
|
.aws_sdk_type(sdk_class, option_names: nil, option_name: NOT_PASSED, load_provider: true, id: :name, aws_id_prefix: nil) ⇒ Object
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 147
def self.aws_sdk_type(sdk_class,
option_names: nil,
option_name: NOT_PASSED,
load_provider: true,
id: :name,
aws_id_prefix: nil)
self.resource_name = convert_to_snake_case(self.name.split('::')[-1])
@aws_sdk_class = sdk_class
@aws_sdk_class_id = id
@aws_id_prefix = aws_id_prefix
require "chef/provider/#{resource_name}" if load_provider
option_name = :"#{resource_name[4..-1]}" if option_name == NOT_PASSED
@aws_sdk_option_name = option_name
option_names ||= begin
option_names = []
option_names << aws_sdk_option_name
option_names << :"#{option_name}_#{aws_sdk_class_id}" if aws_sdk_class_id
option_names
end
option_names.each do |option_name|
aws_option_handlers[option_name] = self
end
name = self.name.split('::')[-1]
eval("Chef::Provisioning::AWSDriver::Resources::#{name} = self", binding, __FILE__, __LINE__)
end
|
.get_aws_object(value, resource: nil, run_context: nil, driver: nil, managed_entry_store: nil, required: true) ⇒ Object
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 112
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
135
136
137
138
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 135
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 = Hash.new, **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.
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 94
def self.lookup_options(options = Hash.new, **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
handler_name = name.to_sym
if aws_option_handlers[handler_name]
options[handler_name] = aws_option_handlers[handler_name].get_aws_object_id(value, **handler_options)
end
end
end
options
end
|
Instance Method Details
#action(*args) ⇒ Object
Backwards compatibility for action :destroy
25
26
27
28
29
30
31
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 25
def action(*args)
if args == [ :delete ]
super(:destroy)
else
super
end
end
|
#action=(value) ⇒ Object
36
37
38
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 36
def action=(value)
action(value)
end
|
#aws_object ⇒ Object
Get the current AWS object. This should return the aws_object even if it has a status like ‘deleted’ or ‘inactive’. If there is an aws_object, we return it. Callers will need to check the status if they care.
70
71
72
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 70
def aws_object
raise NotImplementedError, :aws_object
end
|
#aws_object_id ⇒ Object
74
75
76
77
78
79
|
# File 'lib/chef/provisioning/aws_driver/aws_resource.rb', line 74
def aws_object_id
@aws_object_id ||= begin
o = aws_object
o.public_send(self.class.aws_sdk_class_id) if o
end
end
|