kontena-plugin-aws 0.1.0 → 0.2.0.pre1
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 +8 -8
- data/kontena-plugin-aws.gemspec +1 -1
- data/lib/kontena/machine/aws/cloudinit_master.yml +5 -2
- data/lib/kontena/machine/aws/master_provisioner.rb +24 -18
- data/lib/kontena/machine/aws/node_destroyer.rb +5 -5
- data/lib/kontena/machine/aws/node_provisioner.rb +6 -6
- data/lib/kontena/machine/aws/node_restarter.rb +2 -2
- data/lib/kontena/plugin/aws.rb +1 -1
- data/lib/kontena/plugin/aws/master/create_command.rb +4 -4
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjkzMTFkZDliMjJjNTI1NzhjYWFmMGZkYzllMzFmZDM2NjQxMzgwMQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ODIyMjJlNDM3NTRhOWNiM2UwZTJkZDRmZmEyY2U2ZDM0NjM1YTcxNQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MmUwNDkwZTdjNjRkMWQyNGYzYjM0M2ZmYjc0ODI3MDczYzA5YWQxZWFiODcx
|
10
|
+
ZDBhMzI0OTEyMWY4N2M1MmRlYzI2ZjRmNjE5ZGExZjEwY2E1OWE1NWYxMzk4
|
11
|
+
NTYxYjY1OTUxNWU4ZTg1MTgyMjUyNTJiZDgwODM0MjQ4ZDljY2Y=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjM4MGQ2YjMzZjUxMGE2ZTY3ODQ4ZTAzYmYzNDE5YmQ1Njc3OGQ3Nzg4YTcx
|
14
|
+
MTk3NzA1OWI0OWE4MjI4NjQyZWQ5ZTMxODIwM2M2MjYwYzJkOWE4Nzc5NDNl
|
15
|
+
ZjBlZDllOWVmNmY3MDY5MjI5YjM0MGMwZTVmM2MxOWJlNWM0NzY=
|
data/kontena-plugin-aws.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_runtime_dependency 'kontena-cli', '
|
20
|
+
spec.add_runtime_dependency 'kontena-cli', '~> 0.16.0.pre2'
|
21
21
|
spec.add_runtime_dependency 'aws-sdk', '~> 2.3', '>= 2.3.11'
|
22
22
|
spec.add_development_dependency "bundler", "~> 1.11"
|
23
23
|
spec.add_development_dependency "rake", "~> 10.0"
|
@@ -89,8 +89,11 @@ coreos:
|
|
89
89
|
--link kontena-server-mongo:mongodb \
|
90
90
|
-e MONGODB_URI=mongodb://mongodb:27017/kontena_server \
|
91
91
|
<% end -%>
|
92
|
-
<% if
|
93
|
-
-e
|
92
|
+
<% if server_name %>
|
93
|
+
-e KONTENA_SERVER_NAME=<%= server_name %> \
|
94
|
+
<% end -%>
|
95
|
+
<% if initial_admin_code %>
|
96
|
+
-e KONTENA_INITIAL_ADMIN_CODE=<%= intial_admin_code %> \
|
94
97
|
<% end -%>
|
95
98
|
-e VAULT_KEY=${KONTENA_VAULT_KEY} -e VAULT_IV=${KONTENA_VAULT_IV} \
|
96
99
|
kontena/server:${KONTENA_VERSION}
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'erb'
|
3
3
|
require 'open3'
|
4
|
-
require '
|
4
|
+
require 'securerandom'
|
5
|
+
|
5
6
|
require_relative 'common'
|
6
7
|
|
7
8
|
module Kontena::Machine::Aws
|
@@ -9,6 +10,8 @@ module Kontena::Machine::Aws
|
|
9
10
|
include Kontena::Machine::RandomName
|
10
11
|
include Kontena::Machine::CertHelper
|
11
12
|
include Common
|
13
|
+
include Kontena::Cli::ShellSpinner
|
14
|
+
|
12
15
|
attr_reader :ec2, :http_client, :region
|
13
16
|
|
14
17
|
# @param [String] access_key_id aws_access_key_id
|
@@ -27,7 +30,7 @@ module Kontena::Machine::Aws
|
|
27
30
|
abort('Invalid ssl cert') unless File.exists?(File.expand_path(opts[:ssl_cert]))
|
28
31
|
ssl_cert = File.read(File.expand_path(opts[:ssl_cert]))
|
29
32
|
else
|
30
|
-
|
33
|
+
spinner "Generating self-signed SSL certificate" do
|
31
34
|
ssl_cert = generate_self_signed_cert
|
32
35
|
end
|
33
36
|
end
|
@@ -41,20 +44,18 @@ module Kontena::Machine::Aws
|
|
41
44
|
subnet = ec2.subnet(opts[:subnet])
|
42
45
|
end
|
43
46
|
abort('Failed to find subnet!') unless subnet
|
44
|
-
|
47
|
+
|
48
|
+
name = opts[:name] || generate_name
|
49
|
+
|
50
|
+
userdata_vars = opts.merge(
|
45
51
|
ssl_cert: ssl_cert,
|
46
|
-
|
47
|
-
|
48
|
-
vault_secret: opts[:vault_secret],
|
49
|
-
vault_iv: opts[:vault_iv],
|
50
|
-
mongodb_uri: opts[:mongodb_uri]
|
51
|
-
}
|
52
|
+
server_name: name.sub('kontena-master-', '')
|
53
|
+
)
|
52
54
|
|
53
55
|
security_groups = opts[:security_groups] ?
|
54
56
|
resolve_security_groups_to_ids(opts[:security_groups], opts[:vpc]) :
|
55
57
|
ensure_security_group(opts[:vpc])
|
56
58
|
|
57
|
-
name = generate_name
|
58
59
|
ec2_instance = ec2.create_instances({
|
59
60
|
image_id: ami,
|
60
61
|
min_count: 1,
|
@@ -88,8 +89,8 @@ module Kontena::Machine::Aws
|
|
88
89
|
]
|
89
90
|
})
|
90
91
|
|
91
|
-
|
92
|
-
sleep
|
92
|
+
spinner "Creating AWS instance #{name.colorize(:cyan)} " do
|
93
|
+
sleep 1 until ec2_instance.reload.state.name == 'running'
|
93
94
|
end
|
94
95
|
public_ip = ec2_instance.reload.public_ip_address
|
95
96
|
if public_ip.nil?
|
@@ -99,13 +100,18 @@ module Kontena::Machine::Aws
|
|
99
100
|
master_url = "https://#{ec2_instance.public_ip_address}"
|
100
101
|
Excon.defaults[:ssl_verify_peer] = false
|
101
102
|
http_client = Excon.new(master_url, :connect_timeout => 10)
|
102
|
-
|
103
|
-
sleep
|
103
|
+
spinner "Waiting for #{name.colorize(:cyan)} to start " do
|
104
|
+
sleep 1 until master_running?(http_client)
|
104
105
|
end
|
105
106
|
end
|
106
|
-
|
107
|
-
puts "Kontena Master is now running at #{master_url}"
|
108
|
-
puts
|
107
|
+
puts
|
108
|
+
puts "Kontena Master is now running at #{master_url}".colorize(:green)
|
109
|
+
puts
|
110
|
+
{
|
111
|
+
name: name.sub('kontena-master-', ''),
|
112
|
+
public_ip: public_ip,
|
113
|
+
code: opts[:initial_admin_code]
|
114
|
+
}
|
109
115
|
end
|
110
116
|
|
111
117
|
##
|
@@ -116,7 +122,7 @@ module Kontena::Machine::Aws
|
|
116
122
|
group_id = resolve_security_groups_to_ids(group_name, vpc_id)
|
117
123
|
|
118
124
|
if group_id.empty?
|
119
|
-
|
125
|
+
spinner "Creating AWS security group" do
|
120
126
|
sg = create_security_group(group_name, vpc_id)
|
121
127
|
group_id = [sg.group_id]
|
122
128
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require 'shell-spinner'
|
2
|
-
|
3
1
|
module Kontena
|
4
2
|
module Machine
|
5
3
|
module Aws
|
6
4
|
class NodeDestroyer
|
7
5
|
|
6
|
+
include Kontena::Cli::ShellSpinner
|
7
|
+
|
8
8
|
attr_reader :ec2, :api_client
|
9
9
|
|
10
10
|
# @param [Kontena::Client] api_client Kontena api client
|
@@ -29,10 +29,10 @@ module Kontena
|
|
29
29
|
abort("There are multiple instances with name #{name}") if instances.to_a.size > 1
|
30
30
|
instance = instances.first
|
31
31
|
if instance
|
32
|
-
|
32
|
+
spinner "Terminating AWS instance #{name.colorize(:cyan)} " do
|
33
33
|
instance.terminate
|
34
34
|
until instance.reload.state.name.to_s == 'terminated'
|
35
|
-
sleep
|
35
|
+
sleep 1
|
36
36
|
end
|
37
37
|
end
|
38
38
|
else
|
@@ -40,7 +40,7 @@ module Kontena
|
|
40
40
|
end
|
41
41
|
node = api_client.get("grids/#{grid['id']}/nodes")['nodes'].find{|n| n['name'] == name}
|
42
42
|
if node
|
43
|
-
|
43
|
+
spinner "Removing node #{name.colorize(:cyan)} from grid #{grid['name'].colorize(:cyan)} " do
|
44
44
|
api_client.delete("grids/#{grid['id']}/nodes/#{name}")
|
45
45
|
end
|
46
46
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'erb'
|
3
3
|
require 'open3'
|
4
|
-
require 'shell-spinner'
|
5
4
|
require_relative 'common'
|
6
5
|
|
7
6
|
module Kontena::Machine::Aws
|
8
7
|
class NodeProvisioner
|
9
8
|
include Kontena::Machine::RandomName
|
9
|
+
include Kontena::Cli::ShellSpinner
|
10
10
|
include Common
|
11
11
|
|
12
12
|
attr_reader :ec2, :api_client
|
@@ -83,12 +83,12 @@ module Kontena::Machine::Aws
|
|
83
83
|
]
|
84
84
|
})
|
85
85
|
|
86
|
-
|
87
|
-
sleep
|
86
|
+
spinner "Creating AWS instance #{name.colorize(:cyan)} " do
|
87
|
+
sleep 1 until ec2_instance.reload.state.name == 'running'
|
88
88
|
end
|
89
89
|
node = nil
|
90
|
-
|
91
|
-
sleep
|
90
|
+
spinner "Waiting for node #{name.colorize(:cyan)} join to grid #{opts[:grid].colorize(:cyan)} " do
|
91
|
+
sleep 1 until node = instance_exists_in_grid?(opts[:grid], name)
|
92
92
|
end
|
93
93
|
labels = [
|
94
94
|
"region=#{region}",
|
@@ -106,7 +106,7 @@ module Kontena::Machine::Aws
|
|
106
106
|
group_id = resolve_security_groups_to_ids(group_name, vpc_id)
|
107
107
|
|
108
108
|
if group_id.empty?
|
109
|
-
|
109
|
+
spinner "Creating AWS security group" do
|
110
110
|
sg = create_security_group(group_name, vpc_id)
|
111
111
|
group_id = [sg.group_id]
|
112
112
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require 'shell-spinner'
|
2
1
|
require_relative 'common'
|
3
2
|
|
4
3
|
module Kontena::Machine::Aws
|
5
4
|
class NodeRestarter
|
6
5
|
include Common
|
6
|
+
include Kontena::Cli::ShellSpinner
|
7
7
|
|
8
8
|
attr_reader :ec2, :api_client
|
9
9
|
|
@@ -26,7 +26,7 @@ module Kontena::Machine::Aws
|
|
26
26
|
abort("There are multiple instances with name #{name}") if instances.to_a.size > 1
|
27
27
|
instance = instances.first
|
28
28
|
if instance
|
29
|
-
|
29
|
+
spinner "Restarting AWS instance #{name.colorize(:cyan)} " do
|
30
30
|
instance.reboot(dry_run: false)
|
31
31
|
end
|
32
32
|
else
|
data/lib/kontena/plugin/aws.rb
CHANGED
@@ -4,6 +4,7 @@ module Kontena::Plugin::Aws::Master
|
|
4
4
|
class CreateCommand < Kontena::Command
|
5
5
|
include Kontena::Cli::Common
|
6
6
|
|
7
|
+
option "--name", "[NAME]", "Set Master name"
|
7
8
|
option "--access-key", "ACCESS_KEY", "AWS access key ID", required: true
|
8
9
|
option "--secret-key", "SECRET_KEY", "AWS secret key", required: true
|
9
10
|
option "--key-pair", "KEY_PAIR", "EC2 key pair name", required: true
|
@@ -18,16 +19,15 @@ module Kontena::Plugin::Aws::Master
|
|
18
19
|
option "--vault-iv", "VAULT_IV", "Initialization vector for Vault (default: generate random iv)"
|
19
20
|
option "--mongodb-uri", "URI", "External MongoDB uri (optional)"
|
20
21
|
option "--version", "VERSION", "Define installed Kontena version", default: 'latest'
|
21
|
-
option "--auth-provider-url", "AUTH_PROVIDER_URL", "Define authentication provider url (optional)"
|
22
22
|
option "--associate-public-ip-address", :flag, "Whether to associated public IP in case the VPC defaults to not doing it", default: true, attribute_name: :associate_public_ip
|
23
23
|
option "--security-groups", "SECURITY_GROUPS", "Comma separated list of security groups (names) where the new instance will be attached (default: create 'kontena_master' group if not already existing)"
|
24
24
|
|
25
|
-
|
26
25
|
def execute
|
27
26
|
require 'kontena/machine/aws'
|
28
27
|
|
29
28
|
provisioner = provisioner(access_key, secret_key, region)
|
30
29
|
provisioner.run!(
|
30
|
+
name: name,
|
31
31
|
type: type,
|
32
32
|
vpc: vpc_id,
|
33
33
|
zone: zone,
|
@@ -36,12 +36,12 @@ module Kontena::Plugin::Aws::Master
|
|
36
36
|
storage: storage,
|
37
37
|
version: version,
|
38
38
|
key_pair: key_pair,
|
39
|
-
auth_server: auth_provider_url,
|
40
39
|
vault_secret: vault_secret || SecureRandom.hex(24),
|
41
40
|
vault_iv: vault_iv || SecureRandom.hex(24),
|
42
41
|
mongodb_uri: mongodb_uri,
|
43
42
|
associate_public_ip: associate_public_ip?,
|
44
|
-
security_groups: security_groups
|
43
|
+
security_groups: security_groups,
|
44
|
+
initial_admin_code: SecureRandom.hex(16)
|
45
45
|
)
|
46
46
|
end
|
47
47
|
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kontena-plugin-aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kontena, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kontena-cli
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.16.0.pre2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.16.0.pre2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: aws-sdk
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,9 +119,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
119
|
version: '0'
|
120
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - ! '
|
122
|
+
- - ! '>'
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: 1.3.1
|
125
125
|
requirements: []
|
126
126
|
rubyforge_project:
|
127
127
|
rubygems_version: 2.4.5
|