class Chef::Provider::AwsCloudwatchAlarm
Public Instance Methods
create_aws_object()
click to toggle source
# File lib/chef/provider/aws_cloudwatch_alarm.rb, line 6 def create_aws_object converge_by "creating cloudwatch alarm #{new_resource.name} in #{region}" do new_resource.driver.cloudwatch_client.put_metric_alarm(desired_options) end end
desired_options()
click to toggle source
# File lib/chef/provider/aws_cloudwatch_alarm.rb, line 26 def desired_options @desired_options ||= begin # Because an update is a PUT, we must ensure that any properties not specified # on the resource that are already present on the object stay the same aws_object = new_resource.aws_object opts = { alarm_name: new_resource.name } %i{namespace metric_name comparison_operator evaluation_periods period statistic threshold actions_enabled alarm_description unit}.each do |opt| if !new_resource.public_send(opt).nil? opts[opt] = new_resource.public_send(opt) elsif aws_object && !aws_object.public_send(opt).nil? opts[opt] = aws_object.public_send(opt) end end if !new_resource.dimensions.nil? opts[:dimensions] = new_resource.dimensions elsif aws_object && !aws_object.dimensions.nil? opts[:dimensions] = aws_object.dimensions.map!(&:to_h) end # Normally we would just use `lookup_options` here but because these parameters # don't necessarily sound like sns topics we manually do it %i{insufficient_data_actions ok_actions alarm_actions}.each do |opt| if !new_resource.public_send(opt).nil? opts[opt] = new_resource.public_send(opt) opts[opt].map! do |action| if action.is_a?(String) && action !~ /^arn:/ aws_object = Chef::Resource::AwsSnsTopic.get_aws_object(action, resource: new_resource) action = aws_object.attributes["TopicArn"] if aws_object end action end elsif aws_object && !aws_object.public_send(opt).nil? opts[opt] = aws_object.public_send(opt) end end opts end end
destroy_aws_object(alarm)
click to toggle source
# File lib/chef/provider/aws_cloudwatch_alarm.rb, line 20 def destroy_aws_object(alarm) converge_by "destroying cloudwatch alarm #{new_resource.name} in #{region}" do alarm.delete end end
update_aws_object(alarm)
click to toggle source
# File lib/chef/provider/aws_cloudwatch_alarm.rb, line 12 def update_aws_object(alarm) if update_required?(alarm) converge_by "updating cloudwatch alarm #{new_resource.name} in #{region}" do new_resource.driver.cloudwatch_client.put_metric_alarm(desired_options) end end end
update_required?(alarm)
click to toggle source
# File lib/chef/provider/aws_cloudwatch_alarm.rb, line 66 def update_required?(alarm) %i{namespace metric_name comparison_operator evaluation_periods period statistic threshold actions_enabled alarm_description unit}.each do |opt| return true if alarm.public_send(opt) != desired_options[opt] end unless (Set.new(alarm.dimensions.map(&:to_h)) ^ Set.new(desired_options[:dimensions])).empty? return true end %i{insufficient_data_actions ok_actions alarm_actions}.each do |opt| unless (Set.new(alarm.public_send(opt)) ^ Set.new(desired_options[opt])).empty? return true end end false end