kytoon 1.0.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.
Files changed (38) hide show
  1. data/.document +5 -0
  2. data/Gemfile +15 -0
  3. data/Gemfile.lock +29 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +81 -0
  6. data/Rakefile +35 -0
  7. data/VERSION +1 -0
  8. data/config/server_group_vpc.json +14 -0
  9. data/config/server_group_xen.json +24 -0
  10. data/lib/kytoon.rb +8 -0
  11. data/lib/kytoon/providers/cloud_servers_vpc.rb +6 -0
  12. data/lib/kytoon/providers/cloud_servers_vpc/client.rb +197 -0
  13. data/lib/kytoon/providers/cloud_servers_vpc/connection.rb +148 -0
  14. data/lib/kytoon/providers/cloud_servers_vpc/server.rb +121 -0
  15. data/lib/kytoon/providers/cloud_servers_vpc/server_group.rb +401 -0
  16. data/lib/kytoon/providers/cloud_servers_vpc/ssh_public_key.rb +29 -0
  17. data/lib/kytoon/providers/cloud_servers_vpc/vpn_network_interface.rb +33 -0
  18. data/lib/kytoon/providers/xenserver.rb +1 -0
  19. data/lib/kytoon/providers/xenserver/server_group.rb +371 -0
  20. data/lib/kytoon/server_group.rb +46 -0
  21. data/lib/kytoon/ssh_util.rb +23 -0
  22. data/lib/kytoon/util.rb +118 -0
  23. data/lib/kytoon/version.rb +8 -0
  24. data/lib/kytoon/vpn/vpn_connection.rb +46 -0
  25. data/lib/kytoon/vpn/vpn_network_manager.rb +237 -0
  26. data/lib/kytoon/vpn/vpn_openvpn.rb +112 -0
  27. data/lib/kytoon/xml_util.rb +15 -0
  28. data/rake/kytoon.rake +115 -0
  29. data/test/client_test.rb +111 -0
  30. data/test/helper.rb +18 -0
  31. data/test/server_group_test.rb +253 -0
  32. data/test/server_test.rb +69 -0
  33. data/test/ssh_util_test.rb +22 -0
  34. data/test/test_helper.rb +194 -0
  35. data/test/test_kytoon.rb +7 -0
  36. data/test/util_test.rb +23 -0
  37. data/test/vpn_network_manager_test.rb +40 -0
  38. metadata +247 -0
@@ -0,0 +1,69 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'test_helper'
3
+
4
+ module Kytoon
5
+ module Providers
6
+ module CloudServersVPC
7
+
8
+ class ServerTest < Test::Unit::TestCase
9
+
10
+ include Kytoon::Providers::CloudServersVPC
11
+
12
+ def setup
13
+ @tmp_dir=TmpDir.new_tmp_dir
14
+ ServerGroup.data_dir=@tmp_dir
15
+ end
16
+
17
+ def teardown
18
+ FileUtils.rm_rf(@tmp_dir)
19
+ end
20
+
21
+ def test_vpn_server_rebuild_fails
22
+ group=ServerGroup.from_xml(SERVER_GROUP_XML)
23
+ server=group.server("login1")
24
+ assert_raises(RuntimeError) do
25
+ server.rebuild
26
+ end
27
+ end
28
+
29
+ def test_rebuild
30
+ group=ServerGroup.from_xml(SERVER_GROUP_XML)
31
+ server=group.server("test1")
32
+ Connection.stubs(:post).returns("")
33
+ server.rebuild
34
+ end
35
+
36
+ def test_from_to_xml
37
+ server=Server.from_xml(SERVER_XML)
38
+ server=Server.from_xml(server.to_xml)
39
+ assert_equal "db1", server.name
40
+ assert_equal "blah", server.description
41
+ assert_equal 1234, server.id
42
+ assert_equal "888", server.cloud_server_id_number
43
+ assert_equal 999, server.server_group_id
44
+ assert_equal "10.119.225.116", server.internal_ip_addr
45
+ assert_equal "123.100.100.100", server.external_ip_addr
46
+ assert_equal "Online", server.status
47
+ end
48
+
49
+ def test_create
50
+
51
+ Connection.stubs(:post).returns(SERVER_XML)
52
+ server=Server.create(Server.from_xml(SERVER_XML))
53
+ assert_equal "db1", server.name
54
+
55
+ end
56
+
57
+ def test_delete
58
+
59
+ server=Server.from_xml(SERVER_XML)
60
+ Connection.stubs(:delete).returns("")
61
+ assert server.delete
62
+
63
+ end
64
+
65
+ end
66
+
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,22 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'test_helper'
3
+
4
+ require 'tempfile'
5
+
6
+ module Kytoon
7
+
8
+ class SshUtilTest < Test::Unit::TestCase
9
+
10
+ def test_remove_known_hosts_ip
11
+
12
+ t=Tempfile.new('ssh_test')
13
+ t.write(%{login,172.19.0.1 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAu1Xfhjj0hZwDIXWa6Gd/Qk/S9VwO5ec9+u6CMLMteQY4seeXmpu643k8zCa6yLuDXyzucknfrsxtOKJVQ6F5glXW6+Ko/zPiPNQbeC6GIKDs2a3m6A5OJSqRHqoy0RTJu11Acs3tkWUgmvBKFX7jxEZuHJM1kI0/xP0JlO0zOVr8+9Wg6Zy5KfVnEsgbdaEvpk3Rrtt5Lm42w/uxvPTFY7AWBhUfloYqBQrX6zd8d17jHLCnukHmvdR7eVGihXREtvDjX4ycG1o5/9amLWR0ELVFkFiXPHyWCuyl21j5uI7Ro9P2pga5ypnDB+N1BjFJHSMMofT40XOBkzAxBUrLgw==\n})
14
+ t.flush
15
+ SshUtil.remove_known_hosts_ip('login,172.19.0.1', t.path)
16
+ assert_equal "", IO.read(t.path)
17
+
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,194 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'mocha'
4
+ KYTOON_PROJECT = "#{File.dirname(__FILE__)}" unless defined?(KYTOON_PROJECT)
5
+
6
+ $:.unshift File.dirname(__FILE__) + '/../lib'
7
+ require 'kytoon'
8
+
9
+ require 'tempfile'
10
+ require 'fileutils'
11
+
12
+ class TmpDir
13
+
14
+ def self.new_tmp_dir(prefix="kytoon")
15
+
16
+ tmp_file=Tempfile.new prefix
17
+ path=tmp_file.path
18
+ tmp_file.close(true)
19
+ FileUtils.mkdir_p path
20
+ return path
21
+
22
+ end
23
+
24
+ end
25
+
26
+ SERVER_GROUP_XML = %{
27
+ <?xml version="1.0" encoding="UTF-8"?>
28
+ <server-group>
29
+ <created-at type="datetime">2010-10-15T15:15:58-04:00</created-at>
30
+ <description>test description</description>
31
+ <domain-name>mydomain.net</domain-name>
32
+ <historical type="boolean">false</historical>
33
+ <id type="integer">1759</id>
34
+ <last-used-ip-address>172.19.0.2</last-used-ip-address>
35
+ <name>test</name>
36
+ <owner-name>dan.prince</owner-name>
37
+ <updated-at type="datetime">2010-10-15T15:15:58-04:00</updated-at>
38
+ <user-id type="integer">3</user-id>
39
+ <vpn-network>172.19.0.0</vpn-network>
40
+ <vpn-subnet>255.255.128.0</vpn-subnet>
41
+ <servers type="array">
42
+ <server>
43
+ <account-id type="integer">3</account-id>
44
+ <cloud-server-id-number type="integer">1</cloud-server-id-number>
45
+ <created-at type="datetime">2010-10-15T15:15:58-04:00</created-at>
46
+ <description>login1</description>
47
+ <error-message nil="true"></error-message>
48
+ <external-ip-addr>184.106.205.120</external-ip-addr>
49
+ <flavor-id type="integer">4</flavor-id>
50
+ <historical type="boolean">false</historical>
51
+ <id type="integer">5513</id>
52
+ <image-id type="integer">14</image-id>
53
+ <internal-ip-addr>10.179.107.203</internal-ip-addr>
54
+ <name>login1</name>
55
+ <openvpn-server type="boolean">true</openvpn-server>
56
+ <retry-count type="integer">0</retry-count>
57
+ <server-group-id type="integer">1759</server-group-id>
58
+ <status>Online</status>
59
+ <updated-at type="datetime">2010-10-15T15:18:22-04:00</updated-at>
60
+ <vpn-network-interfaces type="array"/>
61
+ </server>
62
+ <server>
63
+ <account-id type="integer">3</account-id>
64
+ <cloud-server-id-number type="integer">2</cloud-server-id-number>
65
+ <created-at type="datetime">2010-10-15T15:15:58-04:00</created-at>
66
+ <description>test1</description>
67
+ <error-message nil="true"></error-message>
68
+ <external-ip-addr>184.106.205.121</external-ip-addr>
69
+ <flavor-id type="integer">49</flavor-id>
70
+ <historical type="boolean">false</historical>
71
+ <id type="integer">5513</id>
72
+ <image-id type="integer">49</image-id>
73
+ <internal-ip-addr>10.179.107.204</internal-ip-addr>
74
+ <name>test1</name>
75
+ <openvpn-server type="boolean">false</openvpn-server>
76
+ <retry-count type="integer">0</retry-count>
77
+ <server-group-id type="integer">1759</server-group-id>
78
+ <status>Online</status>
79
+ <updated-at type="datetime">2010-10-15T15:18:22-04:00</updated-at>
80
+ <vpn-network-interfaces type="array"/>
81
+ </server>
82
+ </servers>
83
+ </server-group>
84
+ }
85
+
86
+ CLIENT_XML = %{
87
+ <client>
88
+ <created-at type="datetime">2011-01-09T19:37:32-05:00</created-at>
89
+ <description>Toolkit Client: local</description>
90
+ <id type="integer">5</id>
91
+ <is-windows type="boolean">false</is-windows>
92
+ <name>local</name>
93
+ <server-group-id type="integer">11</server-group-id>
94
+ <status>Online</status>
95
+ <updated-at type="datetime">2011-01-09T19:37:37-05:00</updated-at>
96
+ <vpn-network-interfaces type="array">
97
+ <vpn-network-interface>
98
+ <ca-cert>-----BEGIN CERTIFICATE-----
99
+ MIIDyDCCAzGgAwIBAgIJAORNZNRpPx87MA0GCSqGSIb3DQEBBQUAMIGfMQswCQYD
100
+ VQQGEwJVUzELMAkGA1UECBMCVkExEzARBgNVBAcTCkJsYWNrc2J1cmcxEjAQBgNV
101
+ BAoTCVJhY2tzcGFjZTEXMBUGA1UECxMOSW5mcmFzdHJ1Y3R1cmUxDjAMBgNVBAMT
102
+ BWxvZ2luMQ4wDAYDVQQpEwVsb2dpbjEhMB8GCSqGSIb3DQEJARYSY29icmFAc25h
103
+ a2VvaWwuY29tMB4XDTExMDExMDAwMzI1NVoXDTIxMDEwNzAwMzI1NVowgZ8xCzAJ
104
+ BgNVBAYTAlVTMQswCQYDVQQIEwJWQTETMBEGA1UEBxMKQmxhY2tzYnVyZzESMBAG
105
+ A1UEChMJUmFja3NwYWNlMRcwFQYDVQQLEw5JbmZyYXN0cnVjdHVyZTEOMAwGA1UE
106
+ AxMFbG9naW4xDjAMBgNVBCkTBWxvZ2luMSEwHwYJKoZIhvcNAQkBFhJjb2JyYUBz
107
+ bmFrZW9pbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL0xIVIfh8rA
108
+ OCfc4BbWG+W+53iP9J6Fqhya5HSrYw3pdUCdimRBwQ0HoEnHndz2soRYc2Wtat8L
109
+ qqoS/qZMBbqerzEUFHumSKLADT3y8G1gkiGsb1fBZPmExPYyG/UQQUfK7CIM/L/m
110
+ W6Ji5ZEfTF9QPwHj3kVU99VUvm/BS8wXAgMBAAGjggEIMIIBBDAdBgNVHQ4EFgQU
111
+ dOvLRyxDa2Xso59PFLf22sZQ07wwgdQGA1UdIwSBzDCByYAUdOvLRyxDa2Xso59P
112
+ FLf22sZQ07yhgaWkgaIwgZ8xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJWQTETMBEG
113
+ A1UEBxMKQmxhY2tzYnVyZzESMBAGA1UEChMJUmFja3NwYWNlMRcwFQYDVQQLEw5J
114
+ bmZyYXN0cnVjdHVyZTEOMAwGA1UEAxMFbG9naW4xDjAMBgNVBCkTBWxvZ2luMSEw
115
+ HwYJKoZIhvcNAQkBFhJjb2JyYUBzbmFrZW9pbC5jb22CCQDkTWTUaT8fOzAMBgNV
116
+ HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAAVXIxOocwXi05004m9Znff6/cAj
117
+ 2osr72g/Xux++lVqiSHf+T/R4QywsXy9//vKeXVEIyaaP9ImnWbbzHFFI+NStP4n
118
+ LILyv+/eOuZ6Dv7Vv6ZacjI3fexcXYr5VW52HHbb/M7G1ePAfdAixUHNH7lh58dY
119
+ WDzmJicksUYlyvI+
120
+ -----END CERTIFICATE-----
121
+ </ca-cert>
122
+ <client-cert>-----BEGIN CERTIFICATE-----
123
+ MIIEDjCCA3egAwIBAgIBAzANBgkqhkiG9w0BAQUFADCBnzELMAkGA1UEBhMCVVMx
124
+ CzAJBgNVBAgTAlZBMRMwEQYDVQQHEwpCbGFja3NidXJnMRIwEAYDVQQKEwlSYWNr
125
+ c3BhY2UxFzAVBgNVBAsTDkluZnJhc3RydWN0dXJlMQ4wDAYDVQQDEwVsb2dpbjEO
126
+ MAwGA1UEKRMFbG9naW4xITAfBgkqhkiG9w0BCQEWEmNvYnJhQHNuYWtlb2lsLmNv
127
+ bTAeFw0xMTAxMTAwMDM3MzVaFw0yMTAxMDcwMDM3MzVaMIGfMQswCQYDVQQGEwJV
128
+ UzELMAkGA1UECBMCVkExEzARBgNVBAcTCkJsYWNrc2J1cmcxEjAQBgNVBAoTCVJh
129
+ Y2tzcGFjZTEXMBUGA1UECxMOSW5mcmFzdHJ1Y3R1cmUxDjAMBgNVBAMTBWxvY2Fs
130
+ MQ4wDAYDVQQpEwVsb2dpbjEhMB8GCSqGSIb3DQEJARYSY29icmFAc25ha2VvaWwu
131
+ Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCefsUr0T4oQUjKjW7Dpx0t
132
+ KwwafBF2HUW7CI75apeTjSBgYC1CHC6cggfFkUTFvndzspbGaeuJeYtvcvkAa2BD
133
+ p4jlSJgEXa+Uy1UAj1y06BePLNbKF4EfgEGf3eIWcdOtLYbOg4k33uNgto168iVO
134
+ owWOR+B2/z73NIHWxvtF3wIDAQABo4IBVjCCAVIwCQYDVR0TBAIwADAtBglghkgB
135
+ hvhCAQ0EIBYeRWFzeS1SU0EgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
136
+ BBSRXbeuamcuma4yo5B8IYSGGT3fNjCB1AYDVR0jBIHMMIHJgBR068tHLENrZeyj
137
+ n08Ut/baxlDTvKGBpaSBojCBnzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlZBMRMw
138
+ EQYDVQQHEwpCbGFja3NidXJnMRIwEAYDVQQKEwlSYWNrc3BhY2UxFzAVBgNVBAsT
139
+ DkluZnJhc3RydWN0dXJlMQ4wDAYDVQQDEwVsb2dpbjEOMAwGA1UEKRMFbG9naW4x
140
+ ITAfBgkqhkiG9w0BCQEWEmNvYnJhQHNuYWtlb2lsLmNvbYIJAORNZNRpPx87MBMG
141
+ A1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0BAQUFAAOB
142
+ gQApPAG1suVSPugJyQGfBaL8H+7VJdAGXnc6INX5s1AxJ3mvp4o6PQ7ytP4v/QkJ
143
+ ZVMgWV8immfa3PboFgT00qqpbC2Vbf4RR972IEQfGuJLLl4YLrJsbloV9hBamKS7
144
+ Z1lllmEHxFWpNK2FLSZNaeQABZyvzfZYkk6zsHoY8XsCBg==
145
+ -----END CERTIFICATE-----
146
+ </client-cert>
147
+ <client-key>-----BEGIN RSA PRIVATE KEY-----
148
+ MIICXQIBAAKBgQCefsUr0T4oQUjKjW7Dpx0tKwwafBF2HUW7CI75apeTjSBgYC1C
149
+ HC6cggfFkUTFvndzspbGaeuJeYtvcvkAa2BDp4jlSJgEXa+Uy1UAj1y06BePLNbK
150
+ F4EfgEGf3eIWcdOtLYbOg4k33uNgto168iVOowWOR+B2/z73NIHWxvtF3wIDAQAB
151
+ AoGAf3tFykWl8ij4jHsP8Wz0CcWLGa5bOR64XIS4wyKaQoML3JjfLkKOtzHbYGzE
152
+ 3Syi1bt6jKLbYZsSrRTT9SNorB3M2HI/uu1NHVyJ8fqxSJs9wQWv26XcMq6iPXR6
153
+ JQmiG44r0NoHtDOw0NCoo+9il4wjTIVSwN58x69EO1hsWokCQQDREYW73F536KzN
154
+ GSsLy+8VsaRiHCboi7lZwITGt4xFhykP/P5R/mNMTklVpJENuZH5jhiBr8r2O/XE
155
+ NQpIEZiFAkEAwhL4EnXax5p50g2CpkJM2B9F/p3IjjMs/sdUh4/RvAVkVAzz7uOh
156
+ TjtrL0T6480wA7rk3324IG5x4XTgXYVkEwJBAKkg7LgJ0N5d+xS8TIdxhctd9uZr
157
+ ccpj5iDGTmNXbwF8EurdNnvsODYtisPeqn2Y5o8ktYyMQrupy+rbIaMloOUCQAsI
158
+ pQ33oV6jy7VDi2AEePX4oTQeqF5dTnuVvZqPdK8p51BYBC5axrr56dggJdt5uPcd
159
+ UxHZxfQiE1tsF615ff0CQQCjeBskODATJkbN0kw+6FIF9m7QoEAYtJD1jLiY/2Sv
160
+ QRiYX+gvycrIph1yyIGA1qeHYnjhQp4ZijhcwSFUAAyF
161
+ -----END RSA PRIVATE KEY-----
162
+ </client-key>
163
+ <created-at type="datetime">2011-01-09T19:37:32-05:00</created-at>
164
+ <id type="integer">15</id>
165
+ <interfacable-id type="integer">5</interfacable-id>
166
+ <interfacable-type>Client</interfacable-type>
167
+ <ptp-ip-addr>172.19.0.6</ptp-ip-addr>
168
+ <updated-at type="datetime">2011-01-09T19:37:36-05:00</updated-at>
169
+ <vpn-ip-addr>172.19.0.5</vpn-ip-addr>
170
+ </vpn-network-interface>
171
+ </vpn-network-interfaces>
172
+ </client>
173
+ }
174
+
175
+ SERVER_XML = %{
176
+
177
+ <linux-server>
178
+ <cloud-server-id-number type="integer">888</cloud-server-id-number>
179
+ <created-at type="datetime">2010-07-29T10:27:33-04:00</created-at>
180
+ <description>blah</description>
181
+ <error-message nil="true"></error-message>
182
+ <external-ip-addr>123.100.100.100</external-ip-addr>
183
+ <flavor-id type="integer">3</flavor-id>
184
+ <id type="integer">1234</id>
185
+ <image-id type="integer">14</image-id>
186
+ <internal-ip-addr>10.119.225.116</internal-ip-addr>
187
+ <name>db1</name>
188
+ <openvpn-server type="boolean">false</openvpn-server>
189
+ <retry-count type="integer">0</retry-count>
190
+ <server-group-id type="integer">999</server-group-id>
191
+ <status>Online</status>
192
+ <updated-at type="datetime">2010-07-29T11:19:04-04:00</updated-at>
193
+ </linux-server>
194
+ }
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestKytoon < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'test_helper'
3
+
4
+ module Kytoon
5
+
6
+ class UtilTest < Test::Unit::TestCase
7
+
8
+ def test_hostname
9
+
10
+ assert_not_nil Util.hostname
11
+
12
+ end
13
+
14
+ def test_load_public_key
15
+
16
+ key=Util.load_public_key
17
+ assert_not_nil key
18
+
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,40 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'test_helper'
3
+
4
+ require 'tempfile'
5
+
6
+ module Kytoon
7
+ module Vpn
8
+
9
+ class VpnNetworkManagerTest < Test::Unit::TestCase
10
+
11
+ include Kytoon::Providers::CloudServersVPC
12
+
13
+ def setup
14
+ @group=ServerGroup.from_xml(SERVER_GROUP_XML)
15
+ @client=Client.from_xml(CLIENT_XML)
16
+ tmpdir=TmpDir.new_tmp_dir
17
+ File.open(File.join(tmpdir, "gconftool-2"), 'w') do |f|
18
+ f.write("#!/bin/bash\nexit 0")
19
+ f.chmod(0755)
20
+ end
21
+ ENV['PATH']=tmpdir+":"+ENV['PATH']
22
+ @vpn_net_man = VpnNetworkManager.new(@group, @client)
23
+ end
24
+
25
+ def teardown
26
+ @vpn_net_man.delete_certs
27
+ end
28
+
29
+ def test_configure_gconf
30
+ assert @vpn_net_man.configure_gconf
31
+ end
32
+
33
+ def test_ip_to_integer
34
+ assert_equal 16782252, @vpn_net_man.ip_to_integer("172.19.0.1")
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,247 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kytoon
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dan Prince
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rdoc
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.12'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.12'
30
+ - !ruby/object:Gem::Dependency
31
+ name: bundler
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.1.4
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.4
46
+ - !ruby/object:Gem::Dependency
47
+ name: builder
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 3.0.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.0.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: jeweler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.8.3
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.8.3
78
+ - !ruby/object:Gem::Dependency
79
+ name: uuidtools
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 2.1.2
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 2.1.2
94
+ - !ruby/object:Gem::Dependency
95
+ name: mocha
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 0.12.1
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.12.1
110
+ - !ruby/object:Gem::Dependency
111
+ name: rake
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: builder
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: json
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: uuidtools
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ description: A set of Rake tasks that provide a framework to help automate the creation
175
+ and configuration of VPC server groups.
176
+ email: dprince@redhat.com
177
+ executables: []
178
+ extensions: []
179
+ extra_rdoc_files:
180
+ - LICENSE.txt
181
+ - README.rdoc
182
+ files:
183
+ - .document
184
+ - Gemfile
185
+ - Gemfile.lock
186
+ - LICENSE.txt
187
+ - README.rdoc
188
+ - Rakefile
189
+ - VERSION
190
+ - config/server_group_vpc.json
191
+ - config/server_group_xen.json
192
+ - lib/kytoon.rb
193
+ - lib/kytoon/providers/cloud_servers_vpc.rb
194
+ - lib/kytoon/providers/cloud_servers_vpc/client.rb
195
+ - lib/kytoon/providers/cloud_servers_vpc/connection.rb
196
+ - lib/kytoon/providers/cloud_servers_vpc/server.rb
197
+ - lib/kytoon/providers/cloud_servers_vpc/server_group.rb
198
+ - lib/kytoon/providers/cloud_servers_vpc/ssh_public_key.rb
199
+ - lib/kytoon/providers/cloud_servers_vpc/vpn_network_interface.rb
200
+ - lib/kytoon/providers/xenserver.rb
201
+ - lib/kytoon/providers/xenserver/server_group.rb
202
+ - lib/kytoon/server_group.rb
203
+ - lib/kytoon/ssh_util.rb
204
+ - lib/kytoon/util.rb
205
+ - lib/kytoon/version.rb
206
+ - lib/kytoon/vpn/vpn_connection.rb
207
+ - lib/kytoon/vpn/vpn_network_manager.rb
208
+ - lib/kytoon/vpn/vpn_openvpn.rb
209
+ - lib/kytoon/xml_util.rb
210
+ - rake/kytoon.rake
211
+ - test/client_test.rb
212
+ - test/helper.rb
213
+ - test/server_group_test.rb
214
+ - test/server_test.rb
215
+ - test/ssh_util_test.rb
216
+ - test/test_helper.rb
217
+ - test/test_kytoon.rb
218
+ - test/util_test.rb
219
+ - test/vpn_network_manager_test.rb
220
+ homepage: http://github.com/dprince/kytoon
221
+ licenses: []
222
+ post_install_message:
223
+ rdoc_options: []
224
+ require_paths:
225
+ - lib
226
+ required_ruby_version: !ruby/object:Gem::Requirement
227
+ none: false
228
+ requirements:
229
+ - - ! '>='
230
+ - !ruby/object:Gem::Version
231
+ version: '0'
232
+ segments:
233
+ - 0
234
+ hash: 1256682396353941801
235
+ required_rubygems_version: !ruby/object:Gem::Requirement
236
+ none: false
237
+ requirements:
238
+ - - ! '>='
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ requirements: []
242
+ rubyforge_project:
243
+ rubygems_version: 1.8.24
244
+ signing_key:
245
+ specification_version: 3
246
+ summary: Create & configure ephemeral virtual private clouds.
247
+ test_files: []