module Jets::Job::Dsl module RuleEvent # Public: Creates CloudWatch Event Rule # # expression - The rate expression. # # Examples # # rate("10 minutes") # rate("10 minutes", description: "Hard job") # def rate(expression, props={}) schedule_job("rate(#{expression})", props) end # Public: Creates CloudWatch Event Rule # # expression - The cron expression. # # Examples # # cron("0 */12 * * ? *") # cron("0 */12 * * ? *", description: "Hard job") # def cron(expression, props={}) schedule_job("cron(#{expression})", props) end def schedule_job(expression, props={}) props = props.merge(ScheduleExpression: expression) rule_event(props) end def rule_event(props={}) # detail should all be lowercase: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html # source should also all be lowercase if props.key?(:detail) # :description should be lowercased. It's a convenience property, and belongs at a higher level description = props.key?(:description) ? props.delete(:description) : rule_description rule_props = { EventPattern: props, Description: description } else # if props.key?(:event_pattern) props[:Description] ||= rule_description rule_props = props end with_fresh_properties(multiple_resources: false) do associated_properties(rule_props) # TODO: consider getting rid of @associated_properties concept resource(events_rule_definition) # add associated resource immediately end end def rule_description self.rule_counter += 1 "#{self.name} event rule #{rule_counter}" end def events_rule_definition resource = Jets::Cfn::Resource::Events::Rule.new(associated_properties) resource.definition # returns a definition to be added by associated_resources end # Deprecated methods, will be removed in the future def events_rule(props) puts "DEPRECATED: events_rule. Instead use rule_event. The events_rule will be removed in the future. Pausing for 5 seconds".color(:yellow) puts caller[0] sleep 5 rule_event(props) end # Deprecated methods, will be removed in the future def event_pattern(props) puts "DEPRECATED: events_rule. Instead use rule_event. The events_rule will be removed in the future. Pausing for 5 seconds".color(:yellow) puts caller[0] sleep 5 rule_event(props) end end end