mirror of
https://github.com/inspec/inspec
synced 2024-11-27 23:20:33 +00:00
2955aabf7f
* Standardize requires in unit tests Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Standardize requires in resources Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Move AWS connection hook into non-resource library area Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Add an AWS resource mixin, pushing constructor out to it Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Push resource param name recognition into mixin Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Push exists predicate up to mixin Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Rename base.rb to be resource_mixin for clarity Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Separate the backend from its factory, and push it out into a class mixin Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Push BackendFactory up into the resource mixin Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * De-linting Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Remove aws_conn require from LMF and CloudWatch Alarm filters Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Use resource mixin for Cloudwatch Alarm Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Rework LMF to use the resource mixin Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Rubocop. Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Remove SDK load from connection.rb; that happens in aws.rb now Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Mixin should default to allowing empty resource params Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com> * Update LMF to enforce params being required Signed-off-by: Clinton Wolfe <clintoncwolfe@gmail.com>
59 lines
1.8 KiB
Ruby
59 lines
1.8 KiB
Ruby
class AwsCloudwatchAlarm < Inspec.resource(1)
|
|
name 'aws_cloudwatch_alarm'
|
|
desc <<-EOD
|
|
# Look for a specific alarm
|
|
aws_cloudwatch_alarm(
|
|
metric: 'my-metric-name',
|
|
metric_namespace: 'my-metric-namespace',
|
|
) do
|
|
it { should exist }
|
|
end
|
|
EOD
|
|
|
|
include AwsResourceMixin
|
|
attr_reader :alarm_name, :metric_name, :metric_namespace, :alarm_actions
|
|
|
|
private
|
|
|
|
def validate_params(raw_params)
|
|
recognized_params = check_resource_param_names(
|
|
raw_params: raw_params,
|
|
allowed_params: [:metric_name, :metric_namespace],
|
|
)
|
|
validated_params = {}
|
|
# Currently you must specify exactly metric_name and metric_namespace
|
|
[:metric_name, :metric_namespace].each do |param|
|
|
raise ArgumentError, "Missing resource param #{param}" unless recognized_params.key?(param)
|
|
validated_params[param] = recognized_params.delete(param)
|
|
end
|
|
|
|
validated_params
|
|
end
|
|
|
|
def fetch_from_aws
|
|
aws_alarms = BackendFactory.create.describe_alarms_for_metric(
|
|
metric_name: @metric_name,
|
|
namespace: @metric_namespace,
|
|
)
|
|
if aws_alarms.metric_alarms.empty?
|
|
@exists = false
|
|
elsif aws_alarms.metric_alarms.count > 1
|
|
alarms = aws_alarms.metric_alarms.map(&:alarm_name)
|
|
raise 'More than one Cloudwatch Alarm was matched. Try using ' \
|
|
"more specific resource parameters. Alarms matched: #{alarms.join(', ')}"
|
|
else
|
|
@alarm_actions = aws_alarms.metric_alarms.first.alarm_actions
|
|
@alarm_name = aws_alarms.metric_alarms.first.alarm_name
|
|
@exists = true
|
|
end
|
|
end
|
|
|
|
class Backend
|
|
class AwsClientApi < Backend
|
|
BackendFactory.set_default_backend(self)
|
|
def describe_alarms_for_metric(criteria)
|
|
AWSConnection.new.cloudwatch_client.describe_alarms_for_metric(criteria)
|
|
end
|
|
end
|
|
end
|
|
end
|