cfn-vpn 0.4.2 → 0.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f6be01a5786f8ea62be6d6b7f781ad1036b8edff08ba7d509707565fbeb5862
4
- data.tar.gz: 9a9a2038b6c955871983649f1c2627c6c2eedf9a64cae20ceb04ba73c25a3616
3
+ metadata.gz: 55d1d34bbcec9a355d6b73ce1d9156d4eeaed551ae70d1591771a98bcd81f12a
4
+ data.tar.gz: 0d79be873bd64fed0f9821c6da9b6f8e39ebbb0c1582a3289046277bf8521bdb
5
5
  SHA512:
6
- metadata.gz: d0a839efc1e6d5826fc9b9edfcd3c608b0eb3a1f6b79df624de1be888b4d817a4c9c6994e9ea806e002998e0affa9cb5b0db1b25c04fa12677181e7d504fc958
7
- data.tar.gz: 051bc8385ced35fafbcffa4b013cb8e4d962dafb74f88c1574df4684f37b64fd074dfa4bdcdba0edafa3bc3dee855bd83217a3c23a00f60be6c18dad6f728052
6
+ metadata.gz: 80e02dc0d11a30bcc07c509d5f1c5e11c5a176e54ca3fd9e6f41d26a8cedeefe292ce2a48fe4e94b804ed2b6974374034a36092e163a77afe39a39beb9a7c2a7
7
+ data.tar.gz: 9fb519ef4dc2ccc28a7d03fb9c341c8107084ddf6aaadfece24b8108a07b10a2142e675b8fe563d097d8c2c868eb0835ebaa6483ebd744a93380b14a76641a7a
@@ -0,0 +1,26 @@
1
+ FROM ruby:2.7-alpine
2
+
3
+ RUN apk add --no-cache easy-rsa git \
4
+ # Hack until easy-rsa 3.0.7 is released https://github.com/OpenVPN/easy-rsa/issues/261
5
+ && sed -i 's/^RANDFILE\s*=\s\$ENV.*/#&/' /usr/share/easy-rsa/openssl-easyrsa.cnf \
6
+ && ln -s /usr/share/easy-rsa/easyrsa /usr/bin/
7
+
8
+ ENV EASYRSA=/usr/share/easy-rsa
9
+ ENV EASYRSA_BATCH=yes
10
+
11
+ ARG CFNVPN_VERSION="0.5.0"
12
+
13
+ COPY . /src
14
+
15
+ WORKDIR /src
16
+
17
+ RUN gem build cfn-vpn.gemspec \
18
+ && gem install cfn-vpn-${CFNVPN_VERSION}.gem \
19
+ && rm -rf /src
20
+
21
+ RUN addgroup -g 1000 cfnvpn && \
22
+ adduser -D -u 1000 -G cfnvpn cfnvpn
23
+
24
+ USER cfnvpn
25
+
26
+ RUN cfndsl -u 9.0.0
@@ -38,7 +38,6 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency "thor", "~> 0.20"
39
39
  spec.add_dependency "terminal-table", '~> 1', '<2'
40
40
  spec.add_dependency 'cfhighlander', '~> 0.9', '<1'
41
- spec.add_dependency 'cfndsl', '~> 0.17', '<1'
42
41
  spec.add_dependency 'netaddr', '2.0.4'
43
42
  spec.add_runtime_dependency 'aws-sdk-ec2', '~> 1.95', '<2'
44
43
  spec.add_runtime_dependency 'aws-sdk-acm', '~> 1', '<2'
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'mkmf'
2
3
  require 'cfnvpn/acm'
3
4
  require 'cfnvpn/s3'
4
5
  require 'cfnvpn/log'
@@ -7,38 +8,76 @@ module CfnVpn
7
8
  class Certificates
8
9
  include CfnVpn::Log
9
10
 
10
- def initialize(build_dir,cfnvpn_name)
11
+ def initialize(build_dir, cfnvpn_name, easyrsa_local = false)
11
12
  @cfnvpn_name = cfnvpn_name
13
+ @easyrsa_local = easyrsa_local
14
+
15
+ if @easyrsa_local
16
+ unless which('easyrsa')
17
+ raise "Unable to find `easyrsa` in your path. Check your path or remove the `--easyrsa-local` flag to run from docker"
18
+ end
19
+ end
20
+
21
+ @build_dir = build_dir
12
22
  @config_dir = "#{build_dir}/config"
13
23
  @cert_dir = "#{build_dir}/certificates"
24
+ @pki_dir = "#{build_dir}/pki"
14
25
  @docker_cmd = %w(docker run -it --rm)
15
- @easyrsa_image = "base2/aws-client-vpn"
26
+ @easyrsa_image = " base2/aws-client-vpn"
16
27
  FileUtils.mkdir_p(@cert_dir)
28
+ FileUtils.mkdir_p(@pki_dir)
17
29
  end
18
30
 
19
31
  def generate_ca(server_cn,client_cn)
20
- @docker_cmd << "-e EASYRSA_REQ_CN=#{server_cn}"
21
- @docker_cmd << "-e EASYRSA_CLIENT_CN=#{client_cn}"
22
- @docker_cmd << "-v #{@cert_dir}:/easy-rsa/output"
23
- @docker_cmd << @easyrsa_image
24
- @docker_cmd << "sh -c 'create-ca'"
25
- return `#{@docker_cmd.join(' ')}`
32
+ if @easyrsa_local
33
+ ENV["EASYRSA_REQ_CN"] = server_cn
34
+ ENV["EASYRSA_PKI"] = @pki_dir
35
+ system("easyrsa init-pki")
36
+ system("easyrsa build-ca nopass")
37
+ system("easyrsa build-server-full server nopass")
38
+ system("easyrsa build-client-full #{client_cn} nopass")
39
+ FileUtils.cp(["#{@pki_dir}/ca.crt", "#{@pki_dir}/issued/server.crt", "#{@pki_dir}/private/server.key", "#{@pki_dir}/issued/#{client_cn}.crt", "#{@pki_dir}/private/#{client_cn}.key"], @cert_dir)
40
+ system("tar czfv #{@cert_dir}/ca.tar.gz -C #{@build_dir} pki/")
41
+ else
42
+ @docker_cmd << "-e EASYRSA_REQ_CN=#{server_cn}"
43
+ @docker_cmd << "-e EASYRSA_CLIENT_CN=#{client_cn}"
44
+ @docker_cmd << "-v #{@cert_dir}:/easy-rsa/output"
45
+ @docker_cmd << @easyrsa_image
46
+ @docker_cmd << "sh -c 'create-ca'"
47
+ Log.logger.debug `#{@docker_cmd.join(' ')}`
48
+ end
26
49
  end
27
50
 
28
51
  def generate_client(client_cn)
29
- @docker_cmd << "-e EASYRSA_CLIENT_CN=#{client_cn}"
30
- @docker_cmd << "-v #{@cert_dir}:/easy-rsa/output"
31
- @docker_cmd << @easyrsa_image
32
- @docker_cmd << "sh -c 'create-client'"
33
- return `#{@docker_cmd.join(' ')}`
52
+ if @easyrsa_local
53
+ ENV["EASYRSA_PKI"] = @pki_dir
54
+ system("tar xzfv #{@cert_dir}/ca.tar.gz --directory #{@build_dir}")
55
+ system("easyrsa build-client-full #{client_cn} nopass")
56
+ system("tar czfv #{@cert_dir}/#{client_cn}.tar.gz -C #{@build_dir} pki/issued/#{client_cn}.crt pki/private/#{client_cn}.key pki/reqs/#{client_cn}.req")
57
+ else
58
+ @docker_cmd << "-e EASYRSA_CLIENT_CN=#{client_cn}"
59
+ @docker_cmd << "-v #{@cert_dir}:/easy-rsa/output"
60
+ @docker_cmd << @easyrsa_image
61
+ @docker_cmd << "sh -c 'create-client'"
62
+ Log.logger.debug `#{@docker_cmd.join(' ')}`
63
+ end
34
64
  end
35
65
 
36
66
  def revoke_client(client_cn)
37
- @docker_cmd << "-e EASYRSA_CLIENT_CN=#{client_cn}"
38
- @docker_cmd << "-v #{@cert_dir}:/easy-rsa/output"
39
- @docker_cmd << @easyrsa_image
40
- @docker_cmd << "sh -c 'revoke-client'"
41
- return `#{@docker_cmd.join(' ')}`
67
+ if @easyrsa_local
68
+ ENV["EASYRSA_PKI"] = @pki_dir
69
+ system("tar xzfv #{@cert_dir}/ca.tar.gz --directory #{@build_dir}")
70
+ system("tar xzfv #{@cert_dir}/#{client_cn}.tar.gz --directory #{@build_dir}")
71
+ system("easyrsa revoke #{client_cn}")
72
+ system("easyrsa gen-crl")
73
+ FileUtils.cp("#{@pki_dir}/crl.pem", @cert_dir)
74
+ else
75
+ @docker_cmd << "-e EASYRSA_CLIENT_CN=#{client_cn}"
76
+ @docker_cmd << "-v #{@cert_dir}:/easy-rsa/output"
77
+ @docker_cmd << @easyrsa_image
78
+ @docker_cmd << "sh -c 'revoke-client'"
79
+ Log.logger.debug `#{@docker_cmd.join(' ')}`
80
+ end
42
81
  end
43
82
 
44
83
  def upload_certificates(region,cert,type,cn=nil)
@@ -65,6 +104,17 @@ module CfnVpn
65
104
  `tar xzfv #{tar} -C #{@config_dir} --strip 2`
66
105
  File.delete(tar) if File.exist?(tar)
67
106
  end
107
+
108
+ def which(cmd)
109
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
110
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
111
+ exts.each do |ext|
112
+ exe = File.join(path, "#{cmd}#{ext}")
113
+ return exe if File.executable?(exe) && !File.directory?(exe)
114
+ end
115
+ end
116
+ nil
117
+ end
68
118
 
69
119
  end
70
120
  end
@@ -1,6 +1,8 @@
1
1
  require 'thor'
2
+ require 'fileutils'
2
3
  require 'cfnvpn/log'
3
4
  require 'cfnvpn/s3'
5
+ require 'cfnvpn/globals'
4
6
 
5
7
  module CfnVpn
6
8
  class Client < Thor::Group
@@ -15,6 +17,7 @@ module CfnVpn
15
17
 
16
18
  class_option :bucket, desc: 's3 bucket', required: true
17
19
  class_option :client_cn, desc: 'client certificate common name', required: true
20
+ class_option :easyrsa_local, type: :boolean, default: false, desc: 'run the easyrsa executable from your local rather than from docker'
18
21
 
19
22
  def self.source_root
20
23
  File.dirname(__FILE__)
@@ -25,15 +28,16 @@ module CfnVpn
25
28
  end
26
29
 
27
30
  def set_directory
28
- @build_dir = "#{ENV['HOME']}/.cfnvpn/#{@name}"
31
+ @build_dir = "#{CfnVpn.cfnvpn_path}/#{@name}"
29
32
  @cert_dir = "#{@build_dir}/certificates"
33
+ FileUtils.mkdir_p(@cert_dir)
30
34
  end
31
35
 
32
36
  def create_certificate
33
37
  s3 = CfnVpn::S3.new(@options['region'],@options['bucket'],@name)
34
38
  s3.get_object("#{@cert_dir}/ca.tar.gz")
35
39
  Log.logger.info "Generating new client certificate #{@options['client_cn']} using openvpn easy-rsa"
36
- cert = CfnVpn::Certificates.new(@build_dir,@name)
40
+ cert = CfnVpn::Certificates.new(@build_dir,@name,@options['easyrsa_local'])
37
41
  Log.logger.debug cert.generate_client(@options['client_cn'])
38
42
  s3.store_object("#{@cert_dir}/#{@options['client_cn']}.tar.gz")
39
43
  end
@@ -1,5 +1,6 @@
1
1
  require 'cfnvpn/clientvpn'
2
2
  require 'cfnvpn/log'
3
+ require 'cfnvpn/globals'
3
4
 
4
5
  module CfnVpn
5
6
  class Config < Thor::Group
@@ -13,7 +14,7 @@ module CfnVpn
13
14
  class_option :verbose, desc: 'set log level to debug', type: :boolean
14
15
  class_option :bucket, required: true, desc: 's3 bucket'
15
16
  class_option :client_cn, required: true, desc: "client certificates to download"
16
-
17
+ class_option :easyrsa_local, type: :boolean, default: false, desc: 'run the easyrsa executable from your local rather than from docker'
17
18
  class_option :ignore_routes, alias: :i, type: :boolean, desc: "Ignore client VPN pushed routes and set routes in config file"
18
19
 
19
20
  def self.source_root
@@ -25,7 +26,7 @@ module CfnVpn
25
26
  end
26
27
 
27
28
  def create_config_directory
28
- @build_dir = "#{ENV['HOME']}/.cfnvpn/#{@name}"
29
+ @build_dir = "#{CfnVpn.cfnvpn_path}/#{@name}"
29
30
  @config_dir = "#{@build_dir}/config"
30
31
  Log.logger.debug("Creating config directory #{@config_dir}")
31
32
  FileUtils.mkdir_p(@config_dir)
@@ -48,7 +49,7 @@ module CfnVpn
48
49
  Log.logger.info "Downloading certificates for #{@options['client_cn']} to #{@config_dir}"
49
50
  s3 = CfnVpn::S3.new(@options['region'],@options['bucket'],@name)
50
51
  s3.get_object("#{@config_dir}/#{@options['client_cn']}.tar.gz")
51
- cert = CfnVpn::Certificates.new(@build_dir,@name)
52
+ cert = CfnVpn::Certificates.new(@build_dir,@name,@options['easyrsa_local'])
52
53
  Log.logger.debug cert.extract_certificate(@options['client_cn'])
53
54
  end
54
55
  end
@@ -1,5 +1,6 @@
1
1
  require 'cfnvpn/log'
2
2
  require 'cfnvpn/s3'
3
+ require 'cfnvpn/globals'
3
4
 
4
5
  module CfnVpn
5
6
  class Embedded < Thor::Group
@@ -13,7 +14,8 @@ module CfnVpn
13
14
  class_option :verbose, desc: 'set log level to debug', type: :boolean
14
15
 
15
16
  class_option :bucket, required: true, desc: 'S3 bucket'
16
- class_option :client_cn, required: true, desc: 'Client certificates to download'
17
+ class_option :client_cn, required: true, default: false, desc: 'Client certificates to download'
18
+ class_option :easyrsa_local, type: :boolean, default: false, desc: 'run the easyrsa executable from your local rather than from docker'
17
19
  class_option :ignore_routes, alias: :i, type: :boolean, desc: 'Ignore client VPN pushed routes and set routes in config file'
18
20
 
19
21
  def self.source_root
@@ -25,7 +27,7 @@ module CfnVpn
25
27
  end
26
28
 
27
29
  def create_config_directory
28
- @build_dir = "#{ENV['HOME']}/.cfnvpn/#{@name}"
30
+ @build_dir = "#{CfnVpn.cfnvpn_path}/#{@name}"
29
31
  @config_dir = "#{@build_dir}/config"
30
32
  Log.logger.debug("Creating config directory #{@config_dir}")
31
33
  FileUtils.mkdir_p(@config_dir)
@@ -41,7 +43,7 @@ module CfnVpn
41
43
  Log.logger.info "Downloading certificates for #{@options['client_cn']} to #{@config_dir}"
42
44
  s3 = CfnVpn::S3.new(@options['region'],@options['bucket'],@name)
43
45
  s3.get_object("#{@config_dir}/#{@options['client_cn']}.tar.gz")
44
- cert = CfnVpn::Certificates.new(@build_dir,@name)
46
+ cert = CfnVpn::Certificates.new(@build_dir,@name,@options['easyrsa_local'])
45
47
  Log.logger.debug cert.extract_certificate(@options['client_cn'])
46
48
  end
47
49
  end
@@ -74,7 +76,7 @@ module CfnVpn
74
76
  end
75
77
 
76
78
  def embed_certs
77
- cert = CfnVpn::Certificates.new(@build_dir,@name)
79
+ cert = CfnVpn::Certificates.new(@build_dir,@name,@options['easyrsa_local'])
78
80
  Log.logger.debug cert.extract_certificate(@options['client_cn'])
79
81
  Log.logger.debug "Reading extracted certificate and private key"
80
82
  key = File.read("#{@config_dir}/#{@options['client_cn']}.key")
@@ -0,0 +1,16 @@
1
+ module CfnVpn
2
+ class << self
3
+
4
+ # Returns the filepath to the location CfnVpn will use for
5
+ # storage. Used for certificate generation as well as the
6
+ # download and upload location. Can be overridden by specifying
7
+ # a value for the ENV variable
8
+ # 'CFNVPN_PATH'.
9
+ #
10
+ # @return [String]
11
+ def cfnvpn_path
12
+ @cfnvpn_path ||= File.expand_path(ENV["CFNVPN_PATH"] || "~/.cfnvpn")
13
+ end
14
+
15
+ end
16
+ end
@@ -6,6 +6,7 @@ require 'cfnvpn/cfhighlander'
6
6
  require 'cfnvpn/cloudformation'
7
7
  require 'cfnvpn/log'
8
8
  require 'cfnvpn/clientvpn'
9
+ require 'cfnvpn/globals'
9
10
 
10
11
  module CfnVpn
11
12
  class Init < Thor::Group
@@ -20,6 +21,7 @@ module CfnVpn
20
21
 
21
22
  class_option :server_cn, required: true, desc: 'server certificate common name'
22
23
  class_option :client_cn, desc: 'client certificate common name'
24
+ class_option :easyrsa_local, type: :boolean, default: false, desc: 'run the easyrsa executable from your local rather than from docker'
23
25
  class_option :bucket, required: true, desc: 's3 bucket'
24
26
 
25
27
  class_option :subnet_id, required: true, desc: 'subnet id to associate your vpn with'
@@ -40,7 +42,7 @@ module CfnVpn
40
42
  end
41
43
 
42
44
  def create_build_directory
43
- @build_dir = "#{ENV['HOME']}/.cfnvpn/#{@name}"
45
+ @build_dir = "#{CfnVpn.cfnvpn_path}/#{@name}"
44
46
  Log.logger.debug "creating directory #{@build_dir}"
45
47
  FileUtils.mkdir_p(@build_dir)
46
48
  end
@@ -69,13 +71,13 @@ module CfnVpn
69
71
  # create certificates
70
72
  def generate_server_certificates
71
73
  Log.logger.info "Generating certificates using openvpn easy-rsa"
72
- cert = CfnVpn::Certificates.new(@build_dir,@name)
74
+ cert = CfnVpn::Certificates.new(@build_dir,@name,@options['easyrsa_local'])
73
75
  @client_cn = @options['client_cn'] ? @options['client_cn'] : "client-vpn.#{@options['server_cn']}"
74
- Log.logger.debug cert.generate_ca(@options['server_cn'],@client_cn)
76
+ cert.generate_ca(@options['server_cn'],@client_cn)
75
77
  end
76
78
 
77
79
  def upload_certificates
78
- cert = CfnVpn::Certificates.new(@build_dir,@name)
80
+ cert = CfnVpn::Certificates.new(@build_dir,@name,@options['easyrsa_local'])
79
81
  @config['parameters']['ServerCertificateArn'] = cert.upload_certificates(@options['region'],'server','server',@options['server_cn'])
80
82
  @config['parameters']['ClientCertificateArn'] = cert.upload_certificates(@options['region'],@client_cn,'client')
81
83
  s3 = CfnVpn::S3.new(@options['region'],@options['bucket'],@name)
@@ -6,6 +6,7 @@ require 'cfnvpn/cfhighlander'
6
6
  require 'cfnvpn/cloudformation'
7
7
  require 'cfnvpn/log'
8
8
  require 'cfnvpn/clientvpn'
9
+ require 'cfnvpn/globals'
9
10
 
10
11
  module CfnVpn
11
12
  class Modify < Thor::Group
@@ -35,7 +36,7 @@ module CfnVpn
35
36
  end
36
37
 
37
38
  def create_build_directory
38
- @build_dir = "#{ENV['HOME']}/.cfnvpn/#{@name}"
39
+ @build_dir = "#{CfnVpn.cfnvpn_path}/#{@name}"
39
40
  Log.logger.debug "creating directory #{@build_dir}"
40
41
  FileUtils.mkdir_p(@build_dir)
41
42
  end
@@ -1,6 +1,7 @@
1
1
  require 'thor'
2
2
  require 'cfnvpn/log'
3
3
  require 'cfnvpn/s3'
4
+ require 'cfnvpn/globals'
4
5
 
5
6
  module CfnVpn
6
7
  class Revoke < Thor::Group
@@ -15,6 +16,7 @@ module CfnVpn
15
16
 
16
17
  class_option :bucket, desc: 's3 bucket', required: true
17
18
  class_option :client_cn, desc: 'client certificate common name', required: true
19
+ class_option :easyrsa_local, type: :boolean, default: false, desc: 'run the easyrsa executable from your local rather than from docker'
18
20
 
19
21
  def self.source_root
20
22
  File.dirname(__FILE__)
@@ -25,12 +27,12 @@ module CfnVpn
25
27
  end
26
28
 
27
29
  def set_directory
28
- @build_dir = "#{ENV['HOME']}/.cfnvpn/#{@name}"
30
+ @build_dir = "#{CfnVpn.cfnvpn_path}/#{@name}"
29
31
  @cert_dir = "#{@build_dir}/certificates"
30
32
  end
31
33
 
32
34
  def revoke_certificate
33
- cert = CfnVpn::Certificates.new(@build_dir,@name)
35
+ cert = CfnVpn::Certificates.new(@build_dir,@name,@options['easyrsa_local'])
34
36
  s3 = CfnVpn::S3.new(@options['region'],@options['bucket'],@name)
35
37
  s3.get_object("#{@cert_dir}/ca.tar.gz")
36
38
  s3.get_object("#{@cert_dir}/#{@options['client_cn']}.tar.gz")
@@ -1,6 +1,7 @@
1
1
  require 'thor'
2
2
  require 'cfnvpn/log'
3
3
  require 'cfnvpn/s3'
4
+ require 'cfnvpn/globals'
4
5
 
5
6
  module CfnVpn
6
7
  class Routes < Thor::Group
@@ -26,7 +27,7 @@ module CfnVpn
26
27
  end
27
28
 
28
29
  def set_directory
29
- @build_dir = "#{ENV['HOME']}/.cfnvpn/#{@name}"
30
+ @build_dir = "#{CfnVpn.cfnvpn_path}/#{@name}"
30
31
  end
31
32
 
32
33
  def add_route
@@ -2,6 +2,7 @@ require 'thor'
2
2
  require 'terminal-table'
3
3
  require 'cfnvpn/log'
4
4
  require 'cfnvpn/clientvpn'
5
+ require 'cfnvpn/globals'
5
6
 
6
7
  module CfnVpn
7
8
  class Sessions < Thor::Group
@@ -25,7 +26,7 @@ module CfnVpn
25
26
  end
26
27
 
27
28
  def set_directory
28
- @build_dir = "#{ENV['HOME']}/.cfnvpn/#{@name}"
29
+ @build_dir = "#{CfnVpn.cfnvpn_path}/#{@name}"
29
30
  end
30
31
 
31
32
  def get_endpoint
@@ -1,4 +1,4 @@
1
1
  module CfnVpn
2
- VERSION = "0.4.2".freeze
2
+ VERSION = "0.5.0".freeze
3
3
  CHANGE_SET_VERSION = VERSION.gsub('.', '-').freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfn-vpn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guslington
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-14 00:00:00.000000000 Z
11
+ date: 2020-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -64,26 +64,6 @@ dependencies:
64
64
  - - "<"
65
65
  - !ruby/object:Gem::Version
66
66
  version: '1'
67
- - !ruby/object:Gem::Dependency
68
- name: cfndsl
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '0.17'
74
- - - "<"
75
- - !ruby/object:Gem::Version
76
- version: '1'
77
- type: :runtime
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '0.17'
84
- - - "<"
85
- - !ruby/object:Gem::Version
86
- version: '1'
87
67
  - !ruby/object:Gem::Dependency
88
68
  name: netaddr
89
69
  requirement: !ruby/object:Gem::Requirement
@@ -216,6 +196,7 @@ extra_rdoc_files: []
216
196
  files:
217
197
  - ".gitignore"
218
198
  - ".travis.yml"
199
+ - Dockerfile
219
200
  - Gemfile
220
201
  - Gemfile.lock
221
202
  - LICENSE.txt
@@ -232,6 +213,7 @@ files:
232
213
  - lib/cfnvpn/cloudformation.rb
233
214
  - lib/cfnvpn/config.rb
234
215
  - lib/cfnvpn/embedded.rb
216
+ - lib/cfnvpn/globals.rb
235
217
  - lib/cfnvpn/init.rb
236
218
  - lib/cfnvpn/log.rb
237
219
  - lib/cfnvpn/modify.rb