krates-plugin-digitalocean 0.3.10 → 0.3.11
Sign up to get free protection for your applications and to get access to all the features.
- 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
|