vagrant-parallels 1.3.10 → 1.3.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vagrant-parallels/driver/base.rb +23 -2
  3. data/lib/vagrant-parallels/driver/meta.rb +4 -11
  4. data/lib/vagrant-parallels/driver/pd_8.rb +8 -8
  5. data/lib/vagrant-parallels/version.rb +1 -1
  6. data/test/unit/support/shared/parallels_context.rb +5 -0
  7. data/website/docs/build/404.html +134 -0
  8. data/website/docs/build/docs/boxes/base.html +207 -0
  9. data/website/docs/build/docs/boxes/index.html +161 -0
  10. data/website/docs/build/docs/boxes/packer.html +181 -0
  11. data/website/docs/build/docs/boxes/veewee.html +225 -0
  12. data/website/docs/build/docs/configuration.html +231 -0
  13. data/website/docs/build/docs/contacts.html +134 -0
  14. data/website/docs/build/docs/getting-started.html +164 -0
  15. data/website/docs/build/docs/index.html +157 -0
  16. data/website/docs/build/docs/installation/index.html +152 -0
  17. data/website/docs/build/docs/installation/uninstallation.html +141 -0
  18. data/website/docs/build/docs/installation/updating.html +139 -0
  19. data/website/docs/build/docs/networking/forwarded_ports.html +196 -0
  20. data/website/docs/build/docs/networking/index.html +155 -0
  21. data/website/docs/build/docs/networking/private_network.html +177 -0
  22. data/website/docs/build/docs/networking/public_network.html +173 -0
  23. data/website/docs/build/docs/share.html +151 -0
  24. data/website/docs/build/docs/usage.html +146 -0
  25. data/website/docs/build/images/current_pointer-539d41b3.png +0 -0
  26. data/website/docs/build/images/footer_pd_logo-6ec6c3c6.png +0 -0
  27. data/website/docs/build/images/footer_vagrant_logo-8c7e7b39.png +0 -0
  28. data/website/docs/build/images/logo_docs-7e96bb5e.png +0 -0
  29. data/website/docs/build/images/logo_docs_small-c0512386.png +0 -0
  30. data/website/docs/build/images/nav_divider-0c73f644.png +0 -0
  31. data/website/docs/build/images/open_close-8d5572c4.png +0 -0
  32. data/website/docs/build/index.html +157 -0
  33. data/website/docs/build/javascripts/backstretch-f9c163c1.js +4 -0
  34. data/website/docs/build/javascripts/bootstrap.min-98cc7a22.js +7 -0
  35. data/website/docs/build/javascripts/fittext-b487af57.js +10 -0
  36. data/website/docs/build/javascripts/grid-overlay-19e89cad.js +19 -0
  37. data/website/docs/build/javascripts/jquery-15b079d7.js +3 -0
  38. data/website/docs/build/javascripts/less-1.3.0.min-0bbbfaf9.js +3 -0
  39. data/website/docs/build/javascripts/modernizr-d56a170f.js +8 -0
  40. data/website/docs/build/javascripts/vagrant-parallels-966ff22c.js +1 -0
  41. data/website/docs/build/stylesheets/bootstrap-8082a218.css +9 -0
  42. data/website/docs/build/stylesheets/vagrant-parallels-a389b6ea.css +1 -0
  43. metadata +38 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 027990a7239db35d408b8ff4134fe53cec713e17
4
- data.tar.gz: cfb06407f62de7a465c8790f79817ea5681a6bbe
3
+ metadata.gz: 34465669a7296fe6bf908b039f849e9221202c8b
4
+ data.tar.gz: 77b42b45473b87cd97917cba693100b7c9be71c5
5
5
  SHA512:
6
- metadata.gz: 7c8a1fcbed33ffd6b240c6a45ca1f3f5191fb32b777e84a934ff117071a602caa059138e240c87e86d268ee4258c228599eab0ee7dac121c73523fc7c5808e21
7
- data.tar.gz: 47f40077291881538c8680a12d670e2afcfc9b386627c4a48c7bc2680825be45202f3b7588baa46e737769b3eed115a28d7228fe055bd9a7043f670c4ce36fb8
6
+ metadata.gz: 21acbf45f344cb8a1fbbff871f6285d6eff031ee7b1440a13e3fbc638e8d7f05ac41923669bf21df7d33c918b131af58719592b0c68fbdac92e9d659cf3d512c
7
+ data.tar.gz: 4dbd6eb8a9264d84e391b73569295017749fa38c7479ec7cf9589b7ef0d31af520b377946b3d30c128be74b348b3dcc13957c607f83072bd55919c6ee998e1fc
@@ -4,6 +4,7 @@ require 'vagrant/util/busy'
4
4
  require 'vagrant/util/network_ip'
5
5
  require 'vagrant/util/platform'
6
6
  require 'vagrant/util/subprocess'
7
+ require 'vagrant/util/which'
7
8
 
8
9
  module VagrantPlugins
9
10
  module Parallels
@@ -23,8 +24,15 @@ module VagrantPlugins
23
24
  # This flag is used to keep track of interrupted state (SIGINT)
24
25
  @interrupted = false
25
26
 
26
- @prlctl_path = "prlctl"
27
- @prlsrvctl_path = "prlsrvctl"
27
+ @prlctl_path = util_path('prlctl')
28
+ @prlsrvctl_path = util_path('prlsrvctl')
29
+ @prldisktool_path = util_path('prl_disk_tool')
30
+
31
+ if !@prlctl_path
32
+ # This means that Parallels Desktop was not found, so we raise this
33
+ # error here.
34
+ raise VagrantPlugins::Parallels::Errors::ParallelsNotDetected
35
+ end
28
36
 
29
37
  @logger.info("prlctl path: #{@prlctl_path}")
30
38
  @logger.info("prlsrvctl path: #{@prlsrvctl_path}")
@@ -306,6 +314,19 @@ module VagrantPlugins
306
314
  Vagrant::Util::Subprocess.execute(*command, &block)
307
315
  end
308
316
  end
317
+
318
+ private
319
+
320
+ def util_path(bin)
321
+ path = Vagrant::Util::Which.which(bin)
322
+ return path if path
323
+
324
+ ['/usr/local/bin', '/usr/bin'].each do |folder|
325
+ path = File.join(folder, bin)
326
+ return path if File.file?(path)
327
+ end
328
+ end
329
+
309
330
  end
310
331
  end
311
332
  end
@@ -30,13 +30,7 @@ module VagrantPlugins
30
30
 
31
31
  # Read and assign the version of Parallels Desktop we know which
32
32
  # specific driver to instantiate.
33
- begin
34
- @version = read_version || ""
35
- rescue Vagrant::Errors::CommandUnavailable
36
- # This means that Parallels Desktop was not found, so we raise this
37
- # error here.
38
- raise VagrantPlugins::Parallels::Errors::ParallelsNotDetected
39
- end
33
+ @version = read_version || ''
40
34
 
41
35
  # Instantiate the proper version driver for Parallels Desktop
42
36
  @logger.debug("Finding driver for Parallels Desktop version: #{@version}")
@@ -82,7 +76,6 @@ module VagrantPlugins
82
76
  :delete_unused_host_only_networks,
83
77
  :disable_password_restrictions,
84
78
  :enable_adapters,
85
- :execute_prlctl,
86
79
  :export,
87
80
  :forward_ports,
88
81
  :halt,
@@ -134,11 +127,11 @@ module VagrantPlugins
134
127
  #
135
128
  # But we need exactly the first 3 numbers: "x.x.x"
136
129
 
137
- if execute('prlctl', '--version') =~ /prlctl version (\d+\.\d+.\d+)/
130
+ if execute_prlctl('--version') =~ /prlctl version (\d+\.\d+.\d+)/
138
131
  return $1
139
- else
140
- return nil
141
132
  end
133
+
134
+ nil
142
135
  end
143
136
  end
144
137
  end
@@ -24,7 +24,7 @@ module VagrantPlugins
24
24
  name.start_with? 'hdd'
25
25
  end
26
26
  used_drives.each_value do |drive_params|
27
- execute('prl_disk_tool', 'compact', '--hdd', drive_params['image']) do |type, data|
27
+ execute(@prldisktool_path, 'compact', '--hdd', drive_params['image']) do |type, data|
28
28
  lines = data.split("\r")
29
29
  # The progress of the compact will be in the last line. Do a greedy
30
30
  # regular expression to find what we're looking for.
@@ -168,9 +168,9 @@ module VagrantPlugins
168
168
  end
169
169
 
170
170
  def halt(force=false)
171
- args = ['prlctl', 'stop', @uuid]
171
+ args = ['stop', @uuid]
172
172
  args << '--kill' if force
173
- execute(*args)
173
+ execute_prlctl(*args)
174
174
  end
175
175
 
176
176
  def import(tpl_name)
@@ -447,7 +447,7 @@ module VagrantPlugins
447
447
  end
448
448
 
449
449
  def register(pvm_file)
450
- args = ['prlctl', 'register', pvm_file]
450
+ args = [@prlctl_path, 'register', pvm_file]
451
451
 
452
452
  3.times do
453
453
  result = raw(*args)
@@ -465,7 +465,7 @@ module VagrantPlugins
465
465
  # If we reach this point, it means that we consistently got the
466
466
  # failure, do a standard execute now. This will raise an
467
467
  # exception if it fails again.
468
- execute(*args)
468
+ execute_prlctl(*args)
469
469
  end
470
470
 
471
471
  def registered?(uuid)
@@ -516,7 +516,7 @@ module VagrantPlugins
516
516
  end
517
517
 
518
518
  def unregister(uuid)
519
- args = ['prlctl', 'unregister', uuid]
519
+ args = [@prlctl_path, 'unregister', uuid]
520
520
  3.times do
521
521
  result = raw(*args)
522
522
  # Exit if everything is OK
@@ -534,7 +534,7 @@ module VagrantPlugins
534
534
  # If we reach this point, it means that we consistently got the
535
535
  # failure, do a standard execute now. This will raise an
536
536
  # exception if it fails again.
537
- execute(*args)
537
+ execute_prlctl(*args)
538
538
  end
539
539
 
540
540
  def unshare_folders(names)
@@ -545,7 +545,7 @@ module VagrantPlugins
545
545
 
546
546
  def vm_exists?(uuid)
547
547
  5.times do |i|
548
- result = raw('prlctl', 'list', uuid)
548
+ result = raw(@prlctl_path, 'list', uuid)
549
549
  return true if result.exit_code == 0
550
550
 
551
551
  # Sometimes this happens. In this case, retry. If
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Parallels
3
- VERSION = '1.3.10'
3
+ VERSION = '1.3.12'
4
4
  end
5
5
  end
@@ -31,6 +31,11 @@ shared_context 'parallels' do
31
31
  end
32
32
 
33
33
  before do
34
+ # Consider that 'prlctl' and 'prlsrvctl' binaries are available
35
+ allow(Vagrant::Util::Which).to receive(:which).with('prlctl').and_return('prlctl')
36
+ allow(Vagrant::Util::Which).to receive(:which).with('prlsrvctl').and_return('prlsrvctl')
37
+ allow(Vagrant::Util::Which).to receive(:which).with('prl_disk_tool').and_return('prl_disk_tool')
38
+
34
39
  # we don't want unit tests to ever run commands on the system; so we wire
35
40
  # in a double to ensure any unexpected messages raise exceptions
36
41
  stub_const('Vagrant::Util::Subprocess', subprocess)
@@ -0,0 +1,134 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+
6
+ <title>Vagrant Parallels Provider Documentation</title>
7
+
8
+ <!-- meta -->
9
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
10
+
11
+ <!-- lib styles -->
12
+ <link href="stylesheets/bootstrap-8082a218.css" media="screen" rel="stylesheet" type="text/css" />
13
+ <link href="stylesheets/vagrant-parallels-a389b6ea.css" media="screen" rel="stylesheet" type="text/css" />
14
+
15
+ <!-- lib js -->
16
+ <script src="javascripts/jquery-15b079d7.js" type="text/javascript"></script>
17
+ <script src="javascripts/modernizr-d56a170f.js" type="text/javascript"></script>
18
+ <script src="javascripts/bootstrap.min-98cc7a22.js" type="text/javascript"></script>
19
+ <script src="javascripts/backstretch-f9c163c1.js" type="text/javascript"></script>
20
+ <script src="javascripts/vagrant-parallels-966ff22c.js" type="text/javascript"></script>
21
+
22
+ <!-- fonts -->
23
+ <link href='http://fonts.googleapis.com/css?family=Inconsolata' rel='stylesheet' type='text/css'>
24
+
25
+ </head>
26
+ <body>
27
+ <!-- wrap everything -->
28
+ <div class="wrapper">
29
+
30
+ <!-- nav -->
31
+
32
+ <nav class="docs">
33
+ <div class="container">
34
+ <!-- vagrant logo -->
35
+ <a class="vagrant-docs-logo" href="docs/">Vagrant Parallels Documentation</a>
36
+ <!-- nav -->
37
+ <ul class="pull-right">
38
+ <li><a href="https://docs.vagrantup.com">Vagrant Docs</a></li>
39
+ <li><a href="https://github.com/Parallels/vagrant-parallels">Github</a></li>
40
+ </ul>
41
+ </div> <!-- container -->
42
+ </nav>
43
+
44
+ <div class="page docs docs-home">
45
+ <div class="container">
46
+ <div class="sidebar span4">
47
+ <!-- get the sidebar nav -->
48
+ <!-- side nav docs -->
49
+ <aside class="sidebar-nav">
50
+
51
+ <div class="toggle hidden-desktop">
52
+ <div class="open-close open"></div>
53
+ <a href="#">Contents</a>
54
+ </div>
55
+
56
+ <ul class="unstyled">
57
+ <li><a href="docs/">Overview</a></li>
58
+
59
+ <li><a href="docs/installation/">Installation</a></li>
60
+
61
+
62
+ <li><a href="docs/usage.html">Usage</a></li>
63
+
64
+ <li><a href="docs/getting-started.html">Getting Started</a></li>
65
+
66
+ <li><a href="docs/share.html">Vagrant Share</a></li>
67
+
68
+ <li><a href="docs/boxes/">Boxes</a></li>
69
+
70
+
71
+ <li><a href="docs/configuration.html">Configuration</a></li>
72
+
73
+ <li><a href="docs/networking/">Networking</a></li>
74
+
75
+
76
+ <li><a href="docs/contacts.html">Contacts</a></li>
77
+
78
+ </ul>
79
+ </aside> <!-- /.sidebar -->
80
+ </div> <!-- /.sidebar -->
81
+
82
+ <div class="page-contents span9">
83
+ <div class="page-background"></div>
84
+
85
+ <!-- start page content -->
86
+ <div class="row">
87
+ <div class="span8 offset1">
88
+ <h2>Page Not Found</h4>
89
+
90
+ <p>
91
+ Sorry, the page you tried to visit doesn't exist. This could be our fault,
92
+ and if so we'll fix that up right away. Please go back, or go back
93
+ <a href="/">home</a> to get back on track.
94
+ </p>
95
+
96
+ </div> <!-- /.span8 -->
97
+ </div> <!-- /.row -->
98
+ </div> <!-- /.page-contents -->
99
+ </div> <!-- /.container -->
100
+ </div> <!-- /.page -->
101
+
102
+ <!-- footer -->
103
+ <footer>
104
+ <div class="container">
105
+ <div class="row">
106
+ <ul class="unstyled logos">
107
+ <a href="http://www.vagrantup.com/downloads.html">
108
+ <li class="vagrant-logo-monochrome">
109
+ <p>Vagrant</p>
110
+ </li>
111
+ </a>
112
+ <a href="http://www.parallels.com/downloads/desktop/">
113
+ <li class="pd-logo-monochrome">
114
+ <p>Parallels Desktop</p>
115
+ </li>
116
+ </a>
117
+ </ul> <!-- /span -->
118
+
119
+ </div> <!-- /row -->
120
+
121
+ <div class="row">
122
+ <h6 class="legal">
123
+ &copy; 2015 Parallels IP Holdings GmbH.
124
+ </h6>
125
+ </div> <!-- row -->
126
+ </div> <!-- container -->
127
+ </footer>
128
+
129
+ <!-- close .wrapper -->
130
+ </div>
131
+
132
+ <!-- load scripts -->
133
+ </body>
134
+ </html>
@@ -0,0 +1,207 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+
6
+ <title> Creating a Base Box - Vagrant Parallels Provider Documentation</title>
7
+
8
+ <!-- meta -->
9
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
10
+
11
+ <!-- lib styles -->
12
+ <link href="../../stylesheets/bootstrap-8082a218.css" media="screen" rel="stylesheet" type="text/css" />
13
+ <link href="../../stylesheets/vagrant-parallels-a389b6ea.css" media="screen" rel="stylesheet" type="text/css" />
14
+
15
+ <!-- lib js -->
16
+ <script src="../../javascripts/jquery-15b079d7.js" type="text/javascript"></script>
17
+ <script src="../../javascripts/modernizr-d56a170f.js" type="text/javascript"></script>
18
+ <script src="../../javascripts/bootstrap.min-98cc7a22.js" type="text/javascript"></script>
19
+ <script src="../../javascripts/backstretch-f9c163c1.js" type="text/javascript"></script>
20
+ <script src="../../javascripts/vagrant-parallels-966ff22c.js" type="text/javascript"></script>
21
+
22
+ <!-- fonts -->
23
+ <link href='http://fonts.googleapis.com/css?family=Inconsolata' rel='stylesheet' type='text/css'>
24
+
25
+ </head>
26
+ <body>
27
+ <!-- wrap everything -->
28
+ <div class="wrapper">
29
+
30
+ <!-- nav -->
31
+
32
+ <nav class="docs">
33
+ <div class="container">
34
+ <!-- vagrant logo -->
35
+ <a class="vagrant-docs-logo" href="../">Vagrant Parallels Documentation</a>
36
+ <!-- nav -->
37
+ <ul class="pull-right">
38
+ <li><a href="https://docs.vagrantup.com">Vagrant Docs</a></li>
39
+ <li><a href="https://github.com/Parallels/vagrant-parallels">Github</a></li>
40
+ </ul>
41
+ </div> <!-- container -->
42
+ </nav>
43
+
44
+ <div class="page docs docs-home">
45
+ <div class="container">
46
+ <div class="sidebar span4">
47
+ <!-- get the sidebar nav -->
48
+ <!-- side nav docs -->
49
+ <aside class="sidebar-nav">
50
+
51
+ <div class="toggle hidden-desktop">
52
+ <div class="open-close open"></div>
53
+ <a href="#">Contents</a>
54
+ </div>
55
+
56
+ <ul class="unstyled">
57
+ <li><a href="../">Overview</a></li>
58
+
59
+ <li><a href="../installation/">Installation</a></li>
60
+
61
+
62
+ <li><a href="../usage.html">Usage</a></li>
63
+
64
+ <li><a href="../getting-started.html">Getting Started</a></li>
65
+
66
+ <li><a href="../share.html">Vagrant Share</a></li>
67
+
68
+ <li><a href="./">Boxes</a></li>
69
+
70
+ <ul class="sub unstyled">
71
+ <li class="current"><a href="base.html">Creating a Base Box</a></li>
72
+ <li><a href="packer.html">Using Packer</a></li>
73
+ <li><a href="veewee.html">Using Veewee</a></li>
74
+ </ul>
75
+
76
+
77
+ <li><a href="../configuration.html">Configuration</a></li>
78
+
79
+ <li><a href="../networking/">Networking</a></li>
80
+
81
+
82
+ <li><a href="../contacts.html">Contacts</a></li>
83
+
84
+ </ul>
85
+ </aside> <!-- /.sidebar -->
86
+ </div> <!-- /.sidebar -->
87
+
88
+ <div class="page-contents span9">
89
+ <div class="page-background"></div>
90
+
91
+ <!-- start page content -->
92
+ <div class="row">
93
+ <div class="span8 offset1">
94
+ <h1>Creating a Base Box</h1>
95
+
96
+ <div class="alert alert-warn">
97
+ <p>
98
+ <strong>Warning: Advanced Topic!</strong> Creating a base box can be a
99
+ time consuming and tedious process, and is not recommended for new
100
+ Vagrant users. If you're just getting started with Vagrant, we
101
+ recommend trying to find <a href="https://atlas.hashicorp.com/parallels">
102
+ existing base boxes</a> to use first.
103
+ </p>
104
+ </div>
105
+
106
+ <p>This page documents the box format so that you can create your own base boxes
107
+ manually.</p>
108
+
109
+ <p>Prior to reading this page, please check out the <a href="http://docs.vagrantup.com/v2/boxes/format.html">basics of the Vagrant
110
+ box file format</a>.</p>
111
+
112
+ <h2>Contents</h2>
113
+
114
+ <p>A Parallels base box is a compressed archive of the necessary contents of
115
+ a Parallels &quot;pvm&quot; file. Here is an example of what is contained in such a box:</p>
116
+
117
+ <pre><code>$ tree
118
+ .
119
+ ├── Vagrantfile
120
+ ├── box.pvm
121
+ │   ├── NVRAM.dat
122
+ │   ├── VmInfo.pvi
123
+ │   ├── config.pvs
124
+ │   └── harddisk.hdd
125
+ │   └── ...
126
+ └── metadata.json
127
+ </code></pre>
128
+
129
+ <p><code>config.pvs</code> and <code>.hdd</code> files are strictly required for a Parallels virtual
130
+ machine.</p>
131
+
132
+ <p>There is also the &quot;metadata.json&quot; file used by Vagrant itself. This file
133
+ contains nothing but the defaults which are documented on the <a href="http://docs.vagrantup.com/v2/boxes/format.html">box format</a> page.</p>
134
+
135
+ <h2>Installed Software</h2>
136
+
137
+ <p>Base boxes for the Parallels provider should have the following software
138
+ installed, as a bare minimum:</p>
139
+
140
+ <ul>
141
+ <li><p>SSH server with key-based authentication setup. If you want the box to work
142
+ with default Vagrant settings, the SSH user must be set to accept the <a href="https://github.com/mitchellh/vagrant/blob/master/keys/vagrant.pub">insecure
143
+ keypair</a>
144
+ that ships with Vagrant.</p></li>
145
+ <li><p><a href="http://download.parallels.com/desktop/v9/ga/docs/en_US/
146
+ Parallels%20Desktop%20User&amp;#x27;s%20Guide/32791.htm">Parallels Tools</a> so that things such as shared
147
+ folders can function. There are many other benefits to installing the tools,
148
+ such as networking configuration and device mapping.</p></li>
149
+ </ul>
150
+
151
+ <h2>Optimizing the Box Size</h2>
152
+
153
+ <p>Prior to packaging up a box, you should shrink the hard drives as much as
154
+ possible. This can be done with <code>prl_disk_tool</code>:</p>
155
+
156
+ <pre><code>$ prl_disk_tool compact /path/to/harddisk.hdd
157
+ </code></pre>
158
+
159
+ <h2>Packaging</h2>
160
+
161
+ <p>Remove any extraneous files from the &quot;pvm&quot; folder and package it. Be sure to
162
+ compress the tar with gzip (done below in a single command) since Parallels
163
+ hard disks are not compressed by default.</p>
164
+
165
+ <pre><code>$ cd /path/to/my/box.pvm/..
166
+ $ tar cvzf custom.box ./box.pvm ./Vagrantfile ./metadata.json
167
+ </code></pre>
168
+
169
+ </div> <!-- /.span8 -->
170
+ </div> <!-- /.row -->
171
+ </div> <!-- /.page-contents -->
172
+ </div> <!-- /.container -->
173
+ </div> <!-- /.page -->
174
+
175
+ <!-- footer -->
176
+ <footer>
177
+ <div class="container">
178
+ <div class="row">
179
+ <ul class="unstyled logos">
180
+ <a href="http://www.vagrantup.com/downloads.html">
181
+ <li class="vagrant-logo-monochrome">
182
+ <p>Vagrant</p>
183
+ </li>
184
+ </a>
185
+ <a href="http://www.parallels.com/downloads/desktop/">
186
+ <li class="pd-logo-monochrome">
187
+ <p>Parallels Desktop</p>
188
+ </li>
189
+ </a>
190
+ </ul> <!-- /span -->
191
+
192
+ </div> <!-- /row -->
193
+
194
+ <div class="row">
195
+ <h6 class="legal">
196
+ &copy; 2015 Parallels IP Holdings GmbH.
197
+ </h6>
198
+ </div> <!-- row -->
199
+ </div> <!-- container -->
200
+ </footer>
201
+
202
+ <!-- close .wrapper -->
203
+ </div>
204
+
205
+ <!-- load scripts -->
206
+ </body>
207
+ </html>