whenever-elasticbeanstalk-hd 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3fbdd100e3589b70a9bd2af22fa829b8d5570d7a
4
+ data.tar.gz: c2f010f0c54ac8bd4cc8cec5533d77d2660d93d1
5
+ SHA512:
6
+ metadata.gz: b114602133283cc2e4c3e09e1e6094afb07db79c757196c4a74842287e61f87113e09b9bab904eeaaa1c10898e21365bb8a4aa3999bab7a0f43ea7729fb5d77d
7
+ data.tar.gz: b5a6d71c2cb000eba993bf5d42094145803430c722b3eac6f4f24ec94e106b602452aa750dee85a470548306538c1baa698ab4ea9049cf6f3cf27c23698c22b0
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in whenever-elasticbeanstalk.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Chad McGimpsey
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,107 @@
1
+ # Whenever::Elasticbeanstalk
2
+
3
+ Whenever-elasticbeanstalk is an extension gem to [Whenever](https://github.com/javan/whenever) that automatically ensures that one instance in an AWS Elastic Beanstalk environment is set as leader. This allows you to run cron jobs on all instances, or just on the leader. This is required since Elastic Beanstalk may start or stop any instance as it scales up or down.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'whenever-elasticbeanstalk'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+
21
+ ```bash
22
+ $ gem install whenever-elasticbeanstalk
23
+ ```
24
+
25
+ ## Getting started
26
+ ```bash
27
+ $ cd /apps/my-great-project
28
+ $ wheneverize-eb .
29
+ ```
30
+
31
+ This will create an initial `config/schedule.rb` file for you with the `ensure_leader` job set to run every minute. It will also create a `.ebextensions/cron.config` file that will automatically choose a leader on environment initialization, and start up Whenever with the correct `leader` role. Lastly, it creates the `config/whenever-elasticbeanstalk.yml` file that will contain your AWS credentials for retrieving your environment information.
32
+
33
+ ### Manually updating schedule
34
+
35
+ If you are already using Whenever, running `wheneverize-eb .` won't overwrite your `config/schedule.rb` file. You'll need to add the following lines in order for your environment to always have one leader.
36
+
37
+ ```ruby
38
+ every 1.minute do
39
+ command "cd /var/app/current && bundle exec ensure_one_cron_leader"
40
+ end
41
+ ```
42
+
43
+ ### Create AWS IAM user
44
+
45
+ In order for the scripts to work, you need to supply AWS credentials for a user with access to EC2 instances and tags. It is recommended to create a new user with limited access.
46
+
47
+ Example policy:
48
+ ```json
49
+ {
50
+ "Version": "2012-10-17",
51
+ "Statement": [
52
+ {
53
+ "Action": [
54
+ "ec2:DescribeInstanceAttribute",
55
+ "ec2:DescribeInstanceStatus",
56
+ "ec2:DescribeInstances",
57
+ "ec2:DescribeTags",
58
+ "ec2:CreateTags"
59
+ ],
60
+ "Resource": [
61
+ "*"
62
+ ],
63
+ "Effect": "Allow"
64
+ }
65
+ ]
66
+ }
67
+ ```
68
+
69
+ Then add the credentials to your `config/whenever-elasticbeanstalk.yml` file.
70
+ ```yaml
71
+ staging:
72
+ access_key_id: 'your access key'
73
+ secret_access_key: 'your secret access key'
74
+ # If you are not using the default us-east-1 region, specify it here
75
+ # For available regions see: http://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region
76
+ # region: 'eu-west-1'
77
+ ```
78
+
79
+ ## Usage
80
+
81
+ For `config/schedule.rb` usage, please see the documentation for the [Whenever gem](https://github.com/javan/whenever).
82
+
83
+ ### Run a task on only one instance
84
+
85
+ To run a task only on one instance, assign the task to the `leader` role.
86
+ ```ruby
87
+ every :day, :at => "12:30am", :roles => [:leader] do
88
+ runner "MyModel.task_to_run_nightly_only_on_one_instance"
89
+ end
90
+ ```
91
+
92
+ ### Run a task on all instances
93
+
94
+ To run a task on all instance, omit the `roles` option.
95
+ ```ruby
96
+ every 1.minute do
97
+ command "touch /opt/elasticbeanstalk/support/.cron_check"
98
+ end
99
+ ```
100
+
101
+ ## Contributing
102
+
103
+ 1. Fork it
104
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
105
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
106
+ 4. Push to the branch (`git push origin my-new-feature`)
107
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'optparse'
4
+ require 'rubygems'
5
+ gem 'aws-sdk'
6
+ require 'aws-sdk'
7
+
8
+ options = {}
9
+
10
+ optparse = OptionParser.new do |opts|
11
+ opts.banner = "Usage: #{File.basename($0)} [options]"
12
+
13
+ # Define the options, and what they do
14
+ options[:no_update] = false
15
+ opts.on( '--no-update', 'Do not update crontab after making leader' ) do
16
+ options[:no_update] = true
17
+ end
18
+
19
+ # This displays the help screen, all programs are
20
+ # assumed to have this option.
21
+ opts.on( '-h', '--help', 'Display this screen' ) do
22
+ puts opts
23
+ exit
24
+ end
25
+ end
26
+
27
+ optparse.parse!
28
+
29
+ ENVIRONMENT_NAME_FILE = "/var/app/support/env_name"
30
+ AWS_CREDENTIALS = YAML.load(ERB.new(File.new("config/whenever-elasticbeanstalk.yml").read).result)[ENV["RACK_ENV"]]
31
+
32
+ instance_id = if File.exists?("/var/app/support/instance_id")
33
+ File.read("/var/app/support/instance_id")
34
+ else
35
+ if id = `/opt/aws/bin/ec2-metadata -i | awk '{print $2}'`.strip
36
+ File.open("/var/app/support/instance_id", 'w') {|f| f.write(id) }
37
+ id
38
+ end
39
+ end
40
+
41
+ AWS.config(AWS_CREDENTIALS)
42
+ ec2 = AWS::EC2.new
43
+
44
+ environment_name = if File.exists?(ENVIRONMENT_NAME_FILE)
45
+ File.read(ENVIRONMENT_NAME_FILE)
46
+ else
47
+ env_name = ec2.instances[instance_id].tags["elasticbeanstalk:environment-name"]
48
+ File.open(ENVIRONMENT_NAME_FILE, 'w') {|f| f.write(env_name) }
49
+ env_name
50
+ end
51
+
52
+ leader_instances = ec2.instances.inject([]) do |m, i|
53
+ m << i.id if i.tags["elasticbeanstalk:environment-name"] == environment_name &&
54
+ i.status == :running &&
55
+ i.tags["leader"] == "true"
56
+ m
57
+ end
58
+
59
+ if leader_instances.count < 1
60
+ instance_id = `/opt/aws/bin/ec2-metadata -i | awk '{print $2}'`.strip
61
+ ec2.instances[instance_id].tags["leader"] = "true"
62
+ end
63
+
64
+ unless options[:no_update]
65
+ `bundle exec setup_cron`
66
+ end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'rubygems'
4
+ gem 'aws-sdk'
5
+ require 'aws-sdk'
6
+
7
+ ENVIRONMENT_NAME_FILE = "/var/app/support/env_name"
8
+ AWS_CREDENTIALS = YAML.load(ERB.new(File.new("config/whenever-elasticbeanstalk.yml").read).result)[ENV["RACK_ENV"]]
9
+
10
+ instance_id = if File.exists?("/var/app/support/instance_id")
11
+ File.read("/var/app/support/instance_id")
12
+ else
13
+ if id = `/opt/aws/bin/ec2-metadata -i | awk '{print $2}'`.strip
14
+ File.open("/var/app/support/instance_id", 'w') {|f| f.write(id) }
15
+ id
16
+ end
17
+ end
18
+
19
+ AWS.config(AWS_CREDENTIALS)
20
+ ec2 = AWS::EC2.new
21
+
22
+ environment_name = if File.exists?(ENVIRONMENT_NAME_FILE)
23
+ File.read(ENVIRONMENT_NAME_FILE)
24
+ else
25
+ env_name = ec2.instances[instance_id].tags["elasticbeanstalk:environment-name"]
26
+ File.open(ENVIRONMENT_NAME_FILE, 'w') {|f| f.write(env_name) }
27
+ env_name
28
+ end
29
+
30
+ leader_instances = ec2.instances.inject([]) do |m, i|
31
+ m << i.id if i.tags["elasticbeanstalk:environment-name"] == environment_name &&
32
+ i.status == :running &&
33
+ i.tags["leader"] == "true"
34
+ m
35
+ end
36
+
37
+ if leader_instances.count < 1
38
+ `bundle exec create_cron_leader`
39
+ elsif leader_instances.count > 1 && leader_instances.include?(instance_id)
40
+ `bundle exec remove_cron_leader`
41
+ end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby
2
+ require 'rubygems'
3
+ gem 'aws-sdk'
4
+
5
+ require 'aws-sdk'
6
+
7
+ ENVIRONMENT_NAME_FILE = "/var/app/support/env_name"
8
+ AWS_CREDENTIALS = YAML.load(ERB.new(File.new("config/whenever-elasticbeanstalk.yml").read).result)[ENV["RACK_ENV"]]
9
+
10
+ instance_id = if File.exists?("/var/app/support/instance_id")
11
+ File.read("/var/app/support/instance_id")
12
+ else
13
+ if id = `/opt/aws/bin/ec2-metadata -i | awk '{print $2}'`.strip
14
+ File.open("/var/app/support/instance_id", 'w') {|f| f.write(id) }
15
+ id
16
+ end
17
+ end
18
+
19
+ AWS.config(AWS_CREDENTIALS)
20
+ ec2 = AWS::EC2.new
21
+
22
+ environment_name = if File.exists?(ENVIRONMENT_NAME_FILE)
23
+ File.read(ENVIRONMENT_NAME_FILE)
24
+ else
25
+ env_name = ec2.instances[instance_id].tags["elasticbeanstalk:environment-name"]
26
+ File.open(ENVIRONMENT_NAME_FILE, 'w') {|f| f.write(env_name) }
27
+ env_name
28
+ end
29
+
30
+ leader_instances = ec2.instances.inject([]) do |m, i|
31
+ m << i.id if i.tags["elasticbeanstalk:environment-name"] == environment_name &&
32
+ i.status == :running &&
33
+ i.tags["leader"] == "true"
34
+ m
35
+ end
36
+
37
+ if leader_instances.count > 1 && leader_instances.include?(instance_id)
38
+ ec2.instances[instance_id].tags["leader"] = "false"
39
+ end
40
+
41
+ `bundle exec setup_cron`
data/bin/setup_cron ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/ruby
2
+ require 'rubygems'
3
+ gem 'aws-sdk'
4
+
5
+ require 'aws-sdk'
6
+
7
+ environment = ENV["RACK_ENV"]
8
+ AWS_CREDENTIALS = YAML.load(ERB.new(File.new("config/whenever-elasticbeanstalk.yml").read).result)[environment]
9
+
10
+ instance_id = if File.exists?("/var/app/support/instance_id")
11
+ File.read("/var/app/support/instance_id")
12
+ else
13
+ if id = `/opt/aws/bin/ec2-metadata -i | awk '{print $2}'`.strip
14
+ File.open("/var/app/support/instance_id", 'w') {|f| f.write(id) }
15
+ id
16
+ end
17
+ end
18
+
19
+ AWS.config(AWS_CREDENTIALS)
20
+ ec2 = AWS::EC2.new
21
+
22
+ if ec2.instances[instance_id].tags["leader"] == "true"
23
+ `bundle exec whenever --roles leader --set 'environment=#{environment}&path=/var/app/current' --update-crontab`
24
+ else
25
+ `bundle exec whenever --roles non-leader --set 'environment=#{environment}&path=/var/app/current' --update-crontab`
26
+ end
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # This file is based heavily on Whenever's 'wheneverize' command
4
+
5
+ require 'optparse'
6
+ require 'fileutils'
7
+
8
+ OptionParser.new do |opts|
9
+ opts.banner = "Usage: #{File.basename($0)} [path]"
10
+
11
+ begin
12
+ opts.parse!(ARGV)
13
+ rescue OptionParser::ParseError => e
14
+ warn e.message
15
+ puts opts
16
+ exit 1
17
+ end
18
+ end
19
+
20
+ unless ARGV.empty?
21
+ if !File.exists?(ARGV.first)
22
+ abort "`#{ARGV.first}' does not exist."
23
+ elsif !File.directory?(ARGV.first)
24
+ abort "`#{ARGV.first}' is not a directory."
25
+ elsif ARGV.length > 1
26
+ abort "Too many arguments; please specify only the directory to wheneverize."
27
+ end
28
+ end
29
+
30
+ base = ARGV.empty? ? '.' : ARGV.shift
31
+
32
+ schedule_content = <<-FILE
33
+ # Use this file to easily define all of your cron jobs.
34
+ #
35
+ # It's helpful, but not entirely necessary to understand cron before proceeding.
36
+ # http://en.wikipedia.org/wiki/Cron
37
+
38
+ # Example:
39
+ #
40
+ # set :output, "/path/to/my/cron_log.log"
41
+ #
42
+ # every 2.hours do
43
+ # command "/usr/bin/some_great_command"
44
+ # runner "MyModel.some_method"
45
+ # rake "some:great:rake:task"
46
+ # end
47
+ #
48
+ # every 4.days do
49
+ # runner "AnotherModel.prune_old_records"
50
+ # end
51
+
52
+ # Learn more: http://github.com/javan/whenever
53
+
54
+ every 1.minute do
55
+ command "cd /var/app/current && bundle exec ensure_one_cron_leader"
56
+ end
57
+ FILE
58
+
59
+ file = 'config/schedule.rb'
60
+ file = File.join(base, file)
61
+ if File.exists?(file)
62
+ warn "[skip] `#{file}' already exists"
63
+ elsif File.exists?(file.downcase)
64
+ warn "[skip] `#{file.downcase}' exists, which could conflict with `#{file}'"
65
+ elsif !File.exists?(File.dirname(file))
66
+ warn "[skip] directory `#{File.dirname(file)}' does not exist"
67
+ else
68
+ puts "[add] writing `#{file}'"
69
+ File.open(file, "w") { |f| f.write(schedule_content) }
70
+ end
71
+
72
+
73
+ eb_config_content = <<-FILE
74
+ files:
75
+ /opt/elasticbeanstalk/hooks/appdeploy/post/10_reload_cron.sh:
76
+ mode: "00700"
77
+ owner: root
78
+ group: root
79
+ content: |
80
+ #!/usr/bin/env bash
81
+ . /opt/elasticbeanstalk/support/envvars
82
+ cd $EB_CONFIG_APP_CURRENT
83
+ bundle exec setup_cron
84
+
85
+ container_commands:
86
+ cron_01_set_leader:
87
+ test: test ! -f /opt/elasticbeanstalk/support/.cron-setup-complete
88
+ leader_only: true
89
+ cwd: /var/app/ondeck
90
+ command: bundle exec create_cron_leader --no-update
91
+ cron_02_write_cron_setup_complete_file:
92
+ cwd: /opt/elasticbeanstalk/support
93
+ command: touch .cron-setup-complete
94
+ FILE
95
+
96
+ file = '.ebextensions/cron.config'
97
+ file = File.join(base, file)
98
+ if File.exists?(file)
99
+ warn "[skip] `#{file}' already exists"
100
+ elsif File.exists?(file.downcase)
101
+ warn "[skip] `#{file.downcase}' exists, which could conflict with `#{file}'"
102
+ elsif !File.exists?(File.dirname(file))
103
+ warn "[skip] directory `#{File.dirname(file)}' does not exist"
104
+ else
105
+ puts "[add] writing `#{file}'"
106
+ File.open(file, "w") { |f| f.write(eb_config_content) }
107
+ end
108
+
109
+
110
+ aws_credentials_content = <<-FILE
111
+ staging:
112
+ access_key_id: ''
113
+ secret_access_key: ''
114
+ production:
115
+ access_key_id: ''
116
+ secret_access_key: ''
117
+ FILE
118
+
119
+ file = 'config/whenever-elasticbeanstalk.yml'
120
+ file = File.join(base, file)
121
+ if File.exists?(file)
122
+ warn "[skip] `#{file}' already exists"
123
+ elsif File.exists?(file.downcase)
124
+ warn "[skip] `#{file.downcase}' exists, which could conflict with `#{file}'"
125
+ elsif !File.exists?(File.dirname(file))
126
+ warn "[skip] directory `#{File.dirname(file)}' does not exist"
127
+ else
128
+ puts "[add] writing `#{file}'"
129
+ File.open(file, "w") { |f| f.write(aws_credentials_content) }
130
+ end
131
+
132
+ puts "[done] wheneverized for Elastic Beanstalk!"
@@ -0,0 +1,7 @@
1
+ require "whenever-elasticbeanstalk/version"
2
+
3
+ module Whenever
4
+ module Elasticbeanstalk
5
+ # Your code goes here...
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Whenever
2
+ module Elasticbeanstalk
3
+ VERSION = "1.1.4"
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'whenever-elasticbeanstalk/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "whenever-elasticbeanstalk-hd"
8
+ gem.version = Whenever::Elasticbeanstalk::VERSION
9
+ gem.platform = Gem::Platform::RUBY
10
+ gem.authors = ["Chad McGimpsey"]
11
+ gem.email = ["chad.mcgimpsey@gmail.com"]
12
+ gem.description = %q{Use Whenever on AWS Elastic Beanstalk}
13
+ gem.summary = %q{Allows you to run cron jobs easily on one or all AWS Elastic Beanstalk instances.}
14
+ gem.homepage = "https://github.com/dignoe/whenever-elasticbeanstalk"
15
+ gem.license = 'MIT'
16
+
17
+ gem.add_dependency('whenever')
18
+ gem.add_dependency('aws-sdk')
19
+
20
+ gem.files = `git ls-files`.split($/)
21
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
23
+ gem.require_paths = ["lib"]
24
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: whenever-elasticbeanstalk-hd
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.4
5
+ platform: ruby
6
+ authors:
7
+ - Chad McGimpsey
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: whenever
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: aws-sdk
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Use Whenever on AWS Elastic Beanstalk
42
+ email:
43
+ - chad.mcgimpsey@gmail.com
44
+ executables:
45
+ - create_cron_leader
46
+ - ensure_one_cron_leader
47
+ - remove_cron_leader
48
+ - setup_cron
49
+ - wheneverize-eb
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - LICENSE.txt
56
+ - README.md
57
+ - Rakefile
58
+ - bin/create_cron_leader
59
+ - bin/ensure_one_cron_leader
60
+ - bin/remove_cron_leader
61
+ - bin/setup_cron
62
+ - bin/wheneverize-eb
63
+ - lib/whenever-elasticbeanstalk.rb
64
+ - lib/whenever-elasticbeanstalk/version.rb
65
+ - whenever-elasticbeanstalk.gemspec
66
+ homepage: https://github.com/dignoe/whenever-elasticbeanstalk
67
+ licenses:
68
+ - MIT
69
+ metadata: {}
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 2.2.1
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: Allows you to run cron jobs easily on one or all AWS Elastic Beanstalk instances.
90
+ test_files: []