class Terraforming::Resource::CloudWatchAlarm

Public Class Methods

new(client) click to toggle source
# File lib/terraforming/resource/cloud_watch_alarm.rb, line 14
def initialize(client)
  @client = client
end
tf(client: Aws::CloudWatch::Client.new) click to toggle source
# File lib/terraforming/resource/cloud_watch_alarm.rb, line 6
def self.tf(client: Aws::CloudWatch::Client.new)
  self.new(client).tf
end
tfstate(client: Aws::CloudWatch::Client.new) click to toggle source
# File lib/terraforming/resource/cloud_watch_alarm.rb, line 10
def self.tfstate(client: Aws::CloudWatch::Client.new)
  self.new(client).tfstate
end

Public Instance Methods

tf() click to toggle source
# File lib/terraforming/resource/cloud_watch_alarm.rb, line 18
def tf
  apply_template(@client, "tf/cloud_watch_alarm")
end
tfstate() click to toggle source
# File lib/terraforming/resource/cloud_watch_alarm.rb, line 22
def tfstate
  alarms.inject({}) do |resources, alarm|
    resources["aws_cloudwatch_metric_alarm.#{module_name_of(alarm)}"] = {
      "type" => "aws_cloudwatch_metric_alarm",
      "primary" => {
        "id" => alarm.alarm_name,
        "attributes" => alarm_attributes(alarm)
      }
    }
    resources
  end
end

Private Instance Methods

add_checksummed_attributes(attributes, alarm) click to toggle source
# File lib/terraforming/resource/cloud_watch_alarm.rb, line 67
def add_checksummed_attributes(attributes, alarm)
  %w(insufficient_data_actions alarm_actions ok_actions dimensions).each do |action|
    attribute = alarm.send(action.to_sym)
    attributes["#{action}.#"] = attribute.size.to_s
    attribute.each do |attr|
      if attr.is_a? String
        checksum = Zlib.crc32(attr)
        value = attr
      else
        checksum = attr.name
        value = attr.value
      end
      attributes["#{action}.#{checksum}"] = value
    end
  end

  attributes
end
alarm_attributes(alarm) click to toggle source
# File lib/terraforming/resource/cloud_watch_alarm.rb, line 37
def alarm_attributes(alarm)
  attributes = {
    "actions_enabled" => alarm.actions_enabled.to_s,
    "alarm_description" => sanitize(alarm.alarm_description),
    "alarm_name" => alarm.alarm_name,
    "comparison_operator" => alarm.comparison_operator,
    "evaluation_periods" => alarm.evaluation_periods.to_s,
    "id" => alarm.alarm_name,
    "metric_name" => alarm.metric_name,
    "namespace" => alarm.namespace,
    "period" => alarm.period.to_s,
    "statistic" => alarm.statistic,
    "threshold" => alarm.threshold.to_s,
    "unit" => sanitize(alarm.unit)
  }
  add_checksummed_attributes(attributes, alarm)
end
alarms() click to toggle source
# File lib/terraforming/resource/cloud_watch_alarm.rb, line 55
def alarms
  @client.describe_alarms.map(&:metric_alarms).flatten
end
module_name_of(alarm) click to toggle source
# File lib/terraforming/resource/cloud_watch_alarm.rb, line 59
def module_name_of(alarm)
  normalize_module_name(alarm.alarm_name)
end
sanitize(argument) click to toggle source
# File lib/terraforming/resource/cloud_watch_alarm.rb, line 63
def sanitize(argument)
  argument.nil? ? "" : argument
end