vagrant-aws-winrm 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vagrant-aws-winrm/capability.rb +24 -8
- data/lib/vagrant-aws-winrm/plugin.rb +30 -0
- data/lib/vagrant-aws-winrm/version.rb +1 -1
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 733d38beabc57d94aa97a155faea425928836425
|
4
|
+
data.tar.gz: aca4b5492132e3559d6d5f5c7a3fb74804bcc656
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59dc92c07945d9c14600b0ce05b37493f5a332368cef0968a171c93d724176b29ca3274a7cd80b59a8f8c92094e2cd18abdc793e89a96dd56e6cbcd4ff156f58
|
7
|
+
data.tar.gz: 8c972189f60eec62f95ef1dd81b4802f6047d78f7efa2c83d35ef56ba865cfddd7c07f84f68575dacb468d6ad725c905cd17eadbf2fe691b5bbc36b7075b4e87
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require "log4r"
|
1
2
|
require "aws-sdk"
|
2
3
|
|
3
4
|
module VagrantPlugins
|
@@ -5,33 +6,48 @@ module VagrantPlugins
|
|
5
6
|
module WinRM
|
6
7
|
class Capability
|
7
8
|
def self.winrm_info(machine)
|
9
|
+
logger = Log4r::Logger.new("vagrant_aws_winrm::capability::winrm_info")
|
10
|
+
|
8
11
|
if machine.config.winrm.password == :aws
|
9
|
-
machine.ui.info('Getting WinRM password from AWS')
|
12
|
+
machine.ui.info('Getting WinRM password from AWS...')
|
10
13
|
|
11
14
|
# AWS connection info
|
12
15
|
access_key_id = machine.provider_config.access_key_id
|
13
16
|
secret_access_key = machine.provider_config.secret_access_key
|
14
17
|
credentials = ::Aws::Credentials.new(access_key_id, secret_access_key)
|
15
18
|
region = machine.provider_config.region
|
19
|
+
region_config = machine.provider_config.get_region_config(region)
|
20
|
+
endpoint = region_config.endpoint
|
21
|
+
|
22
|
+
options = {
|
23
|
+
region: region,
|
24
|
+
credentials: credentials
|
25
|
+
}
|
26
|
+
|
27
|
+
# Account for custom endpoints (e.g. OpenStack)
|
28
|
+
options[:endpoint] = endpoint if endpoint
|
16
29
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
30
|
+
logger.info("Getting password data from AWS...")
|
31
|
+
logger.info(" -- Region: #{region}")
|
32
|
+
logger.info(" -- Endpoint: #{endpoint}") if endpoint
|
33
|
+
logger.info(" -- Instance ID: #{machine.id}")
|
21
34
|
|
22
|
-
|
23
|
-
ec2 = Aws::EC2::Client.new(region: region, endpoint: endpoint, credentials: credentials)
|
35
|
+
ec2 = Aws::EC2::Client.new(options)
|
24
36
|
password_data = ec2.get_password_data({ instance_id: machine.id }).password_data
|
25
37
|
password_data_bytes = Base64.decode64(password_data)
|
26
38
|
|
27
39
|
# Try to decrypt the password data using each one of the private key files
|
28
40
|
# set by the user until we hit one that decrypts successfully
|
29
41
|
machine.config.ssh.private_key_path.each do |private_key_path|
|
30
|
-
|
42
|
+
private_key_path = File.expand_path private_key_path
|
31
43
|
|
44
|
+
logger.info("Decrypting password data using #{private_key_path}")
|
45
|
+
rsa = OpenSSL::PKey::RSA.new File.read private_key_path
|
32
46
|
begin
|
33
47
|
machine.config.winrm.password = rsa.private_decrypt password_data_bytes
|
48
|
+
logger.info("Successfully decrypted password data using #{private_key_path}")
|
34
49
|
rescue OpenSSL::PKey::RSAError
|
50
|
+
logger.warn("Failed to decrypt password data using #{private_key_path}")
|
35
51
|
next
|
36
52
|
end
|
37
53
|
|
@@ -14,9 +14,39 @@ module VagrantPlugins
|
|
14
14
|
DESC
|
15
15
|
|
16
16
|
provider_capability(:aws, :winrm_info) do
|
17
|
+
setup_logging
|
18
|
+
|
17
19
|
require_relative 'capability'
|
18
20
|
VagrantPlugins::AWS::WinRM::Capability
|
19
21
|
end
|
22
|
+
|
23
|
+
def self.setup_logging
|
24
|
+
require "log4r"
|
25
|
+
|
26
|
+
level = nil
|
27
|
+
begin
|
28
|
+
level = Log4r.const_get(ENV["VAGRANT_LOG"].upcase)
|
29
|
+
rescue NameError
|
30
|
+
# This means that the logging constant wasn't found,
|
31
|
+
# which is fine. We just keep `level` as `nil`. But
|
32
|
+
# we tell the user.
|
33
|
+
level = nil
|
34
|
+
end
|
35
|
+
|
36
|
+
# Some constants, such as "true" resolve to booleans, so the
|
37
|
+
# above error checking doesn't catch it. This will check to make
|
38
|
+
# sure that the log level is an integer, as Log4r requires.
|
39
|
+
level = nil if !level.is_a?(Integer)
|
40
|
+
|
41
|
+
# Set the logging level on all "vagrant" namespaced
|
42
|
+
# logs as long as we have a valid level.
|
43
|
+
if level
|
44
|
+
logger = Log4r::Logger.new("vagrant_aws_winrm")
|
45
|
+
logger.outputters = Log4r::Outputter.stderr
|
46
|
+
logger.level = level
|
47
|
+
logger = nil
|
48
|
+
end
|
49
|
+
end
|
20
50
|
end
|
21
51
|
end
|
22
52
|
end
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-aws-winrm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafael Goodman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '2'
|
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
26
|
version: '2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
description: Facilitates using the AWS-EC2-provided Administrator password as the
|
@@ -46,7 +46,7 @@ executables: []
|
|
46
46
|
extensions: []
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
|
-
-
|
49
|
+
- .gitignore
|
50
50
|
- Gemfile
|
51
51
|
- LICENSE.txt
|
52
52
|
- README.md
|
@@ -66,12 +66,12 @@ require_paths:
|
|
66
66
|
- lib
|
67
67
|
required_ruby_version: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
|
-
- -
|
69
|
+
- - '>='
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - '>='
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
requirements: []
|