seedee 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: dcbde532cffe4c825a527ed4c6722936df99e537
4
+ data.tar.gz: aedd6444ab9352f4fbf8d11de27034a2389df31b
5
+ SHA512:
6
+ metadata.gz: 40654dc427b5827f53721a9c4d6f8a64815b019c08dec5214344c46661b4e3cde26e993d6ba6ea47ecb9427353e9668c3db9d12d30472cb253d9a8dd58a4842f
7
+ data.tar.gz: 45b460db95556eadbe599ed0e1d89b7ee8af17864e44d1eb4cffef505cfeb6243291fdfbe790222bed4abd7733159ba729985ca0f85b349821204d0e62574b9d
@@ -0,0 +1,51 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+ .rbenv-vars
16
+
17
+ ## Specific to RubyMotion:
18
+ .dat*
19
+ .repl_history
20
+ build/
21
+ *.bridgesupport
22
+ build-iPhoneOS/
23
+ build-iPhoneSimulator/
24
+
25
+ ## Specific to RubyMotion (use of CocoaPods):
26
+ #
27
+ # We recommend against adding the Pods directory to your .gitignore. However
28
+ # you should judge for yourself, the pros and cons are mentioned at:
29
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
30
+ #
31
+ # vendor/Pods/
32
+
33
+ ## Documentation cache and generated files:
34
+ /.yardoc/
35
+ /_yardoc/
36
+ /doc/
37
+ /rdoc/
38
+
39
+ ## Environment normalization:
40
+ /.bundle/
41
+ /vendor/bundle
42
+ /lib/bundler/man/
43
+
44
+ # for a library or gem, you might want to ignore these files since the code is
45
+ # intended to run in multiple environments; otherwise, check them in:
46
+ # Gemfile.lock
47
+ # .ruby-version
48
+ # .ruby-gemset
49
+
50
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
51
+ .rvmrc
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.1
5
+ before_install: gem install bundler -v 1.16.0
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in seedee.gemspec
6
+ gemspec
@@ -0,0 +1,203 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ seedee (0.1.0)
5
+ activesupport (~> 5.2.0)
6
+ chef (~> 13.6.4)
7
+ droplet_kit (~> 2.3.0)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ activesupport (5.2.0)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (>= 0.7, < 2)
15
+ minitest (~> 5.1)
16
+ tzinfo (~> 1.1)
17
+ addressable (2.5.2)
18
+ public_suffix (>= 2.0.2, < 4.0)
19
+ awesome_print (1.8.0)
20
+ axiom-types (0.1.1)
21
+ descendants_tracker (~> 0.0.4)
22
+ ice_nine (~> 0.11.0)
23
+ thread_safe (~> 0.3, >= 0.3.1)
24
+ builder (3.2.3)
25
+ byebug (10.0.2)
26
+ chef (13.6.4)
27
+ addressable
28
+ bundler (>= 1.10)
29
+ chef-config (= 13.6.4)
30
+ chef-zero (>= 13.0)
31
+ diff-lcs (~> 1.2, >= 1.2.4)
32
+ erubis (~> 2.7)
33
+ ffi-yajl (~> 2.2)
34
+ highline (~> 1.6, >= 1.6.9)
35
+ iniparse (~> 1.4)
36
+ iso8601 (~> 0.9.1)
37
+ mixlib-archive (~> 0.4)
38
+ mixlib-authentication (~> 1.4)
39
+ mixlib-cli (~> 1.7)
40
+ mixlib-log (~> 1.3)
41
+ mixlib-shellout (~> 2.0)
42
+ net-sftp (~> 2.1, >= 2.1.2)
43
+ net-ssh (>= 2.9, < 5.0)
44
+ net-ssh-multi (~> 1.2, >= 1.2.1)
45
+ ohai (~> 13.0)
46
+ plist (~> 3.2)
47
+ proxifier (~> 1.0)
48
+ rspec-core (~> 3.5)
49
+ rspec-expectations (~> 3.5)
50
+ rspec-mocks (~> 3.5)
51
+ rspec_junit_formatter (~> 0.2.0)
52
+ serverspec (~> 2.7)
53
+ specinfra (~> 2.10)
54
+ syslog-logger (~> 1.6)
55
+ uuidtools (~> 2.1.5)
56
+ chef-config (13.6.4)
57
+ addressable
58
+ fuzzyurl
59
+ mixlib-config (~> 2.0)
60
+ mixlib-shellout (~> 2.0)
61
+ chef-zero (13.1.0)
62
+ ffi-yajl (~> 2.2)
63
+ hashie (>= 2.0, < 4.0)
64
+ mixlib-log (~> 1.3)
65
+ rack (~> 2.0)
66
+ uuidtools (~> 2.1)
67
+ coderay (1.1.2)
68
+ coercible (1.0.0)
69
+ descendants_tracker (~> 0.0.1)
70
+ concurrent-ruby (1.0.5)
71
+ descendants_tracker (0.0.4)
72
+ thread_safe (~> 0.3, >= 0.3.1)
73
+ diff-lcs (1.3)
74
+ droplet_kit (2.3.0)
75
+ activesupport (> 3.0, < 6)
76
+ faraday (~> 0.9)
77
+ kartograph (~> 0.2.3)
78
+ resource_kit (~> 0.1.5)
79
+ virtus (~> 1.0.3)
80
+ equalizer (0.0.11)
81
+ erubis (2.7.0)
82
+ faraday (0.15.2)
83
+ multipart-post (>= 1.2, < 3)
84
+ ffi (1.9.25)
85
+ ffi-yajl (2.3.1)
86
+ libyajl2 (~> 1.2)
87
+ fuzzyurl (0.9.0)
88
+ hashie (3.5.7)
89
+ highline (1.7.10)
90
+ i18n (1.0.1)
91
+ concurrent-ruby (~> 1.0)
92
+ ice_nine (0.11.2)
93
+ iniparse (1.4.4)
94
+ ipaddress (0.8.3)
95
+ iso8601 (0.9.1)
96
+ kartograph (0.2.7)
97
+ libyajl2 (1.2.0)
98
+ method_source (0.9.0)
99
+ minitest (5.11.3)
100
+ mixlib-archive (0.4.8)
101
+ mixlib-log
102
+ mixlib-authentication (1.4.2)
103
+ mixlib-cli (1.7.0)
104
+ mixlib-config (2.2.8)
105
+ tomlrb
106
+ mixlib-log (1.7.1)
107
+ mixlib-shellout (2.3.2)
108
+ multi_json (1.13.1)
109
+ multipart-post (2.0.0)
110
+ net-scp (1.2.1)
111
+ net-ssh (>= 2.6.5)
112
+ net-sftp (2.1.2)
113
+ net-ssh (>= 2.6.5)
114
+ net-ssh (4.2.0)
115
+ net-ssh-gateway (2.0.0)
116
+ net-ssh (>= 4.0.0)
117
+ net-ssh-multi (1.2.1)
118
+ net-ssh (>= 2.6.5)
119
+ net-ssh-gateway (>= 1.2.0)
120
+ net-telnet (0.1.1)
121
+ ohai (13.9.2)
122
+ chef-config (>= 12.5.0.alpha.1, < 14)
123
+ ffi (~> 1.9)
124
+ ffi-yajl (~> 2.2)
125
+ ipaddress
126
+ mixlib-cli
127
+ mixlib-config (~> 2.0)
128
+ mixlib-log (>= 1.7.1, < 2.0)
129
+ mixlib-shellout (~> 2.0)
130
+ plist (~> 3.1)
131
+ systemu (~> 2.6.4)
132
+ wmi-lite (~> 1.0)
133
+ plist (3.4.0)
134
+ proxifier (1.0.3)
135
+ pry (0.11.3)
136
+ coderay (~> 1.1.0)
137
+ method_source (~> 0.9.0)
138
+ pry-byebug (3.6.0)
139
+ byebug (~> 10.0)
140
+ pry (~> 0.10)
141
+ public_suffix (3.0.2)
142
+ rack (2.0.5)
143
+ rake (12.3.1)
144
+ resource_kit (0.1.7)
145
+ addressable (>= 2.3.6, < 3.0.0)
146
+ rspec (3.7.0)
147
+ rspec-core (~> 3.7.0)
148
+ rspec-expectations (~> 3.7.0)
149
+ rspec-mocks (~> 3.7.0)
150
+ rspec-core (3.7.1)
151
+ rspec-support (~> 3.7.0)
152
+ rspec-expectations (3.7.0)
153
+ diff-lcs (>= 1.2.0, < 2.0)
154
+ rspec-support (~> 3.7.0)
155
+ rspec-its (1.2.0)
156
+ rspec-core (>= 3.0.0)
157
+ rspec-expectations (>= 3.0.0)
158
+ rspec-mocks (3.7.0)
159
+ diff-lcs (>= 1.2.0, < 2.0)
160
+ rspec-support (~> 3.7.0)
161
+ rspec-support (3.7.1)
162
+ rspec_junit_formatter (0.2.3)
163
+ builder (< 4)
164
+ rspec-core (>= 2, < 4, != 2.12.0)
165
+ serverspec (2.41.3)
166
+ multi_json
167
+ rspec (~> 3.0)
168
+ rspec-its
169
+ specinfra (~> 2.72)
170
+ sfl (2.3)
171
+ specinfra (2.73.3)
172
+ net-scp
173
+ net-ssh (>= 2.7, < 5.0)
174
+ net-telnet
175
+ sfl
176
+ syslog-logger (1.6.8)
177
+ systemu (2.6.5)
178
+ thread_safe (0.3.6)
179
+ tomlrb (1.2.7)
180
+ tzinfo (1.2.5)
181
+ thread_safe (~> 0.1)
182
+ uuidtools (2.1.5)
183
+ virtus (1.0.5)
184
+ axiom-types (~> 0.1)
185
+ coercible (~> 1.0)
186
+ descendants_tracker (~> 0.0, >= 0.0.3)
187
+ equalizer (~> 0.0, >= 0.0.9)
188
+ wmi-lite (1.0.0)
189
+
190
+ PLATFORMS
191
+ ruby
192
+
193
+ DEPENDENCIES
194
+ awesome_print (~> 1.8.0)
195
+ bundler (~> 1.16)
196
+ pry (~> 0.11.3)
197
+ pry-byebug (~> 3.6)
198
+ rake (~> 12.0)
199
+ rspec (~> 3.0)
200
+ seedee!
201
+
202
+ BUNDLED WITH
203
+ 1.16.0
@@ -0,0 +1,43 @@
1
+ # Seedee
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/seedee`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'seedee'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install seedee
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/seedee. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
36
+
37
+ ## License
38
+
39
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
40
+
41
+ ## Code of Conduct
42
+
43
+ Everyone interacting in the Seedee project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/seedee/blob/master/CODE_OF_CONDUCT.md).
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'seedee'
5
+ require 'pry'
6
+
7
+ Pry.start
8
+ # Seedee::Farm.new.provision_client_node
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'seedee/version'
4
+ require 'active_support/all'
5
+
6
+ # Top-level module
7
+ module Seedee
8
+ ROOT = File.expand_path('../..', __FILE__)
9
+
10
+ autoload :Farm, 'seedee/farm'
11
+ autoload :DigitalOcean, 'seedee/digital_ocean'
12
+ autoload :Chef, 'seedee/chef'
13
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seedee
4
+ # Talk to Chef Server
5
+ class Chef
6
+ def bootstrap(droplet, node_name, recipes)
7
+ run_list = "recipe[#{Array(recipes).join(' ')}]"
8
+
9
+ command = <<~COMMAND
10
+ #{File.join('knife')} bootstrap #{droplet.public_ip} \
11
+ --ssh-user #{ssh_user} \
12
+ --sudo \
13
+ --node-name #{node_name.to_s.strip} \
14
+ --run-list '#{run_list}' \
15
+ --ssh-identity-file #{ssh_identity_file} \
16
+ --yes
17
+ COMMAND
18
+ # --config #{chef_configuration_file} \
19
+
20
+ system(command)
21
+ end
22
+
23
+ private
24
+
25
+ def ssh_user
26
+ 'root'
27
+ end
28
+
29
+ def ssh_identity_file
30
+ File.join(
31
+ travis_build_dir,
32
+ 'secrets',
33
+ 'ssh_keys',
34
+ 'digital_ocean_rsa'
35
+ )
36
+ end
37
+
38
+ def chef_configuration_file
39
+ File.join(
40
+ travis_build_dir,
41
+ 'secrets',
42
+ 'chef',
43
+ 'knife.rb'
44
+ )
45
+ end
46
+
47
+ def travis_build_dir
48
+ ENV['TRAVIS_BUILD_DIR'] || File.join('~', 'work')
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'seedee/version'
4
+ require 'droplet_kit'
5
+
6
+ module Seedee
7
+ # Talk to Digital Ocean
8
+ class DigitalOcean
9
+ ACCESS_TOKEN = ENV['DIGITAL_OCEAN_TOKEN']
10
+ TRAVIS_BUILD_DIR = ENV['TRAVIS_BUILD_DIR']
11
+
12
+ def new_droplet(name)
13
+ user_data = File.read(File.join(Seedee::ROOT, 'modify-hosts'))
14
+ droplet = DropletKit::Droplet.new(
15
+ name: name.to_s.strip,
16
+ region: 'tor1',
17
+ image: 'ubuntu-16-04-x64',
18
+ size: 's-1vcpu-1gb',
19
+ user_data: user_data,
20
+ monitoring: true,
21
+ ssh_keys: Array(ssh_keys)
22
+ )
23
+
24
+ await_active_droplet client.droplets.create(droplet)
25
+ end
26
+
27
+ def destroy_droplet(id)
28
+ client.droplets.delete(id: id.to_s)
29
+ rescue StandardError
30
+ puts "error deleting droplet with id = '#{id}'"
31
+ end
32
+
33
+ def await_active_droplet(droplet)
34
+ client.droplets.find(id: droplet.id).tap do |result|
35
+ if result.status != 'active'
36
+ sleep(1)
37
+ return await_active_droplet(droplet)
38
+ end
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def client
45
+ @client ||= DropletKit::Client.new(access_token: ACCESS_TOKEN)
46
+ end
47
+
48
+ def ssh_keys
49
+ [15_237_447]
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Seedee
6
+ # The servers in the Digital Ocean farm
7
+ class Farm
8
+ def provision_client_node
9
+ name = "client-#{SecureRandom.uuid}"
10
+
11
+ puts "Provisioning node #{name}"
12
+ droplet = cloud_provider.new_droplet(name)
13
+
14
+ # wait 20 seconds for droplet to be available
15
+ sleep(20)
16
+ bootstrap(name, droplet)
17
+ end
18
+
19
+ private
20
+
21
+ def bootstrap(name, droplet)
22
+ puts "Boostraping node #{name} with ip #{droplet.public_ip} " \
23
+ "having droplet attributes #{droplet.as_json}"
24
+
25
+ result = provisioner.bootstrap(droplet, name, 'transit.tips::client')
26
+ raise 'knife bootstrap failed to execute' if result.nil?
27
+ raise 'knife bootstrap returned 1' if result == false
28
+ rescue => exception
29
+ puts exception
30
+ cloud_provider.destroy_droplet(droplet.id)
31
+ end
32
+
33
+ def cloud_provider
34
+ @cloud_provider ||= DigitalOcean.new
35
+ end
36
+
37
+ def provisioner
38
+ @provisioner ||= Chef.new
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seedee
4
+ VERSION = '0.1.0'.freeze
5
+ end
@@ -0,0 +1,4 @@
1
+ #cloud-config
2
+
3
+ runcmd:
4
+ - echo '138.197.155.252 chef-server' >> /etc/hosts
@@ -0,0 +1,33 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'seedee/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'seedee'
7
+ spec.version = Seedee::VERSION
8
+ spec.authors = ['Dan Jakob Ofer']
9
+ spec.email = ['dan@ofer.to']
10
+
11
+ spec.summary = 'Continuous Deployment to DigitalOcean using Chef'
12
+ spec.description = 'Continuous Deployment to DigitalOcean using Chef for Transit.Tips'
13
+ spec.homepage = 'https://transit.tips'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = 'exe'
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_development_dependency 'bundler', '~> 1.16'
24
+ spec.add_development_dependency 'rake', '~> 12.0'
25
+ spec.add_development_dependency 'rspec', '~> 3.0'
26
+ spec.add_development_dependency 'pry-byebug', '~> 3.6'
27
+ spec.add_development_dependency 'pry', '~> 0.11.3'
28
+ spec.add_development_dependency 'awesome_print', '~> 1.8.0'
29
+
30
+ spec.add_dependency 'droplet_kit', '~> 2.3.0'
31
+ spec.add_dependency 'activesupport', '~> 5.2.0'
32
+ spec.add_dependency 'chef', '~> 13.6.4'
33
+ end
metadata ADDED
@@ -0,0 +1,186 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: seedee
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Dan Jakob Ofer
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-07-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry-byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.6'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.11.3
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.11.3
83
+ - !ruby/object:Gem::Dependency
84
+ name: awesome_print
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.8.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.8.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: droplet_kit
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.3.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 2.3.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: activesupport
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 5.2.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 5.2.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: chef
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 13.6.4
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 13.6.4
139
+ description: Continuous Deployment to DigitalOcean using Chef for Transit.Tips
140
+ email:
141
+ - dan@ofer.to
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - ".gitignore"
147
+ - ".rspec"
148
+ - ".travis.yml"
149
+ - Gemfile
150
+ - Gemfile.lock
151
+ - README.md
152
+ - Rakefile
153
+ - bin/console
154
+ - bin/setup
155
+ - lib/seedee.rb
156
+ - lib/seedee/chef.rb
157
+ - lib/seedee/digital_ocean.rb
158
+ - lib/seedee/farm.rb
159
+ - lib/seedee/version.rb
160
+ - modify-hosts
161
+ - seedee.gemspec
162
+ homepage: https://transit.tips
163
+ licenses:
164
+ - MIT
165
+ metadata: {}
166
+ post_install_message:
167
+ rdoc_options: []
168
+ require_paths:
169
+ - lib
170
+ required_ruby_version: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ required_rubygems_version: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ requirements: []
181
+ rubyforge_project:
182
+ rubygems_version: 2.5.1
183
+ signing_key:
184
+ specification_version: 4
185
+ summary: Continuous Deployment to DigitalOcean using Chef
186
+ test_files: []