kontena-plugin-digitalocean 0.3.0 → 0.3.1.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +5 -4
- data/kontena-plugin-digitalocean.gemspec +1 -1
- data/lib/kontena/machine/digital_ocean/master_provisioner.rb +1 -10
- data/lib/kontena/machine/digital_ocean/node_provisioner.rb +1 -6
- data/lib/kontena/machine/digital_ocean/ssh_key_manager.rb +31 -0
- data/lib/kontena/machine/digital_ocean.rb +1 -0
- data/lib/kontena/plugin/digital_ocean/master/create_command.rb +6 -2
- data/lib/kontena/plugin/digital_ocean/master/terminate_command.rb +3 -0
- data/lib/kontena/plugin/digital_ocean/nodes/create_command.rb +7 -3
- data/lib/kontena/plugin/digital_ocean/nodes/restart_command.rb +3 -0
- data/lib/kontena/plugin/digital_ocean/nodes/terminate_command.rb +3 -0
- data/lib/kontena/plugin/digital_ocean/prompts.rb +56 -6
- data/lib/kontena/plugin/digital_ocean.rb +1 -1
- metadata +8 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 159d041998037905df8bfaf653d921910f8ba2df
|
|
4
|
+
data.tar.gz: b49274c2e74cace9384aa6c25fde76e6c19edb41
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 88ebcc12587efa3c1edbd14f249dc6e5a4b6dbe051eb6f5e7d27a6ca2bbcf81f8941e6928cc148e4be37eeaa4e059451bf83a2cc812fbcb8439765e6feb3f097
|
|
7
|
+
data.tar.gz: 4608d8bc37fb630b12f91316a05a704106fa89717d106a64ae912438978cbf94dddb18777dc2476892270a4adc3ea2ed10a4c4ee67fb5b812015667deb0974e8
|
data/.travis.yml
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
rvm:
|
|
3
|
-
- 2.
|
|
4
|
-
- 2.
|
|
5
|
-
- 2.
|
|
6
|
-
- 2.
|
|
3
|
+
- 2.1.10
|
|
4
|
+
- 2.2.6
|
|
5
|
+
- 2.3.3
|
|
6
|
+
- 2.4.1
|
|
7
7
|
env:
|
|
8
8
|
- secure: "HAJRG+iaNDuyOMlbYSsXNjA2jwTMQonYJ3fHhm4zDPmIMupNnM+Krx650rVqlMP2KpNIYg4BEWCaDobTU9HoOy0AApmPGc8gGHMCP6v3cSnoGHxmiFy8yB7szgltcBz27PLeJN+exxRCjWPk677jW7JaooyYVSD64dEgVUrFju7olWUrvR0a0hAfBfawXU6kiGgdLnIEtc4AK+mokN9J6fR2PJthuDirZNgDPtVPuBJNFErI9Rh200stcZDOE3F1QE80HyAbrsyfvN/9cosSYDhJS9G+awAw6S+BqeBFZTQlDkWqJgdGsaacasxAmB5bgpkFY5tuv8DdqksK4nXlvsGVurQOYyufuc0y7HllPFVBPkzETCyWaafzek9acfTriLKJIJ26sFYQpuGQlgmAT/KyKYqqzX1ZAk/qe+haT5dt19bXzCHQHWapnWIll11AU0F67TiastmfyaBhnO8d983rwyxIww+8n3AfGPJXZ2eEjw2Rr17yqPYIVtkRoy7ctvCVJTeC6nDGhCqgU5lfl59656fzmJaBI9nWkadK0hQY8WB/5sLJ72pnRZDBbv3xIddS+JnDqxQWheMaJ7Oz5MkbHzdmRo3EhuHGPYpsdPQoeMudqGXX6OTxkQcRbKqJOHDE58rQzz7cZPvY2fwYOkhCspjLWcUAytbaMDkrEVs="
|
|
9
9
|
cache: bundler
|
|
@@ -14,3 +14,4 @@ deploy:
|
|
|
14
14
|
gem: kontena-plugin-digitalocean
|
|
15
15
|
on:
|
|
16
16
|
tags: true
|
|
17
|
+
rvm: 2.4.1
|
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
|
18
18
|
spec.require_paths = ["lib"]
|
|
19
19
|
|
|
20
20
|
spec.add_runtime_dependency 'kontena-cli', '>= 1.0'
|
|
21
|
-
spec.add_runtime_dependency 'droplet_kit', '~> 2.
|
|
21
|
+
spec.add_runtime_dependency 'droplet_kit', '~> 2.2'
|
|
22
22
|
spec.add_runtime_dependency 'activesupport', '~> 4.0'
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.11"
|
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
|
@@ -18,11 +18,6 @@ module Kontena
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def run!(opts)
|
|
21
|
-
abort('Invalid ssh key') unless File.exists?(File.expand_path(opts[:ssh_key]))
|
|
22
|
-
|
|
23
|
-
ssh_key = ssh_key(File.read(File.expand_path(opts[:ssh_key])).strip)
|
|
24
|
-
abort('Ssh key does not exist in Digital Ocean') unless ssh_key
|
|
25
|
-
|
|
26
21
|
if opts[:ssl_cert]
|
|
27
22
|
abort('Invalid ssl cert') unless File.exists?(File.expand_path(opts[:ssl_cert]))
|
|
28
23
|
ssl_cert = File.read(File.expand_path(opts[:ssl_cert]))
|
|
@@ -45,7 +40,7 @@ module Kontena
|
|
|
45
40
|
size: opts[:size],
|
|
46
41
|
private_networking: true,
|
|
47
42
|
user_data: user_data(userdata_vars),
|
|
48
|
-
ssh_keys: [
|
|
43
|
+
ssh_keys: [opts[:ssh_key_id]],
|
|
49
44
|
tags: ['master']
|
|
50
45
|
)
|
|
51
46
|
|
|
@@ -89,10 +84,6 @@ module Kontena
|
|
|
89
84
|
erb(File.read(cloudinit_template), vars)
|
|
90
85
|
end
|
|
91
86
|
|
|
92
|
-
def ssh_key(public_key)
|
|
93
|
-
client.ssh_keys.all.find{|key| key.public_key == public_key}
|
|
94
|
-
end
|
|
95
|
-
|
|
96
87
|
def master_running?
|
|
97
88
|
http_client.get(path: '/').status == 200
|
|
98
89
|
rescue
|
|
@@ -19,11 +19,6 @@ module Kontena
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def run!(opts)
|
|
22
|
-
abort('Invalid ssh key') unless File.exists?(File.expand_path(opts[:ssh_key]))
|
|
23
|
-
|
|
24
|
-
ssh_key = ssh_key(File.read(File.expand_path(opts[:ssh_key])).strip)
|
|
25
|
-
abort('Ssh key does not exist in Digital Ocean') unless ssh_key
|
|
26
|
-
|
|
27
22
|
userdata_vars = {
|
|
28
23
|
version: opts[:version],
|
|
29
24
|
master_uri: opts[:master_uri],
|
|
@@ -39,7 +34,7 @@ module Kontena
|
|
|
39
34
|
size: opts[:size],
|
|
40
35
|
private_networking: true,
|
|
41
36
|
user_data: user_data(userdata_vars),
|
|
42
|
-
ssh_keys: [
|
|
37
|
+
ssh_keys: [opts[:ssh_key_id]],
|
|
43
38
|
tags: [opts[:grid]]
|
|
44
39
|
)
|
|
45
40
|
created = client.droplets.create(droplet)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Kontena
|
|
2
|
+
module Machine
|
|
3
|
+
module DigitalOcean
|
|
4
|
+
class SshKeyManager
|
|
5
|
+
|
|
6
|
+
attr_reader :client
|
|
7
|
+
|
|
8
|
+
# @param [String] token Digital Ocean API token
|
|
9
|
+
def initialize(token)
|
|
10
|
+
@client = DropletKit::Client.new(access_token: token)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def find_by_public_key(public_key)
|
|
14
|
+
list.find { |key| key.public_key == public_key }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def list
|
|
18
|
+
client.ssh_keys.all.to_a
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def create(public_key)
|
|
22
|
+
client.ssh_keys.create(DropletKit::SSHKey.new(public_key: public_key, name: public_key.split(/\s+/).last))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def find_or_create_by_public_key(public_key)
|
|
26
|
+
find_by_public_key(public_key) || create(public_key)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -10,7 +10,7 @@ module Kontena::Plugin::DigitalOcean::Master
|
|
|
10
10
|
option "--token", "TOKEN", "DigitalOcean API token", environment_variable: "DO_TOKEN"
|
|
11
11
|
option "--region", "REGION", "Region"
|
|
12
12
|
option "--size", "SIZE", "Droplet size"
|
|
13
|
-
option "--ssh-key", "SSH_KEY", "Path to ssh public key"
|
|
13
|
+
option "--ssh-key", "SSH_KEY", "Path to ssh public key"
|
|
14
14
|
option "--ssl-cert", "SSL CERT", "SSL certificate file"
|
|
15
15
|
option "--vault-secret", "VAULT_SECRET", "Secret key for Vault (optional)"
|
|
16
16
|
option "--vault-iv", "VAULT_IV", "Initialization vector for Vault (optional)"
|
|
@@ -19,17 +19,19 @@ module Kontena::Plugin::DigitalOcean::Master
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
def execute
|
|
22
|
+
suppress_warnings # until DO merges resource_kit pr #32
|
|
22
23
|
do_token = ask_do_token
|
|
23
24
|
|
|
24
25
|
require_relative '../../../machine/digital_ocean'
|
|
25
26
|
|
|
26
27
|
do_region = ask_droplet_region(do_token)
|
|
27
28
|
do_size = ask_droplet_size(do_token, do_region)
|
|
29
|
+
do_ssh_key_id = ask_ssh_key(do_token)
|
|
28
30
|
|
|
29
31
|
provisioner = provisioner(do_token)
|
|
30
32
|
provisioner.run!(
|
|
31
33
|
name: name,
|
|
32
|
-
|
|
34
|
+
ssh_key_id: do_ssh_key_id,
|
|
33
35
|
ssl_cert: ssl_cert,
|
|
34
36
|
size: do_size,
|
|
35
37
|
region: do_region,
|
|
@@ -39,6 +41,8 @@ module Kontena::Plugin::DigitalOcean::Master
|
|
|
39
41
|
initial_admin_code: SecureRandom.hex(16),
|
|
40
42
|
mongodb_uri: mongodb_uri
|
|
41
43
|
)
|
|
44
|
+
ensure
|
|
45
|
+
resume_warnings
|
|
42
46
|
end
|
|
43
47
|
|
|
44
48
|
# @param [String] token
|
|
@@ -9,12 +9,15 @@ module Kontena::Plugin::DigitalOcean::Master
|
|
|
9
9
|
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
|
10
10
|
|
|
11
11
|
def execute
|
|
12
|
+
suppress_warnings # until DO merges resource_kit pr #32
|
|
12
13
|
do_token = ask_do_token
|
|
13
14
|
confirm_command(name) unless forced?
|
|
14
15
|
|
|
15
16
|
require_relative '../../../machine/digital_ocean'
|
|
16
17
|
destroyer = destroyer(do_token)
|
|
17
18
|
destroyer.run!(name)
|
|
19
|
+
ensure
|
|
20
|
+
resume_warnings
|
|
18
21
|
end
|
|
19
22
|
|
|
20
23
|
# @param [String] token
|
|
@@ -9,13 +9,14 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
|
9
9
|
parameter "[NAME]", "Node name"
|
|
10
10
|
option "--token", "TOKEN", "DigitalOcean API token", environment_variable: 'DO_TOKEN'
|
|
11
11
|
option "--region", "REGION", "Region"
|
|
12
|
-
option "--ssh-key", "SSH_KEY", "Path to ssh public key"
|
|
12
|
+
option "--ssh-key", "SSH_KEY", "Path to ssh public key"
|
|
13
13
|
option "--size", "SIZE", "Droplet size"
|
|
14
14
|
option "--count", "COUNT", "How many droplets to create"
|
|
15
15
|
option "--version", "VERSION", "Define installed Kontena version", default: 'latest'
|
|
16
16
|
option "--channel", "CHANNEL", "Define CoreOS image channel"
|
|
17
17
|
|
|
18
18
|
def execute
|
|
19
|
+
suppress_warnings # until DO merges resource_kit pr #32
|
|
19
20
|
require_api_url
|
|
20
21
|
require_current_grid
|
|
21
22
|
|
|
@@ -27,6 +28,7 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
|
27
28
|
coreos_channel = self.channel || ask_channel
|
|
28
29
|
do_size = ask_droplet_size(do_token, do_region)
|
|
29
30
|
do_count = ask_droplet_count
|
|
31
|
+
do_ssh_key_id = ask_ssh_key(do_token)
|
|
30
32
|
|
|
31
33
|
grid = fetch_grid
|
|
32
34
|
provisioner = provisioner(client(require_token), do_token)
|
|
@@ -34,7 +36,7 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
|
34
36
|
master_uri: api_url,
|
|
35
37
|
grid_token: grid['token'],
|
|
36
38
|
grid: current_grid,
|
|
37
|
-
|
|
39
|
+
ssh_key_id: do_ssh_key_id,
|
|
38
40
|
name: name,
|
|
39
41
|
size: do_size,
|
|
40
42
|
count: do_count,
|
|
@@ -42,11 +44,13 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
|
42
44
|
version: version,
|
|
43
45
|
channel: coreos_channel
|
|
44
46
|
)
|
|
47
|
+
ensure
|
|
48
|
+
resume_warnings
|
|
45
49
|
end
|
|
46
50
|
|
|
47
51
|
def ask_droplet_count
|
|
48
52
|
if self.count.nil?
|
|
49
|
-
prompt.ask('How many droplets?:
|
|
53
|
+
prompt.ask('How many droplets?:', default: 1)
|
|
50
54
|
else
|
|
51
55
|
self.count
|
|
52
56
|
end
|
|
@@ -10,6 +10,7 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
|
10
10
|
option "--token", "TOKEN", "DigitalOcean API token", environment_variable: "DO_TOKEN"
|
|
11
11
|
|
|
12
12
|
def execute
|
|
13
|
+
suppress_warnings # until DO merges resource_kit pr #32
|
|
13
14
|
require_api_url
|
|
14
15
|
require_current_grid
|
|
15
16
|
do_token = ask_do_token
|
|
@@ -27,6 +28,8 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
|
27
28
|
else
|
|
28
29
|
exit_with_error "Cannot find droplet #{pastel.cyan(name)} in DigitalOcean"
|
|
29
30
|
end
|
|
31
|
+
ensure
|
|
32
|
+
resume_warnings
|
|
30
33
|
end
|
|
31
34
|
end
|
|
32
35
|
end
|
|
@@ -11,6 +11,7 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
|
11
11
|
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
|
12
12
|
|
|
13
13
|
def execute
|
|
14
|
+
suppress_warnings # until DO merges resource_kit pr #32
|
|
14
15
|
require_api_url
|
|
15
16
|
require_current_grid
|
|
16
17
|
token = require_token
|
|
@@ -22,6 +23,8 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
|
22
23
|
grid = client(require_token).get("grids/#{current_grid}")
|
|
23
24
|
destroyer = destroyer(client(token), do_token)
|
|
24
25
|
destroyer.run!(grid, node_name)
|
|
26
|
+
ensure
|
|
27
|
+
resume_warnings
|
|
25
28
|
end
|
|
26
29
|
|
|
27
30
|
# @param [Kontena::Client] client
|
|
@@ -1,7 +1,56 @@
|
|
|
1
1
|
module Kontena::Plugin::DigitalOcean::Prompts
|
|
2
|
+
|
|
3
|
+
# Until DO merges https://github.com/digitalocean/resource_kit/pull/32
|
|
4
|
+
def suppress_warnings
|
|
5
|
+
@original_verbosity = $VERBOSE
|
|
6
|
+
$VERBOSE = nil
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def resume_warnings
|
|
10
|
+
$VERBOSE = @original_verbosity
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def ask_ssh_key(do_token)
|
|
14
|
+
manager = Kontena::Machine::DigitalOcean::SshKeyManager.new(do_token)
|
|
15
|
+
|
|
16
|
+
if self.ssh_key
|
|
17
|
+
puts self.ssh_key.inspect
|
|
18
|
+
public_key = File.read(self.ssh_key).strip
|
|
19
|
+
else
|
|
20
|
+
keys = manager.list
|
|
21
|
+
key_id = :new
|
|
22
|
+
|
|
23
|
+
default_path = File.join(Dir.home, '.ssh', 'id_rsa.pub')
|
|
24
|
+
default = File.exist?(default_path) ? File.read(default_path).strip : nil
|
|
25
|
+
|
|
26
|
+
unless keys.empty?
|
|
27
|
+
key = prompt.select("Choose SSH key:") do |menu|
|
|
28
|
+
i = 1
|
|
29
|
+
keys.each do |item|
|
|
30
|
+
menu.choice "#{item.name} (#{item.fingerprint})" , item
|
|
31
|
+
menu.default i if item.public_key == default
|
|
32
|
+
i += 1
|
|
33
|
+
end
|
|
34
|
+
menu.choice "Create new SSH key", :new
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
if key == :new
|
|
39
|
+
|
|
40
|
+
public_key = prompt.ask('SSH public key: (enter an ssh key in OpenSSH format "ssh-xxx xxxxx key_name")', default: default) do |q|
|
|
41
|
+
q.validate /^ssh-rsa \S+ \S+$/
|
|
42
|
+
end
|
|
43
|
+
else
|
|
44
|
+
public_key = key.public_key
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
manager.find_or_create_by_public_key(public_key).id
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
2
51
|
def ask_do_token
|
|
3
52
|
if self.token.nil?
|
|
4
|
-
prompt.ask('DigitalOcean API token:
|
|
53
|
+
prompt.ask('DigitalOcean API token:', echo: false)
|
|
5
54
|
else
|
|
6
55
|
self.token
|
|
7
56
|
end
|
|
@@ -9,7 +58,7 @@ module Kontena::Plugin::DigitalOcean::Prompts
|
|
|
9
58
|
|
|
10
59
|
def ask_droplet_region(do_token)
|
|
11
60
|
if self.region.nil?
|
|
12
|
-
prompt.select("Choose a datacenter region:
|
|
61
|
+
prompt.select("Choose a datacenter region:") do |menu|
|
|
13
62
|
do_client = DropletKit::Client.new(access_token: do_token)
|
|
14
63
|
do_client.regions.all.sort_by{|r| r.slug }.each{ |region|
|
|
15
64
|
menu.choice region.name, region.slug
|
|
@@ -22,12 +71,13 @@ module Kontena::Plugin::DigitalOcean::Prompts
|
|
|
22
71
|
|
|
23
72
|
def ask_droplet_size(do_token, do_region)
|
|
24
73
|
if self.size.nil?
|
|
25
|
-
prompt.select("Choose droplet size:
|
|
74
|
+
prompt.select("Choose droplet size:") do |menu|
|
|
26
75
|
do_client = DropletKit::Client.new(access_token: do_token)
|
|
27
76
|
do_client.sizes.all.to_a.select{ |s| s.memory > 1000 }.sort_by{|s| s.memory }.each{ |size|
|
|
77
|
+
#p size
|
|
28
78
|
if size.regions.include?(do_region)
|
|
29
79
|
memory = size.memory.to_i / 1024
|
|
30
|
-
menu.choice "#{memory}GB/#{size.vcpus}CPU/#{size.disk}GB ($#{size.price_monthly.to_i}/mo)", size.slug
|
|
80
|
+
menu.choice "#{size.slug}: #{memory}GB/#{size.vcpus}CPU/#{size.disk}GB ($#{size.price_monthly.to_i}/mo)", size.slug
|
|
31
81
|
end
|
|
32
82
|
}
|
|
33
83
|
end
|
|
@@ -43,7 +93,7 @@ module Kontena::Plugin::DigitalOcean::Prompts
|
|
|
43
93
|
n['labels'] && n['labels'].include?('provider=digitalocean'.freeze)
|
|
44
94
|
}
|
|
45
95
|
raise "Did not find any nodes with label provider=digitalocean" if nodes.size == 0
|
|
46
|
-
prompt.select("Select node:
|
|
96
|
+
prompt.select("Select node:") do |menu|
|
|
47
97
|
nodes.sort_by{|n| n['node_number'] }.reverse.each do |node|
|
|
48
98
|
initial = node['initial_member'] ? '(initial) ' : ''
|
|
49
99
|
menu.choice "#{node['name']} #{initial}", node['name']
|
|
@@ -55,7 +105,7 @@ module Kontena::Plugin::DigitalOcean::Prompts
|
|
|
55
105
|
end
|
|
56
106
|
|
|
57
107
|
def ask_channel
|
|
58
|
-
prompt.select('Select
|
|
108
|
+
prompt.select('Select Container Linux channel:') do |menu|
|
|
59
109
|
menu.choice 'Stable', 'stable'
|
|
60
110
|
menu.choice 'Beta', 'beta'
|
|
61
111
|
menu.choice 'Alpha', 'alpha'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kontena-plugin-digitalocean
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.1.rc1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kontena, Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-08-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: kontena-cli
|
|
@@ -30,20 +30,14 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '2.
|
|
34
|
-
- - ">="
|
|
35
|
-
- !ruby/object:Gem::Version
|
|
36
|
-
version: 2.0.1
|
|
33
|
+
version: '2.2'
|
|
37
34
|
type: :runtime
|
|
38
35
|
prerelease: false
|
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
40
37
|
requirements:
|
|
41
38
|
- - "~>"
|
|
42
39
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: '2.
|
|
44
|
-
- - ">="
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: 2.0.1
|
|
40
|
+
version: '2.2'
|
|
47
41
|
- !ruby/object:Gem::Dependency
|
|
48
42
|
name: activesupport
|
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -108,6 +102,7 @@ files:
|
|
|
108
102
|
- lib/kontena/machine/digital_ocean/master_provisioner.rb
|
|
109
103
|
- lib/kontena/machine/digital_ocean/node_destroyer.rb
|
|
110
104
|
- lib/kontena/machine/digital_ocean/node_provisioner.rb
|
|
105
|
+
- lib/kontena/machine/digital_ocean/ssh_key_manager.rb
|
|
111
106
|
- lib/kontena/plugin/digital_ocean.rb
|
|
112
107
|
- lib/kontena/plugin/digital_ocean/master/create_command.rb
|
|
113
108
|
- lib/kontena/plugin/digital_ocean/master/terminate_command.rb
|
|
@@ -134,12 +129,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
134
129
|
version: '0'
|
|
135
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
131
|
requirements:
|
|
137
|
-
- - "
|
|
132
|
+
- - ">"
|
|
138
133
|
- !ruby/object:Gem::Version
|
|
139
|
-
version:
|
|
134
|
+
version: 1.3.1
|
|
140
135
|
requirements: []
|
|
141
136
|
rubyforge_project:
|
|
142
|
-
rubygems_version: 2.
|
|
137
|
+
rubygems_version: 2.6.11
|
|
143
138
|
signing_key:
|
|
144
139
|
specification_version: 4
|
|
145
140
|
summary: Kontena DigitalOcean plugin
|