vagrant-parallels 1.3.10 → 1.3.12

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 (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>