krates-plugin-digitalocean 0.3.10 → 0.3.11
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/Gemfile +5 -0
- data/lib/kontena/machine/digital_ocean/cloudinit.yml +2 -2
- data/lib/kontena/machine/digital_ocean/cloudinit_master.yml +21 -21
- data/lib/kontena/machine/digital_ocean/master_provisioner.rb +9 -4
- data/lib/kontena/plugin/digital_ocean.rb +1 -1
- data/lib/kontena/plugin/digital_ocean/prompts.rb +100 -92
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3713fb7f9b21c95e3ca11b558af4338f3971cdfc40d61713a0d0cfbe1bd79238
|
|
4
|
+
data.tar.gz: 32485fd0fc487047a21f3c3bef6f736dded2e845a193afed9a102f7c31432187
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ffacd8be8d5005f5bb3551b04b13c9e1012a02c8806201f0886db788450d262012cb9f07d2afb37a1421dd6d6be07522302e750b243973e7cb355a1bf3774f2b
|
|
7
|
+
data.tar.gz: 77bd990f7cdb54cc0944365b1cddeaf741a9f144e22dd0d58aeef8b2e6df9fbb8d8490962eb4d203993c8409176290eab4eaad8a487784a2bd1f163cf15ab172
|
data/Gemfile
CHANGED
|
@@ -32,14 +32,14 @@ coreos:
|
|
|
32
32
|
enable: true
|
|
33
33
|
content: |
|
|
34
34
|
[Unit]
|
|
35
|
-
Description=
|
|
35
|
+
Description=Krates etcd 2.0
|
|
36
36
|
After=docker.service
|
|
37
37
|
After=krates-worker.service
|
|
38
38
|
Requires=docker.service
|
|
39
39
|
[Service]
|
|
40
40
|
Restart=always
|
|
41
41
|
RestartSec=5
|
|
42
|
-
ExecStart=/usr/bin/docker logs --tail=10 -f
|
|
42
|
+
ExecStart=/usr/bin/docker logs --tail=10 -f krates-etcd
|
|
43
43
|
- name: 50-docker.network
|
|
44
44
|
mask: true
|
|
45
45
|
- name: 50-docker-veth.network
|
|
@@ -14,7 +14,7 @@ write_files:
|
|
|
14
14
|
owner: root
|
|
15
15
|
content: | <% ssl_cert.split(/\n/).each do |row| %>
|
|
16
16
|
<%= row %><% end %><% end %>
|
|
17
|
-
- path: /opt/bin/
|
|
17
|
+
- path: /opt/bin/krates-haproxy.sh
|
|
18
18
|
permissions: 0755
|
|
19
19
|
owner: root
|
|
20
20
|
content: |
|
|
@@ -24,10 +24,10 @@ write_files:
|
|
|
24
24
|
else
|
|
25
25
|
SSL_CERT="**None**"
|
|
26
26
|
fi
|
|
27
|
-
/usr/bin/docker run --name=
|
|
27
|
+
/usr/bin/docker run --name=krates-server-haproxy \
|
|
28
28
|
--link kontena-server-api:kontena-server-api \
|
|
29
29
|
-e SSL_CERT="$SSL_CERT" \
|
|
30
|
-
-p 80:80 -p 443:443
|
|
30
|
+
-p 80:80 -p 443:443 krates/haproxy:latest
|
|
31
31
|
coreos:
|
|
32
32
|
units:
|
|
33
33
|
<% unless mongodb_uri -%>
|
|
@@ -56,19 +56,19 @@ coreos:
|
|
|
56
56
|
mongo:3.0 mongod --smallfiles
|
|
57
57
|
ExecStop=/usr/bin/docker stop kontena-server-mongo
|
|
58
58
|
<% end -%>
|
|
59
|
-
- name:
|
|
59
|
+
- name: krates-server-api.service
|
|
60
60
|
command: start
|
|
61
61
|
enable: true
|
|
62
62
|
content: |
|
|
63
63
|
[Unit]
|
|
64
|
-
Description=
|
|
64
|
+
Description=krates-server-api
|
|
65
65
|
After=network-online.target
|
|
66
66
|
After=docker.service
|
|
67
67
|
After=kontena-server-mongo.service
|
|
68
|
-
Description=
|
|
69
|
-
Documentation=
|
|
70
|
-
Before=
|
|
71
|
-
Wants=
|
|
68
|
+
Description=Krates Master
|
|
69
|
+
Documentation=https://github.com/appstersio/krates/
|
|
70
|
+
Before=krates-server-haproxy.service
|
|
71
|
+
Wants=krates-server-haproxy.service
|
|
72
72
|
Requires=network-online.target
|
|
73
73
|
Requires=docker.service
|
|
74
74
|
<% unless mongodb_uri -%>
|
|
@@ -82,7 +82,7 @@ coreos:
|
|
|
82
82
|
EnvironmentFile=-/etc/kontena-server.custom.env
|
|
83
83
|
ExecStartPre=-/usr/bin/docker stop kontena-server-api
|
|
84
84
|
ExecStartPre=-/usr/bin/docker rm kontena-server-api
|
|
85
|
-
ExecStartPre=-/usr/bin/docker pull
|
|
85
|
+
ExecStartPre=-/usr/bin/docker pull krates/master:${KONTENA_VERSION}
|
|
86
86
|
ExecStart=/usr/bin/docker run --name kontena-server-api \
|
|
87
87
|
<% if mongodb_uri -%>
|
|
88
88
|
-e MONGODB_URI=<%= mongodb_uri %> \
|
|
@@ -97,30 +97,30 @@ coreos:
|
|
|
97
97
|
-e INITIAL_ADMIN_CODE=<%= initial_admin_code %> \
|
|
98
98
|
<% end -%>
|
|
99
99
|
-e VAULT_KEY=${KONTENA_VAULT_KEY} -e VAULT_IV=${KONTENA_VAULT_IV} \
|
|
100
|
-
|
|
100
|
+
krates/master:${KONTENA_VERSION}
|
|
101
101
|
ExecStop=/usr/bin/docker stop kontena-server-api
|
|
102
102
|
|
|
103
|
-
- name:
|
|
103
|
+
- name: krates-server-haproxy.service
|
|
104
104
|
command: start
|
|
105
105
|
enable: true
|
|
106
106
|
content: |
|
|
107
107
|
[Unit]
|
|
108
|
-
Description=
|
|
108
|
+
Description=krates-server-haproxy
|
|
109
109
|
After=network-online.target
|
|
110
110
|
After=docker.service
|
|
111
|
-
Description=
|
|
112
|
-
Documentation=
|
|
111
|
+
Description=Krates Server HAProxy
|
|
112
|
+
Documentation=https://github.com/appstersio/krates-haproxy
|
|
113
113
|
Requires=network-online.target
|
|
114
114
|
Requires=docker.service
|
|
115
|
-
Requires=
|
|
115
|
+
Requires=krates-server-api.service
|
|
116
116
|
|
|
117
117
|
[Service]
|
|
118
118
|
Restart=always
|
|
119
119
|
RestartSec=5
|
|
120
120
|
EnvironmentFile=/etc/kontena-server.env
|
|
121
121
|
EnvironmentFile=-/etc/kontena-server.custom.env
|
|
122
|
-
ExecStartPre=-/usr/bin/docker stop
|
|
123
|
-
ExecStartPre=-/usr/bin/docker rm
|
|
124
|
-
ExecStartPre=-/usr/bin/docker pull
|
|
125
|
-
ExecStart=/opt/bin/
|
|
126
|
-
ExecStop=/usr/bin/docker stop
|
|
122
|
+
ExecStartPre=-/usr/bin/docker stop krates-server-haproxy
|
|
123
|
+
ExecStartPre=-/usr/bin/docker rm krates-server-haproxy
|
|
124
|
+
ExecStartPre=-/usr/bin/docker pull krates/haproxy:latest
|
|
125
|
+
ExecStart=/opt/bin/krates-haproxy.sh
|
|
126
|
+
ExecStop=/usr/bin/docker stop krates-server-haproxy
|
|
@@ -63,9 +63,7 @@ module Kontena
|
|
|
63
63
|
sleep 0.5 until master_running?
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
puts "Kontena Master is now running at #{master_url}".colorize(:green)
|
|
68
|
-
puts
|
|
66
|
+
show_summary(master_url)
|
|
69
67
|
|
|
70
68
|
data = {
|
|
71
69
|
name: name.sub('kontena-master-', ''),
|
|
@@ -91,7 +89,14 @@ module Kontena
|
|
|
91
89
|
end
|
|
92
90
|
|
|
93
91
|
def erb(template, vars)
|
|
94
|
-
|
|
92
|
+
# Trim mode has changed, here is how: https://redmine.ruby-lang.org/attachments/7457?utf8=✓&type=sbs
|
|
93
|
+
ERB.new(template, nil, '-').result(OpenStruct.new(vars).instance_eval { binding })
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def show_summary(master_url)
|
|
97
|
+
puts
|
|
98
|
+
puts "Krates Master is now running at #{master_url}".colorize(:green)
|
|
99
|
+
puts
|
|
95
100
|
end
|
|
96
101
|
end
|
|
97
102
|
end
|
|
@@ -1,112 +1,120 @@
|
|
|
1
|
-
|
|
1
|
+
# Always use this form to avoid ordering/layering issues with Ruby interpeter
|
|
2
|
+
# eq. module is referenced before being declared/initialized.
|
|
3
|
+
module Kontena
|
|
4
|
+
module Plugin
|
|
5
|
+
module DigitalOcean
|
|
6
|
+
module Prompts
|
|
2
7
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
# Until DO merges https://github.com/digitalocean/resource_kit/pull/32
|
|
9
|
+
def suppress_warnings
|
|
10
|
+
@original_verbosity = $VERBOSE
|
|
11
|
+
$VERBOSE = nil
|
|
12
|
+
end
|
|
8
13
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
def resume_warnings
|
|
15
|
+
$VERBOSE = @original_verbosity
|
|
16
|
+
end
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
|
|
18
|
+
def ask_ssh_key(do_token)
|
|
19
|
+
manager = Kontena::Machine::DigitalOcean::SshKeyManager.new(do_token)
|
|
15
20
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
if self.ssh_key
|
|
22
|
+
public_key = File.read(self.ssh_key).strip
|
|
23
|
+
else
|
|
24
|
+
keys = manager.list
|
|
25
|
+
key = :new
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
default_path = File.join(Dir.home, '.ssh', 'id_rsa.pub')
|
|
28
|
+
default = File.exist?(default_path) ? File.read(default_path).strip : nil
|
|
24
29
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
unless keys.empty?
|
|
31
|
+
key = prompt.select("Choose SSH key:") do |menu|
|
|
32
|
+
i = 1
|
|
33
|
+
keys.each do |item|
|
|
34
|
+
menu.choice "#{item.name} (#{item.fingerprint})" , item
|
|
35
|
+
menu.default i if item.public_key == default
|
|
36
|
+
i += 1
|
|
37
|
+
end
|
|
38
|
+
menu.choice "Create new SSH key", :new
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if key == :new
|
|
43
|
+
|
|
44
|
+
public_key = prompt.ask('SSH public key: (enter an ssh key in OpenSSH format "ssh-xxx xxxxx key_name")', default: default) do |q|
|
|
45
|
+
q.validate /^ssh-rsa \S+ \S+$/
|
|
46
|
+
end
|
|
47
|
+
else
|
|
48
|
+
return key.id
|
|
49
|
+
end
|
|
32
50
|
end
|
|
33
|
-
|
|
51
|
+
manager.find_or_create_by_public_key(public_key).id
|
|
34
52
|
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
if key == :new
|
|
38
53
|
|
|
39
|
-
|
|
40
|
-
|
|
54
|
+
def ask_do_token
|
|
55
|
+
if self.token.nil?
|
|
56
|
+
prompt.mask('DigitalOcean API token:')
|
|
57
|
+
else
|
|
58
|
+
self.token
|
|
59
|
+
end
|
|
41
60
|
end
|
|
42
|
-
else
|
|
43
|
-
return key.id
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
manager.find_or_create_by_public_key(public_key).id
|
|
47
|
-
end
|
|
48
61
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
62
|
+
def ask_droplet_region(do_token)
|
|
63
|
+
if self.region.nil?
|
|
64
|
+
prompt.select("Choose a datacenter region:") do |menu|
|
|
65
|
+
do_client = DropletKit::Client.new(access_token: do_token)
|
|
66
|
+
do_client.regions.all.sort_by{|r| r.slug }.each{ |region|
|
|
67
|
+
menu.choice region.name, region.slug
|
|
68
|
+
}
|
|
69
|
+
end
|
|
70
|
+
else
|
|
71
|
+
self.region
|
|
72
|
+
end
|
|
73
|
+
end
|
|
56
74
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
75
|
+
def ask_droplet_size(do_token, do_region)
|
|
76
|
+
if self.size.nil?
|
|
77
|
+
prompt.select("Choose droplet size:") do |menu|
|
|
78
|
+
do_client = DropletKit::Client.new(access_token: do_token)
|
|
79
|
+
do_client.sizes.all.to_a.select{ |s| s.memory > 1000 }.sort_by{|s| s.memory }.each{ |size|
|
|
80
|
+
#p size
|
|
81
|
+
if size.regions.include?(do_region)
|
|
82
|
+
memory = size.memory.to_i / 1024
|
|
83
|
+
menu.choice "#{size.slug}: #{memory}GB/#{size.vcpus}CPU/#{size.disk}GB ($#{size.price_monthly.to_i}/mo)", size.slug
|
|
84
|
+
end
|
|
85
|
+
}
|
|
86
|
+
end
|
|
87
|
+
else
|
|
88
|
+
self.size
|
|
89
|
+
end
|
|
90
|
+
end
|
|
69
91
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
92
|
+
def ask_node(token)
|
|
93
|
+
if self.name.nil?
|
|
94
|
+
nodes = client(token).get("grids/#{current_grid}/nodes")
|
|
95
|
+
nodes = nodes['nodes'].select{ |n|
|
|
96
|
+
n['labels'] && n['labels'].include?('provider=digitalocean'.freeze)
|
|
97
|
+
}
|
|
98
|
+
raise "Did not find any nodes with label provider=digitalocean" if nodes.size == 0
|
|
99
|
+
prompt.select("Select node:") do |menu|
|
|
100
|
+
nodes.sort_by{|n| n['node_number'] }.reverse.each do |node|
|
|
101
|
+
initial = node['initial_member'] ? '(initial) ' : ''
|
|
102
|
+
menu.choice "#{node['name']} #{initial}", node['name']
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
else
|
|
106
|
+
self.name
|
|
79
107
|
end
|
|
80
|
-
|
|
81
|
-
end
|
|
82
|
-
else
|
|
83
|
-
self.size
|
|
84
|
-
end
|
|
85
|
-
end
|
|
108
|
+
end
|
|
86
109
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
raise "Did not find any nodes with label provider=digitalocean" if nodes.size == 0
|
|
94
|
-
prompt.select("Select node:") do |menu|
|
|
95
|
-
nodes.sort_by{|n| n['node_number'] }.reverse.each do |node|
|
|
96
|
-
initial = node['initial_member'] ? '(initial) ' : ''
|
|
97
|
-
menu.choice "#{node['name']} #{initial}", node['name']
|
|
110
|
+
def ask_channel
|
|
111
|
+
prompt.select('Select Container Linux channel:') do |menu|
|
|
112
|
+
menu.choice 'Stable', 'stable'
|
|
113
|
+
menu.choice 'Beta', 'beta'
|
|
114
|
+
menu.choice 'Alpha', 'alpha'
|
|
115
|
+
end
|
|
98
116
|
end
|
|
99
117
|
end
|
|
100
|
-
else
|
|
101
|
-
self.name
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def ask_channel
|
|
106
|
-
prompt.select('Select Container Linux channel:') do |menu|
|
|
107
|
-
menu.choice 'Stable', 'stable'
|
|
108
|
-
menu.choice 'Beta', 'beta'
|
|
109
|
-
menu.choice 'Alpha', 'alpha'
|
|
110
118
|
end
|
|
111
119
|
end
|
|
112
120
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: krates-plugin-digitalocean
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.11
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Pavel Tsurbeleu
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-06-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: krates
|