kontena-plugin-digitalocean 0.2.5 → 0.3.0
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/kontena-plugin-digitalocean.gemspec +1 -1
- data/lib/kontena/machine/digital_ocean.rb +1 -0
- data/lib/kontena/machine/digital_ocean/cloudinit.yml +1 -1
- data/lib/kontena/machine/digital_ocean/master_destroyer.rb +30 -0
- data/lib/kontena/machine/digital_ocean/master_provisioner.rb +4 -7
- data/lib/kontena/machine/digital_ocean/node_provisioner.rb +4 -2
- data/lib/kontena/plugin/digital_ocean.rb +1 -1
- data/lib/kontena/plugin/digital_ocean/master/create_command.rb +11 -10
- data/lib/kontena/plugin/digital_ocean/master/terminate_command.rb +25 -0
- data/lib/kontena/plugin/digital_ocean/master_command.rb +2 -0
- data/lib/kontena/plugin/digital_ocean/nodes/create_command.rb +4 -1
- data/lib/kontena/plugin/digital_ocean/prompts.rb +8 -0
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bb6451500eb7cd117546fb2f5079745ea23773f
|
4
|
+
data.tar.gz: 5383038aeb7fa4a3e638d40a4d93b9d4ecb2f9f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 071c61535e2a8ba9caf1f39a06ba95828b338bf69a61d937828f6c1d5592dd1853efe4adaa9d10661bb6a20b1837b0e905c126e0fe27159c056963321fd0d0c7
|
7
|
+
data.tar.gz: 0d7d1e867703e1a800696d1421fa67062fc7663c38f161e4e67103b273b692fc29727c02d0594d03b46451fd8250bedc43f157cec823939c517c47ddbe96eb9d
|
@@ -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', '~>
|
21
|
+
spec.add_runtime_dependency 'droplet_kit', '~> 2.0', '>= 2.0.1'
|
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"
|
@@ -11,7 +11,7 @@ write_files:
|
|
11
11
|
- path: /etc/systemd/system/docker.service.d/50-kontena.conf
|
12
12
|
content: |
|
13
13
|
[Service]
|
14
|
-
Environment='DOCKER_OPTS=--insecure-registry="10.81.0.0/16" --bip="172.17.43.1/16"'
|
14
|
+
Environment='DOCKER_OPTS=--insecure-registry="10.81.0.0/16" --bip="172.17.43.1/16" -s overlay2'
|
15
15
|
Environment='DOCKER_CGROUPS=--exec-opt native.cgroupdriver=cgroupfs'
|
16
16
|
- path: /etc/sysctl.d/99-inotify.conf
|
17
17
|
owner: root
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Kontena
|
2
|
+
module Machine
|
3
|
+
module DigitalOcean
|
4
|
+
class MasterDestroyer
|
5
|
+
include Kontena::Cli::ShellSpinner
|
6
|
+
|
7
|
+
attr_reader :client, :api_client
|
8
|
+
|
9
|
+
# @param [String] token Digital Ocean token
|
10
|
+
def initialize(token)
|
11
|
+
@client = DropletKit::Client.new(access_token: token)
|
12
|
+
end
|
13
|
+
|
14
|
+
def run!(name)
|
15
|
+
droplet = client.droplets.all.find{|d| d.name == name}
|
16
|
+
if droplet
|
17
|
+
spinner "Terminating DigitalOcean droplet #{name.colorize(:cyan)} " do
|
18
|
+
result = client.droplets.delete(id: droplet.id)
|
19
|
+
if result.is_a?(String)
|
20
|
+
abort "Cannot delete droplet #{name.colorize(:cyan)} in DigitalOcean"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
else
|
24
|
+
abort "Cannot find droplet #{name.colorize(:cyan)} in DigitalOcean"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -32,10 +32,10 @@ module Kontena
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
name =
|
35
|
+
name = opts[:name]
|
36
36
|
userdata_vars = opts.merge(
|
37
37
|
ssl_cert: ssl_cert,
|
38
|
-
server_name: name
|
38
|
+
server_name: name
|
39
39
|
)
|
40
40
|
|
41
41
|
droplet = DropletKit::Droplet.new(
|
@@ -45,7 +45,8 @@ module Kontena
|
|
45
45
|
size: opts[:size],
|
46
46
|
private_networking: true,
|
47
47
|
user_data: user_data(userdata_vars),
|
48
|
-
ssh_keys: [ssh_key.id]
|
48
|
+
ssh_keys: [ssh_key.id],
|
49
|
+
tags: ['master']
|
49
50
|
)
|
50
51
|
|
51
52
|
spinner "Creating DigitalOcean droplet #{droplet.name.colorize(:cyan)} " do
|
@@ -88,10 +89,6 @@ module Kontena
|
|
88
89
|
erb(File.read(cloudinit_template), vars)
|
89
90
|
end
|
90
91
|
|
91
|
-
def generate_name
|
92
|
-
"kontena-master-#{super}-#{rand(1..9)}"
|
93
|
-
end
|
94
|
-
|
95
92
|
def ssh_key(public_key)
|
96
93
|
client.ssh_keys.all.find{|key| key.public_key == public_key}
|
97
94
|
end
|
@@ -29,16 +29,18 @@ module Kontena
|
|
29
29
|
master_uri: opts[:master_uri],
|
30
30
|
grid_token: opts[:grid_token],
|
31
31
|
}
|
32
|
+
image = "coreos-#{opts[:channel]}"
|
32
33
|
droplets = []
|
33
34
|
opts[:count].to_i.times do
|
34
35
|
droplet = DropletKit::Droplet.new(
|
35
36
|
name: opts[:name] || generate_name,
|
36
37
|
region: opts[:region],
|
37
|
-
image:
|
38
|
+
image: image,
|
38
39
|
size: opts[:size],
|
39
40
|
private_networking: true,
|
40
41
|
user_data: user_data(userdata_vars),
|
41
|
-
ssh_keys: [ssh_key.id]
|
42
|
+
ssh_keys: [ssh_key.id],
|
43
|
+
tags: [opts[:grid]]
|
42
44
|
)
|
43
45
|
created = client.droplets.create(droplet)
|
44
46
|
spinner "Creating DigitalOcean droplet #{droplet.name.colorize(:cyan)} " do
|
@@ -7,7 +7,7 @@ module Kontena::Plugin::DigitalOcean::Master
|
|
7
7
|
include Kontena::Plugin::DigitalOcean::Prompts
|
8
8
|
|
9
9
|
option "--name", "[NAME]", "Set master name"
|
10
|
-
option "--token", "TOKEN", "DigitalOcean API token", environment_variable: "DO_TOKEN"
|
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
13
|
option "--ssh-key", "SSH_KEY", "Path to ssh public key", default: '~/.ssh/id_rsa.pub'
|
@@ -28,15 +28,16 @@ module Kontena::Plugin::DigitalOcean::Master
|
|
28
28
|
|
29
29
|
provisioner = provisioner(do_token)
|
30
30
|
provisioner.run!(
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
31
|
+
name: name,
|
32
|
+
ssh_key: ssh_key,
|
33
|
+
ssl_cert: ssl_cert,
|
34
|
+
size: do_size,
|
35
|
+
region: do_region,
|
36
|
+
version: version,
|
37
|
+
vault_secret: vault_secret || SecureRandom.hex(24),
|
38
|
+
vault_iv: vault_iv || SecureRandom.hex(24),
|
39
|
+
initial_admin_code: SecureRandom.hex(16),
|
40
|
+
mongodb_uri: mongodb_uri
|
40
41
|
)
|
41
42
|
end
|
42
43
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Kontena::Plugin::DigitalOcean::Master
|
2
|
+
class TerminateCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
5
|
+
include Kontena::Plugin::DigitalOcean::Prompts
|
6
|
+
|
7
|
+
parameter "NAME", "Master name"
|
8
|
+
option "--token", "TOKEN", "DigitalOcean API token", environment_variable: "DO_TOKEN"
|
9
|
+
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
10
|
+
|
11
|
+
def execute
|
12
|
+
do_token = ask_do_token
|
13
|
+
confirm_command(name) unless forced?
|
14
|
+
|
15
|
+
require_relative '../../../machine/digital_ocean'
|
16
|
+
destroyer = destroyer(do_token)
|
17
|
+
destroyer.run!(name)
|
18
|
+
end
|
19
|
+
|
20
|
+
# @param [String] token
|
21
|
+
def destroyer(token)
|
22
|
+
Kontena::Machine::DigitalOcean::MasterDestroyer.new(token)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
require_relative 'master/create_command'
|
2
|
+
require_relative 'master/terminate_command'
|
2
3
|
|
3
4
|
class Kontena::Plugin::DigitalOcean::MasterCommand < Kontena::Command
|
4
5
|
|
5
6
|
subcommand "create", "Create a new master to DigitalOcean", Kontena::Plugin::DigitalOcean::Master::CreateCommand
|
7
|
+
subcommand "terminate", "Terminate DigitalOcean master", Kontena::Plugin::DigitalOcean::Master::TerminateCommand
|
6
8
|
|
7
9
|
def execute
|
8
10
|
end
|
@@ -13,6 +13,7 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
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
|
+
option "--channel", "CHANNEL", "Define CoreOS image channel"
|
16
17
|
|
17
18
|
def execute
|
18
19
|
require_api_url
|
@@ -23,6 +24,7 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
23
24
|
require_relative '../../../machine/digital_ocean'
|
24
25
|
|
25
26
|
do_region = ask_droplet_region(do_token)
|
27
|
+
coreos_channel = self.channel || ask_channel
|
26
28
|
do_size = ask_droplet_size(do_token, do_region)
|
27
29
|
do_count = ask_droplet_count
|
28
30
|
|
@@ -37,7 +39,8 @@ module Kontena::Plugin::DigitalOcean::Nodes
|
|
37
39
|
size: do_size,
|
38
40
|
count: do_count,
|
39
41
|
region: do_region,
|
40
|
-
version: version
|
42
|
+
version: version,
|
43
|
+
channel: coreos_channel
|
41
44
|
)
|
42
45
|
end
|
43
46
|
|
@@ -53,4 +53,12 @@ module Kontena::Plugin::DigitalOcean::Prompts
|
|
53
53
|
self.name
|
54
54
|
end
|
55
55
|
end
|
56
|
+
|
57
|
+
def ask_channel
|
58
|
+
prompt.select('Select CoreOS channel') do |menu|
|
59
|
+
menu.choice 'Stable', 'stable'
|
60
|
+
menu.choice 'Beta', 'beta'
|
61
|
+
menu.choice 'Alpha', 'alpha'
|
62
|
+
end
|
63
|
+
end
|
56
64
|
end
|
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.
|
4
|
+
version: 0.3.0
|
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-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kontena-cli
|
@@ -30,20 +30,20 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.0'
|
34
34
|
- - ">="
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
36
|
+
version: 2.0.1
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
43
|
+
version: '2.0'
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
46
|
+
version: 2.0.1
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activesupport
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,11 +104,13 @@ files:
|
|
104
104
|
- lib/kontena/machine/digital_ocean.rb
|
105
105
|
- lib/kontena/machine/digital_ocean/cloudinit.yml
|
106
106
|
- lib/kontena/machine/digital_ocean/cloudinit_master.yml
|
107
|
+
- lib/kontena/machine/digital_ocean/master_destroyer.rb
|
107
108
|
- lib/kontena/machine/digital_ocean/master_provisioner.rb
|
108
109
|
- lib/kontena/machine/digital_ocean/node_destroyer.rb
|
109
110
|
- lib/kontena/machine/digital_ocean/node_provisioner.rb
|
110
111
|
- lib/kontena/plugin/digital_ocean.rb
|
111
112
|
- lib/kontena/plugin/digital_ocean/master/create_command.rb
|
113
|
+
- lib/kontena/plugin/digital_ocean/master/terminate_command.rb
|
112
114
|
- lib/kontena/plugin/digital_ocean/master_command.rb
|
113
115
|
- lib/kontena/plugin/digital_ocean/node_command.rb
|
114
116
|
- lib/kontena/plugin/digital_ocean/nodes/create_command.rb
|