kontena-plugin-azure 0.2.5 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/kontena-plugin-azure.gemspec +3 -3
- data/lib/kontena/machine/azure.rb +1 -0
- data/lib/kontena/machine/azure/cloudinit.yml +14 -5
- data/lib/kontena/machine/azure/cloudinit_master.yml +4 -2
- data/lib/kontena/machine/azure/common.rb +33 -0
- data/lib/kontena/machine/azure/master_provisioner.rb +35 -37
- data/lib/kontena/machine/azure/node_destroyer.rb +14 -12
- data/lib/kontena/machine/azure/node_provisioner.rb +20 -20
- data/lib/kontena/plugin/azure.rb +1 -1
- data/lib/kontena/plugin/azure/common.rb +53 -0
- data/lib/kontena/plugin/azure/master/create_command.rb +27 -3
- data/lib/kontena/plugin/azure/nodes/create_command.rb +31 -6
- data/lib/kontena/plugin/azure/nodes/restart_command.rb +1 -1
- data/lib/kontena/plugin/azure/nodes/terminate_command.rb +4 -1
- 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: ed37995c9d3102552fd3191c64daa79c00a26e0d
|
4
|
+
data.tar.gz: 3b722e2faceac42808618b62af6fad7d332b36ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6661770c294512dcce55ccc1c7f8287599950405c0a2ef387f5b93daf7840c338b699b381ad3f7995ca384e1d26e73d2e5d6d2fbe3ed554421acea88605101ec
|
7
|
+
data.tar.gz: e9c900a5deb4b288242ebf45c9322fd91320b8f398ff085d55a2b092650e857fda92bab1384ae3135474fd33d60dda9520d9ad671a533ddf08731288e5d8a382
|
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Kontena, Inc."]
|
10
10
|
spec.email = ["info@kontena.io"]
|
11
11
|
|
12
|
-
spec.summary = "Kontena Azure plugin"
|
13
|
-
spec.description = "Kontena Microsoft Azure plugin"
|
12
|
+
spec.summary = "Kontena Azure (classic) plugin"
|
13
|
+
spec.description = "Kontena Microsoft Azure (classic) plugin"
|
14
14
|
spec.homepage = "https://github.com/kontena/kontena-plugin-azure"
|
15
15
|
spec.license = "Apache-2.0"
|
16
16
|
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_runtime_dependency 'kontena-cli', '>= 1.0'
|
21
21
|
spec.add_runtime_dependency 'nokogiri', '~> 1.6.0'
|
22
|
-
spec.add_runtime_dependency 'azure', '0.7.
|
22
|
+
spec.add_runtime_dependency 'azure', '0.7.7'
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.11"
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
25
|
end
|
@@ -6,7 +6,7 @@ write_files:
|
|
6
6
|
content: |
|
7
7
|
KONTENA_URI="<%= master_uri %>"
|
8
8
|
KONTENA_TOKEN="<%= grid_token %>"
|
9
|
-
KONTENA_PEER_INTERFACE=
|
9
|
+
KONTENA_PEER_INTERFACE=eth0
|
10
10
|
KONTENA_VERSION=<%= version %>
|
11
11
|
- path: /etc/systemd/system/docker.service.d/50-kontena.conf
|
12
12
|
content: |
|
@@ -37,14 +37,21 @@ coreos:
|
|
37
37
|
Restart=always
|
38
38
|
RestartSec=5
|
39
39
|
ExecStart=/usr/bin/docker logs --tail=10 -f kontena-etcd
|
40
|
-
- name:
|
40
|
+
- name: 50-docker.network
|
41
|
+
mask: true
|
42
|
+
- name: 50-docker-veth.network
|
43
|
+
mask: true
|
44
|
+
- name: zz-default.network
|
41
45
|
runtime: false
|
42
46
|
content: |
|
47
|
+
# default should only match real network interfaces
|
43
48
|
[Match]
|
44
|
-
|
45
|
-
Name=weave*
|
46
|
-
|
49
|
+
Name=eth*
|
47
50
|
[Network]
|
51
|
+
DHCP=yes
|
52
|
+
[DHCP]
|
53
|
+
UseMTU=true
|
54
|
+
UseDomains=true
|
48
55
|
- name: kontena-agent.service
|
49
56
|
command: start
|
50
57
|
enable: true
|
@@ -62,6 +69,7 @@ coreos:
|
|
62
69
|
Restart=always
|
63
70
|
RestartSec=5
|
64
71
|
EnvironmentFile=/etc/kontena-agent.env
|
72
|
+
EnvironmentFile=-/etc/kontena-agent.custom.env
|
65
73
|
ExecStartPre=-/usr/bin/docker stop kontena-agent
|
66
74
|
ExecStartPre=-/usr/bin/docker rm kontena-agent
|
67
75
|
ExecStartPre=/usr/bin/docker pull kontena/agent:${KONTENA_VERSION}
|
@@ -73,3 +81,4 @@ coreos:
|
|
73
81
|
-v=/etc/kontena-agent.env:/etc/kontena.env \
|
74
82
|
--net=host \
|
75
83
|
kontena/agent:${KONTENA_VERSION}
|
84
|
+
ExecStop=/usr/bin/docker stop kontena-agent
|
@@ -53,6 +53,7 @@ coreos:
|
|
53
53
|
ExecStart=/usr/bin/docker run --name=kontena-server-mongo \
|
54
54
|
--volumes-from=kontena-server-mongo-data \
|
55
55
|
mongo:3.0 mongod --smallfiles
|
56
|
+
ExecStop=/usr/bin/docker stop kontena-server-mongo
|
56
57
|
|
57
58
|
- name: kontena-server-api.service
|
58
59
|
command: start
|
@@ -82,9 +83,9 @@ coreos:
|
|
82
83
|
-e MONGODB_URI=mongodb://mongodb:27017/kontena_server \
|
83
84
|
-e VAULT_KEY=${KONTENA_VAULT_KEY} -e VAULT_IV=${KONTENA_VAULT_IV} \
|
84
85
|
<% if server_name %>-e SERVER_NAME=<%= server_name %><% end %> \
|
85
|
-
<% if initial_admin_code %>-e INITIAL_ADMIN_CODE=<%=
|
86
|
+
<% if initial_admin_code %>-e INITIAL_ADMIN_CODE=<%= initial_admin_code %><% end %> \
|
86
87
|
kontena/server:${KONTENA_VERSION}
|
87
|
-
|
88
|
+
ExecStop=/usr/bin/docker stop kontena-server-api
|
88
89
|
- name: kontena-server-haproxy.service
|
89
90
|
command: start
|
90
91
|
enable: true
|
@@ -107,3 +108,4 @@ coreos:
|
|
107
108
|
ExecStartPre=-/usr/bin/docker rm kontena-server-haproxy
|
108
109
|
ExecStartPre=-/usr/bin/docker pull kontena/haproxy:latest
|
109
110
|
ExecStart=/opt/bin/kontena-haproxy.sh
|
111
|
+
ExecStop=/usr/bin/docker stop kontena-server-haproxy
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Kontena
|
2
|
+
module Machine
|
3
|
+
module Azure
|
4
|
+
module Common
|
5
|
+
|
6
|
+
def create_virtual_network(name, location)
|
7
|
+
address_space = ['10.0.0.0/20']
|
8
|
+
options = {subnet: [{:name => 'subnet-1', :ip_address=>'10.0.0.0', :cidr=>23}]}
|
9
|
+
client.network_management.set_network_configuration(name, location, address_space, options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def virtual_network_exist?(name)
|
13
|
+
client.network_management.list_virtual_networks.find{|n| n.name == name}
|
14
|
+
end
|
15
|
+
|
16
|
+
def erb(template, vars)
|
17
|
+
ERB.new(template).result(OpenStruct.new(vars).instance_eval { binding })
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [String]
|
21
|
+
def find_coreos_image
|
22
|
+
images = client.vm_image_management.list_os_images.select { |i|
|
23
|
+
i.name.include?('__CoreOS-Stable-')
|
24
|
+
}.sort_by { |i|
|
25
|
+
i.name.split('__CoreOS-Stable-')[1].to_i
|
26
|
+
}
|
27
|
+
image = images[-1]
|
28
|
+
image.name
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -2,13 +2,16 @@ require 'fileutils'
|
|
2
2
|
require 'erb'
|
3
3
|
require 'open3'
|
4
4
|
require 'json'
|
5
|
+
require_relative 'common'
|
5
6
|
|
6
7
|
module Kontena
|
7
8
|
module Machine
|
8
9
|
module Azure
|
9
10
|
class MasterProvisioner
|
10
11
|
include Kontena::Machine::RandomName
|
12
|
+
include Kontena::Machine::CertHelper
|
11
13
|
include Kontena::Cli::ShellSpinner
|
14
|
+
include Common
|
12
15
|
|
13
16
|
attr_reader :client, :http_client
|
14
17
|
|
@@ -19,29 +22,44 @@ module Kontena
|
|
19
22
|
abort('Invalid management certificate') unless File.exists?(File.expand_path(certificate))
|
20
23
|
|
21
24
|
@client = ::Azure
|
22
|
-
client.management_certificate = certificate
|
25
|
+
client.management_certificate = File.expand_path(certificate)
|
23
26
|
client.subscription_id = subscription_id
|
24
27
|
client.vm_management.initialize_external_logger(Logger.new) # We don't want all the output
|
25
28
|
end
|
26
29
|
|
27
30
|
def run!(opts)
|
28
31
|
abort('Invalid ssh key') unless File.exists?(File.expand_path(opts[:ssh_key]))
|
32
|
+
ssl_cert = nil
|
29
33
|
if opts[:ssl_cert]
|
30
|
-
abort('Invalid ssl cert') unless File.exists?(File.expand_path(opts[:ssl_cert]))
|
34
|
+
abort('Invalid ssl cert (file not found)') unless File.exists?(File.expand_path(opts[:ssl_cert]))
|
31
35
|
ssl_cert = File.read(File.expand_path(opts[:ssl_cert]))
|
36
|
+
else
|
37
|
+
spinner "Generating a self-signed SSL certificate" do
|
38
|
+
ssl_cert = generate_self_signed_cert
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
coreos_image = nil
|
43
|
+
spinner "Finding latest #{'CoreOS stable'.colorize(:cyan)} image" do
|
44
|
+
coreos_image = find_coreos_image
|
32
45
|
end
|
46
|
+
abort('Cannot find CoreOS image') if coreos_image.nil?
|
47
|
+
|
33
48
|
cloud_service_name = generate_cloud_service_name
|
34
49
|
vm_name = cloud_service_name
|
35
50
|
master_url = ''
|
36
51
|
public_ip = nil
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
52
|
+
if opts[:virtual_network].nil?
|
53
|
+
location = opts[:location].downcase.gsub(' ', '-')
|
54
|
+
default_network_name = "kontena-#{location}"
|
55
|
+
spinner "Creating a virtual network #{default_network_name.colorize(:cyan)}" do
|
41
56
|
create_virtual_network(default_network_name, opts[:location]) unless virtual_network_exist?(default_network_name)
|
42
|
-
opts[:virtual_network] = default_network_name
|
43
|
-
opts[:subnet] = 'subnet-1'
|
44
57
|
end
|
58
|
+
opts[:virtual_network] = default_network_name
|
59
|
+
opts[:subnet] = 'subnet-1'
|
60
|
+
end
|
61
|
+
|
62
|
+
spinner "Creating an Azure Virtual Machine #{vm_name.colorize(:cyan)} to #{opts[:location].colorize(:cyan)}" do
|
45
63
|
|
46
64
|
userdata_vars = opts.merge(
|
47
65
|
ssl_cert: ssl_cert,
|
@@ -52,7 +70,7 @@ module Kontena
|
|
52
70
|
vm_name: vm_name,
|
53
71
|
vm_user: 'core',
|
54
72
|
location: opts[:location],
|
55
|
-
image:
|
73
|
+
image: coreos_image,
|
56
74
|
custom_data: Base64.encode64(user_data(userdata_vars)),
|
57
75
|
ssh_key: opts[:ssh_key]
|
58
76
|
}
|
@@ -62,27 +80,20 @@ module Kontena
|
|
62
80
|
deployment_name: vm_name,
|
63
81
|
virtual_network_name: opts[:virtual_network],
|
64
82
|
subnet_name: opts[:subnet],
|
65
|
-
tcp_endpoints: '
|
83
|
+
tcp_endpoints: '443',
|
66
84
|
private_key_file: File.expand_path(opts[:ssh_key]),
|
67
85
|
ssh_port: 22,
|
68
86
|
vm_size: opts[:size],
|
69
87
|
}
|
70
88
|
|
71
|
-
|
72
89
|
virtual_machine = client.vm_management.create_virtual_machine(params,options)
|
73
90
|
public_ip = virtual_machine.ipaddress
|
74
|
-
|
75
|
-
if opts[:ssl_cert]
|
76
|
-
master_url = "https://#{virtual_machine.ipaddress}"
|
77
|
-
else
|
78
|
-
master_url = "http://#{virtual_machine.ipaddress}"
|
79
|
-
end
|
80
|
-
|
91
|
+
master_url = "https://#{virtual_machine.ipaddress}"
|
81
92
|
end
|
82
93
|
Excon.defaults[:ssl_verify_peer] = false
|
83
94
|
@http_client = Excon.new("#{master_url}", :connect_timeout => 10)
|
84
95
|
|
85
|
-
spinner "Waiting for #{vm_name.colorize(:cyan)} to start" do
|
96
|
+
spinner "Waiting for #{vm_name.colorize(:cyan)} to start (#{master_url})" do
|
86
97
|
sleep 0.5 until master_running?
|
87
98
|
end
|
88
99
|
|
@@ -93,17 +104,18 @@ module Kontena
|
|
93
104
|
|
94
105
|
spinner "Kontena Master #{master_version} is now running at #{master_url}".colorize(:green)
|
95
106
|
|
96
|
-
{
|
107
|
+
data = {
|
97
108
|
name: opts[:name] || cloud_service_name.sub('kontena-master-', ''),
|
98
109
|
public_ip: public_ip,
|
99
110
|
provider: 'azure',
|
100
111
|
version: master_version,
|
101
112
|
code: opts[:initial_admin_code]
|
102
113
|
}
|
103
|
-
|
114
|
+
if respond_to?(:certificate_public_key) && !opts[:ssl_cert]
|
115
|
+
data[:ssl_certificate] = certificate_public_key(ssl_cert)
|
116
|
+
end
|
104
117
|
|
105
|
-
|
106
|
-
ERB.new(template).result(OpenStruct.new(vars).instance_eval { binding })
|
118
|
+
data
|
107
119
|
end
|
108
120
|
|
109
121
|
def user_data(vars)
|
@@ -120,20 +132,6 @@ module Kontena
|
|
120
132
|
def generate_cloud_service_name
|
121
133
|
"kontena-master-#{generate_name}-#{rand(1..99)}"
|
122
134
|
end
|
123
|
-
|
124
|
-
def cloud_service(name)
|
125
|
-
client.cloud_service_management.get_cloud_service(name)
|
126
|
-
end
|
127
|
-
|
128
|
-
def virtual_network_exist?(name)
|
129
|
-
client.network_management.list_virtual_networks.find{|n| n.name == name}
|
130
|
-
end
|
131
|
-
|
132
|
-
def create_virtual_network(name, location)
|
133
|
-
address_space = ['10.0.0.0/20']
|
134
|
-
options = {subnet: [{:name => 'subnet-1', :ip_address=>'10.0.0.0', :cidr=>23}]}
|
135
|
-
client.network_management.set_network_configuration(name, location, address_space, options)
|
136
|
-
end
|
137
135
|
end
|
138
136
|
end
|
139
137
|
end
|
@@ -23,24 +23,26 @@ module Kontena
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def run!(grid, name)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
$stdout = out # to avoid debug data (https://github.com/Azure/azure-sdk-for-ruby/issues/200)
|
26
|
+
|
27
|
+
vm = client.vm_management.get_virtual_machine(name, cloud_service_name(name, grid['name']))
|
28
|
+
if vm
|
29
|
+
spinner "Terminating Azure Virtual Machine #{name.colorize(:cyan)} " do
|
31
30
|
client.vm_management.delete_virtual_machine(name, cloud_service_name(name, grid['name']))
|
32
|
-
storage_account = client.storage_management.list_storage_accounts.find{|a| a.label == cloud_service_name(name, grid['name'])}
|
33
|
-
client.storage_management.delete_storage_account(storage_account.name) if storage_account
|
34
|
-
$stdout = STDOUT
|
35
|
-
else
|
36
|
-
abort "\nCannot find Virtual Machine #{name.colorize(:cyan)} in Azure"
|
37
31
|
end
|
38
|
-
|
32
|
+
storage_account = client.storage_management.list_storage_accounts.find{|a| a.label == cloud_service_name(name, grid['name'])}
|
33
|
+
if storage_account
|
34
|
+
spinner "Removing Azure Storage Account #{storage_account.name.colorize(:cyan)} " do
|
35
|
+
client.storage_management.delete_storage_account(storage_account.name)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
else
|
39
|
+
abort "\nCannot find Virtual Machine #{name.colorize(:cyan)} in Azure"
|
40
|
+
end
|
39
41
|
|
40
42
|
node = api_client.get("grids/#{grid['id']}/nodes")['nodes'].find{|n| n['name'] == name}
|
41
43
|
if node
|
42
44
|
spinner "Removing node #{name.colorize(:cyan)} from grid #{grid['name'].colorize(:cyan)} " do
|
43
|
-
api_client.delete("
|
45
|
+
api_client.delete("nodes/#{grid['id']}/#{name}")
|
44
46
|
end
|
45
47
|
end
|
46
48
|
end
|
@@ -2,6 +2,7 @@ require 'fileutils'
|
|
2
2
|
require 'erb'
|
3
3
|
require 'open3'
|
4
4
|
require 'base64'
|
5
|
+
require_relative 'common'
|
5
6
|
|
6
7
|
module Kontena
|
7
8
|
module Machine
|
@@ -9,6 +10,7 @@ module Kontena
|
|
9
10
|
class NodeProvisioner
|
10
11
|
include Kontena::Machine::RandomName
|
11
12
|
include Kontena::Cli::ShellSpinner
|
13
|
+
include Common
|
12
14
|
|
13
15
|
attr_reader :client, :api_client
|
14
16
|
|
@@ -31,15 +33,23 @@ module Kontena
|
|
31
33
|
vm_name = opts[:name] || generate_name
|
32
34
|
cloud_service_name = generate_cloud_service_name(vm_name, opts[:grid])
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
36
|
+
coreos_image = nil
|
37
|
+
spinner "Finding latest #{'CoreOS stable'.colorize(:cyan)} image" do
|
38
|
+
coreos_image = find_coreos_image
|
39
|
+
end
|
40
|
+
abort('Cannot find CoreOS image') if coreos_image.nil?
|
41
|
+
|
42
|
+
if opts[:virtual_network].nil?
|
43
|
+
location = opts[:location].downcase.gsub(' ', '-')
|
44
|
+
default_network_name = "kontena-#{location}"
|
45
|
+
spinner "Creating virtual network #{default_network_name}" do
|
38
46
|
create_virtual_network(default_network_name, opts[:location]) unless virtual_network_exist?(default_network_name)
|
39
|
-
opts[:virtual_network] = default_network_name
|
40
|
-
opts[:subnet] = 'subnet-1'
|
41
47
|
end
|
48
|
+
opts[:virtual_network] = default_network_name
|
49
|
+
opts[:subnet] = 'subnet-1'
|
50
|
+
end
|
42
51
|
|
52
|
+
spinner "Creating Azure Virtual Machine #{vm_name.colorize(:cyan)}" do
|
43
53
|
userdata_vars = {
|
44
54
|
version: opts[:version],
|
45
55
|
master_uri: opts[:master_uri],
|
@@ -50,7 +60,7 @@ module Kontena
|
|
50
60
|
vm_name: vm_name,
|
51
61
|
vm_user: 'core',
|
52
62
|
location: opts[:location],
|
53
|
-
image:
|
63
|
+
image: coreos_image,
|
54
64
|
custom_data: Base64.encode64(user_data(userdata_vars)),
|
55
65
|
ssh_key: File.expand_path(opts[:ssh_key])
|
56
66
|
}
|
@@ -59,13 +69,13 @@ module Kontena
|
|
59
69
|
deployment_name: vm_name,
|
60
70
|
virtual_network_name: opts[:virtual_network],
|
61
71
|
subnet_name: opts[:subnet],
|
62
|
-
tcp_endpoints: '80',
|
72
|
+
tcp_endpoints: '80,443,6783',
|
73
|
+
udp_endpoints: '1194,6783,6784',
|
63
74
|
private_key_file: opts[:ssh_key],
|
64
75
|
ssh_port: 22,
|
65
76
|
vm_size: opts[:size],
|
66
77
|
}
|
67
78
|
|
68
|
-
|
69
79
|
client.vm_management.create_virtual_machine(params,options)
|
70
80
|
end
|
71
81
|
spinner "Waiting for node #{vm_name.colorize(:cyan)} join to grid #{opts[:grid].colorize(:cyan)} " do
|
@@ -110,20 +120,10 @@ module Kontena
|
|
110
120
|
client.cloud_service_management.get_cloud_service(name)
|
111
121
|
end
|
112
122
|
|
113
|
-
def virtual_network_exist?(name)
|
114
|
-
client.network_management.list_virtual_networks.find{|n| n.name == name}
|
115
|
-
end
|
116
|
-
|
117
|
-
def create_virtual_network(name, location)
|
118
|
-
address_space = ['10.0.0.0/20']
|
119
|
-
options = {subnet: [{:name => 'subnet-1', :ip_address=>'10.0.0.0', :cidr=>23}]}
|
120
|
-
client.network_management.set_network_configuration(name, location, address_space, options)
|
121
|
-
end
|
122
|
-
|
123
123
|
def set_labels(node, labels)
|
124
124
|
data = {}
|
125
125
|
data[:labels] = labels
|
126
|
-
api_client.put("nodes/#{node['id']}
|
126
|
+
api_client.put("nodes/#{node['grid']['id']}/#{node['id']}", data)
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
data/lib/kontena/plugin/azure.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
module Kontena::Plugin::Azure::Common
|
3
|
+
LOCATIONS = [
|
4
|
+
'East US',
|
5
|
+
'East US 2',
|
6
|
+
'Central US',
|
7
|
+
'North Central US',
|
8
|
+
'South Central US',
|
9
|
+
'West Central US',
|
10
|
+
'West US',
|
11
|
+
'West US 2',
|
12
|
+
'US Gov Virginia',
|
13
|
+
'US Gov Iowa',
|
14
|
+
'Canada East',
|
15
|
+
'Canada Central',
|
16
|
+
'Brazil South',
|
17
|
+
|
18
|
+
'North Europe',
|
19
|
+
'West Europe',
|
20
|
+
'Germany Central',
|
21
|
+
'Germany Northeast',
|
22
|
+
'UK West',
|
23
|
+
'UK South',
|
24
|
+
|
25
|
+
'Southeast Asia',
|
26
|
+
'East Asia',
|
27
|
+
'Australia East',
|
28
|
+
'Australia Southeast',
|
29
|
+
'Central India',
|
30
|
+
'West India',
|
31
|
+
'South India',
|
32
|
+
'Japan East',
|
33
|
+
'Japan West',
|
34
|
+
'China East',
|
35
|
+
'China North'
|
36
|
+
].freeze
|
37
|
+
|
38
|
+
SIZES = [
|
39
|
+
'ExtraSmall',
|
40
|
+
'Small',
|
41
|
+
'Medium',
|
42
|
+
'Large',
|
43
|
+
'ExtraLarge'
|
44
|
+
]
|
45
|
+
|
46
|
+
def locations
|
47
|
+
LOCATIONS
|
48
|
+
end
|
49
|
+
|
50
|
+
def sizes
|
51
|
+
SIZES
|
52
|
+
end
|
53
|
+
end
|
@@ -1,24 +1,26 @@
|
|
1
1
|
require 'securerandom'
|
2
|
+
require_relative '../common'
|
2
3
|
|
3
4
|
module Kontena::Plugin::Azure::Master
|
4
5
|
class CreateCommand < Kontena::Command
|
5
6
|
include Kontena::Cli::Common
|
7
|
+
include Kontena::Plugin::Azure::Common
|
6
8
|
|
7
9
|
option "--name", "[NAME]", "Set Master name"
|
8
10
|
option "--subscription-id", "SUBSCRIPTION ID", "Azure subscription id", required: true
|
9
11
|
option "--subscription-cert", "CERTIFICATE", "Path to Azure management certificate", attribute_name: :certificate, required: true
|
10
|
-
option "--size", "SIZE", "
|
12
|
+
option "--size", "SIZE", "Virtual machine size, see https://docs.microsoft.com/en-us/azure/virtual-machines/virtual-machines-windows-sizes", required: true
|
11
13
|
option "--network", "NETWORK", "Virtual Network name"
|
12
14
|
option "--subnet", "SUBNET", "Subnet name"
|
13
15
|
option "--ssh-key", "SSH KEY", "SSH private key file", required: true
|
14
|
-
option "--location", "LOCATION", "Location",
|
16
|
+
option "--location", "LOCATION", "Location", required: true
|
15
17
|
option "--ssl-cert", "SSL CERT", "SSL certificate file"
|
16
18
|
option "--vault-secret", "VAULT_SECRET", "Secret key for Vault"
|
17
19
|
option "--vault-iv", "VAULT_IV", "Initialization vector for Vault"
|
18
20
|
option "--version", "VERSION", "Define installed Kontena version", default: 'latest'
|
19
21
|
|
20
22
|
def execute
|
21
|
-
|
23
|
+
require_relative '../../../machine/azure'
|
22
24
|
provisioner = provisioner(subscription_id, certificate)
|
23
25
|
provisioner.run!(
|
24
26
|
name: name,
|
@@ -41,5 +43,27 @@ module Kontena::Plugin::Azure::Master
|
|
41
43
|
def provisioner(subscription_id, certificate)
|
42
44
|
Kontena::Machine::Azure::MasterProvisioner.new subscription_id, certificate
|
43
45
|
end
|
46
|
+
|
47
|
+
def default_location
|
48
|
+
prompt.select("Choose location: ") do |menu|
|
49
|
+
locations.each do |l|
|
50
|
+
menu.choice l
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def default_size
|
56
|
+
size = prompt.select("Choose virtual machine size: ") do |menu|
|
57
|
+
menu.default 2
|
58
|
+
sizes.each do |s|
|
59
|
+
menu.choice s
|
60
|
+
end
|
61
|
+
menu.choice 'Other'
|
62
|
+
end
|
63
|
+
if size == 'Other'
|
64
|
+
size = prompt.ask("Virtual machine size? (see https://docs.microsoft.com/en-us/azure/virtual-machines/virtual-machines-windows-sizes#size-tables)")
|
65
|
+
end
|
66
|
+
size
|
67
|
+
end
|
44
68
|
end
|
45
69
|
end
|
@@ -1,15 +1,17 @@
|
|
1
|
+
require_relative '../common'
|
1
2
|
module Kontena::Plugin::Azure::Nodes
|
2
3
|
class CreateCommand < Kontena::Command
|
3
4
|
include Kontena::Cli::Common
|
4
5
|
include Kontena::Cli::GridOptions
|
6
|
+
include Kontena::Plugin::Azure::Common
|
5
7
|
|
6
|
-
option "--subscription-id", "
|
7
|
-
option "--subscription-cert", "
|
8
|
-
option "--size", "SIZE", "
|
8
|
+
option "--subscription-id", "ID", "Azure subscription id", required: true
|
9
|
+
option "--subscription-cert", "CERT", "Path to Azure management certificate", attribute_name: :certificate, required: true
|
10
|
+
option "--size", "SIZE", "Virtual machine size, see https://docs.microsoft.com/en-us/azure/virtual-machines/virtual-machines-windows-sizes", required: true
|
11
|
+
option "--ssh-key", "SSH KEY", "SSH private key file", required: true
|
12
|
+
option "--location", "LOCATION", "Location", required: true
|
9
13
|
option "--network", "NETWORK", "Virtual Network name"
|
10
14
|
option "--subnet", "SUBNET", "Subnet name"
|
11
|
-
option "--ssh-key", "SSH KEY", "SSH private key file", required: true
|
12
|
-
option "--location", "LOCATION", "Location", default: 'West Europe'
|
13
15
|
option "--version", "VERSION", "Define installed Kontena version", default: 'latest'
|
14
16
|
|
15
17
|
parameter "[NAME]", "Node name"
|
@@ -18,7 +20,7 @@ module Kontena::Plugin::Azure::Nodes
|
|
18
20
|
require_api_url
|
19
21
|
require_current_grid
|
20
22
|
|
21
|
-
|
23
|
+
require_relative '../../../machine/azure'
|
22
24
|
grid = fetch_grid
|
23
25
|
provisioner = provisioner(client(require_token), subscription_id, certificate)
|
24
26
|
provisioner.run!(
|
@@ -47,5 +49,28 @@ module Kontena::Plugin::Azure::Nodes
|
|
47
49
|
def fetch_grid
|
48
50
|
client(require_token).get("grids/#{current_grid}")
|
49
51
|
end
|
52
|
+
|
53
|
+
def default_location
|
54
|
+
prompt.select("Choose location: ") do |menu|
|
55
|
+
locations.each do |l|
|
56
|
+
menu.choice l
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def default_size
|
62
|
+
size = prompt.select("Choose virtual machine size: ") do |menu|
|
63
|
+
menu.default 3
|
64
|
+
sizes.each do |s|
|
65
|
+
menu.choice s
|
66
|
+
end
|
67
|
+
menu.choice 'Other'
|
68
|
+
end
|
69
|
+
if size == 'Other'
|
70
|
+
size = prompt.ask("Virtual machine size? (see https://docs.microsoft.com/en-us/azure/virtual-machines/virtual-machines-windows-sizes#size-tables)")
|
71
|
+
end
|
72
|
+
|
73
|
+
size
|
74
|
+
end
|
50
75
|
end
|
51
76
|
end
|
@@ -6,12 +6,15 @@ module Kontena::Plugin::Azure::Nodes
|
|
6
6
|
parameter "NAME", "Node name"
|
7
7
|
option "--subscription-id", "SUBSCRIPTION ID", "Azure subscription id", required: true
|
8
8
|
option "--subscription-cert", "CERTIFICATE", "Path to Azure management certificate", attribute_name: :certificate, required: true
|
9
|
+
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
9
10
|
|
10
11
|
def execute
|
11
12
|
require_api_url
|
12
13
|
require_current_grid
|
13
14
|
|
14
|
-
|
15
|
+
confirm_command(name) unless forced?
|
16
|
+
|
17
|
+
require_relative '../../../machine/azure'
|
15
18
|
|
16
19
|
grid = fetch_grid
|
17
20
|
destroyer = destroyer(client(require_token), subscription_id, certificate)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kontena-plugin-azure
|
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-01-
|
11
|
+
date: 2017-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kontena-cli
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.7.
|
47
|
+
version: 0.7.7
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.7.
|
54
|
+
version: 0.7.7
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '10.0'
|
83
|
-
description: Kontena Microsoft Azure plugin
|
83
|
+
description: Kontena Microsoft Azure (classic) plugin
|
84
84
|
email:
|
85
85
|
- info@kontena.io
|
86
86
|
executables: []
|
@@ -98,11 +98,13 @@ files:
|
|
98
98
|
- lib/kontena/machine/azure.rb
|
99
99
|
- lib/kontena/machine/azure/cloudinit.yml
|
100
100
|
- lib/kontena/machine/azure/cloudinit_master.yml
|
101
|
+
- lib/kontena/machine/azure/common.rb
|
101
102
|
- lib/kontena/machine/azure/logger.rb
|
102
103
|
- lib/kontena/machine/azure/master_provisioner.rb
|
103
104
|
- lib/kontena/machine/azure/node_destroyer.rb
|
104
105
|
- lib/kontena/machine/azure/node_provisioner.rb
|
105
106
|
- lib/kontena/plugin/azure.rb
|
107
|
+
- lib/kontena/plugin/azure/common.rb
|
106
108
|
- lib/kontena/plugin/azure/master/create_command.rb
|
107
109
|
- lib/kontena/plugin/azure/master_command.rb
|
108
110
|
- lib/kontena/plugin/azure/node_command.rb
|
@@ -134,5 +136,5 @@ rubyforge_project:
|
|
134
136
|
rubygems_version: 2.4.5
|
135
137
|
signing_key:
|
136
138
|
specification_version: 4
|
137
|
-
summary: Kontena Azure plugin
|
139
|
+
summary: Kontena Azure (classic) plugin
|
138
140
|
test_files: []
|