chef-vpc-toolkit 2.5.2 → 2.6.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.
data/CHANGELOG CHANGED
@@ -1,3 +1,11 @@
1
+ * Thu Jun 21 2011 Dan Prince <dan.prince@rackspace.com> - 2.6.0
2
+ - Update to support images that have Chef preinstalled.
3
+ - Skip missing nodes when trying to install Chef.
4
+ - Added vpn_connection_type option w/ support for using command line
5
+ openvpn or network_manager.
6
+ - Add support for 'udp' VPN protocol. Default protocol is 'tcp'.
7
+ UDP support requires Cloud Servers VPC 2.2.0 or greater.
8
+
1
9
  * Thu Apr 24 2011 Dan Prince <dan.prince@rackspace.com> - 2.5.2
2
10
  - Raise an error in the chef:poll_clients task if a timeout occurs.
3
11
  - Use CDN to install Chef for Ubuntu.
data/README.rdoc CHANGED
@@ -22,13 +22,15 @@ The Chef VPC Toolkit is a set of Rake tasks that provide a framework to help aut
22
22
 
23
23
  == Installation
24
24
 
25
- Requires Ruby and Rubygems. The app was developed with Ruby 1.8.7.
25
+ Requires Ruby and Rubygems. The app was developed with Ruby 1.8.7 and 1.9.2.
26
26
 
27
- The following gems are required:
27
+ The following gems are required when developing/building the toolkit gem:
28
28
 
29
29
  rake
30
30
  builder (2.1.2)
31
31
  json (> 1.4.3)
32
+ uuidtools
33
+ jeweler
32
34
 
33
35
  To install the gem:
34
36
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.5.2
1
+ 2.6.0
@@ -2,6 +2,7 @@
2
2
  "name": "test",
3
3
  "domain_name": "vpc",
4
4
  "description": "test description",
5
+ "vpn_device": "tun",
5
6
  "servers": {
6
7
  "login": {
7
8
  "image_id": "69",
@@ -8,7 +8,13 @@ cloud_servers_vpc_password:
8
8
  # The text editor to use for Chef knife commands. Used when a new server group
9
9
  # is created. Default: vim
10
10
  # knife_editor: vim
11
- #
11
+
12
12
  # VPN client name. The name given to this machine when connecting to a
13
13
  # server group as a VPN client.
14
14
  # vpn_client_name: local
15
+
16
+ # VPN connection type:
17
+ # -'openvpn' use command line openvpn to join the VPN
18
+ # -'network_manager' use Network Manager (Fedora 14 and Ubuntu 10.10 only)
19
+ #
20
+ vpn_connection_type: openvpn
@@ -3,6 +3,8 @@ require 'chef-vpc-toolkit/chef_installer'
3
3
  require 'chef-vpc-toolkit/ssh_util'
4
4
  require 'chef-vpc-toolkit/version'
5
5
  require 'chef-vpc-toolkit/xml_util'
6
+ require 'chef-vpc-toolkit/vpn_connection'
7
+ require 'chef-vpc-toolkit/vpn_openvpn'
6
8
  require 'chef-vpc-toolkit/vpn_network_manager'
7
9
  require 'chef-vpc-toolkit/cloud-servers-vpc/connection'
8
10
  require 'chef-vpc-toolkit/cloud-servers-vpc/client'
@@ -10,3 +12,19 @@ require 'chef-vpc-toolkit/cloud-servers-vpc/server'
10
12
  require 'chef-vpc-toolkit/cloud-servers-vpc/server_group'
11
13
  require 'chef-vpc-toolkit/cloud-servers-vpc/ssh_public_key'
12
14
  require 'chef-vpc-toolkit/cloud-servers-vpc/vpn_network_interface'
15
+
16
+ module ChefVPCToolkit
17
+
18
+ # Loads the appropriate VPN connection type based on
19
+ # the configuration variable 'vpn_connection_type'.
20
+ #
21
+ def self.get_vpn_connection(group, client = nil)
22
+ configs = Util.load_configs
23
+ if "#{configs['vpn_connection_type']}" == "network_manager"
24
+ VpnNetworkManager.new(group, client)
25
+ else
26
+ VpnOpenVpn.new(group, client)
27
+ end
28
+ end
29
+
30
+ end
@@ -29,6 +29,16 @@ def self.get_cookbook_repos(options)
29
29
  end
30
30
  end
31
31
 
32
+ def self.install_chef_script(install_type="CLIENT", os_type="")
33
+ return "" if os_type.nil? or os_type.empty?
34
+
35
+ return %{
36
+ #{IO.read(File.dirname(__FILE__) + "/chef_bootstrap/#{os_type}.bash")}
37
+ install_chef "#{install_type}"
38
+ }
39
+
40
+ end
41
+
32
42
  # validate the chef.json config file by parsing it
33
43
  def self.validate_json(options)
34
44
 
@@ -91,9 +101,8 @@ data=%x{
91
101
  ssh -o "StrictHostKeyChecking no" root@#{options['ssh_gateway_ip']} bash <<-"EOF_GATEWAY"
92
102
  ssh #{options['chef_server_name']} bash <<-"EOF_BASH"
93
103
  #{IO.read(File.dirname(__FILE__) + "/cloud_files.bash")}
94
- #{IO.read(File.dirname(__FILE__) + "/chef_bootstrap/#{os_type}.bash")}
104
+ #{install_chef_script('SERVER', os_type)}
95
105
  #{IO.read(CHEF_INSTALL_FUNCTIONS)}
96
- install_chef "SERVER"
97
106
 
98
107
  mkdir -p /root/cookbook-repos
99
108
 
@@ -155,11 +164,14 @@ def self.install_chef_client(options, client_name, client_validation_key, os_typ
155
164
 
156
165
  data=%x{
157
166
  ssh -o "StrictHostKeyChecking no" root@#{options['ssh_gateway_ip']} bash <<-"EOF_GATEWAY"
167
+ if ! grep -c "#{client_name}" /etc/hosts &> /dev/null; then
168
+ echo "Client '#{client_name}' doesn't exist."
169
+ exit 0
170
+ fi
158
171
  ssh #{client_name} bash <<-"EOF_BASH"
159
172
  #{IO.read(File.dirname(__FILE__) + "/cloud_files.bash")}
160
- #{IO.read(File.dirname(__FILE__) + "/chef_bootstrap/#{os_type}.bash")}
161
173
  #{IO.read(CHEF_INSTALL_FUNCTIONS)}
162
- install_chef "CLIENT"
174
+ #{install_chef_script('CLIENT', os_type)}
163
175
  configure_chef_client '#{options['chef_server_name']}' '#{client_validation_key}'
164
176
  start_chef_client
165
177
  EOF_BASH
@@ -27,6 +27,7 @@ class ServerGroup
27
27
  attr_accessor :description
28
28
  attr_accessor :domain_name
29
29
  attr_accessor :vpn_device
30
+ attr_accessor :vpn_proto
30
31
  attr_accessor :vpn_network
31
32
  attr_accessor :vpn_subnet
32
33
  attr_accessor :owner_name
@@ -39,6 +40,7 @@ class ServerGroup
39
40
  @description=options[:description]
40
41
  @domain_name=options[:domain_name]
41
42
  @vpn_device=options[:vpn_device] or @vpn_device="tun"
43
+ @vpn_proto=options[:vpn_proto] or @vpn_proto="tcp"
42
44
  @vpn_network=options[:vpn_network] or @vpn_network="172.19.0.0"
43
45
  @vpn_subnet=options[:vpn_subnet] or @vpn_subnet="255.255.128.0"
44
46
  @owner_name=options[:owner_name] or @owner_name=ENV['USER']
@@ -86,6 +88,7 @@ class ServerGroup
86
88
  :description => json_hash["description"],
87
89
  :domain_name => json_hash["domain_name"],
88
90
  :vpn_device => json_hash["vpn_device"],
91
+ :vpn_proto => json_hash["vpn_proto"],
89
92
  :vpn_network => json_hash["vpn_network"],
90
93
  :vpn_subnet => json_hash["vpn_subnet"]
91
94
  )
@@ -119,7 +122,8 @@ class ServerGroup
119
122
  sg.description(@description)
120
123
  sg.tag! "owner-name", @owner_name
121
124
  sg.tag! "domain-name", @domain_name
122
- sg.tag! "vpn-device", @vpn_device
125
+ sg.tag! "vpn-device", @vpn_device if @vpn_device != "tun"
126
+ sg.tag! "vpn-proto", @vpn_proto if @vpn_proto != "tcp"
123
127
  sg.tag! "vpn-network", @vpn_network
124
128
  sg.tag! "vpn-subnet", @vpn_subnet
125
129
  sg.servers("type" => "array") do |xml_servers|
@@ -181,6 +185,7 @@ class ServerGroup
181
185
  :domain_name => XMLUtil.element_text(sg_xml, "domain-name"),
182
186
  :description => XMLUtil.element_text(sg_xml, "description"),
183
187
  :vpn_device => XMLUtil.element_text(sg_xml, "vpn-device"),
188
+ :vpn_proto => XMLUtil.element_text(sg_xml, "vpn-proto"),
184
189
  :vpn_network => XMLUtil.element_text(sg_xml, "vpn-network"),
185
190
  :vpn_subnet => XMLUtil.element_text(sg_xml, "vpn-subnet")
186
191
  )
@@ -32,7 +32,7 @@ module Util
32
32
  raise_if_nil_or_empty(configs, "cloud_servers_vpc_password")
33
33
  @@configs=configs
34
34
  else
35
- raise "Failed to load cloud toolkit config file. Please configure /etc/chef_vpc_toolkit.conf or create a .chef_vpc_toolkit.conf config file in your HOME directory."
35
+ raise "Failed to load chef VPC toolkit config file. Please configure /etc/chef_vpc_toolkit.conf or create a .chef_vpc_toolkit.conf config file in your HOME directory."
36
36
  end
37
37
 
38
38
  @@configs
@@ -0,0 +1,43 @@
1
+
2
+ module ChefVPCToolkit
3
+ class VpnConnection
4
+
5
+ CERT_DIR=File.join(ENV['HOME'], '.pki', 'openvpn')
6
+
7
+ def initialize(group, client = nil)
8
+ @group = group
9
+ @client = client
10
+ end
11
+
12
+ def create_certs
13
+ @ca_cert=get_cfile('ca.crt')
14
+ @client_cert=get_cfile('client.crt')
15
+ @client_key=get_cfile('client.key')
16
+
17
+ vpn_interface = @client.vpn_network_interfaces[0]
18
+
19
+ FileUtils.mkdir_p(get_cfile)
20
+ File::chmod(0700, File.join(ENV['HOME'], '.pki'))
21
+ File::chmod(0700, CERT_DIR)
22
+
23
+ File.open(@ca_cert, 'w') { |f| f.write(vpn_interface.ca_cert) }
24
+ File.open(@client_cert, 'w') { |f| f.write(vpn_interface.client_cert) }
25
+ File.open(@client_key, 'w') do |f|
26
+ f.write(vpn_interface.client_key)
27
+ f.chmod(0600)
28
+ end
29
+ end
30
+
31
+ def delete_certs
32
+ FileUtils.rm_rf(get_cfile)
33
+ end
34
+
35
+ def get_cfile(file = nil)
36
+ if file
37
+ File.join(CERT_DIR, @group.id.to_s, file)
38
+ else
39
+ File.join(CERT_DIR, @group.id.to_s)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -9,32 +9,36 @@ require 'tempfile'
9
9
 
10
10
  module ChefVPCToolkit
11
11
 
12
- module VpnNetworkManager
12
+ class VpnNetworkManager < VpnConnection
13
13
 
14
- CERT_DIR=File.join(ENV['HOME'], '.pki', 'openvpn')
14
+ def initialize(group, client = nil)
15
+ super(group, client)
16
+ end
15
17
 
16
- def self.configure_gconf(group, client)
18
+ def connect
19
+ create_certs
20
+ configure_gconf
21
+ puts %x{#{sudo_display} nmcli con up id "VPC Group: #{@group.id}"}
22
+ end
17
23
 
18
- ca_cert=File.join(CERT_DIR, group.id.to_s, 'ca.crt')
19
- client_cert=File.join(CERT_DIR, group.id.to_s, 'client.crt')
20
- client_key=File.join(CERT_DIR, group.id.to_s, 'client.key')
24
+ def disconnect
25
+ puts %x{#{sudo_display} nmcli con down id "VPC Group: #{@group.id}"}
26
+ end
21
27
 
22
- vpn_interface=client.vpn_network_interfaces[0]
28
+ def connected?
29
+ return system("#{sudo_display} nmcli con status | grep -c 'VPC Group: #{@group.id}' &> /dev/null")
30
+ end
23
31
 
24
- FileUtils.mkdir_p(File.join(CERT_DIR, group.id.to_s))
25
- File::chmod(0700, File.join(ENV['HOME'], '.pki'))
26
- File::chmod(0700, CERT_DIR)
32
+ def clean
33
+ unset_gconf_config
34
+ delete_certs
35
+ end
27
36
 
28
- File.open(ca_cert, 'w') { |f| f.write(vpn_interface.ca_cert) }
29
- File.open(client_cert, 'w') { |f| f.write(vpn_interface.client_cert) }
30
- File.open(client_key, 'w') do |f|
31
- f.write(vpn_interface.client_key)
32
- f.chmod(0600)
33
- end
37
+ def configure_gconf
34
38
 
35
39
  xml = Builder::XmlMarkup.new
36
40
  xml.gconfentryfile do |file|
37
- file.entrylist({ "base" => "/system/networking/connections/vpc_#{group.id}"}) do |entrylist|
41
+ file.entrylist({ "base" => "/system/networking/connections/vpc_#{@group.id}"}) do |entrylist|
38
42
 
39
43
  entrylist.entry do |entry|
40
44
  entry.key("connection/autoconnect")
@@ -45,7 +49,7 @@ module VpnNetworkManager
45
49
  entrylist.entry do |entry|
46
50
  entry.key("connection/id")
47
51
  entry.value do |value|
48
- value.string("VPC Group: #{group.id}")
52
+ value.string("VPC Group: #{@group.id}")
49
53
  end
50
54
  end
51
55
  entrylist.entry do |entry|
@@ -83,7 +87,7 @@ module VpnNetworkManager
83
87
  entry.key("ipv4/dns")
84
88
  entry.value do |value|
85
89
  value.list("type" => "int") do |list|
86
- ip=IPAddr.new(group.vpn_network.chomp("0")+"1")
90
+ ip=IPAddr.new(@group.vpn_network.chomp("0")+"1")
87
91
  list.value do |lv|
88
92
  lv.int(ip_to_integer(ip.to_s))
89
93
  end
@@ -95,7 +99,7 @@ module VpnNetworkManager
95
99
  entry.value do |value|
96
100
  value.list("type" => "string") do |list|
97
101
  list.value do |lv|
98
- lv.string(group.domain_name)
102
+ lv.string(@group.domain_name)
99
103
  end
100
104
  end
101
105
  end
@@ -134,13 +138,13 @@ module VpnNetworkManager
134
138
  entrylist.entry do |entry|
135
139
  entry.key("vpn/ca")
136
140
  entry.value do |value|
137
- value.string(ca_cert)
141
+ value.string(@ca_cert)
138
142
  end
139
143
  end
140
144
  entrylist.entry do |entry|
141
145
  entry.key("vpn/cert")
142
146
  entry.value do |value|
143
- value.string(client_cert)
147
+ value.string(@client_cert)
144
148
  end
145
149
  end
146
150
  entrylist.entry do |entry|
@@ -158,16 +162,25 @@ module VpnNetworkManager
158
162
  entrylist.entry do |entry|
159
163
  entry.key("vpn/key")
160
164
  entry.value do |value|
161
- value.string(client_key)
165
+ value.string(@client_key)
162
166
  end
163
167
  end
164
- entrylist.entry do |entry|
165
- entry.key("vpn/proto-tcp")
166
- entry.value do |value|
167
- value.string("yes")
168
+ if @group.vpn_proto == "tcp"
169
+ entrylist.entry do |entry|
170
+ entry.key("vpn/proto-tcp")
171
+ entry.value do |value|
172
+ value.string("yes")
173
+ end
174
+ end
175
+ else
176
+ entrylist.entry do |entry|
177
+ entry.key("vpn/proto-udp")
178
+ entry.value do |value|
179
+ value.string("yes")
180
+ end
168
181
  end
169
182
  end
170
- if group.vpn_device == "tap"
183
+ if @group.vpn_device == "tap"
171
184
  entrylist.entry do |entry|
172
185
  entry.key("vpn/tap-dev")
173
186
  entry.value do |value|
@@ -178,7 +191,7 @@ module VpnNetworkManager
178
191
  entrylist.entry do |entry|
179
192
  entry.key("vpn/remote")
180
193
  entry.value do |value|
181
- value.string(group.vpn_gateway_ip)
194
+ value.string(@group.vpn_gateway_ip)
182
195
  end
183
196
  end
184
197
  entrylist.entry do |entry|
@@ -201,39 +214,22 @@ module VpnNetworkManager
201
214
 
202
215
  end
203
216
 
204
- def self.unset_gconf_config(server_group_id)
205
- puts %x{gconftool-2 --recursive-unset /system/networking/connections/vpc_#{server_group_id}}
217
+ def unset_gconf_config
218
+ puts %x{gconftool-2 --recursive-unset /system/networking/connections/vpc_#{@group.id}}
206
219
  end
207
220
 
208
- def self.delete_certs(server_group_id)
209
- FileUtils.rm_rf(File.join(CERT_DIR, server_group_id.to_s))
210
- end
211
-
212
- def self.connect(server_group_id)
213
- puts %x{#{sudo_display} nmcli con up id "VPC Group: #{server_group_id}"}
214
- end
215
-
216
- def self.disconnect(server_group_id)
217
- puts %x{#{sudo_display} nmcli con down id "VPC Group: #{server_group_id}"}
218
- end
219
-
220
- def self.connected?(server_group_id)
221
- return system("#{sudo_display} nmcli con status | grep -c 'VPC Group: #{server_group_id}' &> /dev/null")
222
- end
223
-
224
- def self.ip_to_integer(ip_string)
221
+ def ip_to_integer(ip_string)
225
222
  return 0 if ip_string.nil?
226
223
  ip_arr=ip_string.split(".").collect{ |s| s.to_i }
227
224
  return ip_arr[0] + ip_arr[1]*2**8 + ip_arr[2]*2**16 + ip_arr[3]*2**24
228
225
  end
229
226
 
230
- def self.sudo_display
227
+ def sudo_display
231
228
  if ENV['DISPLAY'].nil? or ENV['DISPLAY'] != ":0.0" then
232
229
  "sudo"
233
230
  else
234
231
  ""
235
232
  end
236
233
  end
237
-
238
234
  end
239
235
  end
@@ -0,0 +1,111 @@
1
+
2
+ module ChefVPCToolkit
3
+ class VpnOpenVpn < VpnConnection
4
+
5
+ def initialize(group, client = nil)
6
+ super(group, client)
7
+ end
8
+
9
+ def connect
10
+ create_certs
11
+
12
+ @up_script=get_cfile('up.bash')
13
+ File.open(@up_script, 'w') do |f|
14
+ f << <<EOF_UP
15
+ #!/bin/bash
16
+
17
+ # setup routes
18
+ /sbin/route add #{@group.vpn_network.chomp("0")+"1"} dev \$dev
19
+ /sbin/route add -net #{@group.vpn_network} netmask 255.255.128.0 gw #{@group.vpn_network.chomp("0")+"1"}
20
+
21
+ mv /etc/resolv.conf /etc/resolv.conf.bak
22
+ egrep ^search /etc/resolv.conf.bak | sed -e 's/search /search #{@group.domain_name} /' > /etc/resolv.conf
23
+ echo 'nameserver #{@group.vpn_network.chomp("0")+"1"}' >> /etc/resolv.conf
24
+ grep ^nameserver /etc/resolv.conf.bak >> /etc/resolv.conf
25
+ EOF_UP
26
+ f.chmod(0700)
27
+ end
28
+ @down_script=get_cfile('down.bash')
29
+ File.open(@down_script, 'w') do |f|
30
+ f << <<EOF_DOWN
31
+ #!/bin/bash
32
+ mv /etc/resolv.conf.bak /etc/resolv.conf
33
+ EOF_DOWN
34
+ f.chmod(0700)
35
+ end
36
+
37
+ @config_file=get_cfile('config')
38
+ File.open(@config_file, 'w') do |f|
39
+ f << <<EOF_CONFIG
40
+ client
41
+ dev #{@group.vpn_device}
42
+ proto #{@group.vpn_proto}
43
+
44
+ #Change my.publicdomain.com to your public domain or IP address
45
+ remote #{@group.vpn_gateway_ip} 1194
46
+
47
+ resolv-retry infinite
48
+ nobind
49
+ persist-key
50
+ persist-tun
51
+
52
+ script-security 2
53
+
54
+ ca #{@ca_cert}
55
+ cert #{@client_cert}
56
+ key #{@client_key}
57
+
58
+ ns-cert-type server
59
+
60
+ route-nopull
61
+
62
+ comp-lzo
63
+
64
+ verb 3
65
+ up #{@up_script}
66
+ down #{@down_script}
67
+ EOF_CONFIG
68
+ f.chmod(0600)
69
+ end
70
+
71
+ disconnect if File.exist?(get_cfile('openvpn.pid'))
72
+ out=%x{sudo openvpn --config #{@config_file} --writepid #{get_cfile('openvpn.pid')} --daemon}
73
+ retval=$?
74
+ if retval.success? then
75
+ poll_vpn_interface
76
+ puts "OK."
77
+ else
78
+ raise "Failed to create VPN connection: #{out}"
79
+ end
80
+ end
81
+
82
+ def disconnect
83
+ raise "Not running? No pid file found!" unless File.exist?(get_cfile('openvpn.pid'))
84
+ pid = File.read(get_cfile('openvpn.pid')).chomp
85
+ system("sudo kill -TERM #{pid}")
86
+ File.delete(get_cfile('openvpn.pid'))
87
+ end
88
+
89
+ def connected?
90
+ system("/sbin/route -n | grep #{@group.vpn_network.chomp("0")+"1"} &> /dev/null")
91
+ end
92
+
93
+ def clean
94
+ delete_certs
95
+ end
96
+
97
+ private
98
+ def poll_vpn_interface
99
+ interface_name=@group.vpn_device+"0"
100
+ 1.upto(30) do |i|
101
+ break if system("ifconfig #{interface_name} &> /dev/null")
102
+ if i == 30 then
103
+ disconnect
104
+ raise "Failed to connect to VPN."
105
+ end
106
+ sleep 0.5
107
+ end
108
+ end
109
+
110
+ end
111
+ end
@@ -183,7 +183,6 @@ namespace :chef do
183
183
  ChefInstaller.create_databags(configs)
184
184
  ChefInstaller.install_chef_clients(configs, client_validation_key, group.os_types)
185
185
  else
186
- raise "Server with name '#{server_name}' does not exist." if group.server(server_name).nil?
187
186
  client_validation_key=ChefInstaller.client_validation_key(configs)
188
187
  ChefInstaller.install_chef_client(configs, server_name, client_validation_key, group.os_types[server_name])
189
188
  end
@@ -298,8 +297,8 @@ namespace :vpn do
298
297
  Rake::Task['vpn:poll_client'].invoke
299
298
  end
300
299
  client=Client.fetch(:id => group.id, :source => "cache")
301
- ChefVPCToolkit::VpnNetworkManager.configure_gconf(group, client)
302
- ChefVPCToolkit::VpnNetworkManager.connect(group.id)
300
+ vpn = ChefVPCToolkit::get_vpn_connection(group, client)
301
+ vpn.connect
303
302
 
304
303
  end
305
304
 
@@ -307,7 +306,8 @@ namespace :vpn do
307
306
  task :disconnect do
308
307
 
309
308
  group=ServerGroup.fetch(:source => "cache")
310
- ChefVPCToolkit::VpnNetworkManager.disconnect(group.id)
309
+ vpn = ChefVPCToolkit::get_vpn_connection(group)
310
+ vpn.disconnect
311
311
 
312
312
  vpn_server_ip=group.vpn_network.chomp("0")+"1"
313
313
  SshUtil.remove_known_hosts_ip(vpn_server_ip)
@@ -315,12 +315,12 @@ namespace :vpn do
315
315
 
316
316
  end
317
317
 
318
- desc "Delete VPN config information."
318
+ #desc "Delete VPN config information."
319
319
  task :delete do
320
320
 
321
321
  group=ServerGroup.fetch(:source => "cache")
322
- ChefVPCToolkit::VpnNetworkManager.unset_gconf_config(group.id)
323
- ChefVPCToolkit::VpnNetworkManager.delete_certs(group.id)
322
+ vpn = ChefVPCToolkit::get_vpn_connection(group)
323
+ vpn.clean
324
324
 
325
325
  vpn_server_ip=group.vpn_network.chomp("0")+"1"
326
326
  SshUtil.remove_known_hosts_ip(vpn_server_ip)
@@ -333,7 +333,7 @@ namespace :vpn do
333
333
 
334
334
  end
335
335
 
336
- desc "Create a new VPN client."
336
+ #desc "Create a new VPN client."
337
337
  task :create_client do
338
338
 
339
339
  group=ServerGroup.fetch(:source => "cache")
@@ -348,7 +348,7 @@ namespace :vpn do
348
348
 
349
349
  end
350
350
 
351
- desc "Poll until a client is online"
351
+ #desc "Poll until a client is online"
352
352
  task :poll_client do
353
353
 
354
354
  group=ServerGroup.fetch(:source => "cache")
@@ -415,7 +415,8 @@ task :rdesktop => 'group:init' do
415
415
  pass=sg.server(server_name).admin_password
416
416
 
417
417
  if use_public_ip.nil? then
418
- if ChefVPCToolkit::VpnNetworkManager.connected?(sg.id)
418
+ vpn = ChefVPCToolkit::get_vpn_connection(sg)
419
+ if vpn.connected?
419
420
  # on the VPN we connect directly to the windows machine
420
421
  local_ip=%x{ssh -o \"StrictHostKeyChecking no\" root@#{sg.vpn_gateway_ip} grep #{server_name}.#{sg.domain_name} /etc/hosts | cut -f 1}.chomp
421
422
  exec("rdesktop #{local_ip} -u Administrator -p #{pass}")
@@ -10,27 +10,27 @@ class VpnNetworkManagerTest < Test::Unit::TestCase
10
10
  include ChefVPCToolkit::CloudServersVPC
11
11
 
12
12
  def setup
13
+ @group=ServerGroup.from_xml(SERVER_GROUP_XML)
14
+ @client=Client.from_xml(CLIENT_XML)
13
15
  tmpdir=TmpDir.new_tmp_dir
14
16
  File.open(File.join(tmpdir, "gconftool-2"), 'w') do |f|
15
17
  f.write("#!/bin/bash\nexit 0")
16
18
  f.chmod(0755)
17
19
  end
18
20
  ENV['PATH']=tmpdir+":"+ENV['PATH']
21
+ @vpn_net_man = VpnNetworkManager.new(@group, @client)
19
22
  end
20
23
 
21
24
  def teardown
22
- group=ServerGroup.from_xml(SERVER_GROUP_XML)
23
- VpnNetworkManager.delete_certs(group.id)
25
+ @vpn_net_man.delete_certs
24
26
  end
25
27
 
26
28
  def test_configure_gconf
27
- group=ServerGroup.from_xml(SERVER_GROUP_XML)
28
- client=Client.from_xml(CLIENT_XML)
29
- assert VpnNetworkManager.configure_gconf(group, client)
29
+ assert @vpn_net_man.configure_gconf
30
30
  end
31
31
 
32
32
  def test_ip_to_integer
33
- assert_equal 16782252, VpnNetworkManager.ip_to_integer("172.19.0.1")
33
+ assert_equal 16782252, @vpn_net_man.ip_to_integer("172.19.0.1")
34
34
  end
35
35
 
36
36
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-vpc-toolkit
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 2
8
- - 5
9
- - 2
10
- version: 2.5.2
8
+ - 6
9
+ - 0
10
+ version: 2.6.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dan Prince
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-27 00:00:00 -07:00
18
+ date: 2011-06-21 00:00:00 -04:00
19
19
  default_executable: chef-vpc-toolkit
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -132,7 +132,9 @@ files:
132
132
  - lib/chef-vpc-toolkit/ssh_util.rb
133
133
  - lib/chef-vpc-toolkit/util.rb
134
134
  - lib/chef-vpc-toolkit/version.rb
135
+ - lib/chef-vpc-toolkit/vpn_connection.rb
135
136
  - lib/chef-vpc-toolkit/vpn_network_manager.rb
137
+ - lib/chef-vpc-toolkit/vpn_openvpn.rb
136
138
  - lib/chef-vpc-toolkit/xml_util.rb
137
139
  - rake/chef_vpc_toolkit.rake
138
140
  - test/client_test.rb
@@ -177,10 +179,10 @@ signing_key:
177
179
  specification_version: 3
178
180
  summary: Rake tasks to automate and configure server groups in the cloud with Chef.
179
181
  test_files:
180
- - test/server_group_test.rb
181
- - test/util_test.rb
182
+ - test/client_test.rb
182
183
  - test/ssh_util_test.rb
184
+ - test/server_group_test.rb
183
185
  - test/test_helper.rb
184
- - test/vpn_network_manager_test.rb
186
+ - test/util_test.rb
185
187
  - test/server_test.rb
186
- - test/client_test.rb
188
+ - test/vpn_network_manager_test.rb