Merge pull request #4726 from mitchellh/sethvargo/rebrand

Update to match HashiCorp styles
This commit is contained in:
Seth Vargo 2017-03-28 16:19:59 -04:00 committed by GitHub
commit 297081158f
215 changed files with 5797 additions and 6680 deletions

View File

@ -1,3 +1,3 @@
source "https://rubygems.org"
gem "middleman-hashicorp", "0.3.13"
gem "middleman-hashicorp", "0.3.22"

View File

@ -6,7 +6,7 @@ GEM
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
autoprefixer-rails (6.7.6)
autoprefixer-rails (6.7.7.1)
execjs
bootstrap-sass (3.3.7)
autoprefixer-rails (>= 5.2.1)
@ -77,7 +77,7 @@ GEM
rack (>= 1.4.5, < 2.0)
thor (>= 0.15.2, < 2.0)
tilt (~> 1.4.1, < 2.0)
middleman-hashicorp (0.3.13)
middleman-hashicorp (0.3.22)
bootstrap-sass (~> 3.3)
builder (~> 3.2)
middleman (~> 3.4)
@ -103,7 +103,7 @@ GEM
mini_portile2 (2.1.0)
minitest (5.10.1)
multi_json (1.12.1)
nokogiri (1.7.0.1)
nokogiri (1.7.1)
mini_portile2 (~> 2.1.0)
padrino-helpers (0.12.8.1)
i18n (~> 0.6, >= 0.6.7)
@ -138,7 +138,7 @@ GEM
turbolinks (5.0.1)
turbolinks-source (~> 5)
turbolinks-source (5.0.0)
tzinfo (1.2.2)
tzinfo (1.2.3)
thread_safe (~> 0.1)
uber (0.0.15)
uglifier (2.7.2)
@ -151,7 +151,7 @@ PLATFORMS
ruby
DEPENDENCIES
middleman-hashicorp (= 0.3.13)
middleman-hashicorp (= 0.3.22)
BUNDLED WITH
1.14.6

View File

@ -1,4 +1,4 @@
VERSION?="0.3.13"
VERSION?="0.3.22"
website:
@echo "==> Starting website in Docker..."

View File

@ -1,7 +1,72 @@
set :base_url, "https://www.packer.io/"
activate :hashicorp do |h|
h.name = "packer"
h.version = "0.12.3"
h.github_slug = "mitchellh/packer"
h.name = "packer"
h.version = "0.12.3"
h.github_slug = "mitchellh/packer"
h.website_root = "website"
end
helpers do
# Get the title for the page.
#
# @param [Middleman::Page] page
#
# @return [String]
def title_for(page)
if page && page.data.page_title
return "#{page.data.page_title} - Packer by HashiCorp"
end
"Packer by HashiCorp"
end
# Get the description for the page
#
# @param [Middleman::Page] page
#
# @return [String]
def description_for(page)
description = (page.data.description || "")
.gsub('"', '')
.gsub(/\n+/, ' ')
.squeeze(' ')
return escape_html(description)
end
# This helps by setting the "active" class for sidebar nav elements
# if the YAML frontmatter matches the expected value.
def sidebar_current(expected)
current = current_page.data.sidebar_current || ""
if current.start_with?(expected)
return " class=\"active\""
else
return ""
end
end
# Returns the id for this page.
# @return [String]
def body_id_for(page)
if !(name = page.data.sidebar_current).blank?
return "page-#{name.strip}"
end
if page.url == "/" || page.url == "/index.html"
return "page-home"
end
return ""
end
# Returns the list of classes for this page.
# @return [String]
def body_classes_for(page)
classes = []
if page && page.data.layout
classes << "layout-#{page.data.layout}"
end
return classes.join(" ")
end
end

View File

@ -8,7 +8,7 @@
"builders": [
{
"type": "docker",
"image": "hashicorp/middleman-hashicorp:0.3.13",
"image": "hashicorp/middleman-hashicorp:0.3.22",
"discard": "true",
"run_command": ["-d", "-i", "-t", "{{ .Image }}", "/bin/sh"]
}

View File

@ -1,5 +0,0 @@
---
noindex: true
---
<h2>Page Not Found</h2>

View File

@ -0,0 +1,14 @@
---
layout: inner
page_title: Page Not Found
noindex: true
description: |-
Page not found!
---
# Page Not Found
Sorry, the page you tried to visit does not exist. This could be our fault,
and if so we will fix that up right away.
Please go back, or go back to get back on track.

View File

@ -0,0 +1,18 @@
{
"name": "Packer by HashiCorp",
"icons": [
{
"src": "<%= image_path('favicons/android-chrome-192x192.png') %>",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "<%= image_path('favicons/android-chrome-512x512.png') %>",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,20 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="16.000000pt" height="16.000000pt" viewBox="0 0 16.000000 16.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,16.000000) scale(0.001739,-0.001739)"
fill="#000000" stroke="none">
<path d="M3022 8509 l3 -633 1087 -621 1087 -620 3 -1910 3 -1910 560 -318
c589 -334 690 -383 860 -418 171 -35 346 -17 468 48 79 43 168 138 211 224 77
157 71 19 71 1769 0 1767 7 1612 -81 1876 -166 503 -568 1014 -1014 1291 -78
49 -3224 1841 -3245 1849 -13 6 -15 -70 -13 -627z"/>
<path d="M1812 4929 l3 -3112 1460 -834 c803 -459 1466 -837 1473 -840 9 -4
12 621 12 3105 l0 3111 -1471 840 c-809 463 -1473 841 -1475 841 -2 0 -3
-1400 -2 -3111z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 956 B

View File

@ -0,0 +1,272 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 741.7 491" style="enable-background:new 0 0 741.7 491;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);}
.st1{opacity:0.8;fill-rule:evenodd;clip-rule:evenodd;fill:#1DAEFF;}
.st2{opacity:0.5;fill-rule:evenodd;clip-rule:evenodd;fill:#1DAEFF;}
.st3{opacity:0.3;fill-rule:evenodd;clip-rule:evenodd;fill:#1DAEFF;}
.st4{fill-rule:evenodd;clip-rule:evenodd;fill:#1DAEFF;}
.st5{opacity:0.4;fill-rule:evenodd;clip-rule:evenodd;fill:#1DAEFF;}
.st6{opacity:0.6;fill-rule:evenodd;clip-rule:evenodd;fill:#1DAEFF;}
.st7{fill:none;stroke:#000000;stroke-miterlimit:10;}
.st8{fill:#FFFFFF;stroke:#000000;stroke-miterlimit:10;}
</style>
<title>Artboard 1</title>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="370.8584" y1="491" x2="370.8584" y2="-9.094947e-13">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="0.5175" style="stop-color:#E5E5E4"/>
<stop offset="1" style="stop-color:#FFFFFF"/>
</linearGradient>
<path class="st0" d="M1,491v-5.6l9.8,5.6h2L1,484.2v-28.3L25.5,470v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3
L76.6,470v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3l24.5,14.2v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2
l-11.8-6.8v-28.3l24.5,14.2v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3l24.5,14.2v21h1v-20.4l24.5,14.2v6.2h1v-5.6
l9.8,5.6h2l-11.8-6.8v-28.3l24.5,14.2v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3L332,470v21h1v-20.4l24.5,14.2v6.2
h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3l24.5,14.2v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3l24.5,14.2v21h1v-20.4
l24.5,14.2v6.2h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3l24.5,14.2v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3l24.5,14.2
v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3l24.5,14.2v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3
l24.5,14.2v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2l-11.8-6.8v-28.3l24.5,14.2v21h1v-20.4l24.5,14.2v6.2h1v-5.6l9.8,5.6h2
l-11.8-6.8v-28.3l24.5,14.2v21h1v-20.4v-1.2v-28.3V440v-28.3v-1.2v-28.3V381v-28.3v-1.2v-28.3V322v-28.3v-1.2v-28.3V263v-28.3v-1.2
v-28.3V204v-28.3v-1.2v-28.3V145v-28.3v-1.2V87.2V86V57.7v-1.2V28.2V27V0h-1v26.5l-24.5-14.2V0h-1v11.7L694.9,0h-2l22.3,12.9v28.3
L690.6,27V0h-1v26.5l-24.5-14.2V0h-1v11.7L643.8,0h-2l22.3,12.9v28.3L639.5,27V0h-1v26.5L614,12.3V0h-1v11.7L592.7,0h-2L613,12.9
v28.3L588.5,27V0h-1v26.5l-24.5-14.2V0h-1v11.7L541.6,0h-2l22.3,12.9v28.3L537.4,27V0h-1v26.5l-24.5-14.2V0h-1v11.7L490.5,0h-2
l22.3,12.9v28.3L486.3,27V0h-1v26.5l-24.5-14.2V0h-1v11.7L439.5,0h-2l22.3,12.9v28.3L435.2,27V0h-1v26.5l-24.5-14.2V0h-1v11.7
L388.4,0h-2l22.3,12.9v28.3L384.1,27V0h-1v26.5l-24.5-14.2V0h-1v11.7L337.3,0h-2l22.3,12.9v28.3L333,27V0h-1v26.5l-24.5-14.2V0h-1
v11.7L286.2,0h-2l22.3,12.9v28.3L281.9,27V0h-1v26.5l-24.5-14.2V0h-1v11.7L235.1,0h-2l22.3,12.9v28.3L230.9,27V0h-1v26.5l-24.5-14.2
V0h-1v11.7L184,0h-2l22.3,12.9v28.3L179.8,27V0h-1v26.5l-24.5-14.2V0h-1v11.7L132.9,0h-2l22.3,12.9v28.3L128.7,27V0h-1v26.5
l-24.5-14.2V0h-1v11.7L81.9,0h-2l22.3,12.9v28.3L77.6,27V0h-1v26.5L52.1,12.3V0h-1v11.7L30.8,0h-2l22.3,12.9v28.3L26.5,27V0h-1v26.5
L1,12.3V0H0v491H1z M716.2,13.4l24.5,14.2V56l-24.5-14.2V13.4z M716.2,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M716.2,72.4l24.5,14.2
v28.3l-24.5-14.2V72.4z M716.2,101.9l24.5,14.2v28.3l-24.5-14.2V101.9z M716.2,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M716.2,160.9
l24.5,14.2v28.3l-24.5-14.2V160.9z M716.2,190.4l24.5,14.2v28.3l-24.5-14.2V190.4z M716.2,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z
M716.2,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M716.2,278.9l24.5,14.2v28.3l-24.5-14.2V278.9z M716.2,308.4l24.5,14.2v28.3
l-24.5-14.2V308.4z M716.2,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z M716.2,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M716.2,396.9
l24.5,14.2v28.3l-24.5-14.2V396.9z M716.2,426.4l24.5,14.2v28.3l-24.5-14.2V426.4z M690.6,28.2l24.5,14.2v28.3l-24.5-14.2V28.2z
M690.6,57.7l24.5,14.2v28.3L690.6,86V57.7z M690.6,87.2l24.5,14.2v28.3l-24.5-14.2V87.2z M690.6,116.7l24.5,14.2v28.3L690.6,145
V116.7z M690.6,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M690.6,175.7l24.5,14.2v28.3L690.6,204V175.7z M690.6,205.2l24.5,14.2v28.3
l-24.5-14.2V205.2z M690.6,234.7l24.5,14.2v28.3L690.6,263V234.7z M690.6,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M690.6,293.6
l24.5,14.2v28.3L690.6,322V293.6z M690.6,323.1l24.5,14.2v28.3l-24.5-14.2V323.1z M690.6,352.6l24.5,14.2v28.3L690.6,381V352.6z
M690.6,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M690.6,411.6l24.5,14.2v28.3L690.6,440V411.6z M690.6,441.1l24.5,14.2v28.3
l-24.5-14.2V441.1z M665.1,13.4l24.5,14.2V56l-24.5-14.2V13.4z M665.1,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M665.1,72.4l24.5,14.2
v28.3l-24.5-14.2V72.4z M665.1,101.9l24.5,14.2v28.3l-24.5-14.2V101.9z M665.1,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M665.1,160.9
l24.5,14.2v28.3l-24.5-14.2V160.9z M665.1,190.4l24.5,14.2v28.3l-24.5-14.2V190.4z M665.1,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z
M665.1,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M665.1,278.9l24.5,14.2v28.3l-24.5-14.2V278.9z M665.1,308.4l24.5,14.2v28.3
l-24.5-14.2V308.4z M665.1,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z M665.1,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M665.1,396.9
l24.5,14.2v28.3l-24.5-14.2V396.9z M665.1,426.4l24.5,14.2v28.3l-24.5-14.2V426.4z M639.5,28.2l24.5,14.2v28.3l-24.5-14.2V28.2z
M639.5,57.7l24.5,14.2v28.3L639.5,86V57.7z M639.5,87.2l24.5,14.2v28.3l-24.5-14.2V87.2z M639.5,116.7l24.5,14.2v28.3L639.5,145
V116.7z M639.5,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M639.5,175.7l24.5,14.2v28.3L639.5,204V175.7z M639.5,205.2l24.5,14.2v28.3
l-24.5-14.2V205.2z M639.5,234.7l24.5,14.2v28.3L639.5,263V234.7z M639.5,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M639.5,293.6
l24.5,14.2v28.3L639.5,322V293.6z M639.5,323.1l24.5,14.2v28.3l-24.5-14.2V323.1z M639.5,352.6l24.5,14.2v28.3L639.5,381V352.6z
M639.5,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M639.5,411.6l24.5,14.2v28.3L639.5,440V411.6z M639.5,441.1l24.5,14.2v28.3
l-24.5-14.2V441.1z M614,13.4l24.5,14.2V56L614,41.8V13.4z M614,42.9l24.5,14.2v28.3L614,71.3V42.9z M614,72.4l24.5,14.2v28.3
L614,100.8V72.4z M614,101.9l24.5,14.2v28.3L614,130.3V101.9z M614,131.4l24.5,14.2v28.3L614,159.8V131.4z M614,160.9l24.5,14.2
v28.3L614,189.3V160.9z M614,190.4l24.5,14.2v28.3L614,218.7V190.4z M614,219.9l24.5,14.2v28.3L614,248.2V219.9z M614,249.4
l24.5,14.2v28.3L614,277.7V249.4z M614,278.9l24.5,14.2v28.3L614,307.2V278.9z M614,308.4l24.5,14.2v28.3L614,336.7V308.4z
M614,337.9l24.5,14.2v28.3L614,366.2V337.9z M614,367.4l24.5,14.2v28.3L614,395.7V367.4z M614,396.9l24.5,14.2v28.3L614,425.2
V396.9z M614,426.4l24.5,14.2v28.3L614,454.7V426.4z M588.5,28.2L613,42.4v28.3l-24.5-14.2V28.2z M588.5,57.7L613,71.9v28.3
L588.5,86V57.7z M588.5,87.2l24.5,14.2v28.3l-24.5-14.2V87.2z M588.5,116.7l24.5,14.2v28.3L588.5,145V116.7z M588.5,146.2l24.5,14.2
v28.3l-24.5-14.2V146.2z M588.5,175.7l24.5,14.2v28.3L588.5,204V175.7z M588.5,205.2l24.5,14.2v28.3l-24.5-14.2V205.2z M588.5,234.7
l24.5,14.2v28.3L588.5,263V234.7z M588.5,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M588.5,293.6l24.5,14.2v28.3L588.5,322V293.6z
M588.5,323.1l24.5,14.2v28.3l-24.5-14.2V323.1z M588.5,352.6l24.5,14.2v28.3L588.5,381V352.6z M588.5,382.1l24.5,14.2v28.3
l-24.5-14.2V382.1z M588.5,411.6l24.5,14.2v28.3L588.5,440V411.6z M588.5,441.1l24.5,14.2v28.3l-24.5-14.2V441.1z M562.9,13.4
l24.5,14.2V56l-24.5-14.2V13.4z M562.9,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M562.9,72.4l24.5,14.2v28.3l-24.5-14.2V72.4z
M562.9,101.9l24.5,14.2v28.3l-24.5-14.2V101.9z M562.9,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M562.9,160.9l24.5,14.2v28.3
l-24.5-14.2V160.9z M562.9,190.4l24.5,14.2v28.3l-24.5-14.2V190.4z M562.9,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z M562.9,249.4
l24.5,14.2v28.3l-24.5-14.2V249.4z M562.9,278.9l24.5,14.2v28.3l-24.5-14.2V278.9z M562.9,308.4l24.5,14.2v28.3l-24.5-14.2V308.4z
M562.9,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z M562.9,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M562.9,396.9l24.5,14.2v28.3
l-24.5-14.2V396.9z M562.9,426.4l24.5,14.2v28.3l-24.5-14.2V426.4z M537.4,28.2l24.5,14.2v28.3l-24.5-14.2V28.2z M537.4,57.7
l24.5,14.2v28.3L537.4,86V57.7z M537.4,87.2l24.5,14.2v28.3l-24.5-14.2V87.2z M537.4,116.7l24.5,14.2v28.3L537.4,145V116.7z
M537.4,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M537.4,175.7l24.5,14.2v28.3L537.4,204V175.7z M537.4,205.2l24.5,14.2v28.3
l-24.5-14.2V205.2z M537.4,234.7l24.5,14.2v28.3L537.4,263V234.7z M537.4,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M537.4,293.6
l24.5,14.2v28.3L537.4,322V293.6z M537.4,323.1l24.5,14.2v28.3l-24.5-14.2V323.1z M537.4,352.6l24.5,14.2v28.3L537.4,381V352.6z
M537.4,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M537.4,411.6l24.5,14.2v28.3L537.4,440V411.6z M537.4,441.1l24.5,14.2v28.3
l-24.5-14.2V441.1z M511.8,13.4l24.5,14.2V56l-24.5-14.2V13.4z M511.8,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M511.8,72.4l24.5,14.2
v28.3l-24.5-14.2V72.4z M511.8,101.9l24.5,14.2v28.3l-24.5-14.2V101.9z M511.8,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M511.8,160.9
l24.5,14.2v28.3l-24.5-14.2V160.9z M511.8,190.4l24.5,14.2v28.3l-24.5-14.2V190.4z M511.8,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z
M511.8,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M511.8,278.9l24.5,14.2v28.3l-24.5-14.2V278.9z M511.8,308.4l24.5,14.2v28.3
l-24.5-14.2V308.4z M511.8,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z M511.8,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M511.8,396.9
l24.5,14.2v28.3l-24.5-14.2V396.9z M511.8,426.4l24.5,14.2v28.3l-24.5-14.2V426.4z M486.3,28.2l24.5,14.2v28.3l-24.5-14.2V28.2z
M486.3,57.7l24.5,14.2v28.3L486.3,86V57.7z M486.3,87.2l24.5,14.2v28.3l-24.5-14.2V87.2z M486.3,116.7l24.5,14.2v28.3L486.3,145
V116.7z M486.3,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M486.3,175.7l24.5,14.2v28.3L486.3,204V175.7z M486.3,205.2l24.5,14.2v28.3
l-24.5-14.2V205.2z M486.3,234.7l24.5,14.2v28.3L486.3,263V234.7z M486.3,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M486.3,293.6
l24.5,14.2v28.3L486.3,322V293.6z M486.3,323.1l24.5,14.2v28.3l-24.5-14.2V323.1z M486.3,352.6l24.5,14.2v28.3L486.3,381V352.6z
M486.3,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M486.3,411.6l24.5,14.2v28.3L486.3,440V411.6z M486.3,441.1l24.5,14.2v28.3
l-24.5-14.2V441.1z M460.7,13.4l24.5,14.2V56l-24.5-14.2V13.4z M460.7,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M460.7,72.4l24.5,14.2
v28.3l-24.5-14.2V72.4z M460.7,101.9l24.5,14.2v28.3l-24.5-14.2V101.9z M460.7,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M460.7,160.9
l24.5,14.2v28.3l-24.5-14.2V160.9z M460.7,190.4l24.5,14.2v28.3l-24.5-14.2V190.4z M460.7,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z
M460.7,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M460.7,278.9l24.5,14.2v28.3l-24.5-14.2V278.9z M460.7,308.4l24.5,14.2v28.3
l-24.5-14.2V308.4z M460.7,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z M460.7,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M460.7,396.9
l24.5,14.2v28.3l-24.5-14.2V396.9z M460.7,426.4l24.5,14.2v28.3l-24.5-14.2V426.4z M435.2,28.2l24.5,14.2v28.3l-24.5-14.2V28.2z
M435.2,57.7l24.5,14.2v28.3L435.2,86V57.7z M435.2,87.2l24.5,14.2v28.3l-24.5-14.2V87.2z M435.2,116.7l24.5,14.2v28.3L435.2,145
V116.7z M435.2,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M435.2,175.7l24.5,14.2v28.3L435.2,204V175.7z M435.2,205.2l24.5,14.2v28.3
l-24.5-14.2V205.2z M435.2,234.7l24.5,14.2v28.3L435.2,263V234.7z M435.2,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M435.2,293.6
l24.5,14.2v28.3L435.2,322V293.6z M435.2,323.1l24.5,14.2v28.3l-24.5-14.2V323.1z M435.2,352.6l24.5,14.2v28.3L435.2,381V352.6z
M435.2,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M435.2,411.6l24.5,14.2v28.3L435.2,440V411.6z M435.2,441.1l24.5,14.2v28.3
l-24.5-14.2V441.1z M409.7,13.4l24.5,14.2V56l-24.5-14.2V13.4z M409.7,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M409.7,72.4l24.5,14.2
v28.3l-24.5-14.2V72.4z M409.7,101.9l24.5,14.2v28.3l-24.5-14.2V101.9z M409.7,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M409.7,160.9
l24.5,14.2v28.3l-24.5-14.2V160.9z M409.7,190.4l24.5,14.2v28.3l-24.5-14.2V190.4z M409.7,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z
M409.7,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M409.7,278.9l24.5,14.2v28.3l-24.5-14.2V278.9z M409.7,308.4l24.5,14.2v28.3
l-24.5-14.2V308.4z M409.7,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z M409.7,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M409.7,396.9
l24.5,14.2v28.3l-24.5-14.2V396.9z M409.7,426.4l24.5,14.2v28.3l-24.5-14.2V426.4z M384.1,28.2l24.5,14.2v28.3l-24.5-14.2V28.2z
M384.1,57.7l24.5,14.2v28.3L384.1,86V57.7z M384.1,87.2l24.5,14.2v28.3l-24.5-14.2V87.2z M384.1,116.7l24.5,14.2v28.3L384.1,145
V116.7z M384.1,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M384.1,175.7l24.5,14.2v28.3L384.1,204V175.7z M384.1,205.2l24.5,14.2v28.3
l-24.5-14.2V205.2z M384.1,234.7l24.5,14.2v28.3L384.1,263V234.7z M384.1,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M384.1,293.6
l24.5,14.2v28.3L384.1,322V293.6z M384.1,323.1l24.5,14.2v28.3l-24.5-14.2V323.1z M384.1,352.6l24.5,14.2v28.3L384.1,381V352.6z
M384.1,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M384.1,411.6l24.5,14.2v28.3L384.1,440V411.6z M384.1,441.1l24.5,14.2v28.3
l-24.5-14.2V441.1z M358.6,13.4l24.5,14.2V56l-24.5-14.2V13.4z M358.6,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M358.6,72.4l24.5,14.2
v28.3l-24.5-14.2V72.4z M358.6,101.9l24.5,14.2v28.3l-24.5-14.2V101.9z M358.6,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M358.6,160.9
l24.5,14.2v28.3l-24.5-14.2V160.9z M358.6,190.4l24.5,14.2v28.3l-24.5-14.2V190.4z M358.6,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z
M358.6,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M358.6,278.9l24.5,14.2v28.3l-24.5-14.2V278.9z M358.6,308.4l24.5,14.2v28.3
l-24.5-14.2V308.4z M358.6,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z M358.6,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M358.6,396.9
l24.5,14.2v28.3l-24.5-14.2V396.9z M358.6,426.4l24.5,14.2v28.3l-24.5-14.2V426.4z M333,28.2l24.5,14.2v28.3L333,56.5V28.2z
M333,57.7l24.5,14.2v28.3L333,86V57.7z M333,87.2l24.5,14.2v28.3L333,115.5V87.2z M333,116.7l24.5,14.2v28.3L333,145V116.7z
M333,146.2l24.5,14.2v28.3L333,174.5V146.2z M333,175.7l24.5,14.2v28.3L333,204V175.7z M333,205.2l24.5,14.2v28.3L333,233.5V205.2z
M333,234.7l24.5,14.2v28.3L333,263V234.7z M333,264.1l24.5,14.2v28.3L333,292.5V264.1z M333,293.6l24.5,14.2v28.3L333,322V293.6z
M333,323.1l24.5,14.2v28.3L333,351.5V323.1z M333,352.6l24.5,14.2v28.3L333,381V352.6z M333,382.1l24.5,14.2v28.3L333,410.5V382.1z
M333,411.6l24.5,14.2v28.3L333,440V411.6z M333,441.1l24.5,14.2v28.3L333,469.5V441.1z M307.5,13.4L332,27.6V56l-24.5-14.2V13.4z
M307.5,42.9L332,57.1v28.3l-24.5-14.2V42.9z M307.5,72.4L332,86.6v28.3l-24.5-14.2V72.4z M307.5,101.9l24.5,14.2v28.3l-24.5-14.2
V101.9z M307.5,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M307.5,160.9l24.5,14.2v28.3l-24.5-14.2V160.9z M307.5,190.4l24.5,14.2v28.3
l-24.5-14.2V190.4z M307.5,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z M307.5,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M307.5,278.9
l24.5,14.2v28.3l-24.5-14.2V278.9z M307.5,308.4l24.5,14.2v28.3l-24.5-14.2V308.4z M307.5,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z
M307.5,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M307.5,396.9L332,411v28.3l-24.5-14.2V396.9z M307.5,426.4l24.5,14.2v28.3
l-24.5-14.2V426.4z M281.9,28.2l24.5,14.2v28.3l-24.5-14.2V28.2z M281.9,57.7l24.5,14.2v28.3L281.9,86V57.7z M281.9,87.2l24.5,14.2
v28.3l-24.5-14.2V87.2z M281.9,116.7l24.5,14.2v28.3L281.9,145V116.7z M281.9,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M281.9,175.7
l24.5,14.2v28.3L281.9,204V175.7z M281.9,205.2l24.5,14.2v28.3l-24.5-14.2V205.2z M281.9,234.7l24.5,14.2v28.3L281.9,263V234.7z
M281.9,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M281.9,293.6l24.5,14.2v28.3L281.9,322V293.6z M281.9,323.1l24.5,14.2v28.3
l-24.5-14.2V323.1z M281.9,352.6l24.5,14.2v28.3L281.9,381V352.6z M281.9,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M281.9,411.6
l24.5,14.2v28.3L281.9,440V411.6z M281.9,441.1l24.5,14.2v28.3l-24.5-14.2V441.1z M256.4,13.4l24.5,14.2V56l-24.5-14.2V13.4z
M256.4,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M256.4,72.4l24.5,14.2v28.3l-24.5-14.2V72.4z M256.4,101.9l24.5,14.2v28.3l-24.5-14.2
V101.9z M256.4,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M256.4,160.9l24.5,14.2v28.3l-24.5-14.2V160.9z M256.4,190.4l24.5,14.2v28.3
l-24.5-14.2V190.4z M256.4,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z M256.4,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M256.4,278.9
l24.5,14.2v28.3l-24.5-14.2V278.9z M256.4,308.4l24.5,14.2v28.3l-24.5-14.2V308.4z M256.4,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z
M256.4,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M256.4,396.9l24.5,14.2v28.3l-24.5-14.2V396.9z M256.4,426.4l24.5,14.2v28.3
l-24.5-14.2V426.4z M230.9,28.2l24.5,14.2v28.3l-24.5-14.2V28.2z M230.9,57.7l24.5,14.2v28.3L230.9,86V57.7z M230.9,87.2l24.5,14.2
v28.3l-24.5-14.2V87.2z M230.9,116.7l24.5,14.2v28.3L230.9,145V116.7z M230.9,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M230.9,175.7
l24.5,14.2v28.3L230.9,204V175.7z M230.9,205.2l24.5,14.2v28.3l-24.5-14.2V205.2z M230.9,234.7l24.5,14.2v28.3L230.9,263V234.7z
M230.9,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M230.9,293.6l24.5,14.2v28.3L230.9,322V293.6z M230.9,323.1l24.5,14.2v28.3
l-24.5-14.2V323.1z M230.9,352.6l24.5,14.2v28.3L230.9,381V352.6z M230.9,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M230.9,411.6
l24.5,14.2v28.3L230.9,440V411.6z M230.9,441.1l24.5,14.2v28.3l-24.5-14.2V441.1z M205.3,13.4l24.5,14.2V56l-24.5-14.2V13.4z
M205.3,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M205.3,72.4l24.5,14.2v28.3l-24.5-14.2V72.4z M205.3,101.9l24.5,14.2v28.3l-24.5-14.2
V101.9z M205.3,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M205.3,160.9l24.5,14.2v28.3l-24.5-14.2V160.9z M205.3,190.4l24.5,14.2v28.3
l-24.5-14.2V190.4z M205.3,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z M205.3,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M205.3,278.9
l24.5,14.2v28.3l-24.5-14.2V278.9z M205.3,308.4l24.5,14.2v28.3l-24.5-14.2V308.4z M205.3,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z
M205.3,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M205.3,396.9l24.5,14.2v28.3l-24.5-14.2V396.9z M205.3,426.4l24.5,14.2v28.3
l-24.5-14.2V426.4z M179.8,28.2l24.5,14.2v28.3l-24.5-14.2V28.2z M179.8,57.7l24.5,14.2v28.3L179.8,86V57.7z M179.8,87.2l24.5,14.2
v28.3l-24.5-14.2V87.2z M179.8,116.7l24.5,14.2v28.3L179.8,145V116.7z M179.8,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M179.8,175.7
l24.5,14.2v28.3L179.8,204V175.7z M179.8,205.2l24.5,14.2v28.3l-24.5-14.2V205.2z M179.8,234.7l24.5,14.2v28.3L179.8,263V234.7z
M179.8,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M179.8,293.6l24.5,14.2v28.3L179.8,322V293.6z M179.8,323.1l24.5,14.2v28.3
l-24.5-14.2V323.1z M179.8,352.6l24.5,14.2v28.3L179.8,381V352.6z M179.8,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M179.8,411.6
l24.5,14.2v28.3L179.8,440V411.6z M179.8,441.1l24.5,14.2v28.3l-24.5-14.2V441.1z M154.2,13.4l24.5,14.2V56l-24.5-14.2V13.4z
M154.2,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M154.2,72.4l24.5,14.2v28.3l-24.5-14.2V72.4z M154.2,101.9l24.5,14.2v28.3l-24.5-14.2
V101.9z M154.2,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M154.2,160.9l24.5,14.2v28.3l-24.5-14.2V160.9z M154.2,190.4l24.5,14.2v28.3
l-24.5-14.2V190.4z M154.2,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z M154.2,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M154.2,278.9
l24.5,14.2v28.3l-24.5-14.2V278.9z M154.2,308.4l24.5,14.2v28.3l-24.5-14.2V308.4z M154.2,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z
M154.2,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M154.2,396.9l24.5,14.2v28.3l-24.5-14.2V396.9z M154.2,426.4l24.5,14.2v28.3
l-24.5-14.2V426.4z M128.7,28.2l24.5,14.2v28.3l-24.5-14.2V28.2z M128.7,57.7l24.5,14.2v28.3L128.7,86V57.7z M128.7,87.2l24.5,14.2
v28.3l-24.5-14.2V87.2z M128.7,116.7l24.5,14.2v28.3L128.7,145V116.7z M128.7,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M128.7,175.7
l24.5,14.2v28.3L128.7,204V175.7z M128.7,205.2l24.5,14.2v28.3l-24.5-14.2V205.2z M128.7,234.7l24.5,14.2v28.3L128.7,263V234.7z
M128.7,264.1l24.5,14.2v28.3l-24.5-14.2V264.1z M128.7,293.6l24.5,14.2v28.3L128.7,322V293.6z M128.7,323.1l24.5,14.2v28.3
l-24.5-14.2V323.1z M128.7,352.6l24.5,14.2v28.3L128.7,381V352.6z M128.7,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M128.7,411.6
l24.5,14.2v28.3L128.7,440V411.6z M128.7,441.1l24.5,14.2v28.3l-24.5-14.2V441.1z M103.1,13.4l24.5,14.2V56l-24.5-14.2V13.4z
M103.1,42.9l24.5,14.2v28.3l-24.5-14.2V42.9z M103.1,72.4l24.5,14.2v28.3l-24.5-14.2V72.4z M103.1,101.9l24.5,14.2v28.3l-24.5-14.2
V101.9z M103.1,131.4l24.5,14.2v28.3l-24.5-14.2V131.4z M103.1,160.9l24.5,14.2v28.3l-24.5-14.2V160.9z M103.1,190.4l24.5,14.2v28.3
l-24.5-14.2V190.4z M103.1,219.9l24.5,14.2v28.3l-24.5-14.2V219.9z M103.1,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M103.1,278.9
l24.5,14.2v28.3l-24.5-14.2V278.9z M103.1,308.4l24.5,14.2v28.3l-24.5-14.2V308.4z M103.1,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z
M103.1,367.4l24.5,14.2v28.3l-24.5-14.2V367.4z M103.1,396.9l24.5,14.2v28.3l-24.5-14.2V396.9z M103.1,426.4l24.5,14.2v28.3
l-24.5-14.2V426.4z M77.6,28.2l24.5,14.2v28.3L77.6,56.5V28.2z M77.6,57.7l24.5,14.2v28.3L77.6,86V57.7z M77.6,87.2l24.5,14.2v28.3
l-24.5-14.2V87.2z M77.6,116.7l24.5,14.2v28.3L77.6,145V116.7z M77.6,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M77.6,175.7l24.5,14.2
v28.3L77.6,204V175.7z M77.6,205.2l24.5,14.2v28.3l-24.5-14.2V205.2z M77.6,234.7l24.5,14.2v28.3L77.6,263V234.7z M77.6,264.1
l24.5,14.2v28.3l-24.5-14.2V264.1z M77.6,293.6l24.5,14.2v28.3L77.6,322V293.6z M77.6,323.1l24.5,14.2v28.3l-24.5-14.2V323.1z
M77.6,352.6l24.5,14.2v28.3L77.6,381V352.6z M77.6,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M77.6,411.6l24.5,14.2v28.3L77.6,440
V411.6z M77.6,441.1l24.5,14.2v28.3l-24.5-14.2V441.1z M52.1,13.4l24.5,14.2V56L52.1,41.8V13.4z M52.1,42.9l24.5,14.2v28.3
L52.1,71.3V42.9z M52.1,72.4l24.5,14.2v28.3l-24.5-14.2V72.4z M52.1,101.9l24.5,14.2v28.3l-24.5-14.2V101.9z M52.1,131.4l24.5,14.2
v28.3l-24.5-14.2V131.4z M52.1,160.9l24.5,14.2v28.3l-24.5-14.2V160.9z M52.1,190.4l24.5,14.2v28.3l-24.5-14.2V190.4z M52.1,219.9
l24.5,14.2v28.3l-24.5-14.2V219.9z M52.1,249.4l24.5,14.2v28.3l-24.5-14.2V249.4z M52.1,278.9l24.5,14.2v28.3l-24.5-14.2V278.9z
M52.1,308.4l24.5,14.2v28.3l-24.5-14.2V308.4z M52.1,337.9l24.5,14.2v28.3l-24.5-14.2V337.9z M52.1,367.4l24.5,14.2v28.3
l-24.5-14.2V367.4z M52.1,396.9L76.6,411v28.3l-24.5-14.2V396.9z M52.1,426.4l24.5,14.2v28.3l-24.5-14.2V426.4z M26.5,28.2
l24.5,14.2v28.3L26.5,56.5V28.2z M26.5,57.7l24.5,14.2v28.3L26.5,86V57.7z M26.5,87.2l24.5,14.2v28.3l-24.5-14.2V87.2z M26.5,116.7
l24.5,14.2v28.3L26.5,145V116.7z M26.5,146.2l24.5,14.2v28.3l-24.5-14.2V146.2z M26.5,175.7l24.5,14.2v28.3L26.5,204V175.7z
M26.5,205.2l24.5,14.2v28.3l-24.5-14.2V205.2z M26.5,234.7l24.5,14.2v28.3L26.5,263V234.7z M26.5,264.1l24.5,14.2v28.3l-24.5-14.2
V264.1z M26.5,293.6l24.5,14.2v28.3L26.5,322V293.6z M26.5,323.1l24.5,14.2v28.3l-24.5-14.2V323.1z M26.5,352.6l24.5,14.2v28.3
L26.5,381V352.6z M26.5,382.1l24.5,14.2v28.3l-24.5-14.2V382.1z M26.5,411.6l24.5,14.2v28.3L26.5,440V411.6z M26.5,441.1l24.5,14.2
v28.3l-24.5-14.2V441.1z M1,13.5l24.5,14.2V56L1,41.8V13.5z M1,43l24.5,14.2v28.3L1,71.3V43z M1,72.4l24.5,14.2v28.3L1,100.8V72.4z
M1,101.9l24.5,14.2v28.3L1,130.3V101.9z M1,131.4l24.5,14.2v28.3L1,159.8V131.4z M1,160.9l24.5,14.2v28.3L1,189.3V160.9z M1,190.4
l24.5,14.2v28.3L1,218.8V190.4z M1,219.9l24.5,14.2v28.3L1,248.3V219.9z M1,249.4l24.5,14.2v28.3L1,277.8V249.4z M1,278.9l24.5,14.2
v28.3L1,307.2V278.9z M1,308.4l24.5,14.2v28.3L1,336.7V308.4z M1,337.9l24.5,14.2v28.3L1,366.2V337.9z M1,367.4l24.5,14.2v28.3
L1,395.7V367.4z M1,396.9L25.5,411v28.3L1,425.2V396.9z M1,426.4l24.5,14.2v28.3L1,454.7V426.4z"/>
<g>
<polygon class="st1" points="178.9,115.2 281.8,174.2 281.8,292.2 178.9,232.8 "/>
<polygon class="st2" points="230.6,86.5 230.6,144.8 281.8,174.2 281.8,233.7 333.5,263.5 333.5,145.5 "/>
<polygon class="st3" points="281.9,56.5 281.9,116 333.5,145.5 333.5,204.2 384.8,233.9 384.8,116.5 "/>
<g>
<polygon class="st4" points="128.2,145.1 230.4,203.4 230.4,411.1 128.2,351.1 "/>
<polygon class="st4" points="128.2,350.8 141,357.8 141,372.7 128.2,365.2 "/>
<polygon class="st5" points="179.5,376 192.3,383 192.3,397.8 179.5,390.3 "/>
<polygon class="st6" points="217.9,403.8 230.7,410.8 230.7,446.8 217.9,439.3 "/>
<polygon class="st6" points="159.9,377.5 172.7,384.5 172.7,420.4 159.9,412.9 "/>
<polygon class="st4" points="166.5,403 179.3,410 179.3,445.9 166.5,438.4 "/>
<polygon class="st4" points="204.9,420.1 217.7,427.1 217.7,463 204.9,455.5 "/>
<polygon class="st4" points="141.2,402.8 153.9,409.8 153.9,424.6 141.2,417.1 "/>
<polygon class="st4" points="192.6,404.8 205.4,411.8 205.4,426.6 192.6,419.1 "/>
<polygon class="st5" points="128.2,403.8 141,410.8 141,449 128.2,441.5 "/>
<polygon class="st5" points="141.2,356.9 153.9,363.9 153.9,402.1 141.2,394.6 "/>
</g>
<line class="st7" x1="233.8" y1="306.1" x2="225.2" y2="301.2"/>
<rect x="233.8" y="302.6" class="st8" width="35" height="14"/>
<line class="st7" x1="288.1" y1="276.6" x2="279.5" y2="271.7"/>
<rect x="288.1" y="274.1" class="st8" width="79.9" height="14"/>
<g>
<path d="M298.9,277.5h1.6l-2.4,8h-2.2l-2.4-8h1.6l1.9,6.7L298.9,277.5z"/>
<path d="M303.1,285.4h-1.5v-8h1.5V285.4z"/>
<path d="M309.7,285.4l-1.8-2.6h-1.4v2.6h-1.5v-8h3.3c1.9,0,2.5,0.8,2.5,2.2v1c0,1-0.4,1.6-1.2,1.9l2,2.9H309.7z M308.1,278.8h-1.7
v2.7h1.7c0.8,0,1.1-0.3,1.1-1v-0.8C309.2,279.1,308.9,278.8,308.1,278.8z"/>
<path d="M313.9,278.8h-2.2v-1.3h6v1.3h-2.2v6.7h-1.5V278.8z"/>
<path d="M324.7,277.5v5.7c0,1.3-0.7,2.4-3,2.4c-2.2,0-3-1.2-3-2.4v-5.7h1.5v5.6c0,0.8,0.4,1.2,1.4,1.2s1.4-0.4,1.4-1.2v-5.6H324.7
z"/>
<path d="M330.7,283.8h-3l-0.5,1.7h-1.6l2.5-8h2.1l2.5,8h-1.6L330.7,283.8z M328.1,282.5h2.2l-1.1-3.8L328.1,282.5z"/>
<path d="M335.5,284.1h3.3v1.3H334v-8h1.5V284.1z"/>
<path d="M342.6,285.4v-8h3.1c1.5,0,2.1,0.6,2.1,1.7v0.8c0,0.7-0.3,1-0.9,1.3c0.7,0.2,1.2,0.7,1.2,1.5v0.9c0,1.1-0.7,1.8-2.2,1.8
H342.6z M346.4,279.3c0-0.4-0.2-0.6-0.8-0.6h-1.5v2.1h1.4c0.6,0,0.8-0.3,0.8-0.7V279.3z M346.6,282.8c0-0.5-0.2-0.8-0.8-0.8h-1.7
v2.2h1.5c0.7,0,1-0.2,1-0.8V282.8z"/>
<path d="M355.4,283.1c0,1.3-0.8,2.5-3,2.5s-3-1.1-3-2.5v-3.3c0-1.3,0.8-2.5,3-2.5s3,1.1,3,2.5V283.1z M350.9,283
c0,0.8,0.4,1.2,1.5,1.2c1.1,0,1.5-0.5,1.5-1.2v-3.1c0-0.8-0.4-1.2-1.5-1.2c-1.1,0-1.5,0.5-1.5,1.2V283z"/>
<path d="M363,285.4h-1.6l-1.7-2.8l-1.7,2.8h-1.6l2.5-4l-2.4-4h1.6l1.7,2.8l1.7-2.8h1.6l-2.4,4L363,285.4z"/>
</g>
<g>
<path d="M244.4,312.1h-3l-0.5,1.7h-1.6l2.5-8h2.1l2.5,8h-1.6L244.4,312.1z M241.8,310.8h2.2l-1.1-3.8L241.8,310.8z"/>
<path d="M254.4,312l1.5-6.2h1.5l-2,8h-2l-1.5-6.4l-1.5,6.4h-2l-2-8h1.5l1.5,6.2l1.5-6.2h2L254.4,312z"/>
<path d="M260.7,313.9c-0.9,0-2-0.2-2.5-0.5l0.3-1.2c0.7,0.2,1.5,0.4,2.3,0.4c1.1,0,1.3-0.2,1.3-1c0-0.9,0-1-1.5-1.3
c-1.9-0.4-2.2-0.8-2.2-2.5c0-1.5,0.7-2.2,2.7-2.2c0.7,0,1.5,0.1,2.3,0.3l-0.2,1.3c-0.7-0.1-1.4-0.2-2.1-0.2c-1,0-1.2,0.2-1.2,0.9
c0,0.9,0,0.9,1.4,1.3c2.1,0.5,2.3,0.9,2.3,2.5C263.5,313.1,263,313.9,260.7,313.9z"/>
</g>
<line class="st7" x1="336.6" y1="245.9" x2="328.1" y2="240.9"/>
<rect x="336.6" y="242.4" class="st8" width="60.7" height="14"/>
<g>
<path d="M347.6,245h1.6l-2.4,8h-2.2l-2.4-8h1.6l1.9,6.7L347.6,245z"/>
<path d="M355.1,252h-1.9l-1.5-4.1l-0.1,5.2H350l0.4-8h1.7l2.1,5.7l2.1-5.7h1.7l0.4,8h-1.5l-0.1-5.2L355.1,252z"/>
<path d="M367.2,251.2l1.5-6.2h1.5l-2,8h-2l-1.5-6.4l-1.5,6.4h-2l-2-8h1.5l1.5,6.2l1.5-6.2h2L367.2,251.2z"/>
<path d="M375.2,251.3h-3l-0.5,1.7h-1.6l2.5-8h2.1l2.5,8h-1.6L375.2,251.3z M372.6,250h2.2l-1.1-3.8L372.6,250z"/>
<path d="M383.3,253l-1.8-2.6H380v2.6h-1.5v-8h3.3c1.9,0,2.5,0.8,2.5,2.2v1c0,1-0.4,1.6-1.2,1.9l2,2.9H383.3z M381.7,246.3H380v2.7
h1.7c0.8,0,1.1-0.3,1.1-1v-0.8C382.8,246.6,382.5,246.3,381.7,246.3z"/>
<path d="M386.3,245h4.9v1.3h-3.4v1.9h3.1v1.3h-3.1v2.1h3.4v1.3h-4.9V245z"/>
</g>
<line class="st7" x1="387.1" y1="214.1" x2="378.5" y2="209.2"/>
<rect x="387.1" y="210.6" class="st8" width="75.3" height="14"/>
<g>
<path d="M398.8,219.9c0,1.3-0.8,2.5-3,2.5s-3-1.1-3-2.5v-3.3c0-1.3,0.8-2.5,3-2.5s3,1.1,3,2.5V219.9z M394.2,219.8
c0,0.8,0.4,1.2,1.5,1.2c1.1,0,1.5-0.5,1.5-1.2v-3.1c0-0.8-0.4-1.2-1.5-1.2c-1.1,0-1.5,0.5-1.5,1.2V219.8z"/>
<path d="M400.4,214.2h3.1c1.8,0,2.5,0.8,2.5,2.2v1.1c0,1.4-0.7,2.1-2.6,2.1h-1.5v2.6h-1.5V214.2z M403.4,215.6h-1.5v2.7h1.5
c0.9,0,1.1-0.3,1.1-1v-0.8C404.5,215.9,404.3,215.6,403.4,215.6z"/>
<path d="M407.3,214.2h4.9v1.3h-3.4v1.9h3.1v1.3h-3.1v2.1h3.4v1.3h-4.9V214.2z"/>
<path d="M415.2,216.2v6.1h-1.5v-8h2l3,6.1v-6.1h1.5v8h-2L415.2,216.2z"/>
<path d="M426.8,222.4c-0.9,0-2-0.2-2.5-0.5l0.3-1.2c0.7,0.2,1.5,0.4,2.3,0.4c1.1,0,1.3-0.2,1.3-1c0-0.9,0-1-1.5-1.3
c-1.9-0.4-2.2-0.8-2.2-2.5c0-1.5,0.7-2.2,2.7-2.2c0.7,0,1.5,0.1,2.3,0.3l-0.2,1.3c-0.7-0.1-1.4-0.2-2.1-0.2c-1,0-1.2,0.2-1.2,0.9
c0,0.9,0,0.9,1.4,1.3c2.1,0.5,2.3,0.9,2.3,2.5C429.6,221.6,429.1,222.4,426.8,222.4z"/>
<path d="M432.7,215.6h-2.2v-1.3h6v1.3h-2.2v6.7h-1.5V215.6z"/>
<path d="M441.4,220.6h-3l-0.5,1.7h-1.6l2.5-8h2.1l2.5,8h-1.6L441.4,220.6z M438.8,219.3h2.2l-1.1-3.8L438.8,219.3z"/>
<path d="M444.3,216.4c0-1.5,0.9-2.3,2.8-2.3c0.7,0,1.5,0.1,2.2,0.3l-0.2,1.3c-0.6-0.1-1.4-0.2-2-0.2c-1,0-1.4,0.4-1.4,1.2v3.1
c0,0.9,0.3,1.2,1.4,1.2c0.6,0,1.3-0.1,2-0.2l0.2,1.3c-0.7,0.2-1.4,0.3-2.2,0.3c-2,0-2.8-0.9-2.8-2.3V216.4z"/>
<path d="M452.2,222.2h-1.5v-8h1.5V222.2z M454.1,218.2l2.7,4h-1.7l-2.6-4l2.5-3.9h1.7L454.1,218.2z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

View File

@ -0,0 +1,138 @@
<svg width="91px" height="36px" viewBox="0 0 91 36" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<path d="M1.018,1.732 C0.477,2.336 0.208,3.13 0.208,4.113 C0.208,5.074 0.469,5.852 0.988,6.444 C1.509,7.038 2.19,7.335 3.031,7.335 C3.67,7.335 4.224,7.162 4.698,6.816 C5.168,6.47 5.486,6.033 5.648,5.505 L4.755,5.324 C4.433,6.132 3.88,6.537 3.096,6.537 C2.661,6.537 2.25,6.375 1.859,6.049 C1.468,5.723 1.273,5.092 1.273,4.16 L5.752,4.16 C5.74,3.051 5.49,2.216 4.999,1.659 C4.509,1.103 3.862,0.824 3.058,0.824 C2.239,0.824 1.56,1.125 1.018,1.732 Z M1.877,2.066 C2.207,1.724 2.61,1.553 3.086,1.553 C3.44,1.553 3.741,1.648 3.994,1.838 C4.246,2.027 4.425,2.255 4.531,2.523 C4.637,2.792 4.694,3.1 4.702,3.446 L1.317,3.446 C1.358,2.868 1.543,2.408 1.877,2.066 Z" id="path-1"></path>
<path d="M0.016,0.835 L0.016,9.162 L0.478,9.162 L0.822,8.143 C1.268,8.936 1.911,9.333 2.75,9.333 C3.501,9.333 4.111,9.022 4.582,8.401 C5.052,7.78 5.286,7.011 5.286,6.093 C5.286,5.03 5.048,4.218 4.571,3.661 C4.091,3.103 3.501,2.824 2.792,2.824 C2.021,2.824 1.417,3.223 0.977,4.023 L0.977,0.835 L0.016,0.835 Z M1.561,8.124 C1.217,7.837 1.022,7.377 0.977,6.744 L0.977,5.358 C1.038,4.847 1.231,4.428 1.553,4.106 C1.879,3.783 2.241,3.62 2.644,3.62 C3.157,3.62 3.558,3.848 3.847,4.302 C4.136,4.756 4.28,5.38 4.28,6.174 C4.28,6.913 4.13,7.493 3.831,7.917 C3.531,8.34 3.138,8.552 2.65,8.552 C2.267,8.552 1.905,8.409 1.561,8.124 Z" id="path-3"></path>
<path d="M1.605,1.345 C1.194,1.693 0.991,2.127 0.991,2.644 C0.991,3.112 1.141,3.488 1.441,3.773 C1.742,4.058 2.147,4.25 2.658,4.347 L3.956,4.596 C4.663,4.724 5.015,5.031 5.015,5.514 C5.015,5.837 4.876,6.092 4.599,6.271 C4.323,6.448 3.985,6.537 3.586,6.537 C2.501,6.537 1.858,6.148 1.654,5.375 L0.736,5.564 C1.082,6.743 1.986,7.335 3.447,7.335 C4.227,7.335 4.85,7.16 5.318,6.81 C5.788,6.462 6.02,6.006 6.02,5.438 C6.02,4.447 5.391,3.836 4.133,3.608 L2.932,3.389 C2.293,3.271 1.972,2.986 1.972,2.532 C1.972,2.243 2.098,2.021 2.348,1.86 C2.599,1.701 2.918,1.62 3.309,1.62 C4.095,1.62 4.614,1.941 4.866,2.581 L5.745,2.391 C5.432,1.347 4.606,0.824 3.266,0.824 C2.57,0.824 2.019,0.999 1.605,1.345 Z" id="path-5"></path>
<path d="M1.4,1.732 C0.857,2.336 0.588,3.13 0.588,4.113 C0.588,5.074 0.848,5.852 1.367,6.444 C1.889,7.038 2.57,7.335 3.413,7.335 C4.05,7.335 4.606,7.162 5.078,6.816 C5.55,6.47 5.866,6.033 6.028,5.505 L5.135,5.324 C4.813,6.132 4.262,6.537 3.476,6.537 C3.041,6.537 2.629,6.375 2.239,6.049 C1.848,5.723 1.652,5.092 1.652,4.16 L6.132,4.16 C6.122,3.051 5.87,2.216 5.379,1.659 C4.891,1.103 4.241,0.824 3.437,0.824 C2.619,0.824 1.939,1.125 1.4,1.732 Z M2.257,2.066 C2.589,1.724 2.992,1.553 3.466,1.553 C3.82,1.553 4.123,1.648 4.376,1.838 C4.626,2.027 4.805,2.255 4.913,2.523 C5.017,2.792 5.074,3.1 5.082,3.446 L1.699,3.446 C1.74,2.868 1.925,2.408 2.257,2.066 Z" id="path-7"></path>
<path d="M1.904,1.124 C1.605,1.323 1.306,1.758 1.011,2.432 L1.011,0.995 L0.166,0.995 L0.166,7.162 L1.129,7.162 L1.129,3.897 C1.153,3.258 1.341,2.741 1.689,2.351 C2.039,1.958 2.478,1.762 3.005,1.762 L3.201,1.762 L3.201,0.847 C3.046,0.83 2.92,0.824 2.822,0.824 C2.509,0.824 2.204,0.924 1.904,1.124 Z" id="path-9"></path>
<path d="M1.547,1.756 C1.077,2.377 0.841,3.157 0.841,4.095 C0.841,4.999 1.065,5.764 1.51,6.393 C1.954,7.02 2.604,7.335 3.454,7.335 C4.081,7.335 4.604,7.142 5.023,6.755 C5.443,6.368 5.714,5.837 5.836,5.155 L4.971,5.003 C4.759,6.026 4.256,6.537 3.464,6.537 C2.952,6.537 2.555,6.319 2.272,5.882 C1.989,5.444 1.848,4.832 1.848,4.042 C1.848,3.326 1.991,2.744 2.276,2.293 C2.559,1.846 2.966,1.62 3.495,1.62 C4.317,1.62 4.808,2.129 4.971,3.148 L5.836,2.983 C5.738,2.347 5.488,1.828 5.081,1.427 C4.675,1.025 4.138,0.824 3.466,0.824 C2.656,0.824 2.017,1.133 1.547,1.756 Z" id="path-11"></path>
<path d="M1.523,1.732 C0.982,2.336 0.711,3.13 0.711,4.113 C0.711,5.074 0.971,5.852 1.492,6.444 C2.011,7.038 2.693,7.335 3.536,7.335 C4.173,7.335 4.729,7.162 5.201,6.816 C5.673,6.47 5.988,6.033 6.153,5.505 L5.258,5.324 C4.936,6.132 4.385,6.537 3.601,6.537 C3.163,6.537 2.752,6.375 2.362,6.049 C1.973,5.723 1.777,5.092 1.777,4.16 L6.255,4.16 C6.245,3.051 5.995,2.216 5.504,1.659 C5.014,1.103 4.366,0.824 3.56,0.824 C2.744,0.824 2.064,1.125 1.523,1.732 Z M2.38,2.066 C2.71,1.724 3.113,1.553 3.591,1.553 C3.945,1.553 4.246,1.648 4.499,1.838 C4.751,2.027 4.93,2.255 5.034,2.523 C5.14,2.792 5.199,3.1 5.207,3.446 L1.822,3.446 C1.863,2.868 2.048,2.408 2.38,2.066 Z" id="path-13"></path>
<path d="M1.67,1.345 C1.259,1.693 1.053,2.127 1.053,2.644 C1.053,3.112 1.204,3.488 1.505,3.773 C1.806,4.058 2.211,4.25 2.72,4.347 L4.021,4.596 C4.725,4.724 5.079,5.031 5.079,5.514 C5.079,5.837 4.94,6.092 4.662,6.271 C4.387,6.448 4.047,6.537 3.648,6.537 C2.565,6.537 1.92,6.148 1.716,5.375 L0.801,5.564 C1.147,6.743 2.05,7.335 3.512,7.335 C4.289,7.335 4.914,7.16 5.382,6.81 C5.85,6.462 6.084,6.006 6.084,5.438 C6.084,4.447 5.455,3.836 4.198,3.608 L2.997,3.389 C2.356,3.271 2.036,2.986 2.036,2.532 C2.036,2.243 2.162,2.021 2.413,1.86 C2.663,1.701 2.982,1.62 3.373,1.62 C4.159,1.62 4.676,1.941 4.928,2.581 L5.81,2.391 C5.496,1.347 4.668,0.824 3.331,0.824 C2.634,0.824 2.081,0.999 1.67,1.345 Z" id="path-15"></path>
<path d="M1.503,0.956 C1.297,0.956 1.128,1.104 1.126,1.331 L1.126,2.812 C1.128,3.034 1.297,3.185 1.511,3.185 L4.983,3.187 L0.996,8.902 C0.752,9.268 0.748,9.682 0.748,9.922 L0.748,11.424 C0.748,11.644 0.99,11.892 1.222,11.768 C3.483,10.567 6.196,10.683 8.242,11.753 C8.492,11.886 8.73,11.633 8.73,11.416 L8.73,9.834 C8.71,9.621 8.641,9.403 8.378,9.256 C7.216,8.605 5.867,8.414 4.588,8.444 L8.03,3.533 C8.35,3.091 8.529,2.812 8.531,2.601 L8.531,1.329 C8.531,1.108 8.36,0.954 8.148,0.954 L1.503,0.956 Z" id="path-17"></path>
<path d="M8.928,2.684 C8.362,1.375 7.569,0.765 6.305,0.765 C5.059,0.765 4.135,1.375 3.644,2.684 L3.606,2.684 L3.606,1.331 C3.594,1.141 3.435,0.993 3.237,0.982 L1.357,0.982 C1.141,0.982 0.966,1.149 0.966,1.357 L0.966,11.725 C0.98,11.91 1.135,12.053 1.326,12.065 L3.347,12.065 C3.563,12.065 3.738,11.9 3.738,11.692 L3.738,6.197 C3.738,4.998 3.681,3.339 5.136,3.339 C6.569,3.339 6.38,5.041 6.38,6.197 L6.382,11.694 C6.382,11.892 6.543,12.053 6.744,12.065 L8.765,12.065 C8.979,12.065 9.154,11.9 9.154,11.692 L9.154,6.197 C9.154,5.609 9.136,4.735 9.343,4.212 C9.551,3.687 10.06,3.36 10.55,3.36 C11.137,3.36 11.588,3.557 11.739,4.255 C11.835,4.67 11.796,5.761 11.796,6.197 L11.796,11.694 C11.796,11.892 11.957,12.053 12.158,12.065 L14.179,12.065 C14.393,12.065 14.568,11.9 14.568,11.692 L14.57,5.149 C14.57,4.038 14.702,2.771 14.061,1.898 C13.493,1.113 12.569,0.765 11.721,0.765 C10.532,0.765 9.419,1.375 8.928,2.684 Z" id="path-19"></path>
<path d="M0.901,6.502 C0.901,9.71 2.491,12.285 5.412,12.285 C8.22,12.285 9.997,9.775 9.997,6.612 C9.997,3.339 8.387,0.765 5.412,0.765 C2.509,0.765 0.901,3.272 0.901,6.502 Z M3.857,6.441 C3.857,5.177 3.952,3.148 5.43,3.148 C6.067,3.148 6.517,3.431 6.741,4.151 C7.003,4.98 7.04,6.028 7.04,6.901 C7.04,8.232 6.967,10.146 5.412,10.146 C3.838,10.146 3.857,7.707 3.857,6.441 Z" id="path-21"></path>
<path d="M3.587,2.859 L3.548,2.859 L3.548,1.273 C3.512,1.113 3.365,0.991 3.19,0.982 L1.315,0.982 C1.11,0.982 0.943,1.133 0.927,1.322 L0.929,11.694 C0.929,11.892 1.089,12.053 1.293,12.065 L3.306,12.065 C3.522,12.065 3.697,11.9 3.699,11.692 L3.699,6.109 C3.699,5.411 3.737,4.778 4.02,4.146 C4.246,3.645 4.7,3.317 5.189,3.317 C6.587,3.317 6.455,4.976 6.455,6.109 L6.455,11.739 C6.477,11.917 6.628,12.055 6.815,12.065 L8.84,12.065 C9.042,12.065 9.206,11.922 9.229,11.739 L9.229,5.216 C9.229,4.212 9.229,2.816 8.7,1.986 C8.134,1.092 7.246,0.765 6.341,0.765 C4.944,0.765 4.153,1.44 3.587,2.859 Z" id="path-23"></path>
<path d="M0.441,3.756 C0.394,4.009 0.579,4.143 0.744,4.18 L2.704,4.392 C2.887,4.381 3.019,4.202 3.054,4.019 C3.223,3.203 3.907,2.806 4.68,2.806 C5.095,2.806 5.568,2.958 5.814,3.333 C6.097,3.747 6.06,4.316 6.06,4.797 L6.06,5.059 C4.886,5.191 3.355,5.277 2.258,5.759 C0.992,6.307 0.103,7.42 0.103,9.061 C0.103,11.159 1.426,12.209 3.127,12.209 C4.566,12.209 5.352,11.87 6.461,10.742 C6.828,11.271 6.948,11.53 7.619,12.087 C7.77,12.168 7.963,12.161 8.098,12.041 L8.102,12.044 C8.507,11.687 9.237,11.049 9.651,10.703 C9.818,10.569 9.789,10.349 9.659,10.166 C9.29,9.655 8.898,9.24 8.898,8.293 L8.898,5.146 C8.898,3.813 8.991,2.588 8.006,1.668 C7.233,0.925 5.946,0.665 4.961,0.665 C3.04,0.665 0.893,1.381 0.441,3.756 Z M3.052,8.71 C3.052,6.991 4.597,6.677 6.06,6.677 L6.06,7.115 C6.06,7.902 6.079,8.556 5.682,9.256 C5.36,9.826 4.849,10.176 4.281,10.176 C3.508,10.176 3.052,9.586 3.052,8.71 Z" id="path-25"></path>
<path d="M1.173,3.756 C1.124,4.009 1.307,4.143 1.474,4.18 L3.432,4.392 C3.617,4.381 3.747,4.202 3.784,4.019 C3.953,3.203 4.637,2.806 5.41,2.806 C5.825,2.806 6.298,2.958 6.544,3.333 C6.827,3.747 6.79,4.316 6.79,4.797 L6.79,5.059 C5.616,5.191 4.083,5.277 2.988,5.759 C1.72,6.307 0.833,7.42 0.833,9.061 C0.833,11.159 2.156,12.209 3.857,12.209 C5.294,12.209 6.082,11.87 7.191,10.742 C7.557,11.271 7.677,11.53 8.349,12.087 C8.5,12.168 8.693,12.161 8.827,12.041 L8.832,12.044 C9.234,11.687 9.969,11.049 10.382,10.703 C10.545,10.569 10.517,10.349 10.389,10.166 C10.02,9.655 9.625,9.24 9.625,8.293 L9.625,5.146 C9.625,3.813 9.719,2.588 8.738,1.668 C7.96,0.925 6.674,0.665 5.693,0.665 C3.768,0.665 1.62,1.381 1.173,3.756 Z M3.782,8.71 C3.782,6.991 5.327,6.677 6.79,6.677 L6.79,7.115 C6.79,7.902 6.808,8.556 6.409,9.256 C6.09,9.826 5.579,10.176 5.011,10.176 C4.236,10.176 3.782,9.586 3.782,8.71 Z" id="path-27"></path>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g>
<polygon id="Fill-1" fill="#171D23" points="6.56 32.147 11.848 34.041 11.848 26.199 6.56 24.4"></polygon>
<polygon id="Fill-2" fill="#171D23" points="12.8181 26.1992 12.8181 34.0402 18.1081 32.1472 18.1081 24.4002"></polygon>
<polygon id="Fill-3" fill="#171D23" points="7.1038 23.8188 12.4568 25.5958 17.4188 23.9098 12.4568 22.3128"></polygon>
<polygon id="Fill-4" fill="#171D23" points="0.262 21.3218 5.552 23.2188 5.552 15.3778 0.262 13.5748"></polygon>
<polygon id="Fill-5" fill="#171D23" points="6.5206 15.3774 6.5206 23.2184 11.8106 21.3214 11.8106 13.5744"></polygon>
<polygon id="Fill-6" fill="#171D23" points="0.8054 12.9946 6.1584 14.7736 11.1204 13.0906 6.1584 11.4896"></polygon>
<polygon id="Fill-7" fill="#171D23" points="12.6022 21.3218 17.8922 23.2188 17.8922 15.3778 12.6022 13.5748"></polygon>
<polygon id="Fill-8" fill="#171D23" points="18.8622 15.3774 18.8622 23.2184 24.1512 21.3214 24.1512 13.5744"></polygon>
<polygon id="Fill-9" fill="#171D23" points="13.1482 12.9946 18.5002 14.7736 23.4632 13.0906 18.5002 11.4896"></polygon>
<polygon id="Fill-10" fill="#171D23" points="18.8998 10.501 24.1898 12.395 24.1898 4.553 18.8998 2.754"></polygon>
<polygon id="Fill-11" fill="#171D23" points="25.1588 4.5532 25.1588 12.3952 30.4488 10.5012 30.4488 2.7542"></polygon>
<polygon id="Fill-12" fill="#171D23" points="19.4435 2.1738 24.7965 3.9508 29.7605 2.2658 24.7965 0.6668"></polygon>
<polygon id="Fill-13" fill="#171D23" points="31.2405 10.501 36.5305 12.395 36.5305 4.553 31.2405 2.754"></polygon>
<polygon id="Fill-14" fill="#171D23" points="37.4996 4.5532 37.4996 12.3952 42.7886 10.5012 42.7886 2.7542"></polygon>
<polygon id="Fill-15" fill="#171D23" points="31.7839 2.1738 37.1369 3.9508 42.1009 2.2658 37.1369 0.6668"></polygon>
<polygon id="Fill-16" fill="#171D23" points="33.0646 28.9951 31.6816 33.6051 30.2896 28.9951 29.5856 28.9951 28.3046 33.5901 26.9606 28.9951 26.0046 28.9951 27.8516 35.1621 28.6396 35.1621 29.9066 30.5831 31.2906 35.1621 32.0626 35.1621 33.8406 28.9951"></polygon>
<g id="Group-19" transform="translate(34.000000, 28.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-18"></g>
<polygon id="Fill-17" fill="#171D23" mask="url(#mask-2)" points="-4.793 12.334 10.753 12.334 10.753 -4.176 -4.793 -4.176"></polygon>
</g>
<g id="Group-22" transform="translate(41.000000, 26.000000)">
<mask id="mask-4" fill="white">
<use xlink:href="#path-3"></use>
</mask>
<g id="Clip-21"></g>
<polygon id="Fill-20" fill="#171D23" mask="url(#mask-4)" points="-4.984 14.333 10.286 14.333 10.286 -4.165 -4.984 -4.165"></polygon>
</g>
<g id="Group-25" transform="translate(48.000000, 28.000000)">
<mask id="mask-6" fill="white">
<use xlink:href="#path-5"></use>
</mask>
<g id="Clip-24"></g>
<polygon id="Fill-23" fill="#171D23" mask="url(#mask-6)" points="-4.264 12.334 11.02 12.334 11.02 -4.177 -4.264 -4.177"></polygon>
</g>
<g id="Group-28" transform="translate(54.000000, 28.000000)">
<mask id="mask-8" fill="white">
<use xlink:href="#path-7"></use>
</mask>
<g id="Clip-27"></g>
<polygon id="Fill-26" fill="#171D23" mask="url(#mask-8)" points="-4.412 12.334 11.133 12.334 11.133 -4.176 -4.412 -4.176"></polygon>
</g>
<g id="Group-31" transform="translate(61.000000, 28.000000)">
<mask id="mask-10" fill="white">
<use xlink:href="#path-9"></use>
</mask>
<g id="Clip-30"></g>
<polygon id="Fill-29" fill="#171D23" mask="url(#mask-10)" points="-4.833 12.162 8.201 12.162 8.201 -4.176 -4.833 -4.176"></polygon>
</g>
<polygon id="Fill-32" fill="#171D23" points="69.3203 28.9951 67.6193 34.0091 65.9073 28.9951 64.8433 28.9951 67.0463 35.1621 68.0413 35.1621 70.1723 28.9951"></polygon>
<path d="M70.941,27.899 L71.97,27.899 L71.97,26.836 L70.941,26.836 L70.941,27.899 Z M70.987,35.164 L71.947,35.164 L71.947,28.995 L70.987,28.995 L70.987,35.164 Z" id="Fill-33" fill="#171D23"></path>
<g id="Group-36" transform="translate(72.000000, 28.000000)">
<mask id="mask-12" fill="white">
<use xlink:href="#path-11"></use>
</mask>
<g id="Clip-35"></g>
<polygon id="Fill-34" fill="#171D23" mask="url(#mask-12)" points="-4.158 12.334 10.836 12.334 10.836 -4.176 -4.158 -4.176"></polygon>
</g>
<g id="Group-39" transform="translate(78.000000, 28.000000)">
<mask id="mask-14" fill="white">
<use xlink:href="#path-13"></use>
</mask>
<g id="Clip-38"></g>
<polygon id="Fill-37" fill="#171D23" mask="url(#mask-14)" points="-4.289 12.334 11.256 12.334 11.256 -4.176 -4.289 -4.176"></polygon>
</g>
<g id="Group-42" transform="translate(84.000000, 28.000000)">
<mask id="mask-16" fill="white">
<use xlink:href="#path-15"></use>
</mask>
<g id="Clip-41"></g>
<polygon id="Fill-40" fill="#171D23" mask="url(#mask-16)" points="-4.2 12.334 11.084 12.334 11.084 -4.177 -4.2 -4.177"></polygon>
</g>
<g id="Group-45" transform="translate(62.000000, 13.000000)">
<mask id="mask-18" fill="white">
<use xlink:href="#path-17"></use>
</mask>
<g id="Clip-44"></g>
<polygon id="Fill-43" fill="#171D23" mask="url(#mask-18)" points="-4.252 16.8 13.73 16.8 13.73 -4.046 -4.252 -4.046"></polygon>
</g>
<g id="Group-48" transform="translate(36.000000, 13.000000)">
<mask id="mask-20" fill="white">
<use xlink:href="#path-19"></use>
</mask>
<g id="Clip-47"></g>
<polygon id="Fill-46" fill="#171D23" mask="url(#mask-20)" points="-4.035 17.065 19.581 17.065 19.581 -4.236 -4.035 -4.236"></polygon>
</g>
<g id="Group-51" transform="translate(70.000000, 13.000000)">
<mask id="mask-22" fill="white">
<use xlink:href="#path-21"></use>
</mask>
<g id="Clip-50"></g>
<polygon id="Fill-49" fill="#171D23" mask="url(#mask-22)" points="-4.099 17.284 14.998 17.284 14.998 -4.237 -4.099 -4.237"></polygon>
</g>
<g id="Group-54" transform="translate(81.000000, 13.000000)">
<mask id="mask-24" fill="white">
<use xlink:href="#path-23"></use>
</mask>
<g id="Clip-53"></g>
<polygon id="Fill-52" fill="#171D23" mask="url(#mask-24)" points="-4.073 17.065 14.229 17.065 14.229 -4.236 -4.073 -4.236"></polygon>
</g>
<g id="Group-57" transform="translate(52.000000, 13.000000)">
<mask id="mask-26" fill="white">
<use xlink:href="#path-25"></use>
</mask>
<g id="Clip-56"></g>
<polygon id="Fill-55" fill="#171D23" mask="url(#mask-26)" points="-4.897 17.209 14.766 17.209 14.766 -4.336 -4.897 -4.336"></polygon>
</g>
<g id="Group-60" transform="translate(25.000000, 13.000000)">
<mask id="mask-28" fill="white">
<use xlink:href="#path-27"></use>
</mask>
<g id="Clip-59"></g>
<polygon id="Fill-58" fill="#171D23" mask="url(#mask-28)" points="-4.168 17.209 15.495 17.209 15.495 -4.336 -4.168 -4.336"></polygon>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,106 @@
<svg width="86px" height="51px" viewBox="0 0 86 51" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<path d="M8.849,0.085 L5.999,6.152 C5.842,6.399 5.74,6.746 5.532,7.238 L5.481,7.238 C5.427,7.042 5.272,6.647 5.066,6.201 L2.268,0.136 L0.867,0.136 L0.867,8.866 L1.904,8.866 L1.904,2.995 L1.904,1.318 C2.008,1.713 2.059,2.009 2.163,2.208 L5.272,8.866 L5.791,8.866 L8.953,2.157 C9.004,2.009 9.108,1.713 9.212,1.318 C9.159,1.96 9.159,2.552 9.159,2.995 L9.159,8.866 L10.196,8.866 L10.196,0.085 L8.849,0.085 Z" id="path-1"></path>
<path d="M0.217,0.937 C0.062,1.036 0.011,1.232 0.011,1.38 C0.011,1.528 0.113,1.676 0.217,1.824 C0.321,1.972 0.476,2.022 0.685,2.022 C0.891,2.022 1.048,1.972 1.15,1.824 C1.308,1.727 1.359,1.579 1.359,1.38 C1.359,1.232 1.308,1.085 1.15,0.937 C1.048,0.789 0.891,0.741 0.685,0.741 C0.53,0.741 0.375,0.789 0.217,0.937 Z M0.166,9.866 L1.203,9.866 L1.203,3.6 L0.166,3.6 L0.166,9.866 Z" id="path-3"></path>
<path d="M1.379,1.39 C0.757,2.032 0.447,2.822 0.447,3.857 C0.447,4.794 0.757,5.534 1.328,6.125 C1.898,6.719 2.676,7.014 3.609,7.014 C4.336,7.014 4.903,6.866 5.421,6.571 L5.475,6.571 L5.475,5.633 C4.956,5.977 4.438,6.176 3.866,6.176 C3.192,6.176 2.676,5.977 2.261,5.534 C1.847,5.09 1.639,4.547 1.639,3.808 C1.639,3.067 1.847,2.476 2.261,2.032 C2.727,1.589 3.245,1.341 3.919,1.341 C4.488,1.341 5.009,1.489 5.475,1.836 L5.475,0.799 C5.009,0.552 4.488,0.452 3.919,0.452 C2.884,0.452 2.104,0.799 1.379,1.39 Z" id="path-5"></path>
<path d="M2.378,0.85 C2.065,1.094 1.859,1.441 1.702,1.884 L1.702,0.603 L0.667,0.603 L0.667,6.864 L1.702,6.864 L1.702,3.661 C1.702,2.967 1.859,2.425 2.169,2.032 C2.479,1.637 2.843,1.441 3.311,1.441 C3.613,1.441 3.846,1.475 4.035,1.574 L4.035,0.603 C3.88,0.552 3.672,0.5 3.415,0.5 C3.051,0.5 2.688,0.603 2.378,0.85 Z M4.035,1.637 L4.139,1.637 C4.105,1.613 4.071,1.594 4.035,1.574 L4.035,1.637 Z" id="path-7"></path>
<path d="M1.176,1.341 C0.604,1.933 0.294,2.771 0.294,3.808 C0.294,4.794 0.604,5.534 1.176,6.127 C1.746,6.719 2.524,7.014 3.507,7.014 C4.494,7.014 5.269,6.667 5.892,6.028 C6.461,5.434 6.771,4.647 6.771,3.658 C6.771,2.672 6.515,1.884 5.943,1.291 C5.424,0.748 4.649,0.452 3.663,0.452 C2.625,0.452 1.746,0.748 1.176,1.341 Z M1.952,5.485 C1.588,5.09 1.382,4.499 1.382,3.757 C1.382,2.967 1.537,2.376 1.952,1.933 C2.366,1.487 2.885,1.291 3.558,1.291 C4.232,1.291 4.751,1.538 5.114,1.933 C5.478,2.328 5.683,2.919 5.683,3.709 C5.683,4.499 5.478,5.09 5.114,5.485 C4.751,5.929 4.232,6.127 3.558,6.127 C2.885,6.127 2.366,5.929 1.952,5.485 Z" id="path-9"></path>
<path d="M2.26,0.6 C2.003,0.699 1.742,0.799 1.482,0.946 C1.223,1.094 1.068,1.291 0.966,1.393 C0.809,1.637 0.758,1.884 0.758,2.18 C0.758,2.427 0.809,2.624 0.862,2.82 C0.913,3.019 1.017,3.166 1.172,3.314 C1.33,3.462 1.536,3.612 1.742,3.709 C2.003,3.857 2.209,3.956 2.519,4.056 C2.728,4.104 2.936,4.203 3.091,4.252 C3.244,4.351 3.401,4.399 3.557,4.499 C3.661,4.596 3.765,4.695 3.867,4.794 C3.918,4.942 3.973,5.09 3.973,5.238 C3.973,5.832 3.506,6.127 2.57,6.127 C1.897,6.127 1.276,5.929 0.704,5.536 L0.704,6.619 C1.172,6.866 1.795,7.014 2.364,7.014 C2.728,7.014 3.038,6.963 3.351,6.915 C3.661,6.815 3.918,6.719 4.179,6.571 C4.439,6.423 4.591,6.275 4.749,6.028 C4.904,5.832 4.955,5.536 4.955,5.238 C4.955,4.991 4.904,4.794 4.8,4.596 C4.749,4.399 4.591,4.252 4.439,4.104 C4.281,3.956 4.075,3.808 3.867,3.709 C3.661,3.561 3.401,3.462 3.091,3.365 C2.883,3.266 2.677,3.166 2.519,3.118 C2.364,3.019 2.209,2.967 2.105,2.871 C2.003,2.771 1.897,2.672 1.846,2.575 C1.795,2.476 1.742,2.328 1.742,2.18 C1.742,2.081 1.795,1.933 1.846,1.836 C1.897,1.688 2.003,1.637 2.105,1.538 C2.209,1.441 2.364,1.393 2.519,1.341 C2.677,1.291 2.83,1.291 3.038,1.291 C3.661,1.291 4.23,1.441 4.698,1.736 L4.698,0.748 C4.281,0.552 3.765,0.452 3.193,0.452 C2.883,0.452 2.57,0.5 2.26,0.6 Z" id="path-11"></path>
<path d="M1.719,1.341 C1.147,1.933 0.837,2.771 0.837,3.808 C0.837,4.794 1.147,5.534 1.719,6.127 C2.288,6.719 3.066,7.014 4.05,7.014 C5.036,7.014 5.814,6.667 6.434,6.028 C7.004,5.434 7.314,4.647 7.314,3.658 C7.314,2.672 7.057,1.884 6.488,1.291 C5.967,0.748 5.191,0.452 4.205,0.452 C3.17,0.452 2.392,0.748 1.719,1.341 Z M2.497,5.485 C2.133,5.09 1.927,4.499 1.927,3.757 C1.927,2.967 2.08,2.376 2.497,1.933 C2.909,1.487 3.427,1.291 4.103,1.291 C4.777,1.291 5.346,1.538 5.659,1.933 C6.02,2.328 6.226,2.919 6.226,3.709 C6.226,4.499 6.02,5.09 5.659,5.485 C5.293,5.929 4.777,6.127 4.103,6.127 C3.427,6.127 2.909,5.929 2.497,5.485 Z" id="path-13"></path>
<path d="M2.388,1.085 C1.974,1.479 1.819,1.974 1.819,2.614 L1.819,3.603 L0.677,3.603 L0.677,4.441 L1.819,4.441 L1.819,9.864 L2.856,9.864 L2.856,4.489 L3.58,4.489 L4.358,4.489 L5.706,4.489 L5.706,8.187 C5.706,9.42 6.277,10.014 7.416,10.014 C7.831,10.014 8.143,9.966 8.403,9.815 L8.403,8.977 C8.194,9.125 7.986,9.176 7.729,9.176 C7.365,9.176 7.157,9.076 7.002,8.929 C6.847,8.732 6.794,8.434 6.794,8.042 L6.794,4.489 L8.453,4.489 L8.453,3.603 L6.794,3.603 L6.794,1.775 L5.756,2.122 L5.756,3.651 L4.409,3.651 L3.634,3.651 L2.907,3.651 L2.907,2.665 C2.907,1.775 3.27,1.332 3.995,1.332 C4.256,1.332 4.462,1.383 4.668,1.479 L4.668,0.593 C4.462,0.542 4.203,0.494 3.893,0.494 C3.321,0.494 2.803,0.69 2.388,1.085 Z" id="path-15"></path>
<path d="M4.398,0.136 L0.822,8.866 L2.014,8.866 L2.947,6.399 L6.834,6.399 L7.82,8.866 L9.01,8.866 L5.486,0.136 L4.398,0.136 Z M4.762,1.762 C4.813,1.616 4.866,1.417 4.917,1.17 C4.968,1.466 5.021,1.665 5.072,1.762 L6.523,5.462 L3.361,5.462 L4.762,1.762 Z" id="path-17"></path>
<path d="M4.79,0.6 L4.79,4.152 C4.79,4.746 4.584,5.238 4.274,5.582 C3.962,5.929 3.547,6.125 3.029,6.125 C1.941,6.125 1.422,5.485 1.422,4.152 L1.422,0.6 L0.385,0.6 L0.385,4.351 C0.385,6.125 1.165,7.014 2.719,7.014 C3.651,7.014 4.325,6.619 4.74,5.878 L4.74,6.866 L5.777,6.866 L5.828,6.866 L5.828,0.6 L4.79,0.6 Z" id="path-19"></path>
<path d="M2.249,0.85 C1.939,1.094 1.73,1.441 1.575,1.884 L1.575,0.603 L0.538,0.603 L0.538,6.864 L1.575,6.864 L1.575,3.661 C1.575,2.967 1.73,2.425 2.041,2.032 C2.353,1.637 2.714,1.441 3.182,1.441 C3.47,1.441 3.71,1.482 3.909,1.603 L3.909,0.603 C3.751,0.552 3.545,0.5 3.286,0.5 C2.923,0.5 2.559,0.603 2.249,0.85 Z M3.909,1.637 L3.96,1.637 C3.943,1.625 3.926,1.615 3.909,1.603 L3.909,1.637 Z" id="path-21"></path>
<path d="M1.048,1.39 C0.476,1.981 0.166,2.771 0.166,3.757 C0.166,4.746 0.425,5.584 0.946,6.125 C1.462,6.667 2.187,6.966 3.12,6.966 C4.055,6.966 4.83,6.767 5.402,6.372 L5.402,5.434 C4.78,5.88 4.106,6.125 3.381,6.125 C2.708,6.125 2.187,5.977 1.826,5.584 C1.462,5.187 1.256,4.645 1.256,3.956 L5.868,3.956 L5.868,3.413 C5.868,2.524 5.608,1.785 5.143,1.242 C4.675,0.699 4.002,0.452 3.173,0.452 C2.344,0.452 1.62,0.799 1.048,1.39 Z M1.93,1.785 C2.24,1.441 2.654,1.291 3.173,1.291 C3.692,1.291 4.055,1.489 4.365,1.785 C4.625,2.081 4.78,2.524 4.78,3.118 L1.307,3.118 C1.358,2.575 1.566,2.129 1.93,1.785 Z" id="path-23"></path>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g>
<path d="M41.5513,2.9871 L41.5513,17.1581 L61.6853,17.0061 L61.6853,0.1911 L41.5513,2.9871 Z M24.5363,5.2121 L24.5513,17.2661 L39.7253,17.1841 L39.7203,3.2441 L24.5363,5.2121 Z M24.5493,30.7531 L39.7253,32.7391 L39.7123,18.7901 L24.5493,18.6951 L24.5493,30.7531 Z M41.5513,32.9551 L61.6853,35.6591 L61.6883,18.9211 L41.5253,18.8901 L41.5513,32.9551 Z" id="Fill-1" fill="#000000"></path>
<g id="Group-4" transform="translate(0.000000, 41.410000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-3"></g>
<polygon id="Fill-2" fill="#000000" mask="url(#mask-2)" points="-5.085 14.819 16.15 14.819 16.15 -5.868 -5.085 -5.868"></polygon>
</g>
<g id="Group-7" transform="translate(12.000000, 40.410000)">
<mask id="mask-4" fill="white">
<use xlink:href="#path-3"></use>
</mask>
<g id="Clip-6"></g>
<polygon id="Fill-5" fill="#000000" mask="url(#mask-4)" points="-5.942 15.819 7.311 15.819 7.311 -5.213 -5.942 -5.213"></polygon>
</g>
<g id="Group-10" transform="translate(14.000000, 43.410000)">
<mask id="mask-6" fill="white">
<use xlink:href="#path-5"></use>
</mask>
<g id="Clip-9"></g>
<polygon id="Fill-8" fill="#000000" mask="url(#mask-6)" points="-5.506 12.966 11.427 12.966 11.427 -5.501 -5.506 -5.501"></polygon>
</g>
<g id="Group-13" transform="translate(20.000000, 43.410000)">
<mask id="mask-8" fill="white">
<use xlink:href="#path-7"></use>
</mask>
<g id="Clip-12"></g>
<polygon id="Fill-11" fill="#000000" mask="url(#mask-8)" points="-5.286 12.818 10.092 12.818 10.092 -5.451 -5.286 -5.451"></polygon>
</g>
<g id="Group-16" transform="translate(24.000000, 43.410000)">
<mask id="mask-10" fill="white">
<use xlink:href="#path-9"></use>
</mask>
<g id="Clip-15"></g>
<polygon id="Fill-14" fill="#000000" mask="url(#mask-10)" points="-5.659 12.966 12.725 12.966 12.725 -5.501 -5.659 -5.501"></polygon>
</g>
<g id="Group-19" transform="translate(31.000000, 43.410000)">
<mask id="mask-12" fill="white">
<use xlink:href="#path-11"></use>
</mask>
<g id="Clip-18"></g>
<polygon id="Fill-17" fill="#000000" mask="url(#mask-12)" points="-5.246 12.967 10.909 12.967 10.909 -5.501 -5.246 -5.501"></polygon>
</g>
<g id="Group-22" transform="translate(36.000000, 43.410000)">
<mask id="mask-14" fill="white">
<use xlink:href="#path-13"></use>
</mask>
<g id="Clip-21"></g>
<polygon id="Fill-20" fill="#000000" mask="url(#mask-14)" points="-5.117 12.966 13.268 12.966 13.268 -5.501 -5.117 -5.501"></polygon>
</g>
<g id="Group-25" transform="translate(43.000000, 40.410000)">
<mask id="mask-16" fill="white">
<use xlink:href="#path-15"></use>
</mask>
<g id="Clip-24"></g>
<polygon id="Fill-23" fill="#000000" mask="url(#mask-16)" points="-5.275 15.965 14.406 15.965 14.406 -5.46 -5.275 -5.46"></polygon>
</g>
<g id="Group-28" transform="translate(54.000000, 41.410000)">
<mask id="mask-18" fill="white">
<use xlink:href="#path-17"></use>
</mask>
<g id="Clip-27"></g>
<polygon id="Fill-26" fill="#000000" mask="url(#mask-18)" points="-5.131 14.818 14.964 14.818 14.964 -5.818 -5.131 -5.818"></polygon>
</g>
<polygon id="Fill-29" fill="#000000" points="63.4272 44.0121 63.4272 44.8991 66.9502 44.8991 63.0632 49.9781 63.0632 50.2731 68.4012 50.2731 68.4012 49.3871 64.5652 49.3871 68.4522 44.3091 68.4522 44.0121"></polygon>
<g id="Group-32" transform="translate(69.000000, 43.410000)">
<mask id="mask-20" fill="white">
<use xlink:href="#path-19"></use>
</mask>
<g id="Clip-31"></g>
<polygon id="Fill-30" fill="#000000" mask="url(#mask-20)" points="-5.567 12.966 11.781 12.966 11.781 -5.353 -5.567 -5.353"></polygon>
</g>
<g id="Group-35" transform="translate(76.000000, 43.410000)">
<mask id="mask-22" fill="white">
<use xlink:href="#path-21"></use>
</mask>
<g id="Clip-34"></g>
<polygon id="Fill-33" fill="#000000" mask="url(#mask-22)" points="-5.414 12.818 9.913 12.818 9.913 -5.451 -5.414 -5.451"></polygon>
</g>
<g id="Group-38" transform="translate(80.000000, 43.410000)">
<mask id="mask-24" fill="white">
<use xlink:href="#path-23"></use>
</mask>
<g id="Clip-37"></g>
<polygon id="Fill-36" fill="#000000" mask="url(#mask-24)" points="-5.786 12.917 11.821 12.917 11.821 -5.499 -5.786 -5.499"></polygon>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,23 @@
<svg width="73px" height="18px" viewBox="0 0 73 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<polygon id="path-1" points="7.65941019 13.0049549 7.65941019 0.0216043925 0.0217380566 0.0216043925 0.0217380566 13.0049549 7.65941019 13.0049549"></polygon>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g>
<path d="M24.6664602,12.7431526 C23.8186847,14.1329087 22.6005184,14.9678227 20.9525203,14.9678227 C20.1797856,14.9678227 19.4512113,14.7844881 18.789733,14.3798947 C17.3810072,13.517805 16.5626913,12.2918853 16.5626913,10.625418 C16.5626913,10.0089236 16.684995,9.41731617 16.953437,8.85995355 C17.7471356,7.21159374 19.0700632,6.2835928 20.9083599,6.2835928 C21.7510322,6.2835928 22.5300009,6.51927972 23.2296955,6.98978439 C24.506752,7.84761523 25.2537386,9.03140963 25.2537386,10.581004 C25.2537386,11.3525564 25.0708048,12.0805349 24.6664602,12.7431526 M20.9952889,4.08974888 L20.6911533,4.08974888 C19.5885348,4.08974888 18.5388624,4.37155916 17.589979,4.93486103 C15.5489735,6.14722178 14.3684727,8.03097879 14.3684727,10.4087078 L14.3684727,10.8429975 C14.3651382,11.9327779 14.6574436,13.003147 15.2142765,13.9402162 C16.4213954,15.9849704 18.3120583,17.1599573 20.6911533,17.1599573 L21.1258275,17.1599573 C22.2261843,17.1599573 23.2750158,16.8722367 24.2244501,16.3157143 C26.2753721,15.113262 27.4482471,13.2195965 27.4482471,10.8429975 L27.4482471,10.4087078 C27.4482471,9.39439935 27.1860392,8.4262143 26.6961573,7.53923766 C25.4709161,5.32192645 23.5374846,4.08974888 20.9952889,4.08974888" id="Fill-1" fill="#000000"></path>
<path d="M10.2968944,12.7448504 C9.4340991,14.1727915 8.18310975,14.9678401 6.49660538,14.9678401 C5.80198502,14.9678401 5.14111563,14.7890251 4.53229347,14.4562821 C3.0267511,13.6329569 2.19396635,12.342256 2.19396635,10.6254354 C2.19396635,10.0089121 2.3162991,9.41730458 2.58416113,8.85994196 C3.37814967,7.21161112 4.70107728,6.28358121 6.53934501,6.28358121 C7.43273071,6.28358121 8.25191648,6.54586439 8.97962091,7.0687214 C10.1799548,7.93136159 10.8850136,9.09278963 10.8850136,10.5809924 C10.8850136,11.3536747 10.6981365,12.0805233 10.2968944,12.7448504 M12.0703278,2.60747664e-05 L11.8958898,2.60747664e-05 C11.2655818,2.60747664e-05 10.8850136,0.488638224 10.8850136,1.09693355 L10.8850136,5.7262186 C9.73313148,4.71332981 8.36714529,4.08976626 6.75710252,4.08976626 L6.32187745,4.08976626 C5.2311182,4.08597093 4.15972805,4.37783449 3.22183399,4.93429897 C1.17572528,6.14127093 3.76943759e-05,8.03125692 3.76943759e-05,10.4086962 L3.76943759e-05,10.8429859 C-0.00355776917,11.9327373 0.288428665,13.0030485 0.844971627,13.9402336 C2.05267043,15.9849588 3.94275343,17.1599747 6.32187745,17.1599747 L6.75710252,17.1599747 C7.84742684,17.1625242 8.91823707,16.8707186 9.8563051,16.315413 C11.9041246,15.1107008 13.0792322,13.2196139 13.0792322,10.8429859 L13.0792322,1.09693355 C13.0792322,0.489188692 12.7003748,2.60747664e-05 12.0703278,2.60747664e-05" id="Fill-3" fill="#000000"></path>
<g id="Group-7" transform="translate(64.689348, 4.155014)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-6"></g>
<path d="M6.5621762,0.0216043925 L6.34412873,0.0216043925 L6.34412873,0.0218941121 C5.06454965,0.0218941121 3.86734728,0.410929626 2.82219822,1.14794738 C1.0717004,2.38180533 0.0217380566,4.14104084 0.0217380566,6.29612028 L0.0217380566,11.9083081 C0.0217380566,12.5168932 0.401726361,13.0049549 1.03232427,13.0049549 L1.20563142,13.0049549 C1.83622933,13.0049549 2.21650759,12.5166035 2.21650759,11.9083081 L2.21650759,6.60084738 C2.21650759,5.42612121 2.58715929,4.35749037 3.43409392,3.52312682 C4.11340457,2.85456981 5.05434317,2.25844271 6.03973215,2.25844271 C6.79098106,2.25844271 7.65943049,2.02614551 7.65943049,1.11851187 C7.65943049,0.464672617 7.22023302,0.0216043925 6.5621762,0.0216043925" id="Fill-5" fill="#000000" mask="url(#mask-2)"></path>
</g>
<g id="Group-10" transform="translate(50.220507, 3.981182)" fill="#000000">
<path d="M8.21458456,5.1993229 C6.59065285,6.60011729 4.96190787,7.99636308 3.33374279,9.39118925 C3.17913786,9.20759393 3.0361312,9.0149014 2.90814429,8.80977991 C2.5448575,8.22779112 2.36079296,7.56856308 2.33814734,6.88444813 C2.28151879,5.14755 2.92852825,3.75185467 4.44769859,2.87533692 C5.60836641,2.20593972 6.85625322,2.04410234 8.12200137,2.52593505 C8.74891683,2.76501168 9.48682773,3.16589673 9.92854783,3.72215841 C9.37809396,4.22490888 8.76959075,4.72116963 8.21458456,5.1993229 L8.21458456,5.1993229 Z M12.212827,3.15882757 C11.6085572,2.1128528 10.731612,1.31754346 9.64908752,0.78393785 C7.63609187,-0.208293925 5.53532631,-0.285822897 3.57527676,0.84475 L3.27456262,1.01820514 C2.47973322,1.47738178 1.79987165,2.06446963 1.27968927,2.82440421 C-0.227302886,5.02305748 -0.407655976,7.45510888 0.928580652,9.76721636 L1.05938014,9.99383505 C1.61919961,10.9634397 2.37807438,11.7587491 3.36998739,12.2946145 C5.44471483,13.4155977 7.65844753,13.5819547 9.739699,12.3817621 L9.92741699,12.273407 C10.4914988,11.9477621 10.6293733,11.3711332 10.3422581,10.7976332 C10.2193744,10.552907 9.9897287,10.3879696 9.74903561,10.2713864 L9.69240706,10.2436603 L9.63096523,10.2332014 C9.23679804,10.1647407 8.16532091,10.6318556 7.74624643,10.8098014 C6.92706066,10.9524014 6.01668349,10.9922958 5.21817163,10.7136145 C6.67305856,9.45683972 8.12681465,8.19809486 9.58283241,6.94216028 C10.235786,6.37914813 10.9235924,5.74706682 11.6048747,5.22195 C12.1918631,4.76926308 12.7604393,4.10722477 12.3215608,3.34726121 L12.212827,3.15882757 Z" id="Fill-8"></path>
</g>
<path d="M38.7859934,5.09217589 L38.7067192,5.03727402 C37.7411343,4.3783357 36.663974,4.04646187 35.4945205,4.04646187 L35.0595854,4.04646187 C33.9572569,4.04646187 32.9078454,4.32940206 31.958991,4.89241421 C29.9182465,6.10364505 28.7374557,7.98682262 28.7374557,10.3642908 L28.7374557,10.7980011 C28.7374557,11.3650114 28.8108147,11.9053964 28.9736254,12.4494609 C29.9108816,15.5826338 32.3695697,17.3865731 35.6570702,17.1594039 C36.5886722,17.0943329 39.030079,16.7887656 39.030079,15.4538824 L39.030079,15.2368824 C39.030079,14.7004665 38.6534832,14.3844114 38.1545546,14.2805759 L38.1098143,14.2715366 L37.7040488,14.2715366 L37.6134373,14.314531 C37.0907033,14.5626759 36.2582085,14.9231161 35.6692484,14.9231161 C34.9995643,14.9231161 34.2084174,14.8676637 33.5956518,14.5751049 C31.9182231,13.7735665 30.9313843,12.4588189 30.9313843,10.5810011 C30.9313843,9.96421701 31.054007,9.37431888 31.3227099,8.81692729 C32.1008378,7.20113196 33.4271869,6.16958523 35.2603514,6.23859645 C35.618274,6.2521843 36.2384045,6.30366748 36.5696801,6.45872542 C36.8619275,6.59622636 37.6063334,6.9349086 37.9336656,6.9349086 L38.0633632,6.9349086 L38.105262,6.92754972 C38.6110045,6.83020393 39.030079,6.52918523 39.030079,5.96953383 L39.030079,5.75253383 C39.030079,5.54712262 38.9403084,5.34738991 38.8361269,5.17480393 L38.7859934,5.09217589 Z" id="Fill-11" fill="#000000"></path>
<path d="M48.2098686,4.18595318 L48.1651283,4.17662421 L47.7720919,4.17662421 C47.4127775,4.17662421 46.5001387,5.16685692 46.2591847,5.40086346 C45.3941277,6.23945692 44.5389583,7.09050832 43.6866595,7.94324009 L43.6866595,1.13937748 C43.6866595,0.53108215 43.3055114,0.0444400935 42.6760443,0.0444400935 L42.5033171,0.0444400935 C41.8732991,0.0444400935 41.4924409,0.53108215 41.4924409,1.13937748 L41.4924409,16.0203336 C41.4924409,16.6286289 41.8730091,17.1175307 42.5033171,17.1175307 L42.6760443,17.1175307 C43.3055114,17.1175307 43.6866595,16.6286289 43.6866595,16.0203336 L43.6866595,13.3794522 L45.3711922,15.0317522 C45.8735132,15.524913 46.3681794,16.0324728 46.8807069,16.5151747 C47.1293158,16.7497027 47.5393437,17.1599457 47.9023695,17.1599457 L48.0770684,17.1599457 C48.6317847,17.1599457 48.9494903,16.7565111 49.0726639,16.2562812 L49.085393,16.2039289 L49.085393,15.9775999 C49.085393,15.7984952 49.025082,15.6307186 48.9268446,15.4819186 C48.8353633,15.3231812 48.6745243,15.1805812 48.5655296,15.0659971 C48.2563777,14.7433653 47.9447902,14.4231093 47.630796,14.1051709 C46.4987179,12.9533616 45.3584341,11.8094906 44.2170194,10.6664597 L46.8679778,7.97748495 C47.3838979,7.45462794 47.9145187,6.93828963 48.4185505,6.4043943 C48.6555611,6.15343916 49.085393,5.7273485 49.085393,5.36067935 L49.085393,5.14394009 C49.085393,4.6063943 48.7105079,4.28978869 48.2098686,4.18595318" id="Fill-13" fill="#000000"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@ -0,0 +1,32 @@
<svg width="91px" height="10px" viewBox="0 0 91 10" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<polygon id="path-1" points="0 9.85414706 90.7994466 9.85414706 90.7994466 2.94117647e-05 0 2.94117647e-05"></polygon>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g>
<path d="M77.5193071,6.88202941 C76.7606793,6.88202941 76.0397472,6.27555882 76.0397472,5.21467647 C76.0397472,4.15379412 76.7606793,3.54761765 77.5193071,3.54761765 C78.2782294,3.54761765 78.998867,4.15379412 78.998867,5.21467647 C78.998867,6.23791176 78.2782294,6.84408824 77.5193071,6.88202941 Z M77.5193071,2.78967647 C76.1534236,2.78967647 75.166854,3.81261765 75.166854,5.21467647 C75.166854,6.57908824 76.1534236,7.63997059 77.5193071,7.63997059 C78.8854851,7.63997059 79.8717602,6.61702941 79.8717602,5.21467647 C79.8717602,3.81261765 78.8854851,2.78967647 77.5193071,2.78967647 Z" id="Fill-1" fill="#000000"></path>
<path d="M35.858123,6.80620588 C34.4542492,6.80620588 33.2780227,5.78297059 33.2780227,4.15385294 C33.2780227,2.52414706 34.4542492,1.50120588 35.858123,1.50120588 C36.6170453,1.50120588 37.2619968,1.7665 37.7172913,2.33473529 L38.3245469,1.7665 C37.7172913,1.08444118 36.8826828,0.667382353 35.858123,0.667382353 C33.8849838,0.667382353 32.3674337,2.18326471 32.3674337,4.15385294 C32.3674337,6.16238235 33.8849838,7.64002941 35.858123,7.60208824 C36.9963592,7.60208824 37.9449385,7.10944118 38.5142039,6.42738235 L37.9069482,5.82091176 C37.4136634,6.42738235 36.6927314,6.80620588 35.858123,6.80620588" id="Fill-3" fill="#000000"></path>
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-6"></g>
<polygon id="Fill-5" fill="#000000" mask="url(#mask-2)" points="39.1591553 7.48826471 40.031754 7.48826471 40.031754 0.819147059 39.1591553 0.819147059"></polygon>
<path d="M81.4274479,3.699 L81.3894576,3.699 L81.3894576,2.94105882 L80.5548492,2.94105882 L80.5548492,7.48841176 L81.4274479,7.48841176 L81.4274479,4.98752941 C81.4274479,4.15370588 81.9967133,3.66105882 82.6036744,3.66105882 C82.7936259,3.66105882 82.9449981,3.699 83.0589689,3.73694118 L83.4005871,2.94105882 C83.2109301,2.86547059 83.0209786,2.82752941 82.7556356,2.82752941 C82.2623508,2.82752941 81.6173994,3.16841176 81.4274479,3.699" id="Fill-7" fill="#000000" mask="url(#mask-2)"></path>
<path d="M89.1678078,2.78964706 C88.4468757,2.78964706 87.9156006,3.13052941 87.574277,3.66111765 C87.3463353,3.13052941 86.853345,2.78964706 86.1324129,2.78964706 C85.6011379,2.78964706 84.9941767,3.13052941 84.7285392,3.58552941 L84.6905489,3.58552941 L84.6905489,2.94111765 L83.8559405,2.94111765 L83.7799599,2.94111765 L83.7799599,7.602 L84.6525586,7.602 L84.6525586,5.06317647 C84.6525586,4.38111765 85.1458434,3.66111765 85.8287851,3.66111765 C86.4740311,3.66111765 86.853345,3.96435294 86.853345,4.91170588 L86.853345,7.56405882 L87.7259437,7.56405882 L87.7259437,5.02552941 C87.7259437,4.34317647 88.2192285,3.62317647 88.9024647,3.62317647 C89.5471217,3.62317647 89.9267301,3.92641176 89.9267301,4.87376471 L89.9267301,7.52611765 L90.7993288,7.52611765 L90.7993288,4.722 C90.7993288,3.58552941 90.306044,2.78964706 89.1678078,2.78964706" id="Fill-8" fill="#000000" mask="url(#mask-2)"></path>
<polygon id="Fill-9" fill="#000000" mask="url(#mask-2)" points="62.6836861 7.48826471 63.5565793 7.48826471 63.5565793 0.819147059 62.6836861 0.819147059"></polygon>
<path d="M43.0293353,6.88202941 C42.2704129,6.88202941 41.5497754,6.27555882 41.5497754,5.21467647 C41.5497754,4.15379412 42.2704129,3.54761765 43.0293353,3.54761765 C43.7882576,3.54761765 44.5088951,4.15379412 44.5088951,5.21467647 C44.5088951,6.23791176 43.7882576,6.84408824 43.0293353,6.88202941 M43.0293353,2.78967647 C41.6634518,2.78967647 40.6768822,3.81261765 40.6768822,5.21467647 C40.6768822,6.57908824 41.6634518,7.63997059 43.0293353,7.63997059 C44.3955133,7.63997059 45.3817883,6.61702941 45.3817883,5.21467647 C45.3817883,3.81261765 44.3955133,2.78967647 43.0293353,2.78967647" id="Fill-10" fill="#000000" mask="url(#mask-2)"></path>
<path d="M53.1222366,6.88202941 C52.3633142,6.88202941 51.6803725,6.23791176 51.6803725,5.21467647 C51.6803725,4.15379412 52.3633142,3.54761765 53.1222366,3.54761765 C53.8808644,3.54761765 54.5641006,4.15379412 54.5641006,5.21467647 C54.5641006,6.23791176 53.8428741,6.84408824 53.1222366,6.88202941 L53.1222366,6.88202941 Z M54.4881201,2.94114706 L54.5261104,3.58555882 L54.4881201,3.58555882 C54.2224825,3.1685 53.6535117,2.78967647 52.9322851,2.78967647 C51.7940489,2.78967647 50.7697835,3.81261765 50.7697835,5.21467647 C50.7697835,6.61702941 51.7940489,7.63997059 52.9702754,7.63997059 C53.6915019,7.63997059 54.2604728,7.26114706 54.5261104,6.84408824 L54.5641006,6.84408824 L54.5641006,7.4885 L55.3610133,7.4885 L55.3610133,0.819088235 L54.4881201,0.819088235 L54.4881201,2.94114706 Z" id="Fill-11" fill="#000000" mask="url(#mask-2)"></path>
<path d="M60.0276935,3.96426471 L58.5858294,3.96426471 L58.5858294,1.61485294 L60.0276935,1.61485294 C60.7866159,1.61485294 61.2039201,2.25926471 61.2039201,2.78955882 C61.2039201,3.32014706 60.7866159,3.96426471 60.0276935,3.96426471 M59.9897032,0.819264706 L57.7132307,0.819264706 L57.7132307,7.45044118 L58.5858294,7.45044118 L58.5858294,4.76014706 L59.9897032,4.76014706 C61.0899492,4.76014706 62.0765188,3.92661765 62.0765188,2.78955882 C62.0765188,1.65279412 61.0899492,0.819264706 59.9897032,0.819264706" id="Fill-12" fill="#000000" mask="url(#mask-2)"></path>
<path d="M66.1365324,6.84411765 C65.6812379,6.84411765 65.1879531,6.61705882 65.1879531,6.12441176 C65.1879531,5.70735294 65.5292767,5.21470588 66.4398657,5.21470588 C67.1610922,5.21470588 67.5404061,5.51794118 67.5404061,5.51794118 C67.5404061,6.27558824 66.8194741,6.84411765 66.1365324,6.84411765 M66.3264838,2.78970588 C65.1879531,2.78970588 64.6189822,3.47176471 64.467021,3.88852941 L65.2636392,4.22941176 C65.4156003,3.81264706 65.8708948,3.58529412 66.3641796,3.58529412 C66.9711408,3.58529412 67.5404061,4.00205882 67.5404061,4.68411765 L67.5404061,4.79794118 C67.3507492,4.72205882 66.8954547,4.53294118 66.2884935,4.53294118 C65.2259434,4.53294118 64.2773641,5.10117647 64.2773641,6.12441176 C64.2773641,7.07147059 65.0742767,7.64 65.9845712,7.67794118 C66.7814838,7.67794118 67.2367783,7.26117647 67.5024159,6.88205882 L67.5404061,6.88205882 L67.5404061,7.52617647 L68.3753091,7.52617647 L68.3753091,4.76 C68.3753091,3.47176471 67.4647201,2.78970588 66.3264838,2.78970588" id="Fill-13" fill="#000000" mask="url(#mask-2)"></path>
<path d="M71.0690858,6.84411765 C70.6897718,6.84411765 70.4618301,6.61705882 70.4618301,6.08647059 L70.4618301,3.73705882 L71.6003608,3.73705882 L71.6003608,2.94117647 L70.4618301,2.94117647 L70.4618301,1.53911765 L69.5895259,1.53911765 L69.5895259,2.94117647 L68.7926133,2.94117647 L68.7926133,3.73705882 L69.5895259,3.73705882 L69.5895259,6.12441176 C69.5895259,7.03382353 70.1205065,7.56411765 71.0690858,7.60205882 C71.3344288,7.60205882 71.5623706,7.56411765 71.7520275,7.48823529 L71.4483997,6.76852941 C71.3344288,6.84411765 71.2210469,6.84411765 71.0690858,6.84411765" id="Fill-14" fill="#000000" mask="url(#mask-2)"></path>
<path d="M49.2520566,5.44217647 C49.2520566,6.12423529 48.7964676,6.84423529 48.0378398,6.84423529 C47.3928883,6.84423529 46.8996036,6.50305882 46.8996036,5.556 L46.8996036,2.90335294 L46.0270049,2.90335294 L46.0270049,5.70717647 C46.0270049,6.84423529 46.5959757,7.64011765 47.7722023,7.64011765 C48.3791634,7.64011765 48.9484288,7.26129412 49.2140663,6.84423529 L49.2520566,6.84423529 L49.2520566,7.48835294 L49.2520566,7.52629412 L50.1246553,7.52629412 L50.1246553,2.94129412 L49.2520566,2.94129412 L49.2520566,5.44217647 Z" id="Fill-15" fill="#000000" mask="url(#mask-2)"></path>
<path d="M73.7250489,2.33482353 C73.7250489,1.80423529 74.0663725,1.53894118 74.4839712,1.53894118 C74.6356379,1.53894118 74.7496087,1.57688235 74.8632851,1.61482353 L75.1669129,0.894823529 C74.977256,0.819235294 74.7873045,0.781294118 74.5219615,0.781294118 C73.5353919,0.781294118 72.8904405,1.38747059 72.8904405,2.33482353 L72.8904405,2.90335294 L72.0175472,2.90335294 L72.0175472,3.69894118 L72.8524502,3.69894118 L72.8524502,7.48835294 L73.7250489,7.48835294 L73.7250489,3.69894118 L74.9012754,3.69894118 L74.9012754,2.90335294 L73.7250489,2.90335294 L73.7250489,2.33482353 Z" id="Fill-16" fill="#000000" mask="url(#mask-2)"></path>
<path d="M10.3044984,6.6715 C9.56059547,6.6715 8.91152104,6.05973529 8.91152104,5.17826471 C8.91152104,4.28973529 9.55323301,3.68532353 10.3044984,3.68532353 C11.0484013,3.68532353 11.6971812,4.28973529 11.6971812,5.17826471 C11.6971812,6.05973529 11.0484013,6.6715 10.3044984,6.6715 M10.3044984,2.72385294 C8.94067638,2.72385294 7.83218447,3.75826471 7.83218447,5.18561765 C7.83218447,6.60561765 8.94067638,7.64738235 10.3044984,7.64738235 C11.6680259,7.64738235 12.7768123,6.60561765 12.7768123,5.18561765 C12.7768123,3.75826471 11.6680259,2.72385294 10.3044984,2.72385294" id="Fill-17" fill="#000000" mask="url(#mask-2)"></path>
<path d="M3.88693689,3.47411765 L3.88693689,4.51558824 L6.38840615,4.51558824 C6.31537055,5.09823529 6.11864563,5.52794118 5.81943528,5.82647059 C5.45484628,6.19058824 4.8861699,6.59147059 3.88693689,6.59147059 C2.34818285,6.59147059 1.14486246,5.35323529 1.14486246,3.81647059 C1.14486246,2.27970588 2.34818285,1.04147059 3.88693689,1.04147059 C4.71830583,1.04147059 5.3235,1.36911765 5.76848706,1.79176471 L6.51238997,1.05617647 C5.88510841,0.458823529 5.05373948,0 3.88693689,0 C1.77214401,0 0.000147249191,1.71147059 0.000147249191,3.82352941 C0.000147249191,5.92852941 1.77214401,7.64 3.88693689,7.64 C5.02458414,7.64 5.88510841,7.26852941 6.56333819,6.56941176 C7.25599838,5.88470588 7.46774272,4.91617647 7.46774272,4.12970588 C7.46774272,3.88205882 7.44565534,3.66352941 7.40913754,3.47411765 L3.88693689,3.47411765 Z" id="Fill-18" fill="#000000" mask="url(#mask-2)"></path>
<path d="M21.0828741,6.6715 C20.3392657,6.6715 19.7119841,6.04502941 19.7119841,5.18561765 C19.7119841,4.31885294 20.3392657,3.68532353 21.0828741,3.68532353 C21.8194146,3.68532353 22.3957479,4.31885294 22.3957479,5.18561765 C22.4028159,6.05238235 21.8194146,6.6715 21.0828741,6.6715 L21.0828741,6.6715 Z M22.3227123,3.27032353 L22.2861945,3.27032353 C22.0455893,2.97885294 21.5788094,2.71679412 20.9880456,2.71679412 C19.7555699,2.71679412 18.6252851,3.79444118 18.6252851,5.18561765 C18.6252851,6.56208824 19.7555699,7.64002941 20.9880456,7.64002941 C21.5788094,7.64002941 22.0455893,7.37767647 22.2861945,7.07944118 L22.3227123,7.07944118 L22.3227123,7.43620588 C22.3227123,8.37561765 21.8194146,8.87826471 21.0098385,8.87826471 C20.3463337,8.87826471 19.9378644,8.40502941 19.7702948,8.00414706 L18.829667,8.39738235 C19.0994275,9.05297059 19.821243,9.85414706 21.017201,9.85414706 C22.2861945,9.85414706 23.3581686,9.11120588 23.3581686,7.29032353 L23.3581686,2.86973529 L22.3227123,2.86973529 L22.3227123,3.27032353 Z" id="Fill-19" fill="#000000" mask="url(#mask-2)"></path>
<path d="M15.7009456,6.6715 C14.9570427,6.6715 14.3082628,6.05973529 14.3082628,5.17826471 C14.3082628,4.28973529 14.9499748,3.68532353 15.7009456,3.68532353 C16.452211,3.68532353 17.093923,4.28973529 17.093923,5.17826471 C17.093923,6.05973529 16.4448485,6.6715 15.7009456,6.6715 M15.7009456,2.72385294 C14.3374181,2.72385294 13.2286317,3.75826471 13.2286317,5.18561765 C13.2286317,6.60561765 14.3374181,7.64738235 15.7009456,7.64738235 C17.0647676,7.64738235 18.1732595,6.60561765 18.1732595,5.18561765 C18.1732595,3.75826471 17.0647676,2.72385294 15.7009456,2.72385294" id="Fill-20" fill="#000000" mask="url(#mask-2)"></path>
<polygon id="Fill-21" fill="#000000" mask="url(#mask-2)" points="24.1020421 7.49444118 25.1813786 7.49444118 25.1813786 0.262382353 24.1020421 0.262382353"></polygon>
<path d="M26.7784434,5.10552941 C26.749288,4.15876471 27.5149838,3.67082353 28.0692298,3.67082353 C28.4994919,3.67082353 28.8640809,3.882 28.9809968,4.19494118 L26.7784434,5.10552941 Z M30.1404369,4.28994118 C29.936055,3.73641176 29.309068,2.72376471 28.032712,2.72376471 C26.7640129,2.72376471 25.7064693,3.72170588 25.7064693,5.18552941 C25.7064693,6.562 26.749288,7.64758824 28.1493333,7.64758824 C29.2799126,7.64758824 29.9289871,6.95552941 30.20611,6.55494118 L29.3673786,5.99405882 C29.0828932,6.40170588 28.7038738,6.67141176 28.1493333,6.67141176 C27.5950874,6.67141176 27.2087055,6.41641176 26.9533754,5.92847059 L30.2496958,4.56641176 L30.1404369,4.28994118 Z" id="Fill-22" fill="#000000" mask="url(#mask-2)"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,22 @@
<svg width="84px" height="14px" viewBox="0 0 84 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<polygon id="path-1" points="6.05538447e-21 0.198342857 6.05538447e-21 13.4639143 31.4560787 13.4639143 31.4560787 0.198342857 0 0.198342857"></polygon>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g>
<path d="M49.0568489,0.731203571 C48.5640191,0.731203571 48.3088915,1.06920357 48.1922745,1.45966786 L45.1030404,10.6580964 L42.0656362,1.48241786 C41.9257851,1.04691786 41.6219553,0.731203571 41.1300191,0.731203571 L41.0348489,0.731203571 C40.5697213,0.731203571 40.2886787,1.04691786 40.1492745,1.48241786 L37.0864021,10.6580964 L34.0449766,1.50748929 C33.9055723,1.04738214 33.6008489,0.731667857 33.1325936,0.731667857 C32.5964234,0.731667857 32.2224447,1.16856071 32.2224447,1.62913214 C32.2224447,1.79906071 32.2921468,1.99313214 32.3390617,2.13984643 L36.0087,12.7589893 C36.1972532,13.3152036 36.5698915,13.606775 37.0126787,13.606775 L37.0618277,13.606775 C37.5282957,13.606775 37.879934,13.3152036 38.0439128,12.7589893 L41.0839979,3.73513214 L44.0981681,12.7589893 C44.2630404,13.3152036 44.6146787,13.606775 45.0824872,13.606775 L45.1526362,13.606775 C45.5739766,13.606775 45.9466149,13.3152036 46.1351681,12.7589893 L49.828934,2.11523929 C49.8745085,1.96759643 49.9455511,1.77398929 49.9455511,1.604525 C49.9455511,1.14209643 49.5706787,0.731203571 49.0568489,0.731203571" id="Fill-1" fill="#000000"></path>
<path d="M68.7321511,0.7319 C67.4252362,0.7319 65.4530234,1.71943571 64.5638745,3.81243571 L64.5638745,1.65768571 C64.5638745,1.12097143 64.1671085,0.707292857 63.6497043,0.707292857 C63.1586617,0.707292857 62.7610021,1.14511429 62.7610021,1.65768571 L62.7618957,12.6412929 C62.7618957,13.1738286 63.1595553,13.5898286 63.6756191,13.5898286 C64.1903426,13.5898286 64.5647681,13.1524714 64.5647681,12.6412929 L64.5647681,8.37357857 C64.5647681,4.74657857 66.482917,2.92007857 68.8259809,2.62850714 C69.2987043,2.55515 69.6244277,2.19207857 69.6244277,1.67997143 C69.6244277,1.14511429 69.2732362,0.7319 68.7321511,0.7319" id="Fill-3" fill="#000000"></path>
<path d="M71.2812383,6.50533929 C71.508217,4.07108929 73.0684723,2.26594643 75.1336213,2.26594643 C77.4981319,2.26594643 78.7375787,4.23916071 78.9225574,6.50533929 L71.2812383,6.50533929 Z M75.1814298,0.698982143 C71.9000681,0.698982143 69.4895362,3.589625 69.4895362,7.17808929 L69.4895362,7.22776786 C69.4895362,11.0804107 72.1511745,13.7082679 75.4110894,13.7082679 C77.4293234,13.7082679 78.7617064,12.9584464 79.884983,11.8279107 C80.0708553,11.6607679 80.1624511,11.4434821 80.1624511,11.2275893 C80.1624511,10.7920893 79.8170681,10.430875 79.3823234,10.430875 C79.1745574,10.430875 79.0146,10.5269821 78.8765362,10.6463036 C78.0030255,11.4889821 76.9280043,12.091625 75.4584511,12.091625 C73.3441532,12.091625 71.5323447,10.5748036 71.2821319,7.87916071 L79.8621957,7.87916071 C80.2956,7.87916071 80.6892383,7.51655357 80.6892383,7.00908929 C80.6892383,3.70755357 78.6911106,0.698982143 75.1814298,0.698982143 L75.1814298,0.698982143 Z" id="Fill-5" fill="#000000"></path>
<path d="M58.8752872,8.83716786 C58.8752872,10.824775 57.0523085,12.2324893 54.8352447,12.2324893 C53.1985851,12.2324893 51.7991809,11.3104179 51.7991809,9.73370357 L51.7991809,9.68541786 C51.7991809,8.11009643 53.0618617,7.08959643 55.3240532,7.08959643 C56.7940532,7.08959643 57.9865851,7.357025 58.8752872,7.623525 L58.8752872,8.83716786 Z M55.4415638,0.733989286 C53.9014149,0.733989286 53.0046702,0.912275 51.8157128,1.448525 C51.4868617,1.59988214 51.3246702,1.83991786 51.3246702,2.22666786 C51.3246702,2.66263214 51.6995426,3.02756071 52.1204362,3.02756071 C52.2115851,3.02756071 52.3295426,3.00295357 52.4439255,2.95420357 C53.3335213,2.54238214 54.0408191,2.38173929 55.2552447,2.38173929 C57.517883,2.38173929 58.8525,3.548025 58.8525,5.80306071 L58.8525,6.24181071 C57.7761383,5.92423929 56.6796702,5.706025 55.1372872,5.706025 C52.0793298,5.706025 49.9775426,7.11513214 49.9775426,9.75923929 L49.9775426,9.80798929 C49.9775426,12.3801321 52.2446489,13.7130964 54.4880745,13.7149536 C56.6086277,13.7149536 58.0107128,12.6972393 58.8529468,11.5550964 L58.8529468,12.7515607 C58.8529468,13.236275 59.200117,13.6253464 59.7117128,13.6253464 C60.2049894,13.6253464 60.5785213,13.2358107 60.5785213,12.703275 L60.5785213,5.780775 C60.5785213,4.178525 60.1576277,2.96581071 59.3390745,2.11663214 C58.4535,1.19363214 57.1452447,0.733989286 55.4415638,0.733989286 L55.4415638,0.733989286 Z" id="Fill-7" fill="#000000"></path>
<g id="Group-11" transform="translate(0.000000, 0.265804)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-10"></g>
<path d="M27.1403553,0.198342857 C24.7861213,0.198342857 23.3116532,1.89112857 23.3116532,1.89112857 C22.5283979,0.835342857 21.4480149,0.200664286 19.6201213,0.200664286 C17.6908021,0.200664286 16.0027596,1.89112857 16.0027596,1.89112857 C15.2181638,0.835342857 13.8835468,0.200664286 12.7781426,0.200664286 C11.0686532,0.200664286 9.71080213,0.981592857 8.88286596,2.95016429 L6.43569574,8.94316429 L3.29686596,1.25366429 C2.90144043,0.35295 1.92427021,-0.0551571429 1.01144043,0.36595 C0.0977170213,0.78845 -0.238282979,1.84098571 0.174121277,2.74216429 L4.00639787,11.3969143 C4.60914255,12.7530929 5.24405745,13.4639143 6.43569574,13.4639143 C7.7091,13.4639143 8.26448298,12.68995 8.86633404,11.3969143 C8.86633404,11.3969143 12.2089085,3.83509286 12.2419723,3.75616429 C12.2759298,3.67584286 12.3836106,3.43162857 12.7236319,3.43395 C13.0109298,3.43580714 13.2531,3.67398571 13.2531,3.99480714 L13.2531,11.3894857 C13.2531,12.5293071 13.8612064,13.4639143 15.0318447,13.4639143 C16.2015894,13.4639143 16.8338234,12.5293071 16.8338234,11.3894857 L16.8338234,5.33798571 C16.8338234,4.17123571 17.6385255,3.41352143 18.7354404,3.41352143 C19.8323553,3.41352143 20.5624404,4.19816429 20.5624404,5.33798571 L20.5624404,11.3894857 C20.5624404,12.5293071 21.1727809,13.4639143 22.3411851,13.4639143 C23.510483,13.4639143 24.1462915,12.5293071 24.1462915,11.3894857 L24.1462915,5.33798571 C24.1462915,4.17123571 24.947866,3.41352143 26.0452277,3.41352143 C27.1403553,3.41352143 27.8731213,4.19816429 27.8731213,5.33798571 L27.8731213,11.3894857 C27.8731213,12.5293071 28.4830149,13.4639143 29.6527596,13.4639143 C30.8216106,13.4639143 31.4560787,12.5293071 31.4560787,11.3894857 L31.4560787,4.50273571 C31.4560787,1.97145 29.4972702,0.198342857 27.1403553,0.198342857" id="Fill-9" fill="#000000" mask="url(#mask-2)"></path>
</g>
<path d="M83.5352745,2.25875 C83.5352745,2.95285714 83.0093809,3.53275 82.3275511,3.53275 C81.6372319,3.53275 81.1175936,2.96167857 81.1175936,2.26710714 L81.1175936,2.25875 C81.1175936,1.56835714 81.6434872,0.987071429 82.3275511,0.987071429 C83.0178702,0.987071429 83.5352745,1.55814286 83.5352745,2.25457143 L83.5352745,2.25875 Z M82.3275511,0.69875 C81.4964872,0.69875 80.8352106,1.41189286 80.8352106,2.25875 L80.8352106,2.26896429 C80.8352106,3.11814286 81.4844234,3.82153571 82.3275511,3.82153571 C83.163083,3.82153571 83.8225723,3.10839286 83.8225723,2.25875 L83.8225723,2.25225 C83.8225723,1.40446429 83.1702319,0.69875 82.3275511,0.69875 L82.3275511,0.69875 Z" id="Fill-12" fill="#000000"></path>
<path d="M82.6377702,1.99642857 C82.6377702,2.12457143 82.5528766,2.20907143 82.3973872,2.20907143 L82.3973872,2.20814286 L82.0738979,2.20814286 L82.0738979,1.77589286 L82.3915787,1.77589286 C82.5461745,1.77589286 82.6377702,1.85157143 82.6377702,1.99132143 L82.6377702,1.99642857 Z M82.4152596,1.47875 L81.9170681,1.47875 C81.8272596,1.47875 81.7557702,1.55210714 81.7557702,1.64496429 L81.7566638,1.64496429 L81.7566638,2.82889286 C81.7566638,2.92082143 81.8277064,2.99417857 81.9175149,2.99417857 C82.0068766,2.99417857 82.0752383,2.92175 82.0752383,2.82889286 L82.0752383,2.50203571 L82.3299191,2.50203571 L82.6395574,2.90921429 C82.6770894,2.95703571 82.7248979,2.99464286 82.7959404,2.99464286 C82.8718979,2.99464286 82.9465149,2.93428571 82.9465149,2.84235714 C82.9465149,2.79128571 82.9264085,2.75739286 82.8951319,2.71560714 L82.6753021,2.43703571 C82.8491106,2.36089286 82.9639404,2.2165 82.9639404,1.97971429 L82.9639404,1.97507143 C82.9639404,1.83578571 82.9192596,1.71553571 82.8370468,1.63242857 C82.7472383,1.534 82.6029191,1.47875 82.4152596,1.47875 L82.4152596,1.47875 Z" id="Fill-14" fill="#000000"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 779 B

View File

@ -1,30 +0,0 @@
<svg width="110px" height="42px" viewBox="423 368 183 70" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<desc>HashiCorp Packer</desc>
<defs>
<polygon id="path-1" points="22.6878 62 0 62 0 0.5562 22.6878 0.5562 22.6878 62"></polygon>
<polygon id="path-3" points="33.7967 0 0.2587 0 0.2587 55.0389996 33.7967 55.0389996 33.7967 1.42108547e-14"></polygon>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(423.000000, 368.000000)">
<path d="M72.5193,24.7828 L66.4223,24.7828 L66.4223,35.7278 L72.5193,35.7278 C75.9273,35.7278 76.9363,34.4798 76.9363,31.8398 L76.9363,28.5758 C76.9363,25.9348 75.8323,24.7828 72.5193,24.7828 L72.5193,24.7828 Z M60.3743,19.4548 L72.8553,19.4548 C80.2483,19.4548 82.9843,22.4788 82.9843,28.0958 L82.9843,32.4638 C82.9843,38.0328 80.0083,41.0568 72.5673,41.0568 L66.4223,41.0568 L66.4223,51.4258 L60.3743,51.4258 L60.3743,19.4548 Z" id="Fill-1" fill="#FFFFFF"></path>
<path d="M97.575,42.5928 L93.255,42.5928 C91.335,42.5928 90.806,43.1208 90.806,44.8978 C90.806,46.5298 91.335,47.2488 93.159,47.2488 C94.887,47.2488 96.471,46.6738 97.575,46.0498 L97.575,42.5928 Z M103.431,51.4258 L98.632,51.4258 L98.199,49.8418 C96.087,51.2338 93.591,51.9058 91.239,51.9058 C86.967,51.9058 85.142,48.9778 85.142,44.9458 C85.142,40.1928 87.207,38.3678 91.959,38.3678 L97.575,38.3678 L97.575,35.9208 C97.575,33.3278 96.855,32.4158 93.111,32.4158 C90.999,32.4158 88.694,32.7038 86.631,33.1348 L85.91,28.6718 C88.118,27.9998 91.335,27.5668 93.927,27.5668 C101.271,27.5668 103.431,30.1598 103.431,36.0158 L103.431,51.4258 Z" id="Fill-3" fill="#FFFFFF"></path>
<path d="M106.9324,42.9288 L106.9324,36.5448 C106.9324,30.2558 109.6684,27.5668 117.0134,27.5668 C118.6464,27.5668 120.9974,27.8548 122.7264,28.4308 L122.0064,33.2318 C120.4214,32.7998 118.3104,32.6078 117.1584,32.6078 C113.7974,32.6078 112.7894,33.6158 112.7894,36.4958 L112.7894,42.9778 C112.7894,45.8578 113.7974,46.8658 117.1584,46.8658 C118.6464,46.8658 120.3264,46.6738 122.0064,46.2418 L122.7264,51.0418 C121.1904,51.5698 118.9344,51.9068 117.0134,51.9068 C109.6684,51.9068 106.9324,49.2178 106.9324,42.9288" id="Fill-5" fill="#FFFFFF"></path>
<path d="M146.2947,28.0474 L139.4297,39.6174 L146.5827,51.4254 L140.1497,51.4254 L133.0937,39.6174 L139.7657,28.0474 L146.2947,28.0474 Z M126.4207,51.4254 L126.4207,18.4944 L132.2767,17.6784 L132.2767,51.4254 L126.4207,51.4254 Z" id="Fill-7" fill="#FFFFFF"></path>
<path d="M153.9256,37.2647 L161.3656,37.2647 L161.3656,36.1117 C161.3656,33.9037 160.6946,32.3677 157.8136,32.3677 C154.9336,32.3677 153.9256,33.9037 153.9256,36.1117 L153.9256,37.2647 Z M158.4856,47.1057 C160.7416,47.1057 163.0936,46.7697 165.6386,46.0007 L166.5506,50.4177 C163.9096,51.4257 160.7416,51.9067 157.9576,51.9067 C150.6126,51.9067 148.0696,48.4967 148.0696,42.8807 L148.0696,36.6887 C148.0696,31.7437 150.2776,27.5667 157.7656,27.5667 C165.2536,27.5667 166.9346,31.9357 166.9346,36.9767 L166.9346,41.9687 L153.9256,41.9687 L153.9256,43.1687 C153.9256,46.0007 154.9336,47.1057 158.4856,47.1057 L158.4856,47.1057 Z" id="Fill-9" fill="#FFFFFF"></path>
<path d="M182.5799,32.9439 C180.3239,33.9519 178.4999,35.0079 176.3879,36.3519 L176.3879,51.4259 L170.5309,51.4259 L170.5309,28.0479 L175.4759,28.0479 L175.8589,30.6389 C177.1549,29.7759 179.9399,28.1429 182.0039,27.5669 L182.5799,32.9439 Z" id="Fill-11" fill="#FFFFFF"></path>
<g id="Group-15" transform="translate(0.000000, 8.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-14"></g>
<polygon id="Fill-13" fill="#71A798" mask="url(#mask-2)" points="-0.0002 0.5562 22.6878 13.6642 22.6878 62.0002 -0.0002 48.8912"></polygon>
</g>
<g id="Group-18" transform="translate(9.000000, 0.000000)">
<mask id="mask-4" fill="white">
<use xlink:href="#path-3"></use>
</mask>
<g id="Clip-17"></g>
<path d="M24.9187,14.2047 L0.2587,-0.0003 L0.2587,9.8647 L17.0267,19.5477 L17.0267,49.1407 L24.9187,53.6737 C29.8017,56.4927 33.7967,54.8037 33.7967,49.9207 L33.7967,28.2077 C33.7967,23.3247 29.8017,17.0237 24.9187,14.2047" id="Fill-16" fill="#567D72" mask="url(#mask-4)"></path>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="423 368 142 54">
<g fill="none" fill-rule="evenodd">
<path class="p-front" d="M423.046 374.78l17.42 9.96v36.717l-17.42-9.958"/>
<path class="p-back" d="M449.09 379.072l-18.935-10.79v7.493l12.876 7.356v22.485l6.06 3.443c3.75 2.14 6.82.858 6.82-2.85V389.71c0-3.71-3.07-8.497-6.82-10.638"/>
<path class="text" d="M479.05 387.476h-4.55v8.194h4.55c2.542 0 3.294-.935 3.294-2.912v-2.443c0-1.977-.823-2.84-3.295-2.84zm-9.063-3.99h9.312c5.513 0 7.554 2.264 7.554 6.47v3.27c0 4.17-2.22 6.432-7.772 6.432H474.5v7.764h-4.513v-23.935zm28.12 17.324h-3.225c-1.433 0-1.827.394-1.827 1.725 0 1.22.394 1.76 1.755 1.76 1.29 0 2.472-.43 3.296-.898v-2.588zm4.37 6.612h-3.583l-.323-1.186c-1.572 1.042-3.433 1.546-5.19 1.546-3.19 0-4.55-2.193-4.55-5.212 0-3.557 1.54-4.923 5.088-4.923h4.19v-1.833c0-1.94-.537-2.624-3.33-2.624-1.576 0-3.295.216-4.835.54l-.536-3.343c1.647-.503 4.046-.827 5.98-.827 5.48 0 7.092 1.94 7.092 6.326v11.536zm3.15-6.362v-4.78c0-4.707 2.04-6.72 7.524-6.72 1.22 0 2.976.216 4.265.647l-.537 3.594c-1.182-.32-2.757-.463-3.618-.463-2.508 0-3.26.755-3.26 2.91v4.853c0 2.155.752 2.91 3.26 2.91 1.11 0 2.363-.144 3.617-.467l.537 3.595c-1.146.394-2.83.646-4.26.646-5.483 0-7.524-2.01-7.524-6.72m29.905-11.143l-5.12 8.66 5.335 8.845h-4.8l-5.264-8.842 4.98-8.66h4.87zm-14.827 17.505V382.77l4.37-.61v25.264h-4.37zm20.702-10.603h5.553v-.86c0-1.655-.5-2.805-2.65-2.805s-2.902 1.15-2.902 2.804v.86zm3.403 7.37c1.683 0 3.44-.254 5.337-.83l.68 3.308c-1.97.755-4.334 1.114-6.41 1.114-5.48 0-7.378-2.55-7.378-6.754v-4.636c0-3.703 1.647-6.83 7.235-6.83 5.586 0 6.84 3.27 6.84 7.044v3.738h-9.706v.9c0 2.118.756 2.946 3.406 2.946zm18.52-10.604c-1.684.755-3.045 1.546-4.62 2.552v11.285h-4.37V389.92h3.69l.284 1.94c.968-.646 3.045-1.868 4.585-2.3l.43 4.025z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 404 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -1,36 +0,0 @@
(function(){
// Quick and dirty IE detection
var isIE = (function(){
if (window.navigator.userAgent.match('Trident')) {
return true;
} else {
return false;
}
})();
// isIE = true;
var Init = {
start: function(){
var id = document.body.id.toLowerCase();
if (this.Pages[id]) {
this.Pages[id]();
}
//always init sidebar
Init.initializeSidebar();
},
initializeSidebar: function(){
new Sidebar();
},
Pages: {}
};
Init.start();
})();

View File

@ -1,50 +0,0 @@
(function(){
Sidebar = Base.extend({
$body: null,
$overlay: null,
$sidebar: null,
$sidebarHeader: null,
$sidebarImg: null,
$toggleButton: null,
constructor: function(){
this.$body = $('body');
this.$overlay = $('.sidebar-overlay');
this.$sidebar = $('#sidebar');
this.$sidebarHeader = $('#sidebar .sidebar-header');
this.$toggleButton = $('.navbar-toggle');
this.sidebarImg = this.$sidebarHeader.css('background-image');
this.addEventListeners();
},
addEventListeners: function(){
var _this = this;
_this.$toggleButton.on('click', function() {
_this.$sidebar.toggleClass('open');
if ((_this.$sidebar.hasClass('sidebar-fixed-left') || _this.$sidebar.hasClass('sidebar-fixed-right')) && _this.$sidebar.hasClass('open')) {
_this.$overlay.addClass('active');
_this.$body.css('overflow', 'hidden');
} else {
_this.$overlay.removeClass('active');
_this.$body.css('overflow', 'auto');
}
return false;
});
_this.$overlay.on('click', function() {
$(this).removeClass('active');
_this.$body.css('overflow', 'auto');
_this.$sidebar.removeClass('open');
});
}
});
window.Sidebar = Sidebar;
})();

View File

@ -1,10 +1,5 @@
//= require jquery
//= require bootstrap
//= require lib/Base
//= require turbolinks
//= require hashicorp/mega-nav
//= require docs
//= require app/Sidebar
////= require app/Init
//= require hashicorp/sidebar

View File

@ -1,46 +0,0 @@
(function(){
var Init = {
start: function(){
var classname = this.hasClass(document.body, 'page-sub');
if (classname) {
this.addEventListeners();
}
},
hasClass: function (elem, className) {
return new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');
},
addEventListeners: function(){
var _this = this;
//console.log(document.querySelectorAll('.navbar-static-top')[0]);
window.addEventListener('resize', _this.resizeImage, false);
this.resizeImage();
},
resizeImage: function(){
var header = document.getElementById('header'),
footer = document.getElementById('footer'),
main = document.getElementById('main-content'),
vp = window.innerHeight,
bodyHeight = document.body.clientHeight,
hHeight = header.clientHeight,
fHeight = footer.clientHeight,
withMinHeight = hHeight + fHeight + 830;
if(withMinHeight < vp && bodyHeight < vp){
var newHeight = (vp - (hHeight+fHeight)) + 'px';
main.style.height = newHeight;
}
}
};
Init.start();
})();

View File

@ -1,145 +0,0 @@
/*
Based on Base.js 1.1a (c) 2006-2010, Dean Edwards
Updated to pass JSHint and converted into a module by Kenneth Powers
License: http://www.opensource.org/licenses/mit-license.php
*/
/*global define:true module:true*/
/*jshint eqeqeq:true*/
(function (name, global, definition) {
if (typeof module !== 'undefined') {
module.exports = definition();
} else if (typeof define !== 'undefined' && typeof define.amd === 'object') {
define(definition);
} else {
global[name] = definition();
}
})('Base', this, function () {
// Base Object
var Base = function () {};
// Implementation
Base.extend = function (_instance, _static) { // subclass
var extend = Base.prototype.extend;
// build the prototype
Base._prototyping = true;
var proto = new this();
extend.call(proto, _instance);
proto.base = function () {
// call this method from any other method to invoke that method's ancestor
};
delete Base._prototyping;
// create the wrapper for the constructor function
//var constructor = proto.constructor.valueOf(); //-dean
var constructor = proto.constructor;
var klass = proto.constructor = function () {
if (!Base._prototyping) {
if (this._constructing || this.constructor === klass) { // instantiation
this._constructing = true;
constructor.apply(this, arguments);
delete this._constructing;
} else if (arguments[0] !== null) { // casting
return (arguments[0].extend || extend).call(arguments[0], proto);
}
}
};
// build the class interface
klass.ancestor = this;
klass.extend = this.extend;
klass.forEach = this.forEach;
klass.implement = this.implement;
klass.prototype = proto;
klass.toString = this.toString;
klass.valueOf = function (type) {
return (type === 'object') ? klass : constructor.valueOf();
};
extend.call(klass, _static);
// class initialization
if (typeof klass.init === 'function') klass.init();
return klass;
};
Base.prototype = {
extend: function (source, value) {
if (arguments.length > 1) { // extending with a name/value pair
var ancestor = this[source];
if (ancestor && (typeof value === 'function') && // overriding a method?
// the valueOf() comparison is to avoid circular references
(!ancestor.valueOf || ancestor.valueOf() !== value.valueOf()) && /\bbase\b/.test(value)) {
// get the underlying method
var method = value.valueOf();
// override
value = function () {
var previous = this.base || Base.prototype.base;
this.base = ancestor;
var returnValue = method.apply(this, arguments);
this.base = previous;
return returnValue;
};
// point to the underlying method
value.valueOf = function (type) {
return (type === 'object') ? value : method;
};
value.toString = Base.toString;
}
this[source] = value;
} else if (source) { // extending with an object literal
var extend = Base.prototype.extend;
// if this object has a customized extend method then use it
if (!Base._prototyping && typeof this !== 'function') {
extend = this.extend || extend;
}
var proto = {
toSource: null
};
// do the "toString" and other methods manually
var hidden = ['constructor', 'toString', 'valueOf'];
// if we are prototyping then include the constructor
for (var i = Base._prototyping ? 0 : 1; i < hidden.length; i++) {
var h = hidden[i];
if (source[h] !== proto[h])
extend.call(this, h, source[h]);
}
// copy each of the source object's properties to this object
for (var key in source) {
if (!proto[key]) extend.call(this, key, source[key]);
}
}
return this;
}
};
// initialize
Base = Base.extend({
constructor: function () {
this.extend(arguments[0]);
}
}, {
ancestor: Object,
version: '1.1',
forEach: function (object, block, context) {
for (var key in object) {
if (this.prototype[key] === undefined) {
block.call(context, object[key], key, object);
}
}
},
implement: function () {
for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] === 'function') {
// if it's a function, call it
arguments[i](this.prototype);
} else {
// add the interface using the extend method
this.prototype.extend(arguments[i]);
}
}
return this;
},
toString: function () {
return String(this.valueOf());
}
});
// Return Base implementation
return Base;
});

View File

@ -1,52 +1,37 @@
@mixin button {
font-family: $font-family-open-sans;
height: $button-height;
line-height: $button-height;
background-color: transparent;
border-width: 2px;
border-style: solid;
display: block;
padding: 0 30px;
.button {
background: $button-background;
border: 1px solid $button-font-color;
box-shadow: 3px 4px 0 rgba(0,0,0,0.1);
color: $button-font-color;
display: inline-block;
font-family: $button-font-family;
font-size: $button-font-size;
font-weight: $button-font-weight;
letter-spacing: 1px;
margin-bottom: 4px;
padding: 10px 30px;
text-transform: uppercase;
letter-spacing: 3px;
@include rounded(5px);
text-decoration: none;
&.spaced {
margin-right: 20px;
&:hover,
&:active,
&:focus {
text-decoration: none;
}
&:hover {
background: $button-font-color;
border: 1px solid $button-font-color;
color: $button-background;
}
&.primary {
color: $green;
border-color: $green;
background: $button-primary-background;
border: 1px solid darken($button-primary-background, 5%);
color: $button-primary-font-color;
&:hover {
background-color: transparentize($green, .7);
}
&:active {
background-color: transparentize($green, .5);
}
}
&.secondary {
color: $black;
border-color: $black;
&:hover {
background-color: transparentize($black, .9);
}
&:active {
background-color: transparentize($black, .7);
}
}
&.inline {
margin: auto $baseline;
@include respond-to(mobile) {
display: block;
width: 100%;
margin: $baseline 0;
background: lighten($button-primary-background, 5%);
}
}
}

View File

@ -1,43 +0,0 @@
#main-content{
display: flex;
flex: 1;
#sidebar-docs,
.docs-body{
}
}
@media (max-width: 992px) {
#main-content{
#sidebar-docs{
max-width: 280px;
}
}
}
@media (max-width: 768px) {
#main-content{
flex-direction: column;
#sidebar-docs,
.docs-body{
width: 100%;
max-width: none;
}
#sidebar-docs{
li {
&:last-child{
border-bottom: none;
}
> *{
margin-left: 0;
}
}
}
.docs-content{
padding: 40px 0 150px;
}
}
}

View File

@ -0,0 +1,22 @@
#inner {
.people {
margin-top: 30px;
.person {
&:after {
display: block;
clear: both;
content: ' ';
}
img {
width: 125px;
margin: auto auto;
}
.bio {
padding-left: 150px;
}
}
}
}

View File

@ -1,370 +0,0 @@
header .header {
height: 200px;
background: #000000;
h1 {
margin-bottom: -8px;
margin-top: 60px;
}
span {
font-size: 20px;
}
}
.hero {
height: $hero-height + 100px;
background: #000000 image-url('hero_image.jpg') no-repeat;
background-position: 35px -40px;
background-size: 100%;
@media (min-width: 1200px) {
h1 {
margin-top: 100px;
}
}
@media (max-width: $screen-md-max) {
height: $hero-height;
h1 {
font-size: 36px;
padding-top: 1em;
padding-bottom: 1em;
}
}
@media (max-width: $screen-sm-max) {
height: auto;
background: none;
h1 {
margin: 0;
padding-top: 1em;
margin-bottom: 1em;
}
}
}
.belt {
&.download {
background-color: $white;
@extend .padded-sm;
}
.download-container {
background: image-url('down_arrow.png') no-repeat top left;
display: inline-block;
min-height: 73px;
margin: 0 auto;
padding-left: 100px;
@media (max-width: $screen-sm) {
background: none;
min-height: 50px;
padding: 0;
}
}
.download-row {
text-align: center;
.small {
text-align: left;
}
}
h2 {
font-size: 44px;
color: #7bc6b1;
margin: 0px;
padding: 0px;
padding-top: 15px;
padding-bottom: 3px;
line-height: 1.0;
white-space: nowrap;
@media (max-width: $screen-sm) {
font-size: 30px;
}
&:hover {
color: $dark-background;
}
}
span {
color: $gray-dark;
}
}
.downloads {
margin-top: 20px;
.description {
margin-bottom: 20px;
}
.download {
border-bottom: 1px solid #b2b2b2;
padding-bottom: 15px;
margin-bottom: 15px;
.details {
padding-left: 95px;
li {
display: inline-block;
&:after {
content: " | ";
}
&:last-child:after {
content: "";
}
}
a {
font-size: 22px;
color: darken($green, 15%);
&:hover {
color: darken($green, 30%);
}
&:active {
color: darken($green, 50%);
}
}
}
.icon {
img {
width: 75px;
}
}
.os-name {
font-size: 40px;
margin-bottom: -3px;
}
}
.poweredby {
margin-top: 20px;
margin-bottom: 20px;
img {
display: block;
margin: 0 auto;
width: 122px;
}
}
}
.marketting {
p {
padding-left: 10px;
padding-right: 10px;
text-align: justify;
}
}
.docs-wrapper {
.docs-body {
max-width: 960px;
@extend .white-background;
.docs-content {
flex-direction: column;
padding: $docs-top-margin 120px 150px;
display: block;
code {
background-color: #000;
border: 0;
color: #b1d631;
font-size: 14px;
font-weight: normal;
font-family: $font-family-mono;
text-shadow: 0 0 0;
}
a {
color: darken($green, 15%);
&:hover {
color: darken($green, 30%);
}
&:active {
color: darken($green, 50%);
}
}
ul, ol {
margin-top: $baseline;
margin-left: 20px;
margin-right: 20px;
li {
font-size: 17px;
line-height: (30/17) !important;
margin-bottom: $baseline;
pre {
margin-left: -155px;
margin-right: -155px;
padding-left: 155px;
padding-right: 155px;
}
}
}
ul {
list-style-type: circle;
}
ol {
list-style-type: decimal;
}
div.alert {
font-size: 17px;
line-height: 1.5;
margin-left: -135px;
margin-right: -135px;
padding-top: 40px;
padding-bottom: 40px;
padding-left: 80px;
padding-right: 80px;
border-radius: 0;
}
pre {
border: 0;
font-size: 14px;
margin-left: -135px;
margin-right: -135px;
padding-top: 40px;
padding-bottom: 40px;
padding-left: 135px;
padding-right: 135px;
border-radius: 0;
}
}
section {
margin-top: $docs-top-margin;
}
h1 {
line-height: (25/20);
font-weight: 600;
}
h2 {
margin-top: $baseline * 2;
text-transform: capitalize;
font-weight: 600;
}
h3 {
margin-top: $baseline * 2;
text-transform: capitalize;
font-size: 24px;
font-weight: 600;
}
}
}
.pagination {
position: absolute;
width: 100%;
bottom: 1px;
$border: 1px solid $gray-mid;
height: $nav-height;
border-top: $border;
font-size: 20px;
margin: 0 -15px 0 -15px;
display: block;
h4 {
display: inline-block;
margin-top: ($baseline * 1.7);
margin-left: $baseline;
@include respond-to(mobile) {
margin-top: 10px;
}
}
span {
@include respond-to(mobile) {
display: block;
}
}
.previous-section,
.next-section {
height: $nav-height;
display: block;
&:hover {
background-color: transparentize($gray-light, .7);
}
}
.previous-section {
width: $nav-height;
border-right: $border;
float: left;
background: $white image-url('arrow-left.png') no-repeat center center;
@include respond-to(mobile) {
width: 50%;
background-position: left center;
}
}
.next-section {
background: $white image-url('arrow-right.png') no-repeat center right;
}
}
.people {
margin-top: 30px;
.person {
margin-bottom: 30px;
img {
width: 125px;
}
h3 {
text-transform: none;
}
.bio {
padding-left: 150px;
}
}
}
@media (max-width:768px){
.docs-wrapper {
.docs-body {
.docs-content {
div.alert {
margin-left: -15px;
margin-right: -15px;
}
pre {
margin-left: -15px;
margin-right: -15px;
}
}
}
}
}

View File

@ -0,0 +1,75 @@
#docs-sidebar {
margin-bottom: 30px;
margin-top: 50px;
ul.nav.docs-sidenav {
display: block;
padding-bottom: 15px;
li {
a {
color: $sidebar-link-color;
font-size: $sidebar-font-size;
padding: 10px 0 10px 15px;
&:before {
color: $sidebar-link-color-active;
content: '\203A';
font-size: $font-size;
left: 0;
line-height: 100%;
opacity: 0.4;
position: absolute;
height: 100%;
width: 8px
}
&:focus,
&:hover {
background-color: transparent;
color: $sidebar-link-color-hover;
&:before {
opacity: 1;
}
}
}
// For forcing sub-navs to appear - in the long term, this should not
// be a thing anymore...
> ul.nav-visible {
display: block;
}
}
li.active {
> a {
color: $sidebar-link-color-active;
&:before {
opacity: 1;
}
}
// Open nested navigations
> ul.nav {
display: block;
}
}
// subnav
ul.nav {
display: none;
margin: 10px;
li {
margin-left: 10px;
a {
padding: 6px 15px;
}
}
}
}
}

View File

@ -0,0 +1,60 @@
body.layout-downloads {
#inner {
.downloads {
margin-top: 20px;
.description {
margin-bottom: 20px;
}
.download {
align-items: center;
border-bottom: 1px solid #b2b2b2;
display: flex;
padding: 15px;
.details {
padding-left: 20px;
h2 {
margin-top: 4px;
border: none;
}
ul {
padding-left: 0px;
margin: -8px 0 0 0;
}
li {
display: inline-block;
&:after {
content: " | ";
}
&:last-child:after {
content: "";
}
}
}
.icon {
svg {
width: 75px;
}
}
.os-name {
font-size: 40px;
margin-bottom: -3px;
}
}
.poweredby {
margin-top: 20px;
text-align: center;
}
}
}
}

View File

@ -1,99 +1,22 @@
#footer{
background-color: $black;
padding: 20px 0;
#footer {
padding-top: 50px;
&.white{
background-color: $black;
.footer-links{
li > a {
@include project-footer-a-subpage-style();
}
}
}
ul.footer-links {
li {
a {
color: $footer-link-color;
font-size: $footer-font-size;
font-family: $font-family-open-sans;
text-decoration: none;
.footer-links{
li > a {
@include project-footer-a-style();
}
}
.hashicorp-project{
margin-top: 24px;
&:hover{
svg{
.svg-bg-line{
opacity: .4;
&:hover, &:focus, &:active {
background-color: transparent;
color: $footer-link-color-hover;
outline: 0;
}
}
}
}
.pull-right{
padding-right: 15px;
}
}
body{
&.page-Community{
.edit-page-link{
position: absolute;
top: -70px;
right: 30px;
}
}
}
.edit-page-link{
position: absolute;
top: -150px;
right: 30px;;
a{
text-transform: uppercase;
color: $black;
font-size: 13px;
}
}
@media (min-width: 1500px) {
.edit-page-link{
top: -56px;
}
}
@media (max-width: 768px) {
#footer{
padding: 20px 0 80px;
text-align: center;
.footer-hashi{
display: block;
float: right !important;
.hashicorp-project{
margin-left: -30px;
}
}
ul{
display: block;
li{
display: block;
float: left;
}
&.external-links{
li{
a{
padding-left: 0 !important;
margin-left: -14px;
}
svg{
position: relative;
left: 0;
top: 2px;
margin-top: 0;
margin-right: 4px;
}
@media (max-width: 992px) {
text-align: center;
}
}
}

View File

@ -0,0 +1,35 @@
html {
height: 100%;
min-height: 100%;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
}
body {
-webkit-font-smoothing: antialiased;
color: $body-font-color;
background-color: $white;
font-size: $font-size;
font-family: $font-family-open-sans;
font-weight: $font-weight-reg;
height: 100%;
min-height: 100%;
}
h1, h2, h3, h4, h5 {
font-family: $font-family-klavika;
-webkit-font-smoothing: antialiased;
}
h1 {
margin-bottom: 24px;
}
// Avoid FOUT
.wf-loading {
visibility: hidden;
}
.wf-active, .wf-inactive {
visibility: visible;
}

View File

@ -1,81 +1,78 @@
//
// Header
// - Project Specific
// - edits should be made here
// --------------------------------------------------
#header {
flex-direction: row;
background-color: $black;
.navbar-brand {
.logo{
width: 110px;
height: 42px;
line-height: 70px;
margin-top: 15px;
background: image-url('logo-header.svg') 0 0 no-repeat;
font-size: 0;
background: $header-background-color;
&:hover{
opacity: .6;
}
.navbar-toggle {
height: $header-height;
margin: 0;
padding-right: 15px;
border-radius: 0;
.icon-bar {
border: 1px solid $white;
border-radius: 0;
}
}
.by-hashicorp{
&:hover{
svg{
.svg-bg-line{
opacity: .4;
}
.navbar-brand {
display: block;
margin: 0;
padding: 0;
a {
display: flex;
align-items: center;
height: $header-height;
line-height: $header-height;
svg.logo {
transition: opacity 0.15s ease-in-out;
@extend svg.logo.white;
&:hover, &:focus, &:active {
opacity: 0.6;
outline: 0;
text-decoration: none;
}
}
}
}
.buttons{
margin-top: 2px; //baseline everything
ul.nav {
li {
a {
color: $header-link-color;
font-size: $header-font-size;
font-family: $font-family-open-sans;
font-weight: $font-weight-bold;
height: $header-height;
line-height: $header-height;
padding: 0 10px;
margin: 0;
text-decoration: none;
.navigation-links{
float: right;
}
}
&:hover, &:focus, &:active {
background-color: transparent;
color: $header-link-color-hover;
outline: 0;
.main-links,
.external-links {
li > a {
@include project-a-style();
}
}
svg {
fill: $header-link-color-hover;
}
}
.main-links {
li > a {
color: $white;
&:hover{
color: $green;
svg {
fill: $header-link-color;
position: relative;
top: 2px;
width: 14px;
height: 14px;
margin-right: 3px;
}
}
}
}
}
@media (max-width: 768px) {
#header {
.navbar-brand {
.logo{
margin-left: 18px;
}
}
}
}
@media (max-width: 414px) {
#header {
.navbar-brand {
.logo{
width: 84px;
height: 32px;
background-size: contain;;
}
}
.buttons {
margin-top: 2px;
}
}

View File

@ -1,173 +0,0 @@
/* variables */
//color
$black: #000;
$white: #fff;
$red: #ff0000;
$green: #7bc6b1;
$orange: #f2826a;
$background: #f2eee5;
$dark-background: #333;
$gray-dark: #5c5c5c;
$gray-mid: #b2b2b2;
$gray-light: #e0e0e0;
$border-dark: #333;
// base measures
$baseline: 20px;
$base-font-size: 16px;
$base-line-height: 1.5;
$button-height: 60px;
.center {
margin: 0 auto;
}
.padded-lg {padding: ($baseline * 2) 0;}
.padded {padding: ($baseline * 2) 0;}
.padded-sm {padding: ($baseline) 0;}
// components
$nav-height: 100px;
$hero-height: 460px;
$docs-top-margin: 40px;
$sidebar-background-color: $dark-background;
$sidebar-width: 250px;
//typography
$font-family-open-sans: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
$font-family-klavika: 'klavika-web', 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
$font-family-mono: 'Inconsolata', 'Monaco', 'courier new', courier, monospace;
.open-sans { font-family: $font-family-open-sans;}
.klavika { font-family: $font-family-klavika; }
.mono { font-family: $font-family-mono; }
.text-center { text-align: center !important; }
.text-left { text-align: left !important; }
.text-right { text-align: right !important; }
.text-green { color: $green; }
.uppercase { text-transform: uppercase !important; }
//color
.dark-background {
background-color: #000;
color: $white;
a {
color: inherit;
&:hover {
color: $green;
}
&:active {
color: darken($green, 30%);
}
}
}
.white-background {
background-color: $white;
}
//elements
.divider {
background: image-url('divider.png') no-repeat center bottom;
height: 70px;
width: 70px;
background-size: 70px 70px;
display: table-cell;
text-align: center;
vertical-align: middle;
}
.packer {
color: $orange;
font-size: 20px;
a:hover, a:active, a:visited {
color: inherit;
}
}
// media queries
$break-sm: 480px;
$break-med: 768px;
$break-max: 1200px;
$break-lg: 980px;
@mixin respond-to($media) {
@if $media == mobile {
@media only screen and (max-width: $break-sm) { @content; }
}
@else if $media == tablet {
@media only screen and (max-width: $break-med - 1) { @content; }
}
@else if $media == desktop {
@media only screen and (min-width: $break-med) and (max-width: $break-lg - 1) { @content; }
}
@else if $media == desktop-lg {
@media only screen and (min-width: $break-max) { @content; }
}
}
/*
* example *
.profile-pic {
@include respond-to(mobile) { width: 100% ;}
@include respond-to(tablet) { width: 125px; }
}
*/
//////
/* utlities */
.d {
border-bottom: 1px solid $red;
border-top: 1px solid $red;
background-color: transparentize($red, .9);
}
.hyphenate {
-webkit-hyphens: auto;
-moz-hyphens: auto;
hyphens: auto;
}
.full-width {
margin-right: -20px;
margin-left: -20px;
}
.add-transition {
-webkit-transition: all .1s ease-in-out;
-moz-transition: all .1s ease-in-out;
-o-transition: all .1s ease-in-out;
transition: all .1s ease-in-out;
}
@mixin opacity($opacity) {
-khtml-opacity: $opacity;
-moz-opacity: $opacity;
opacity: $opacity;
}
@mixin transform-scale($value) {
-webkit-transform: scale($value);
-moz-transform: scale($value);
transform: scale($value);
}
@mixin rounded($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-khtml-border-radius: $radius;
border-radius: $radius;
}

View File

@ -0,0 +1,154 @@
// TODO: remove
$hero-height: 350px;
$baseline: 20px;
#page-home {
// Override the main header
#header {
background: $home-header-background-color;
.navbar-toggle {
.icon-bar {
border: 1px solid $home-header-link-color;
}
}
.navbar-brand {
a {
svg.logo {
@extend svg.logo.color;
}
}
}
ul.nav {
li {
a {
color: $home-header-link-color;
&:hover, &:focus, &:active {
background-color: transparent;
color: $home-header-link-color-hover;
svg {
fill: $home-header-link-color-hover;
}
}
svg {
fill: $home-header-link-color;
}
}
}
}
}
header {
.hero {
margin: 140px auto 160px auto;
text-align: center;
.button {
margin: 5px;
@media (max-width: 768px) {
display: block;
margin-top: 10px;
text-align: center;
}
}
svg {
max-width: 90%;
}
}
}
section {
background: $white;
padding: 100px 0;
}
section.marketing {
h2 {
font-family: $font-family-klavika;
font-size: 36px;
font-weight: $font-weight-bold;
line-height: 1.25;
letter-spacing: -0.02em;
margin: 20px 0 10px 0;
padding: 0;
}
p {
font-family: $font-family-open-sans;
font-size: 16px;
letter-spacing: 0.01em;
line-height: 1.8;
margin: 0 0 10px;
}
span.callout {
background: $black;
color: $white;
display: inline-block;
font-family: $font-family-klavika;
font-size: 18px;
font-weight: $font-weight-bold;
line-height: 1;
margin: 0;
padding: 5px;
letter-spacing: 0.05em;
text-transform: uppercase;
}
&.invert {
background: $packer-blue;
h2 {
color: $white;
}
p {
color: $white;
font-weight: $font-weight-bold;
}
}
&#automated {
img {
@media (min-width: 1024px) {
padding-right: 40px;
}
@media (max-width: 992px) {
padding-bottom: 40px;
}
}
}
&#integrations {
.integrations-list {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
margin-top: 30px;
@media (min-width: 1024px) {
padding-left: 40px;
}
.integration {
display: flex;
align-items: center;
justify-content: center;
border: 5px solid $packer-blue;
height: 100px;
width: 33.3%;
background-color: $white;
}
}
}
}
}

View File

@ -0,0 +1,89 @@
#inner {
p, li, .alert {
font-size: $font-size;
font-family: $font-family-open-sans;
font-weight: $font-weight-reg;
line-height: 1.84em;
margin: 0 0 $font-size;
-webkit-font-smoothing: antialiased;
}
.alert p:last-child {
margin-bottom: 0;
}
pre {
font-family: $font-family-monospace;
font-size: ($font-size - 3);
font-weight: normal;
padding: 20px;
margin: 0 0 $font-size;
// This will force the code to scroll horizontally on small screens
// instead of wrapping.
code {
overflow-wrap: normal;
white-space: pre;
}
}
a {
color: $body-link-color;
text-decoration: none;
&:hover {
text-decoration: underline;
}
code {
background: inherit;
color: $body-link-color;
}
}
img {
display: block;
margin: 25px auto;
max-width: 650px;
height: auto;
width: 90%;
}
h1,
h2,
h3,
h4 {
color: $body-font-color;
margin-top: 54px;
margin-bottom: $font-size;
line-height: 1.3;
}
h2 {
padding-bottom: 3px;
border-bottom: 1px solid $gray-light;
}
h1 > code,
h2 > code,
h3 > code,
h4 > code,
h5 > code
h6 > code,
li code,
table code,
p code,
tt,
.alert code {
font-family: $font-family-monospace;
font-size: 90%;
background-color: transparent;
color: inherit;
padding: 0;
}
table {
@extend .table;
@extend .table-striped;
}
}

View File

@ -1,62 +0,0 @@
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : portrait) {
#main-content {
display: flex;
flex-direction: row;
#sidebar-docs {
flex: 3;
h2 {
padding: 0;
}
ul {
padding: 0;
li {
padding: 10px 0;
}
}
}
.docs-body {
flex: 7;
h2 {
margin-top: 20px;
}
.docs-content {
padding: 0 0 80px;
div.alert {
padding: 20px 30px;
}
code {
font-size: 12px;
}
pre {
margin: 0 -15px;
padding: 15px;
}
ul {
margin-top: 0;
margin-left: 30px;
margin-bottom: 10px;
}
}
}
}
#footer {
padding: 20px 0 30px;
.edit-page-link {
top: -70px;
}
}
p {
line-height: 1.5;
}
}

View File

@ -0,0 +1,39 @@
svg.logo {
&.color {
opacity: 1.0;
path.text {
fill: $black;
opacity: 1.0;
}
path.p-front {
fill: #4DA7DD;
opacity: 1.0;
}
path.p-back {
fill: #3192D0;
opacity: 1.0;
}
}
// The default logo class is the colored version
@extend .color;
&.white {
opacity: 1.0;
path.text {
fill: $white;
}
path.p-front, path.p-back {
fill: $white;
}
path.p-back {
opacity: 0.7;
}
}
}

View File

@ -1,23 +0,0 @@
form, input, textarea, button {
padding: 0;
margin: 0;
vertical-align: middle;
border: 0;
box-shadow: none;
-moz-border-radius: 0;
-webkit-border-radius: 0;
-khtml-border-radius: 0;
border-radius: 0;
background-color: transparent;
font-family: $font-family-mono;
font-size: $base-font-size;
line-height: 1.0;
color: inherit;
&:focus {
line-height: 1.0;
box-shadow: none !important;
outline: none;
vertical-align: middle;
}
}

View File

@ -1,39 +0,0 @@
#sidebar-docs {
min-height: 100%;
max-width: 320px;
$border: 1px solid $gray-dark;
font-size: 16px;
font-family: $font-family-mono;
color: $gray-light;
background-color: $sidebar-background-color;
h2 {
color: $green;
text-transform: uppercase;
padding: $docs-top-margin 20px 0;
}
h4 {
color: $white;
text-transform: uppercase;
margin-bottom: -10px;
}
ul {
@extend .padded-sm;
li {
border-bottom: $border;
padding: 15px 0;
text-align: left;
}
li > * {
padding: auto 20px;
margin-left: 20px;
display: block;
width: 100%;
}
}
}

View File

@ -1,173 +0,0 @@
* {
margin: 0;
}
html,
body {
margin: 0;
display: flex;
min-height: 100vh;
flex-direction: column;
}
html {
-webkit-tap-highlight-color: transparent;
-webkit-font-smoothing: antialiased;
}
body {
background-color: $background;
font-family: $font-family-open-sans;
font-size: $base-font-size;
font-weight: 400;
line-height: $base-line-height;
}
.home {
h1, h2, h3, h4, h5, h6 {
font-family: $font-family-klavika;
letter-spacing: 1px;
font-weight: normal;
}
}
h1 {
font-size: 42px;
line-height: (80/70);
@include respond-to(mobile) {
font-size: 50px;
line-height: (50/45);
}
}
h2 {
font-size: 36px;
line-height: (50/40);
text-transform: uppercase;
&.has-dividers {
//overflow: auto !important;
display: table-cell;
text-align: center;
vertical-align: middle;
@include respond-to(mobile) {
display: block;
}
}
}
h3 {
font-size: 24px;
line-height: (30/20);
}
h4 {
font-family: $font-family-mono;
font-size: 20px;
line-height: (30/20);
}
h5 {
font-size: 16px;
line-height: (22/16);
}
h6 {
font-family: $font-family-mono;
font-size: 16px;
line-height: (22/16);
}
p {
&.large-text {
font-size: 20px;
}
a {
color: $green;
&:hover {
color: darken($green, 30%);
}
&:active {
color: darken($green, 50%);
}
}
}
a {
color: inherit;
text-decoration: none;
&:hover {
color: inherit;
text-decoration: none;
}
}
dt {
font-size: 18px;
}
dd {
font-size: 17px;
line-height: 1.5;
margin-bottom: 30px;
}
ul, ol {
margin: 0;
padding: 0;
list-style-type: none;
}
em {
font-style: italic;
}
strong {
font-weight: bold;
}
small, .small {
font-size: 13px;
}
hr {
margin: ($baseline * 2) 0;
border-color: $gray-mid;
border-bottom: 0;
}
pre {
background-color: $black;
color: $white;
margin: $baseline 0;
}
table {
font-family: $font-family-mono;
margin: ($baseline * 2) 0;
color: $gray-dark;
th {
color: $black;
font-weight: normal !important;
padding-right: $baseline;
}
td {
padding-right: $baseline;
}
}
::selection {
background: #ffff00; /* Safari */
color: $black;
}
::-moz-selection {
background: #ffff00; /* Firefox */
color: $black;
}

View File

@ -0,0 +1,14 @@
pre.highlight code {
color: #333333;
}
<%= Rouge::Themes::Github.render(scope: ".highlight") %>
pre.highlight {
border: 1px solid #CCCCCC;
}
pre.highlight code span.c1 {
font-style: normal;
opacity: 0.8;
}

View File

@ -0,0 +1,58 @@
// Colors
$white: #FFFFFF;
$black: #000000;
$gray-darker: #555555;
$packer-blue: #1DAEFF;
$packer-blue-dark: #1D94DD;
$vagrant-blue: #1563FF;
$vagrant-blue-dark: #104EB2;
$vault-black: #000000;
$vault-blue: #00ABE0;
// Typography
$font-family-klavika: 'klavika-web', 'Open Sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
$font-family-open-sans: 'Open Sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
$font-family-monospace: 'Menlo', 'Monaco', 'Consolas', "Courier New", monospace;
$font-size: 15px;
$font-weight-reg: 400;
$font-weight-bold: 600;
// Body
$body-font-color: $gray-darker;
$body-link-color: $packer-blue;
// Home
$home-header-background-color: transparent;
$home-header-link-color: $gray-darker;
$home-header-link-color-hover: $black;
// Sidebar
$sidebar-background-color: $white;
$sidebar-font-size: $font-size - 2;
$sidebar-link-color: $body-font-color;
$sidebar-link-color-hover: $black;
$sidebar-link-color-active: $body-link-color;
$sidebar-font-family: $font-family-open-sans;
$sidebar-font-weight: $font-weight-reg;
// Header
$header-background-color: $packer-blue;
$header-font-size: $font-size - 2;
$header-height: 92px;
$header-link-color: rgba($white, 0.85);
$header-link-color-hover: $white;
// Footer
$footer-font-size: $font-size - 2;
$footer-link-color: $body-font-color;
$footer-link-color-hover: $black;
// Buttons
$button-background: $white;
$button-font-color: #7b8A8E;
$button-font-family: $font-family-klavika;
$button-font-size: $font-size;
$button-font-weight: $font-weight-bold;
$button-primary-background: $packer-blue;
$button-primary-font-color: $white;

View File

@ -1,28 +1,33 @@
@import "bootstrap-sprockets";
@import "bootstrap";
@import 'bootstrap-sprockets';
@import 'bootstrap';
@import url("//fonts.googleapis.com/css?family=Inconsolata|Open+Sans:300,400,600");
@import url('//fonts.googleapis.com/css?family=Open+Sans:400,600');
// Core variables and mixins
@import '_variables';
// Mega Nav
@import 'hashicorp/mega-nav';
@import "_helpers";
@import "_reset";
// Anchor links
@import 'hashicorp/anchor-links';
@import "_columns";
@import "_buttons";
@import "_styles";
// Sidebar
@import 'hashicorp/sidebar';
// Hashicorp Shared Project Styles
@import 'hashicorp-shared/_project-utility';
@import 'hashicorp-shared/_hashicorp-utility';
@import 'hashicorp-shared/_hashicorp-header';
@import 'hashicorp-shared/_hashicorp-sidebar';
// Global Site
@import '_global';
@import "_header";
@import "_footer";
@import "_components";
@import "_sidebar";
// Components
@import '_header';
@import '_footer';
@import '_inner';
@import '_buttons';
@import '_syntax';
@import '_logos';
// Fix view on iPad
@import "_ipad";
// Pages
@import '_community';
@import '_docs';
@import '_downloads';
@import '_home';

View File

@ -1,336 +0,0 @@
//
// Hashicorp header
// - Shared throughout projects
// - Edits should not be made here
// --------------------------------------------------
#header{
position: relative;
margin-bottom: 0;
}
.navigation {
color: black;
text-rendering: optimizeLegibility;
transition: all 1s ease;
&.white{
.navbar-brand {
.logo {
color: white;
}
}
.main-links,
.external-links {
li > a {
&:hover{
opacity: 1;
}
}
}
}
&.black{
.navbar-brand {
.logo {
color: black;
}
}
.main-links,
.external-links {
li > a {
color: black;
}
}
}
.navbar-toggle{
height: $header-height;
margin: 0;
border-radius: 0;
.icon-bar{
border: 1px solid $black;
border-radius: 0;
}
}
.external-links {
&.white{
svg path{
fill: $white;
}
}
li {
position: relative;
svg path{
@include transition( all 300ms ease-in );
}
&:hover{
svg path{
@include transition( all 300ms ease-in );
}
}
@include project-svg-external-links-style();
&.download{
margin-right: 10px;
}
> a {
padding-left: 12px !important;
svg{
position: absolute;
left: -12px;
top: 50%;
margin-top: -7px;
width: 14px;
height: 14px;
}
}
}
}
.main-links{
margin-right: $nav-margin-right * 2;
}
.main-links,
.external-links {
&.white{
li > a {
color: white;
}
}
li > a {
@include hashi-a-style();
margin: 0 10px;
padding-top: 1px;
line-height: $header-height;
@include project-a-style();
}
}
.nav > li > a:hover, .nav > li > a:focus {
background-color: transparent;
@include transition( all 300ms ease-in );
}
}
.navbar-brand {
display: block;
height: $header-height;
padding: 0;
margin: 0 10px 0 0;
.logo{
display: inline-block;
height: $header-height;
vertical-align:top;
padding: 0;
line-height: $header-height;
padding-left: $project-logo-width + $project-logo-pad-left;
background-position: 0 center;
@include transition(all 300ms ease-in);
&:hover{
@include transition(all 300ms ease-in);
text-decoration: none;
}
}
}
.navbar-toggle{
&.white{
.icon-bar{
border: 1px solid white;
}
}
}
.by-hashicorp{
display: inline-block;
vertical-align:top;
height: $header-height;
margin-left: 3px;
padding-top: 2px;
color: black;
line-height: $header-height;
font-family: $header-font-family;
font-weight: 600;
font-size: 0;
text-decoration: none;
&.white{
color: white;
font-weight: 300;
svg{
path,
polygon,
rect{
fill: white;
}
}
&:focus,
&:hover{
text-decoration: none;
color: white;
}
}
&:focus,
&:hover{
text-decoration: none;
}
.svg-wrap{
font-size: 13px;
}
svg{
&.svg-by{
width: $by-hashicorp-width;
height: $by-hashicorp-height;
margin-bottom: -4px;
margin-left: 4px;
}
&.svg-logo{
width: 16px;
height: 16px;
margin-bottom: -3px;
margin-left: 4px;
}
path,
polygon{
fill: black;
@include transition(all 300ms ease-in);
&:hover{
@include transition(all 300ms ease-in);
}
}
.svg-bg-line{
@include transition(all 300ms ease-in);
&:hover{
@include transition(all 300ms ease-in);
}
}
}
}
.hashicorp-project{
display: inline-block;
height: 30px;
line-height: 30px;
text-decoration: none;
font-size: 14px;
color: $black;
font-weight: 600;
&.white{
color: white;
svg{
path,
polygon,
rect{
fill: white;
}
}
}
&:focus,
&:hover{
text-decoration: none;
}
span{
margin-right: 4px;
font-family: $header-font-family;
font-weight: 500;
}
span,
svg{
display: inline-block;
}
svg{
&.svg-by{
width: $by-hashicorp-width;
height: $by-hashicorp-height;
margin-bottom: -4px;
margin-left: -3px;
}
&.svg-logo{
width: 30px;
height: 30px;
margin-bottom: -10px;
margin-left: -1px;
}
path,
line{
fill: $black;
@include transition(all 300ms ease-in);
&:hover{
@include transition(all 300ms ease-in);
}
}
.svg-bg-line{
@include transition(all 300ms ease-in);
&:hover{
@include transition(all 300ms ease-in);
}
}
}
}
@media (max-width: 480px) {
.navigation {
.main-links{
margin-right: 0;
}
}
}
@media (max-width: 414px) {
#header {
.navbar-toggle{
padding-top: 10px;
height: $header-mobile-height;
}
.navbar-brand {
height: $header-mobile-height;
.logo{
height: $header-mobile-height;
line-height: $header-mobile-height;
}
.by-hashicorp{
height: $header-mobile-height;
line-height: $header-mobile-height;
padding-top: 0;
}
}
.main-links,
.external-links {
li > a {
line-height: $header-mobile-height;
}
}
}
}

View File

@ -1,293 +0,0 @@
//
// Hashicorp Sidebar
// - Shared throughout projects
// - Edits should not be made here
// --------------------------------------------------
// Base variables
// --------------------------------------------------
$screen-tablet: 768px;
$gray-darker: #212121; // #212121 - text
$gray-secondary: #757575; // #757575 - secondary text, icons
$gray: #bdbdbd; // #bdbdbd - hint text
$gray-light: #e0e0e0; // #e0e0e0 - divider
$gray-lighter: #f5f5f5; // #f5f5f5 - background
$link-color: $gray-darker;
$link-bg: transparent;
$link-hover-color: $gray-lighter;
$link-hover-bg: $gray-lighter;
$link-active-color: $gray-darker;
$link-active-bg: $gray-light;
$link-disabled-color: $gray-light;
$link-disabled-bg: transparent;
/* -- Sidebar style ------------------------------- */
// Sidebar variables
// --------------------------------------------------
$zindex-sidebar-fixed: 1035;
$sidebar-desktop-width: 280px;
$sidebar-width: 240px;
$sidebar-padding: 16px;
$sidebar-divider: $sidebar-padding/2;
$sidebar-icon-width: 40px;
$sidebar-icon-height: 20px;
@mixin sidebar-nav-base {
text-align: center;
&:last-child{
border-bottom: none;
}
li > a {
background-color: $link-bg;
}
li:hover > a {
background-color: $link-hover-bg;
}
li:focus > a, li > a:focus {
background-color: $link-bg;
}
> .open > a {
&,
&:hover,
&:focus {
background-color: $link-hover-bg;
}
}
> .active > a {
&,
&:hover,
&:focus {
background-color: $link-active-bg;
}
}
> .disabled > a {
&,
&:hover,
&:focus {
background-color: $link-disabled-bg;
}
}
// Dropdown menu items
> .dropdown {
// Remove background color from open dropdown
> .dropdown-menu {
background-color: $link-hover-bg;
> li > a {
&:focus {
background-color: $link-hover-bg;
}
&:hover {
background-color: $link-hover-bg;
}
}
> .active > a {
&,
&:hover,
&:focus {
color: $link-active-color;
background-color: $link-active-bg;
}
}
}
}
}
//
// Sidebar
// --------------------------------------------------
// Sidebar Elements
//
// Basic style of sidebar elements
.sidebar {
position: relative;
display: block;
min-height: 100%;
overflow-y: auto;
overflow-x: hidden;
border: none;
@include transition(all 0.5s cubic-bezier(0.55, 0, 0.1, 1));
@include clearfix();
background-color: $white;
ul{
padding-left: 0;
list-style-type: none;
}
.sidebar-divider, .divider {
width: 80%;
height: 1px;
margin: 8px auto;
background-color: lighten($gray, 20%);
}
// Sidebar heading
//----------------
.sidebar-header {
position: relative;
margin-bottom: $sidebar-padding;
@include transition(all .2s ease-in-out);
}
.sidebar-image {
padding-top: 24px;
img {
display: block;
margin: 0 auto;
}
}
// Sidebar icons
//----------------
.sidebar-icon {
display: inline-block;
height: $sidebar-icon-height;
margin-right: $sidebar-divider;
text-align: left;
font-size: $sidebar-icon-height;
vertical-align: middle;
&:before, &:after {
vertical-align: middle;
}
}
.sidebar-nav {
margin: 0;
padding: 0;
@include sidebar-nav-base();
// Links
//----------------
li {
position: relative;
list-style-type: none;
text-align: center;
a {
position: relative;
cursor: pointer;
user-select: none;
@include hashi-a-style-core();
svg{
top: 2px;
width: 14px;
height: 14px;
margin-bottom: -2px;
margin-right: 4px;
}
}
}
}
}
// Sidebar toggling
//
// Hide sidebar
.sidebar {
width: 0;
@include translate3d(-$sidebar-desktop-width, 0, 0);
&.open {
min-width: $sidebar-desktop-width;
width: $sidebar-desktop-width;
@include translate3d(0, 0, 0);
}
}
// Sidebar positions: fix the left/right sidebars
.sidebar-fixed-left,
.sidebar-fixed-right,
.sidebar-stacked {
position: fixed;
top: 0;
bottom: 0;
z-index: $zindex-sidebar-fixed;
}
.sidebar-stacked {
left: 0;
}
.sidebar-fixed-left {
left: 0;
box-shadow: 2px 0px 25px rgba(0,0,0,0.15);
-webkit-box-shadow: 2px 0px 25px rgba(0,0,0,0.15);
}
.sidebar-fixed-right {
right: 0;
box-shadow: 0px 2px 25px rgba(0,0,0,0.15);
-webkit-box-shadow: 0px 2px 25px rgba(0,0,0,0.15);
@include translate3d($sidebar-desktop-width, 0, 0);
&.open {
@include translate3d(0, 0, 0);
}
.icon-material-sidebar-arrow:before {
content: "\e614"; // icon-material-arrow-forward
}
}
// Sidebar size
//
// Change size of sidebar and sidebar elements on small screens
@media (max-width: $screen-tablet) {
.sidebar.open {
min-width: $sidebar-width;
width: $sidebar-width;
}
.sidebar .sidebar-header {
//height: $sidebar-width * 9/16; // 16:9 header dimension
}
.sidebar .sidebar-image {
/* img {
width: $sidebar-width/4 - $sidebar-padding;
height: $sidebar-width/4 - $sidebar-padding;
} */
}
}
.sidebar-overlay {
visibility: hidden;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
opacity: 0;
background: $white;
z-index: $zindex-sidebar-fixed - 1;
-webkit-transition: visibility 0 linear .4s,opacity .4s cubic-bezier(.4,0,.2,1);
-moz-transition: visibility 0 linear .4s,opacity .4s cubic-bezier(.4,0,.2,1);
transition: visibility 0 linear .4s,opacity .4s cubic-bezier(.4,0,.2,1);
-webkit-transform: translateZ(0);
-moz-transform: translateZ(0);
-ms-transform: translateZ(0);
-o-transform: translateZ(0);
transform: translateZ(0);
}
.sidebar-overlay.active {
opacity: 0.3;
visibility: visible;
-webkit-transition-delay: 0;
-moz-transition-delay: 0;
transition-delay: 0;
}

View File

@ -1,87 +0,0 @@
//
// Hashicorp Nav (header/footer) Utiliy Vars and Mixins
//
// Notes:
// - Include this in Application.scss before header and feature-footer
// - Open Sans Google (Semibold - 600) font needs to be included if not already
// --------------------------------------------------
// Variables
$font-family-open-sans: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
$header-font-family: $font-family-open-sans;
$header-font-weight: 600; // semi-bold
$header-height: 74px;
$header-mobile-height: 60px;
$by-hashicorp-width: 74px;
$by-hashicorp-height: 16px;
$nav-margin-right: 12px;
// Mixins
@mixin hashi-a-style-core{
font-family: $header-font-family;
font-weight: $header-font-weight;
font-size: 14px;
//letter-spacing: 0.0625em;
}
@mixin hashi-a-style{
margin: 0 15px;
padding: 0;
line-height: 22px;
@include hashi-a-style-core();
@include transition( all 300ms ease-in );
&:hover{
@include transition( all 300ms ease-in );
background-color: transparent;
}
}
//general shared project mixins
@mixin img-retina($image1x, $image, $width, $height) {
background-image: url($image1x);
background-size: $width $height;
background-repeat: no-repeat;
@media (min--moz-device-pixel-ratio: 1.3),
(-o-min-device-pixel-ratio: 2.6/2),
(-webkit-min-device-pixel-ratio: 1.3),
(min-device-pixel-ratio: 1.3),
(min-resolution: 1.3dppx) {
/* on retina, use image that's scaled by 2 */
background-image: url($image);
background-size: $width $height;
}
}
//
// -------------------------
@mixin anti-alias() {
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
}
@mixin open-light() {
font-family: $font-family-open-sans;
font-weight: 300;
}
@mixin open() {
font-family: $font-family-open-sans;
font-weight: 400;
}
@mixin open-sb() {
font-family: $font-family-open-sans;
font-weight: 600;
}
@mixin open-bold() {
font-family: $font-family-open-sans;
font-weight: 700;
}
@mixin bez-1-transition{
@include transition( all 300ms ease-in-out );
}

View File

@ -1,70 +0,0 @@
//
// Mixins Specific to project
// - make edits to mixins here
// --------------------------------------------------
// Variables
$project-logo-width: 24px;
$project-logo-height: 34px;
$project-logo-pad-left: 8px;
// Mixins
@mixin project-a-style{
color: $green;
font-weight: 400;
letter-spacing: 0;
&:hover{
color: $white;
}
}
@mixin project-footer-a-style{
color: $black;
font-weight: 400;
&:hover{
color: $green;
svg path{
fill: $green;
}
}
}
@mixin project-footer-a-subpage-style{
color: $white;
font-weight: 400;
svg path{
fill: $white;
}
&:hover{
color: $green;
svg path{
fill: $green;
}
}
}
@mixin project-svg-external-links-style{
svg path{
fill: $green;
}
&:hover{
svg path{
fill: $green;
}
}
}
@mixin project-by-hashicorp-style{
&:hover{
line{
stroke: $green;
}
}
}

View File

@ -0,0 +1,118 @@
---
layout: "inner"
page_title: "Community"
description: |-
Packer is an open source project with a growing community.
---
<h1>Community</h1>
<p>
Packer is an open source project with a growing community. There are
active, dedicated users willing to help you through various mediums.
</p>
<p>
<strong>IRC:</strong> <code>#packer-tool</code> on Freenode
</p>
<p>
<strong>Announcement list:</strong>
<a href="https://groups.google.com/group/hashicorp-announce">HashiCorp Announcement Google Group</a>
</p>
<p>
<strong>Discussion list:</strong>
<a href="https://groups.google.com/group/packer-tool">Packer Google Group</a>
</p>
<p>
<strong>Bug Tracker:</strong>
<a href="https://github.com/mitchellh/packer/issues">Issue tracker
on GitHub</a>. Please only use this for reporting bugs. Do not ask
for general help here. Use IRC or the mailing list for that.
</p>
<p>
<strong>Training:</strong>
Paid <a href="https://www.hashicorp.com/training.html">HashiCorp training courses</a>
are also available in a city near you. Private training courses are also available.
</p>
<h1>People</h1>
<p>
The following people are some of the faces behind Packer. They each
contribute to Packer in some core way. Over time, faces may appear and
disappear from this list as contributors come and go. In addition to
the faces below, Packer is a project by
<a href="https://www.hashicorp.com">HashiCorp</a>, so many HashiCorp
employees actively contribute to Packer.
</p>
<div class="people">
<div class="person">
<img class="pull-left" src="https://www.gravatar.com/avatar/54079122b67de9677c1f93933ce8b63a.png?s=125">
<div class="bio">
<h3>Mitchell Hashimoto (<a href="https://github.com/mitchellh">@mitchellh</a>)</h3>
<p>
Mitchell Hashimoto is the creator of Packer. He developed the
core of Packer as well as the Amazon, VirtualBox, and VMware
builders. In addition to Packer, Mitchell is the creator of
<a href="https://www.vagrantup.com">Vagrant</a>. He is self
described as "automation obsessed."
</p>
</div>
</div>
<div class="person">
<img class="pull-left" src="https://www.gravatar.com/avatar/2acc31dd6370a54b18f6755cd0710ce6.png?s=125">
<div class="bio">
<h3>Jack Pearkes (<a href="https://github.com/pearkes">@pearkes</a>)</h3>
<p>
<a href="http://jack.ly/">Jack Pearkes</a> created and maintains the DigitalOcean builder
for Packer. Outside of Packer, Jack is an avid open source
contributor and software consultant.
</p>
</div>
</div>
<div class="person">
<img class="pull-left" src="https://www.gravatar.com/avatar/2f7fc9cb7558e3ea48f5a86fa90a78da.png?s=125">
<div class="bio">
<h3>Mark Peek (<a href="https://github.com/markpeek">@markpeek</a>)</h3>
<p>
In addition to Packer, Mark Peek helps maintain
various open source projects such as
<a href="https://github.com/cloudtools">cloudtools</a> and
<a href="https://github.com/ironport">IronPort Python libraries</a>.
Mark is also a <a href="https://FreeBSD.org">FreeBSD committer</a>.
</p>
</div>
</div>
<div class="person">
<img class="pull-left" src="https://www.gravatar.com/avatar/1fca64df3d7db1e2f258a8956d2b0aff.png?s=125">
<div class="bio">
<h3>Ross Smith II (<a href="https://github.com/rasa" target="_blank" rel="nofollow noopener noreferrer">@rasa</a>)</h3>
<p>
<a href="http://smithii.com/" target="_blank" rel="nofollow noopener noreferrer">Ross Smith</a> maintains our
VMware builder on Windows, and provides other valuable assistance. Ross is an
open source enthusiast, published author, and freelance consultant.
</p>
</div>
</div>
<div class="person">
<img class="pull-left" src="https://www.gravatar.com/avatar/c9f6bf7b5b865012be5eded656ebed7d.png?s=125">
<div class="bio">
<h3>Rickard von Essen<br/>(<a href="https://github.com/rickard-von-essen" target="_blank" rel="nofollow noopener noreferrer">@rickard-von-essen</a>)</h3>
<p>
Rickard von Essen maintains our Parallels Desktop builder. Rickard is an
polyglot programmer and consults on Continuous Delivery.
</p>
</div>
</div>
<div class="person">
<img class="pull-left" src="https://secure.gravatar.com/avatar/f1695dcf6a21f90f5db84b2eee2cbdbe?s=125">
<div class="bio">
<h3>Matt Hooker (<a href="https://github.com/mwhooker" target="_blank" rel="nofollow noopener noreferrer">@mwhooker</a>)</h3>
<p><a href="https://twitter.com/mwhooker" target="_blank" rel="nofollow
noopener noreferrer">Matt</a> maintains Packer for HashiCorp. After
picking up Chef for a job, he decided that continually provisioning the
same machine was bound for trouble. Luckily Packer had just been created,
and was the answer to his prayers. Now he works on it professionally, and
couldn't be happier.
</p>
</div>
</div>
<div class="clearfix">
</div>
</div>

View File

@ -1,125 +0,0 @@
---
description: |
Packer is a new project with a growing community. Despite this, there are
dedicated users willing to help through various mediums.
layout: community
page_title: Community
---
# Community
Packer is a new project with a growing community. Despite this, there are
dedicated users willing to help through various mediums.
**IRC:** `#packer-tool` on Freenode.
**Mailing List:** [Packer Google
Group](https://groups.google.com/group/packer-tool)
**Bug Tracker:** [Issue tracker on
GitHub](https://github.com/mitchellh/packer/issues). Please only use this for
reporting bugs. Do not ask for general help here. Use IRC or the mailing list
for that.
## People
The following people are some of the faces behind Packer. They each contribute
to Packer in some core way. Over time, faces may appear and disappear from this
list as contributors come and go.
<div class="people">
<div class="person">
<img class="pull-left" src="https://www.gravatar.com/avatar/54079122b67de9677c1f93933ce8b63a.png?s=125">
<div class="bio">
<h3>Mitchell Hashimoto (<a href="https://github.com/mitchellh">@mitchellh</a>)</h3>
<p>
Mitchell Hashimoto is the creator of Packer. He developed the
core of Packer as well as the Amazon, VirtualBox, and VMware
builders. In addition to Packer, Mitchell is the creator of
<a href="https://www.vagrantup.com">Vagrant</a>. He is self
described as "automation obsessed."
</p>
</div>
</div>
<div class="person">
<img class="pull-left" src="https://www.gravatar.com/avatar/2acc31dd6370a54b18f6755cd0710ce6.png?s=125">
<div class="bio">
<h3>Jack Pearkes (<a href="https://github.com/pearkes">@pearkes</a>)</h3>
<p>
<a href="http://jack.ly/">Jack Pearkes</a> created and maintains the DigitalOcean builder
for Packer. Outside of Packer, Jack is an avid open source
contributor and software consultant.</p>
</div>
</div>
<div class="person">
<img class="pull-left" src="https://www.gravatar.com/avatar/2f7fc9cb7558e3ea48f5a86fa90a78da.png?s=125">
<div class="bio">
<h3>Mark Peek (<a href="https://github.com/markpeek">@markpeek</a>)</h3>
<p>
In addition to Packer, Mark Peek helps maintain
various open source projects such as
<a href="https://github.com/cloudtools">cloudtools</a> and
<a href="https://github.com/ironport">IronPort Python libraries</a>.
Mark is also a <a href="https://FreeBSD.org">FreeBSD committer</a>.</p>
</div>
</div>
<div class="person">
<img class="pull-left" src="https://www.gravatar.com/avatar/1fca64df3d7db1e2f258a8956d2b0aff.png?s=125">
<div class="bio">
<h3>Ross Smith II (<a href="https://github.com/rasa" target="_blank" rel="nofollow noopener noreferrer">@rasa</a>)</h3>
<p>
<a href="http://smithii.com/" target="_blank" rel="nofollow noopener noreferrer">Ross Smith</a> maintains our
VMware builder on Windows, and provides other valuable assistance. Ross is an
open source enthusiast, published author, and freelance consultant.
</p>
</div>
</div>
<div class="person">
<img class="pull-left" src="https://www.gravatar.com/avatar/c9f6bf7b5b865012be5eded656ebed7d.png?s=125">
<div class="bio">
<h3>Rickard von Essen<br/>(<a href="https://github.com/rickard-von-essen" target="_blank" rel="nofollow noopener noreferrer">@rickard-von-essen</a>)</h3>
<p>
Rickard von Essen maintains our Parallels Desktop builder. Rickard is an
polyglot programmer and consults on Continuous Delivery.
</p>
</div>
</div>
<div class="person">
<img class="pull-left" src="https://secure.gravatar.com/avatar/f1695dcf6a21f90f5db84b2eee2cbdbe?s=125">
<div class="bio">
<h3>Matt Hooker (<a href="https://github.com/mwhooker" target="_blank" rel="nofollow noopener noreferrer">@mwhooker</a>)</h3>
<p><a href="https://twitter.com/mwhooker" target="_blank" rel="nofollow
noopener noreferrer">Matt</a> maintains Packer for HashiCorp. After
picking up Chef for a job, he decided that continually provisioning the
same machine was bound for trouble. Luckily Packer had just been created,
and was the answer to his prayers. Now he works on it professionally, and
couldn't be happier.
</p>
</div>
</div>
<div class="clearfix">
</div>
</div>

View File

@ -1,13 +1,13 @@
---
description: |
There are a handful of terms used throughout the Packer documentation where the
meaning may not be immediately obvious if you haven't used Packer before.
Luckily, there are relatively few. This page documents all the terminology
required to understand and use Packer. The terminology is in alphabetical order
for easy referencing.
layout: docs
page_title: Packer Terminology
...
page_title: Terminology
description: |-
There are a handful of terms used throughout the Packer documentation where
the meaning may not be immediately obvious if you haven't used Packer before.
Luckily, there are relatively few. This page documents all the terminology
required to understand and use Packer. The terminology is in alphabetical
order for easy referencing.
---
# Packer Terminology
@ -17,40 +17,39 @@ Luckily, there are relatively few. This page documents all the terminology
required to understand and use Packer. The terminology is in alphabetical order
for easy referencing.
- `Artifacts` are the results of a single build, and are usually a set of IDs
or files to represent a machine image. Every builder produces a
single artifact. As an example, in the case of the Amazon EC2 builder, the
artifact is a set of AMI IDs (one per region). For the VMware builder, the
artifact is a directory of files comprising the created virtual machine.
- `Artifacts` are the results of a single build, and are usually a set of IDs or
files to represent a machine image. Every builder produces a single artifact.
As an example, in the case of the Amazon EC2 builder, the artifact is a set of
AMI IDs (one per region). For the VMware builder, the artifact is a directory
of files comprising the created virtual machine.
- `Builds` are a single task that eventually produces an image for a
single platform. Multiple builds run in parallel. Example usage in a
sentence: "The Packer build produced an AMI to run our web application." Or:
"Packer is running the builds now for VMware, AWS, and VirtualBox."
- `Builds` are a single task that eventually produces an image for a single
platform. Multiple builds run in parallel. Example usage in a sentence: "The
Packer build produced an AMI to run our web application." Or: "Packer is
running the builds now for VMware, AWS, and VirtualBox."
- `Builders` are components of Packer that are able to create a machine image
for a single platform. Builders read in some configuration and use that to
run and generate a machine image. A builder is invoked as part of a build in
order to create the actual resulting images. Example builders include
VirtualBox, VMware, and Amazon EC2. Builders can be created and added to
Packer in the form of plugins.
- `Builders` are components of Packer that are able to create a machine image
for a single platform. Builders read in some configuration and use that to run
and generate a machine image. A builder is invoked as part of a build in order
to create the actual resulting images. Example builders include VirtualBox,
VMware, and Amazon EC2. Builders can be created and added to Packer in the
form of plugins.
- `Commands` are sub-commands for the `packer` program that perform some job.
An example command is "build", which is invoked as `packer build`. Packer
ships with a set of commands out of the box in order to define its
command-line interface.
- `Commands` are sub-commands for the `packer` program that perform some job. An
example command is "build", which is invoked as `packer build`. Packer ships
with a set of commands out of the box in order to define its command-line
interface.
- `Post-processors` are components of Packer that take the result of a builder
or another post-processor and process that to create a new artifact.
Examples of post-processors are compress to compress artifacts, upload to
upload artifacts, etc.
- `Post-processors` are components of Packer that take the result of a builder
or another post-processor and process that to create a new artifact. Examples
of post-processors are compress to compress artifacts, upload to upload
artifacts, etc.
- `Provisioners` are components of Packer that install and configure software
within a running machine prior to that machine being turned into a
static image. They perform the major work of making the image contain
useful software. Example provisioners include shell scripts, Chef,
Puppet, etc.
- `Provisioners` are components of Packer that install and configure software
within a running machine prior to that machine being turned into a static
image. They perform the major work of making the image contain useful
software. Example provisioners include shell scripts, Chef, Puppet, etc.
- `Templates` are JSON files which define one or more builds by configuring
the various components of Packer. Packer is able to read a template and use
that information to create multiple machine images in parallel.
- `Templates` are JSON files which define one or more builds by configuring the
various components of Packer. Packer is able to read a template and use that
information to create multiple machine images in parallel.

View File

@ -1,11 +1,12 @@
---
description: |
The `amazon-chroot` Packer builder is able to create Amazon AMIs backed by an
EBS volume as the root device. For more information on the difference between
instance storage and EBS-backed instances, storage for the root device section
in the EC2 documentation.
layout: docs
page_title: 'Amazon AMI Builder (chroot)'
sidebar_current: docs-builders-amazon-chroot
page_title: Amazon chroot - Builders
description: |-
The amazon-chroot Packer builder is able to create Amazon AMIs backed by an
EBS volume as the root device. For more information on the difference between
instance storage and EBS-backed instances, storage for the root device section
in the EC2 documentation.
---
# AMI Builder (chroot)
@ -23,7 +24,7 @@ builder is able to build an EBS-backed AMI without launching a new EC2 instance.
This can dramatically speed up AMI builds for organizations who need the extra
fast build.
\~&gt; **This is an advanced builder** If you're just getting started with
~> **This is an advanced builder** If you're just getting started with
Packer, we recommend starting with the [amazon-ebs
builder](/docs/builders/amazon-ebs.html), which is much easier to use.
@ -56,200 +57,200 @@ each category, the available configuration keys are alphabetized.
### Required:
- `access_key` (string) - The access key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `access_key` (string) - The access key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `ami_name` (string) - The name of the resulting AMI that will appear when
managing AMIs in the AWS console or via APIs. This must be unique. To help
make this unique, use a function like `timestamp` (see [configuration
templates](/docs/templates/configuration-templates.html) for more info)
- `ami_name` (string) - The name of the resulting AMI that will appear when
managing AMIs in the AWS console or via APIs. This must be unique. To help
make this unique, use a function like `timestamp` (see [configuration
templates](/docs/templates/configuration-templates.html) for more info)
- `secret_key` (string) - The secret key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `secret_key` (string) - The secret key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `source_ami` (string) - The source AMI whose root volume will be copied and
provisioned on the currently running instance. This must be an EBS-backed
AMI with a root volume snapshot that you have access to. Note: this is not
used when `from_scratch` is set to true.
- `source_ami` (string) - The source AMI whose root volume will be copied and
provisioned on the currently running instance. This must be an EBS-backed AMI
with a root volume snapshot that you have access to. Note: this is not used
when `from_scratch` is set to true.
### Optional:
- `ami_description` (string) - The description to set for the
- `ami_description` (string) - The description to set for the
resulting AMI(s). By default this description is empty. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with name of the region where this
is built.
- `ami_groups` (array of strings) - A list of groups that have access to
- `ami_groups` (array of strings) - A list of groups that have access to
launch the resulting AMI(s). By default no groups have permission to launch
the AMI. `all` will make the AMI publicly accessible.
- `ami_product_codes` (array of strings) - A list of product codes to
- `ami_product_codes` (array of strings) - A list of product codes to
associate with the AMI. By default no product codes are associated with
the AMI.
- `ami_regions` (array of strings) - A list of regions to copy the AMI to.
- `ami_regions` (array of strings) - A list of regions to copy the AMI to.
Tags and attributes are copied along with the AMI. AMI copying takes time
depending on the size of the AMI, but will generally take many minutes.
- `ami_users` (array of strings) - A list of account IDs that have access to
- `ami_users` (array of strings) - A list of account IDs that have access to
launch the resulting AMI(s). By default no additional users other than the
user creating the AMI has permissions to launch it.
- `ami_virtualization_type` (string) - The type of virtualization for the AMI
- `ami_virtualization_type` (string) - The type of virtualization for the AMI
you are building. This option is required to register HVM images. Can be
"paravirtual" (default) or "hvm".
- `chroot_mounts` (array of array of strings) - This is a list of devices
- `chroot_mounts` (array of array of strings) - This is a list of devices
to mount into the chroot environment. This configuration parameter
requires some additional documentation which is in the "Chroot Mounts"
section below. Please read that section for more information on how to
use this.
- `command_wrapper` (string) - How to run shell commands. This defaults to
- `command_wrapper` (string) - How to run shell commands. This defaults to
`{{.Command}}`. This may be useful to set if you want to set environmental
variables or perhaps run it with `sudo` or so on. This is a configuration
template where the `.Command` variable is replaced with the command to
be run. Defaults to "{{.Command}}".
- `copy_files` (array of strings) - Paths to files on the running EC2 instance
- `copy_files` (array of strings) - Paths to files on the running EC2 instance
that will be copied into the chroot environment prior to provisioning. Defaults
to `/etc/resolv.conf` so that DNS lookups work. Pass an empty list to skip
copying `/etc/resolv.conf`. You may need to do this if you're building
an image that uses systemd.
- `device_path` (string) - The path to the device where the root volume of the
- `device_path` (string) - The path to the device where the root volume of the
source AMI will be attached. This defaults to "" (empty string), which
forces Packer to find an open device automatically.
- `enhanced_networking` (boolean) - Enable enhanced
- `enhanced_networking` (boolean) - Enable enhanced
networking (SriovNetSupport and ENA) on HVM-compatible AMIs. If true, add
`ec2:ModifyInstanceAttribute` to your AWS IAM policy.
- `force_deregister` (boolean) - Force Packer to first deregister an existing
- `force_deregister` (boolean) - Force Packer to first deregister an existing
AMI if one with the same name already exists. Default `false`.
- `force_delete_snapshot` (boolean) - Force Packer to delete snapshots associated with
- `force_delete_snapshot` (boolean) - Force Packer to delete snapshots associated with
AMIs, which have been deregistered by `force_deregister`. Default `false`.
- `encrypt_boot` (boolean) - Instruct packer to automatically create a copy of the
- `encrypt_boot` (boolean) - Instruct packer to automatically create a copy of the
AMI with an encrypted boot volume (discarding the initial unencrypted AMI in the
process). Default `false`.
- `kms_key_id` (string) - The ID of the KMS key to use for boot volume encryption.
- `kms_key_id` (string) - The ID of the KMS key to use for boot volume encryption.
This only applies to the main `region`, other regions where the AMI will be copied
will be encrypted by the default EBS KMS key.
- `from_scratch` (boolean) - Build a new volume instead of starting from an
- `from_scratch` (boolean) - Build a new volume instead of starting from an
existing AMI root volume snapshot. Default `false`. If true, `source_ami` is
no longer used and the following options become required:
`ami_virtualization_type`, `pre_mount_commands` and `root_volume_size`. The
below options are also required in this mode only:
- `ami_block_device_mappings` (array of block device mappings) - Add one or
- `ami_block_device_mappings` (array of block device mappings) - Add one or
more [block device mappings](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html)
to the AMI. These will be attached when booting a new instance from your
AMI. Your options here may vary depending on the type of VM you use. The
block device mappings allow for the following configuration:
- `delete_on_termination` (boolean) - Indicates whether the EBS volume is
- `delete_on_termination` (boolean) - Indicates whether the EBS volume is
deleted on instance termination. Default `false`. **NOTE**: If this
value is not explicitly set to `true` and volumes are not cleaned up by
an alternative method, additional volumes will accumulate after
every build.
- `device_name` (string) - The device name exposed to the instance (for
- `device_name` (string) - The device name exposed to the instance (for
example, `/dev/sdh` or `xvdh`). Required when specifying `volume_size`.
- `encrypted` (boolean) - Indicates whether to encrypt the volume or not
- `encrypted` (boolean) - Indicates whether to encrypt the volume or not
- `iops` (integer) - The number of I/O operations per second (IOPS) that the
- `iops` (integer) - The number of I/O operations per second (IOPS) that the
volume supports. See the documentation on
[IOPs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html)
for more information
- `no_device` (boolean) - Suppresses the specified device included in the
- `no_device` (boolean) - Suppresses the specified device included in the
block device mapping of the AMI
- `snapshot_id` (string) - The ID of the snapshot
- `snapshot_id` (string) - The ID of the snapshot
- `virtual_name` (string) - The virtual device name. See the documentation on
- `virtual_name` (string) - The virtual device name. See the documentation on
[Block Device
Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html)
for more information
- `volume_size` (integer) - The size of the volume, in GiB. Required if not
- `volume_size` (integer) - The size of the volume, in GiB. Required if not
specifying a `snapshot_id`
- `volume_type` (string) - The volume type. gp2 for General Purpose (SSD)
- `volume_type` (string) - The volume type. gp2 for General Purpose (SSD)
volumes, io1 for Provisioned IOPS (SSD) volumes, and standard for Magnetic
volumes
- `root_device_name` (string) - The root device name. For example, `xvda`.
- `root_device_name` (string) - The root device name. For example, `xvda`.
- `mount_path` (string) - The path where the volume will be mounted. This is
- `mount_path` (string) - The path where the volume will be mounted. This is
where the chroot environment will be. This defaults to
`/mnt/packer-amazon-chroot-volumes/{{.Device}}`. This is a configuration template
where the `.Device` variable is replaced with the name of the device where
the volume is attached.
- `mount_partition` (integer) - The partition number containing the
- `mount_partition` (integer) - The partition number containing the
/ partition. By default this is the first partition of the volume.
- `mount_options` (array of strings) - Options to supply the `mount` command
- `mount_options` (array of strings) - Options to supply the `mount` command
when mounting devices. Each option will be prefixed with `-o` and supplied
to the `mount` command ran by Packer. Because this command is ran in a
shell, user discrestion is advised. See [this manual page for the mount
command](http://linuxcommand.org/man_pages/mount8.html) for valid file
system specific options
- `pre_mount_commands` (array of strings) - A series of commands to execute
- `pre_mount_commands` (array of strings) - A series of commands to execute
after attaching the root volume and before mounting the chroot. This is not
required unless using `from_scratch`. If so, this should include any
partitioning and filesystem creation commands. The path to the device is
provided by `{{.Device}}`.
- `post_mount_commands` (array of strings) - As `pre_mount_commands`, but the
- `post_mount_commands` (array of strings) - As `pre_mount_commands`, but the
commands are executed after mounting the root device and before the extra
mount and copy steps. The device and mount path are provided by
`{{.Device}}` and `{{.MountPath}}`.
- `root_volume_size` (integer) - The size of the root volume in GB for the
- `root_volume_size` (integer) - The size of the root volume in GB for the
chroot environment and the resulting AMI. Default size is the snapshot size
of the `source_ami` unless `from_scratch` is `true`, in which case
this field must be defined.
- `skip_region_validation` (boolean) - Set to true if you want to skip
- `skip_region_validation` (boolean) - Set to true if you want to skip
validation of the `ami_regions` configuration option. Default `false`.
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
They will override AMI tags if already applied to snapshot. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with name of the region where this
is built.
- `snapshot_groups` (array of strings) - A list of groups that have access to
- `snapshot_groups` (array of strings) - A list of groups that have access to
create volumes from the snapshot(s). By default no groups have permission to create
volumes form the snapshot(s). `all` will make the snapshot publicly accessible.
- `snapshot_users` (array of strings) - A list of account IDs that have access to
- `snapshot_users` (array of strings) - A list of account IDs that have access to
create volumes from the snapshot(s). By default no additional users other than the
user creating the AMI has permissions to create volumes from the backing snapshot(s).
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
Example:
``` {.javascript}
```json
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "*ubuntu-xenial-16.04-amd64-server-*",
"root-device-type": "ebs"
},
"owners": ["099720109477"],
"most_recent": true
"filters": {
"virtualization-type": "hvm",
"name": "*ubuntu-xenial-16.04-amd64-server-*",
"root-device-type": "ebs"
},
"owners": ["099720109477"],
"most_recent": true
}
```
@ -257,18 +258,18 @@ each category, the available configuration keys are alphabetized.
NOTE: This will fail unless *exactly* one AMI is returned. In the above
example, `most_recent` will cause this to succeed by selecting the newest image.
- `filters` (map of strings) - filters used to select a `source_ami`.
- `filters` (map of strings) - filters used to select a `source_ami`.
NOTE: This will fail unless *exactly* one AMI is returned.
Any filter described in the docs for [DescribeImages](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)
is valid.
- `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
- `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
This is helpful to limit the AMIs to a trusted third party, or to your own account.
- `most_recent` (bool) - Selects the newest created image when true.
- `most_recent` (bool) - Selects the newest created image when true.
This is most useful for selecting a daily distro build.
- `tags` (object of key/value strings) - Tags applied to the AMI. This is a
- `tags` (object of key/value strings) - Tags applied to the AMI. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with name of the region where this
@ -279,7 +280,7 @@ each category, the available configuration keys are alphabetized.
Here is a basic example. It is completely valid except for the access keys:
``` {.javascript}
```javascript
{
"type": "amazon-chroot",
"access_key": "YOUR KEY HERE",
@ -295,18 +296,18 @@ The `chroot_mounts` configuration can be used to mount specific devices within
the chroot. By default, the following additional mounts are added into the
chroot by Packer:
- `/proc` (proc)
- `/sys` (sysfs)
- `/dev` (bind to real `/dev`)
- `/dev/pts` (devpts)
- `/proc/sys/fs/binfmt_misc` (binfmt\_misc)
- `/proc` (proc)
- `/sys` (sysfs)
- `/dev` (bind to real `/dev`)
- `/dev/pts` (devpts)
- `/proc/sys/fs/binfmt_misc` (binfmt\_misc)
These default mounts are usually good enough for anyone and are sane defaults.
However, if you want to change or add the mount points, you may using the
`chroot_mounts` configuration. Here is an example configuration which only
mounts `/prod` and `/dev`:
``` {.javascript}
```javascript
{
"chroot_mounts": [
["proc", "proc", "/proc"],
@ -318,12 +319,12 @@ mounts `/prod` and `/dev`:
`chroot_mounts` is a list of a 3-tuples of strings. The three components of the
3-tuple, in order, are:
- The filesystem type. If this is "bind", then Packer will properly bind the
- The filesystem type. If this is "bind", then Packer will properly bind the
filesystem to another mount point.
- The source device.
- The source device.
- The mount directory.
- The mount directory.
## Parallelism
@ -346,7 +347,7 @@ For debian based distributions you can setup a
file which will prevent packages installed by your provisioners from starting
services:
``` {.javascript}
```javascript
{
"type": "shell",
"inline": [
@ -374,7 +375,7 @@ The device setup commands partition the device with one partition for use as an
HVM image and format it ext4. This builder block should be followed by
provisioning commands to install the os and bootloader.
``` {.javascript}
```json
{
"type": "amazon-chroot",
"ami_name": "packer-from-scratch {{timestamp}}",

View File

@ -1,12 +1,13 @@
---
description: |
The `amazon-ebs` Packer builder is able to create Amazon AMIs backed by EBS
volumes for use in EC2. For more information on the difference between
EBS-backed instances and instance-store backed instances, see the storage for
the root device section in the EC2 documentation.
layout: docs
page_title: 'Amazon AMI Builder (EBS backed)'
...
sidebar_current: docs-builders-amazon-ebsbacked
page_title: Amazon EBS - Builders
description: |-
The amazon-ebs Packer builder is able to create Amazon AMIs backed by EBS
volumes for use in EC2. For more information on the difference between
EBS-backed instances and instance-store backed instances, see the storage for
the root device section in the EC2 documentation.
---
# AMI Builder (EBS backed)
@ -44,199 +45,200 @@ builder.
### Required:
- `access_key` (string) - The access key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `access_key` (string) - The access key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `ami_name` (string) - The name of the resulting AMI that will appear when
managing AMIs in the AWS console or via APIs. This must be unique. To help
make this unique, use a function like `timestamp` (see [configuration
templates](/docs/templates/configuration-templates.html) for more info)
- `ami_name` (string) - The name of the resulting AMI that will appear when
managing AMIs in the AWS console or via APIs. This must be unique. To help
make this unique, use a function like `timestamp` (see [configuration
templates](/docs/templates/configuration-templates.html) for more info)
- `instance_type` (string) - The EC2 instance type to use while building the
AMI, such as `m1.small`.
- `instance_type` (string) - The EC2 instance type to use while building the
AMI, such as `m1.small`.
- `region` (string) - The name of the region, such as `us-east-1`, in which to
launch the EC2 instance to create the AMI.
- `region` (string) - The name of the region, such as `us-east-1`, in which to
launch the EC2 instance to create the AMI.
- `secret_key` (string) - The secret key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `secret_key` (string) - The secret key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `source_ami` (string) - The initial AMI used as a base for the newly
created machine. `source_ami_filter` may be used instead to populate this
automatically.
- `source_ami` (string) - The initial AMI used as a base for the newly
created machine. `source_ami_filter` may be used instead to populate this
automatically.
### Optional:
- `ami_block_device_mappings` (array of block device mappings) - Add one or
more [block device mappings](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html)
to the AMI. These will be attached when booting a new instance from your
AMI. To add a block device during the Packer build see
`launch_block_device_mappings` below. Your options here may vary depending
on the type of VM you use. The block device mappings allow for the following
configuration:
- `ami_block_device_mappings` (array of block device mappings) - Add one or
more [block device mappings](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html)
to the AMI. These will be attached when booting a new instance from your
AMI. To add a block device during the Packer build see
`launch_block_device_mappings` below. Your options here may vary depending
on the type of VM you use. The block device mappings allow for the following
configuration:
- `delete_on_termination` (boolean) - Indicates whether the EBS volume is
deleted on instance termination. Default `false`. **NOTE**: If this
value is not explicitly set to `true` and volumes are not cleaned up by
an alternative method, additional volumes will accumulate after
every build.
- `delete_on_termination` (boolean) - Indicates whether the EBS volume is
deleted on instance termination. Default `false`. **NOTE**: If this
value is not explicitly set to `true` and volumes are not cleaned up by
an alternative method, additional volumes will accumulate after
every build.
- `device_name` (string) - The device name exposed to the instance (for
example, `/dev/sdh` or `xvdh`). Required when specifying `volume_size`.
- `device_name` (string) - The device name exposed to the instance (for
example, `/dev/sdh` or `xvdh`). Required when specifying `volume_size`.
- `encrypted` (boolean) - Indicates whether to encrypt the volume or not
- `encrypted` (boolean) - Indicates whether to encrypt the volume or not
- `iops` (integer) - The number of I/O operations per second (IOPS) that the
volume supports. See the documentation on
[IOPs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html)
for more information
- `iops` (integer) - The number of I/O operations per second (IOPS) that the
volume supports. See the documentation on
[IOPs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html)
for more information
- `no_device` (boolean) - Suppresses the specified device included in the
block device mapping of the AMI
- `no_device` (boolean) - Suppresses the specified device included in the
block device mapping of the AMI
- `snapshot_id` (string) - The ID of the snapshot
- `snapshot_id` (string) - The ID of the snapshot
- `virtual_name` (string) - The virtual device name. See the documentation on
[Block Device
Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html)
for more information
- `virtual_name` (string) - The virtual device name. See the documentation on
[Block Device
Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html)
for more information
- `volume_size` (integer) - The size of the volume, in GiB. Required if not
specifying a `snapshot_id`
- `volume_size` (integer) - The size of the volume, in GiB. Required if not
specifying a `snapshot_id`
- `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD)
volumes, `io1` for Provisioned IOPS (SSD) volumes, and `standard` for Magnetic
volumes
- `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD)
volumes, `io1` for Provisioned IOPS (SSD) volumes, and `standard` for Magnetic
volumes
- `ami_description` (string) - The description to set for the
resulting AMI(s). By default this description is empty. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `ami_description` (string) - The description to set for the
resulting AMI(s). By default this description is empty. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `ami_groups` (array of strings) - A list of groups that have access to
launch the resulting AMI(s). By default no groups have permission to launch
the AMI. `all` will make the AMI publicly accessible. AWS currently doesn't
accept any value other than `all`.
- `ami_groups` (array of strings) - A list of groups that have access to
launch the resulting AMI(s). By default no groups have permission to launch
the AMI. `all` will make the AMI publicly accessible. AWS currently doesn't
accept any value other than `all`.
- `ami_product_codes` (array of strings) - A list of product codes to
associate with the AMI. By default no product codes are associated with
the AMI.
- `ami_product_codes` (array of strings) - A list of product codes to
associate with the AMI. By default no product codes are associated with
the AMI.
- `ami_regions` (array of strings) - A list of regions to copy the AMI to.
Tags and attributes are copied along with the AMI. AMI copying takes time
depending on the size of the AMI, but will generally take many minutes.
- `ami_regions` (array of strings) - A list of regions to copy the AMI to.
Tags and attributes are copied along with the AMI. AMI copying takes time
depending on the size of the AMI, but will generally take many minutes.
- `ami_users` (array of strings) - A list of account IDs that have access to
launch the resulting AMI(s). By default no additional users other than the
user creating the AMI has permissions to launch it.
- `ami_users` (array of strings) - A list of account IDs that have access to
launch the resulting AMI(s). By default no additional users other than the
user creating the AMI has permissions to launch it.
- `ami_virtualization_type` (string) - The type of virtualization for the AMI
you are building. This option must match the supported virtualization
type of `source_ami`. Can be `paravirtual` or `hvm`.
- `ami_virtualization_type` (string) - The type of virtualization for the AMI
you are building. This option must match the supported virtualization
type of `source_ami`. Can be `paravirtual` or `hvm`.
- `associate_public_ip_address` (boolean) - If using a non-default VPC, public
IP addresses are not provided by default. If this is toggled, your new
instance will get a Public IP.
- `associate_public_ip_address` (boolean) - If using a non-default VPC, public
IP addresses are not provided by default. If this is toggled, your new
instance will get a Public IP.
- `availability_zone` (string) - Destination availability zone to launch
instance in. Leave this empty to allow Amazon to auto-assign.
- `availability_zone` (string) - Destination availability zone to launch
instance in. Leave this empty to allow Amazon to auto-assign.
- `disable_stop_instance` (boolean) - Packer normally stops the build instance
after all provisioners have run. For Windows instances, it is sometimes
desirable to [run Sysprep](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ami-create-standard.html)
which will stop the instance for you. If this is set to true, Packer *will not*
stop the instance and will wait for you to stop it manually. You can do this
with a [windows-shell provisioner](https://www.packer.io/docs/provisioners/windows-shell.html).
- `disable_stop_instance` (boolean) - Packer normally stops the build instance
after all provisioners have run. For Windows instances, it is sometimes
desirable to [run Sysprep](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ami-create-standard.html)
which will stop the instance for you. If this is set to true, Packer *will not*
stop the instance and will wait for you to stop it manually. You can do this
with a [windows-shell provisioner](https://www.packer.io/docs/provisioners/windows-shell.html).
``` {.javascript}
```javascript
{
"type": "windows-shell",
"inline": ["\"c:\\Program Files\\Amazon\\Ec2ConfigService\\ec2config.exe\" -sysprep"]
}
```
- `ebs_optimized` (boolean) - Mark instance as [EBS
Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html).
Default `false`.
- `ebs_optimized` (boolean) - Mark instance as [EBS
Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html).
Default `false`.
- `enhanced_networking` (boolean) - Enable enhanced
networking (SriovNetSupport and ENA) on HVM-compatible AMIs. If true, add
`ec2:ModifyInstanceAttribute` to your AWS IAM policy.
- `enhanced_networking` (boolean) - Enable enhanced
networking (SriovNetSupport and ENA) on HVM-compatible AMIs. If true, add
`ec2:ModifyInstanceAttribute` to your AWS IAM policy.
- `force_deregister` (boolean) - Force Packer to first deregister an existing
AMI if one with the same name already exists. Default `false`.
- `force_deregister` (boolean) - Force Packer to first deregister an existing
AMI if one with the same name already exists. Default `false`.
- `force_delete_snapshot` (boolean) - Force Packer to delete snapshots associated with
AMIs, which have been deregistered by `force_deregister`. Default `false`.
- `force_delete_snapshot` (boolean) - Force Packer to delete snapshots associated with
AMIs, which have been deregistered by `force_deregister`. Default `false`.
- `encrypt_boot` (boolean) - Instruct packer to automatically create a copy of the
AMI with an encrypted boot volume (discarding the initial unencrypted AMI in the
process). Default `false`.
- `encrypt_boot` (boolean) - Instruct packer to automatically create a copy of the
AMI with an encrypted boot volume (discarding the initial unencrypted AMI in the
process). Default `false`.
- `kms_key_id` (string) - The ID of the KMS key to use for boot volume encryption.
This only applies to the main `region`, other regions where the AMI will be copied
will be encrypted by the default EBS KMS key.
- `kms_key_id` (string) - The ID of the KMS key to use for boot volume encryption.
This only applies to the main `region`, other regions where the AMI will be copied
will be encrypted by the default EBS KMS key.
- `iam_instance_profile` (string) - The name of an [IAM instance
profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)
to launch the EC2 instance with.
- `iam_instance_profile` (string) - The name of an [IAM instance
profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)
to launch the EC2 instance with.
- `launch_block_device_mappings` (array of block device mappings) - Add one or
more block devices before the Packer build starts. These are not necessarily
preserved when booting from the AMI built with Packer. See
`ami_block_device_mappings`, above, for details.
- `launch_block_device_mappings` (array of block device mappings) - Add one or
more block devices before the Packer build starts. These are not necessarily
preserved when booting from the AMI built with Packer. See
`ami_block_device_mappings`, above, for details.
- `run_tags` (object of key/value strings) - Tags to apply to the instance
that is *launched* to create the AMI. These tags are *not* applied to the
resulting AMI unless they're duplicated in `tags`. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `run_tags` (object of key/value strings) - Tags to apply to the instance
that is *launched* to create the AMI. These tags are *not* applied to the
resulting AMI unless they're duplicated in `tags`. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `run_volume_tags` (object of key/value strings) - Tags to apply to the volumes
that are *launched* to create the AMI. These tags are *not* applied to the
resulting AMI unless they're duplicated in `tags`. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `run_volume_tags` (object of key/value strings) - Tags to apply to the volumes
that are *launched* to create the AMI. These tags are *not* applied to the
resulting AMI unless they're duplicated in `tags`. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `security_group_id` (string) - The ID (*not* the name) of the security group
to assign to the instance. By default this is not set and Packer will
automatically create a new temporary security group to allow SSH access.
Note that if this is specified, you must be sure the security group allows
access to the `ssh_port` given below.
- `security_group_id` (string) - The ID (*not* the name) of the security group
to assign to the instance. By default this is not set and Packer will
automatically create a new temporary security group to allow SSH access.
Note that if this is specified, you must be sure the security group allows
access to the `ssh_port` given below.
- `security_group_ids` (array of strings) - A list of security groups as
described above. Note that if this is specified, you must omit the
`security_group_id`.
- `security_group_ids` (array of strings) - A list of security groups as
described above. Note that if this is specified, you must omit the
`security_group_id`.
- `shutdown_behavior` (string) - Automatically terminate instances on shutdown
in case Packer exits ungracefully. Possible values are "stop" and "terminate",
default is `stop`.
- `shutdown_behavior` (string) - Automatically terminate instances on shutdown
in case Packer exits ungracefully. Possible values are "stop" and "terminate",
default is `stop`.
- `skip_region_validation` (boolean) - Set to true if you want to skip
validation of the region configuration option. Default `false`.
- `skip_region_validation` (boolean) - Set to true if you want to skip
validation of the region configuration option. Default `false`.
- `snapshot_groups` (array of strings) - A list of groups that have access to
create volumes from the snapshot(s). By default no groups have permission to create
volumes form the snapshot(s). `all` will make the snapshot publicly accessible.
- `snapshot_groups` (array of strings) - A list of groups that have access to
create volumes from the snapshot(s). By default no groups have permission to create
volumes form the snapshot(s). `all` will make the snapshot publicly accessible.
- `snapshot_users` (array of strings) - A list of account IDs that have access to
create volumes from the snapshot(s). By default no additional users other than the
user creating the AMI has permissions to create volumes from the backing snapshot(s).
- `snapshot_users` (array of strings) - A list of account IDs that have access to
create volumes from the snapshot(s). By default no additional users other than the
user creating the AMI has permissions to create volumes from the backing snapshot(s).
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
They will override AMI tags if already applied to snapshot. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
They will override AMI tags if already applied to snapshot. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
Example:
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
Example:
``` {.javascript}
"source_ami_filter": {
```javascript
{
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "*ubuntu-xenial-16.04-amd64-server-*",
@ -244,95 +246,96 @@ builder.
},
"owners": ["099720109477"],
"most_recent": true
}
}
```
This selects the most recent Ubuntu 16.04 HVM EBS AMI from Canonical.
NOTE: This will fail unless *exactly* one AMI is returned. In the above
example, `most_recent` will cause this to succeed by selecting the newest image.
This selects the most recent Ubuntu 16.04 HVM EBS AMI from Canonical.
NOTE: This will fail unless *exactly* one AMI is returned. In the above
example, `most_recent` will cause this to succeed by selecting the newest image.
- `filters` (map of strings) - filters used to select a `source_ami`.
NOTE: This will fail unless *exactly* one AMI is returned.
Any filter described in the docs for [DescribeImages](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)
is valid.
- `filters` (map of strings) - filters used to select a `source_ami`.
NOTE: This will fail unless *exactly* one AMI is returned.
Any filter described in the docs for [DescribeImages](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)
is valid.
- `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
This is helpful to limit the AMIs to a trusted third party, or to your own account.
- `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
This is helpful to limit the AMIs to a trusted third party, or to your own account.
- `most_recent` (bool) - Selects the newest created image when true.
This is most useful for selecting a daily distro build.
- `most_recent` (bool) - Selects the newest created image when true.
This is most useful for selecting a daily distro build.
- `spot_price` (string) - The maximum hourly price to pay for a spot instance
to create the AMI. Spot instances are a type of instance that EC2 starts
when the current spot price is less than the maximum price you specify. Spot
price will be updated based on available spot instance capacity and current
spot instance requests. It may save you some costs. You can set this to
`auto` for Packer to automatically discover the best spot price or to "0"
to use an on demand instance (default).
- `spot_price` (string) - The maximum hourly price to pay for a spot instance
to create the AMI. Spot instances are a type of instance that EC2 starts
when the current spot price is less than the maximum price you specify. Spot
price will be updated based on available spot instance capacity and current
spot instance requests. It may save you some costs. You can set this to
`auto` for Packer to automatically discover the best spot price or to "0"
to use an on demand instance (default).
- `spot_price_auto_product` (string) - Required if `spot_price` is set
to `auto`. This tells Packer what sort of AMI you're launching to find the
best spot price. This must be one of: `Linux/UNIX`, `SUSE Linux`, `Windows`,
`Linux/UNIX (Amazon VPC)`, `SUSE Linux (Amazon VPC)`, `Windows (Amazon VPC)`
- `spot_price_auto_product` (string) - Required if `spot_price` is set
to `auto`. This tells Packer what sort of AMI you're launching to find the
best spot price. This must be one of: `Linux/UNIX`, `SUSE Linux`, `Windows`,
`Linux/UNIX (Amazon VPC)`, `SUSE Linux (Amazon VPC)`, `Windows (Amazon VPC)`
- `ssh_keypair_name` (string) - If specified, this is the key that will be
used for SSH with the machine. The key must match a key pair name loaded
up into Amazon EC2. By default, this is blank, and Packer will
generate a temporary keypair unless
[`ssh_password`](/docs/templates/communicator.html#ssh_password) is used.
[`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file)
or `ssh_agent_auth` must be specified when `ssh_keypair_name` is utilized.
- `ssh_keypair_name` (string) - If specified, this is the key that will be
used for SSH with the machine. The key must match a key pair name loaded
up into Amazon EC2. By default, this is blank, and Packer will
generate a temporary keypair unless
[`ssh_password`](/docs/templates/communicator.html#ssh_password) is used.
[`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file)
or `ssh_agent_auth` must be specified when `ssh_keypair_name` is utilized.
- `ssh_agent_auth` (boolean) - If true, the local SSH agent will be used to
authenticate connections to the source instance. No temporary keypair will
be created, and the values of `ssh_password` and `ssh_private_key_file` will
be ignored. To use this option with a key pair already configured in the source
AMI, leave the `ssh_keypair_name` blank. To associate an existing key pair
in AWS with the source instance, set the `ssh_keypair_name` field to the name
of the key pair.
- `ssh_agent_auth` (boolean) - If true, the local SSH agent will be used to
authenticate connections to the source instance. No temporary keypair will
be created, and the values of `ssh_password` and `ssh_private_key_file` will
be ignored. To use this option with a key pair already configured in the source
AMI, leave the `ssh_keypair_name` blank. To associate an existing key pair
in AWS with the source instance, set the `ssh_keypair_name` field to the name
of the key pair.
- `ssh_private_ip` (boolean) - If true, then SSH will always use the private
IP if available. Also works for WinRM.
- `ssh_private_ip` (boolean) - If true, then SSH will always use the private
IP if available. Also works for WinRM.
- `subnet_id` (string) - If using VPC, the ID of the subnet, such as
`subnet-12345def`, where Packer will launch the EC2 instance. This field is
required if you are using an non-default VPC.
- `subnet_id` (string) - If using VPC, the ID of the subnet, such as
`subnet-12345def`, where Packer will launch the EC2 instance. This field is
required if you are using an non-default VPC.
- `tags` (object of key/value strings) - Tags applied to the AMI and
relevant snapshots. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `tags` (object of key/value strings) - Tags applied to the AMI and
relevant snapshots. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `temporary_key_pair_name` (string) - The name of the temporary key pair
to generate. By default, Packer generates a name that looks like
`packer_<UUID>`, where \<UUID\> is a 36 character unique identifier.
- `temporary_key_pair_name` (string) - The name of the temporary key pair
to generate. By default, Packer generates a name that looks like
`packer_<UUID>`, where \<UUID\> is a 36 character unique identifier.
- `token` (string) - The access token to use. This is different from the
access key and secret key. If you're not sure what this is, then you
probably don't need it. This will also be read from the `AWS_SESSION_TOKEN`
environmental variable.
- `token` (string) - The access token to use. This is different from the
access key and secret key. If you're not sure what this is, then you
probably don't need it. This will also be read from the `AWS_SESSION_TOKEN`
environmental variable.
- `user_data` (string) - User data to apply when launching the instance. Note
that you need to be careful about escaping characters due to the templates
being JSON. It is often more convenient to use `user_data_file`, instead.
- `user_data` (string) - User data to apply when launching the instance. Note
that you need to be careful about escaping characters due to the templates
being JSON. It is often more convenient to use `user_data_file`, instead.
- `user_data_file` (string) - Path to a file that will be used for the user
data when launching the instance.
- `user_data_file` (string) - Path to a file that will be used for the user
data when launching the instance.
- `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
in order to create a temporary security group within the VPC. Requires `subnet_id`
to be set.
- `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
in order to create a temporary security group within the VPC. Requires `subnet_id`
to be set.
- `windows_password_timeout` (string) - The timeout for waiting for a Windows
password for Windows instances. Defaults to 20 minutes. Example value: `10m`
- `windows_password_timeout` (string) - The timeout for waiting for a Windows
password for Windows instances. Defaults to 20 minutes. Example value: `10m`
## Basic Example
Here is a basic example. You will need to provide access keys, and may need to
change the AMI IDs according to what images exist at the time the template is run:
``` {.javascript}
```javascript
{
"type": "amazon-ebs",
"access_key": "YOUR KEY HERE",
@ -345,7 +348,7 @@ change the AMI IDs according to what images exist at the time the template is ru
}
```
-&gt; **Note:** Packer can also read the access key and secret access key from
-> **Note:** Packer can also read the access key and secret access key from
environmental variables. See the configuration reference in the section above
for more information on what environmental variables Packer will look for.
@ -369,7 +372,7 @@ configuration of `launch_block_device_mappings` will expand the root volume
`ami_block_device_mappings` AWS will attach additional volumes `/dev/sdb` and
`/dev/sdc` when we boot a new instance of our AMI.
``` {.javascript}
```javascript
{
"type": "amazon-ebs",
"access_key": "YOUR KEY HERE",
@ -379,12 +382,14 @@ configuration of `launch_block_device_mappings` will expand the root volume
"instance_type": "t2.micro",
"ssh_username": "ubuntu",
"ami_name": "packer-quick-start {{timestamp}}",
"launch_block_device_mappings": [{
"device_name": "/dev/sda1",
"volume_size": 40,
"volume_type": "gp2",
"delete_on_termination": true
}],
"launch_block_device_mappings": [
{
"device_name": "/dev/sda1",
"volume_size": 40,
"volume_type": "gp2",
"delete_on_termination": true
}
],
"ami_block_device_mappings": [
{
"device_name": "/dev/sdb",
@ -405,7 +410,7 @@ Here is an example using the optional AMI tags. This will add the tags
provide your access keys, and may need to change the source AMI ID based on what
images exist when this template is run:
``` {.javascript}
```javascript
{
"type": "amazon-ebs",
"access_key": "YOUR KEY HERE",
@ -416,13 +421,13 @@ images exist when this template is run:
"ssh_username": "ubuntu",
"ami_name": "packer-quick-start {{timestamp}}",
"tags": {
"OS_Version": "Ubuntu",
"Release": "Latest"
"OS_Version": "Ubuntu",
"Release": "Latest"
}
}
```
-&gt; **Note:** Packer uses pre-built AMIs as the source for building images.
-> **Note:** Packer uses pre-built AMIs as the source for building images.
These source AMIs may include volumes that are not flagged to be destroyed on
termination of the instance building the new image. Packer will attempt to clean
up all residual volumes that are not designated by the user to remain after

View File

@ -1,25 +1,26 @@
---
description: |
The `amazon-ebssurrogate` Packer builder is like the chroot builder, but does
not require running inside an EC2 instance.
layout: docs
page_title: 'Amazon EBS Surrogate Builder'
...
sidebar_current: docs-builders-amazon-ebssurrogate
page_title: Amazon EBS Surrogate - Builders
description: |-
The amazon-ebssurrogate Packer builder is like the chroot builder, but does
not require running inside an EC2 instance.
---
# EBS Surrogate Builder
Type: `amazon-ebssurrogate`
The `amazon-ebssurrogate` Packer builder is able to create Amazon AMIs by running
a source instance with an attached volume, provisioning the attached volume in such
a way that it can be used as the root volume for the AMI, and then snapshotting and
creating the AMI from that volume.
The `amazon-ebssurrogate` Packer builder is able to create Amazon AMIs by
running a source instance with an attached volume, provisioning the attached
volume in such a way that it can be used as the root volume for the AMI, and
then snapshotting and creating the AMI from that volume.
This builder can therefore be used to bootstrap scratch-build images - for example
FreeBSD or Ubuntu using ZFS as the root file system.
This builder can therefore be used to bootstrap scratch-build images - for
example FreeBSD or Ubuntu using ZFS as the root file system.
This is all done in your own AWS account. The builder will create temporary
key pairs, security group rules, etc. that provide it temporary access to the
This is all done in your own AWS account. The builder will create temporary key
pairs, security group rules, etc. that provide it temporary access to the
instance while the image is being created.
## Configuration Reference
@ -34,33 +35,33 @@ builder.
### Required:
- `access_key` (string) - The access key used to communicate with AWS. [Learn
- `access_key` (string) - The access key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `instance_type` (string) - The EC2 instance type to use while building the
- `instance_type` (string) - The EC2 instance type to use while building the
AMI, such as `m1.small`.
- `region` (string) - The name of the region, such as `us-east-1`, in which to
- `region` (string) - The name of the region, such as `us-east-1`, in which to
launch the EC2 instance to create the AMI.
- `secret_key` (string) - The secret key used to communicate with AWS. [Learn
- `secret_key` (string) - The secret key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `source_ami` (string) - The initial AMI used as a base for the newly
- `source_ami` (string) - The initial AMI used as a base for the newly
created machine. `source_ami_filter` may be used instead to populate this
automatically.
- `ami_root_device` (block device mapping) - A block device mapping describing
- `ami_root_device` (block device mapping) - A block device mapping describing
the root device of the AMI. This looks like the mappings in `ami_block_device_mapping`,
except with an additional field:
- `source_device_name` (string) - The device name of the block device on the
- `source_device_name` (string) - The device name of the block device on the
source instance to be used as the root device for the AMI. This must correspond
to a block device in `launch_block_device_mapping`.
### Optional:
- `ami_block_device_mappings` (array of block device mappings) - Add one or
- `ami_block_device_mappings` (array of block device mappings) - Add one or
more [block device mappings](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html)
to the AMI. These will be attached when booting a new instance from your
AMI. To add a block device during the packer build see
@ -68,168 +69,169 @@ builder.
on the type of VM you use. The block device mappings allow for the following
configuration:
- `delete_on_termination` (boolean) - Indicates whether the EBS volume is
- `delete_on_termination` (boolean) - Indicates whether the EBS volume is
deleted on instance termination. Default `false`. **NOTE**: If this
value is not explicitly set to `true` and volumes are not cleaned up by
an alternative method, additional volumes will accumulate after
every build.
- `device_name` (string) - The device name exposed to the instance (for
- `device_name` (string) - The device name exposed to the instance (for
example, `/dev/sdh` or `xvdh`). Required when specifying `volume_size`.
- `encrypted` (boolean) - Indicates whether to encrypt the volume or not
- `encrypted` (boolean) - Indicates whether to encrypt the volume or not
- `iops` (integer) - The number of I/O operations per second (IOPS) that the
- `iops` (integer) - The number of I/O operations per second (IOPS) that the
volume supports. See the documentation on
[IOPs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html)
for more information
- `no_device` (boolean) - Suppresses the specified device included in the
- `no_device` (boolean) - Suppresses the specified device included in the
block device mapping of the AMI
- `snapshot_id` (string) - The ID of the snapshot
- `snapshot_id` (string) - The ID of the snapshot
- `virtual_name` (string) - The virtual device name. See the documentation on
- `virtual_name` (string) - The virtual device name. See the documentation on
[Block Device
Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html)
for more information
- `volume_size` (integer) - The size of the volume, in GiB. Required if not
- `volume_size` (integer) - The size of the volume, in GiB. Required if not
specifying a `snapshot_id`
- `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD)
- `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD)
volumes, `io1` for Provisioned IOPS (SSD) volumes, and `standard` for Magnetic
volumes
- `ami_description` (string) - The description to set for the
- `ami_description` (string) - The description to set for the
resulting AMI(s). By default this description is empty. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `ami_groups` (array of strings) - A list of groups that have access to
- `ami_groups` (array of strings) - A list of groups that have access to
launch the resulting AMI(s). By default no groups have permission to launch
the AMI. `all` will make the AMI publicly accessible. AWS currently doesn't
accept any value other than `all`.
- `ami_product_codes` (array of strings) - A list of product codes to
- `ami_product_codes` (array of strings) - A list of product codes to
associate with the AMI. By default no product codes are associated with
the AMI.
- `ami_regions` (array of strings) - A list of regions to copy the AMI to.
- `ami_regions` (array of strings) - A list of regions to copy the AMI to.
Tags and attributes are copied along with the AMI. AMI copying takes time
depending on the size of the AMI, but will generally take many minutes.
- `ami_users` (array of strings) - A list of account IDs that have access to
- `ami_users` (array of strings) - A list of account IDs that have access to
launch the resulting AMI(s). By default no additional users other than the
user creating the AMI has permissions to launch it.
- `ami_virtualization_type` (string) - The type of virtualization for the AMI
- `ami_virtualization_type` (string) - The type of virtualization for the AMI
you are building. This option must match the supported virtualization
type of `source_ami`. Can be `paravirtual` or `hvm`.
- `associate_public_ip_address` (boolean) - If using a non-default VPC, public
- `associate_public_ip_address` (boolean) - If using a non-default VPC, public
IP addresses are not provided by default. If this is toggled, your new
instance will get a Public IP.
- `availability_zone` (string) - Destination availability zone to launch
- `availability_zone` (string) - Destination availability zone to launch
instance in. Leave this empty to allow Amazon to auto-assign.
- `disable_stop_instance` (boolean) - Packer normally stops the build instance
- `disable_stop_instance` (boolean) - Packer normally stops the build instance
after all provisioners have run. For Windows instances, it is sometimes
desirable to [run Sysprep](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ami-create-standard.html)
which will stop the instance for you. If this is set to true, Packer *will not*
stop the instance and will wait for you to stop it manually. You can do this
with a [windows-shell provisioner](https://www.packer.io/docs/provisioners/windows-shell.html).
``` {.javascript}
```javascript
{
"type": "windows-shell",
"inline": ["\"c:\\Program Files\\Amazon\\Ec2ConfigService\\ec2config.exe\" -sysprep"]
}
```
- `ebs_optimized` (boolean) - Mark instance as [EBS
- `ebs_optimized` (boolean) - Mark instance as [EBS
Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html).
Default `false`.
- `enhanced_networking` (boolean) - Enable enhanced
- `enhanced_networking` (boolean) - Enable enhanced
networking (SriovNetSupport) on HVM-compatible AMIs. If true, add
`ec2:ModifyInstanceAttribute` to your AWS IAM policy.
- `force_deregister` (boolean) - Force Packer to first deregister an existing
- `force_deregister` (boolean) - Force Packer to first deregister an existing
AMI if one with the same name already exists. Default `false`.
- `force_delete_snapshot` (boolean) - Force Packer to delete snapshots associated with
- `force_delete_snapshot` (boolean) - Force Packer to delete snapshots associated with
AMIs, which have been deregistered by `force_deregister`. Default `false`.
- `encrypt_boot` (boolean) - Instruct packer to automatically create a copy of the
- `encrypt_boot` (boolean) - Instruct packer to automatically create a copy of the
AMI with an encrypted boot volume (discarding the initial unencrypted AMI in the
process). Default `false`.
- `kms_key_id` (string) - The ID of the KMS key to use for boot volume encryption.
- `kms_key_id` (string) - The ID of the KMS key to use for boot volume encryption.
This only applies to the main `region`, other regions where the AMI will be copied
will be encrypted by the default EBS KMS key.
- `iam_instance_profile` (string) - The name of an [IAM instance
- `iam_instance_profile` (string) - The name of an [IAM instance
profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)
to launch the EC2 instance with.
- `launch_block_device_mappings` (array of block device mappings) - Add one or
- `launch_block_device_mappings` (array of block device mappings) - Add one or
more block devices before the packer build starts. These are not necessarily
preserved when booting from the AMI built with packer. See
`ami_block_device_mappings`, above, for details.
- `run_tags` (object of key/value strings) - Tags to apply to the instance
- `run_tags` (object of key/value strings) - Tags to apply to the instance
that is *launched* to create the AMI. These tags are *not* applied to the
resulting AMI unless they're duplicated in `tags`. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `run_volume_tags` (object of key/value strings) - Tags to apply to the volumes
- `run_volume_tags` (object of key/value strings) - Tags to apply to the volumes
that are *launched* to create the AMI. These tags are *not* applied to the
resulting AMI unless they're duplicated in `tags`. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `security_group_id` (string) - The ID (*not* the name) of the security group
- `security_group_id` (string) - The ID (*not* the name) of the security group
to assign to the instance. By default this is not set and Packer will
automatically create a new temporary security group to allow SSH access.
Note that if this is specified, you must be sure the security group allows
access to the `ssh_port` given below.
- `security_group_ids` (array of strings) - A list of security groups as
- `security_group_ids` (array of strings) - A list of security groups as
described above. Note that if this is specified, you must omit the
`security_group_id`.
- `shutdown_behavior` (string) - Automatically terminate instances on shutdown
- `shutdown_behavior` (string) - Automatically terminate instances on shutdown
incase packer exits ungracefully. Possible values are "stop" and "terminate",
default is `stop`.
- `skip_region_validation` (boolean) - Set to true if you want to skip
- `skip_region_validation` (boolean) - Set to true if you want to skip
validation of the region configuration option. Default `false`.
- `snapshot_groups` (array of strings) - A list of groups that have access to
- `snapshot_groups` (array of strings) - A list of groups that have access to
create volumes from the snapshot(s). By default no groups have permission to create
volumes form the snapshot(s). `all` will make the snapshot publicly accessible.
- `snapshot_users` (array of strings) - A list of account IDs that have access to
- `snapshot_users` (array of strings) - A list of account IDs that have access to
create volumes from the snapshot(s). By default no additional users other than the
user creating the AMI has permissions to create volumes from the backing snapshot(s).
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
They will override AMI tags if already applied to snapshot. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
Example:
``` {.javascript}
"source_ami_filter": {
```json
{
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "*ubuntu-xenial-16.04-amd64-server-*",
@ -237,6 +239,7 @@ builder.
},
"owners": ["099720109477"],
"most_recent": true
}
}
```
@ -244,18 +247,18 @@ builder.
NOTE: This will fail unless *exactly* one AMI is returned. In the above
example, `most_recent` will cause this to succeed by selecting the newest image.
- `filters` (map of strings) - filters used to select a `source_ami`.
- `filters` (map of strings) - filters used to select a `source_ami`.
NOTE: This will fail unless *exactly* one AMI is returned.
Any filter described in the docs for [DescribeImages](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)
is valid.
- `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
- `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
This is helpful to limit the AMIs to a trusted third party, or to your own account.
- `most_recent` (bool) - Selects the newest created image when true.
- `most_recent` (bool) - Selects the newest created image when true.
This is most useful for selecting a daily distro build.
- `spot_price` (string) - The maximum hourly price to pay for a spot instance
- `spot_price` (string) - The maximum hourly price to pay for a spot instance
to create the AMI. Spot instances are a type of instance that EC2 starts
when the current spot price is less than the maximum price you specify. Spot
price will be updated based on available spot instance capacity and current
@ -263,12 +266,12 @@ builder.
`auto` for Packer to automatically discover the best spot price or to "0"
to use an on demand instance (default).
- `spot_price_auto_product` (string) - Required if `spot_price` is set
- `spot_price_auto_product` (string) - Required if `spot_price` is set
to `auto`. This tells Packer what sort of AMI you're launching to find the
best spot price. This must be one of: `Linux/UNIX`, `SUSE Linux`, `Windows`,
`Linux/UNIX (Amazon VPC)`, `SUSE Linux (Amazon VPC)`, `Windows (Amazon VPC)`
- `ssh_keypair_name` (string) - If specified, this is the key that will be
- `ssh_keypair_name` (string) - If specified, this is the key that will be
used for SSH with the machine. The key must match a key pair name loaded
up into Amazon EC2. By default, this is blank, and Packer will
generate a temporary keypair unless
@ -276,7 +279,7 @@ builder.
[`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file)
or `ssh_agent_auth` must be specified when `ssh_keypair_name` is utilized.
- `ssh_agent_auth` (boolean) - If true, the local SSH agent will be used to
- `ssh_agent_auth` (boolean) - If true, the local SSH agent will be used to
authenticate connections to the source instance. No temporary keypair will
be created, and the values of `ssh_password` and `ssh_private_key_file` will
be ignored. To use this option with a key pair already configured in the source
@ -284,39 +287,39 @@ builder.
in AWS with the source instance, set the `ssh_keypair_name` field to the name
of the key pair.
- `ssh_private_ip` (boolean) - If true, then SSH will always use the private
- `ssh_private_ip` (boolean) - If true, then SSH will always use the private
IP if available.
- `subnet_id` (string) - If using VPC, the ID of the subnet, such as
- `subnet_id` (string) - If using VPC, the ID of the subnet, such as
`subnet-12345def`, where Packer will launch the EC2 instance. This field is
required if you are using an non-default VPC.
- `tags` (object of key/value strings) - Tags applied to the AMI and
- `tags` (object of key/value strings) - Tags applied to the AMI and
relevant snapshots. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `temporary_key_pair_name` (string) - The name of the temporary keypair
- `temporary_key_pair_name` (string) - The name of the temporary keypair
to generate. By default, Packer generates a name with a UUID.
- `token` (string) - The access token to use. This is different from the
- `token` (string) - The access token to use. This is different from the
access key and secret key. If you're not sure what this is, then you
probably don't need it. This will also be read from the `AWS_SESSION_TOKEN`
environmental variable.
- `user_data` (string) - User data to apply when launching the instance. Note
- `user_data` (string) - User data to apply when launching the instance. Note
that you need to be careful about escaping characters due to the templates
being JSON. It is often more convenient to use `user_data_file`, instead.
- `user_data_file` (string) - Path to a file that will be used for the user
- `user_data_file` (string) - Path to a file that will be used for the user
data when launching the instance.
- `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
- `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
in order to create a temporary security group within the VPC. Requires `subnet_id`
to be set.
- `windows_password_timeout` (string) - The timeout for waiting for a Windows
- `windows_password_timeout` (string) - The timeout for waiting for a Windows
password for Windows instances. Defaults to 20 minutes. Example value: `10m`
## Basic Example
@ -324,7 +327,7 @@ builder.
Here is a basic example. You will need to provide access keys, and may need to
change the AMI IDs according to what images exist at the time the template is run:
``` {.javascript}
```javascript
{
"type": "amazon-ebs",
"access_key": "YOUR KEY HERE",
@ -337,7 +340,7 @@ change the AMI IDs according to what images exist at the time the template is ru
}
```
-&gt; **Note:** Packer can also read the access key and secret access key from
-> **Note:** Packer can also read the access key and secret access key from
environmental variables. See the configuration reference in the section above
for more information on what environmental variables Packer will look for.
@ -348,7 +351,7 @@ or [for Windows](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/finding-a
## Basic Example
``` {.javascript}
```javascript
{
"type" : "amazon-surrogate",
"secret_key" : "YOUR SECRET KEY HERE",
@ -358,25 +361,24 @@ or [for Windows](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/finding-a
"instance_type" : "t2.medium",
"source_ami" : "ami-40d28157",
"launch_block_device_mappings" : [
{
"volume_type" : "gp2",
"device_name" : "/dev/xvdf",
"delete_on_termination" : false,
"volume_size" : 10
},
{
"volume_type" : "gp2",
"device_name" : "/dev/xvdf",
"delete_on_termination" : false,
"volume_size" : 10
}
],
"ami_root_device": {
"source_device_name": "/dev/xvdf",
"device_name": "/dev/xvda",
"delete_on_termination": true,
"volume_size": 16,
"volume_type": "gp2"
"source_device_name": "/dev/xvdf",
"device_name": "/dev/xvda",
"delete_on_termination": true,
"volume_size": 16,
"volume_type": "gp2"
}
}
```
-&gt; **Note:** Packer can also read the access key and secret access key from
-> **Note:** Packer can also read the access key and secret access key from
environmental variables. See the configuration reference in the section above
for more information on what environmental variables Packer will look for.
@ -392,7 +394,7 @@ with the `-debug` flag. In debug mode, the Amazon builder will save the private
key in the current directory and will output the DNS or IP information as well.
You can use this information to access the instance as it is running.
-&gt; **Note:** Packer uses pre-built AMIs as the source for building images.
-> **Note:** Packer uses pre-built AMIs as the source for building images.
These source AMIs may include volumes that are not flagged to be destroyed on
termination of the instance building the new image. In addition to those volumes
created by this builder, any volumes inn the source AMI which are not marked for

View File

@ -1,10 +1,11 @@
---
description: |
The `amazon-ebsvolume` Packer builder is like the EBS builder, but is
intended to create EBS volumes rather than a machine image.
layout: docs
page_title: 'Amazon EBS Volume Builder'
...
sidebar_current: docs-builders-amazon-ebsvolume
page_title: Amazon EBS Volume - Builders
description: |-
The amazon-ebsvolume Packer builder is like the EBS builder, but is intended
to create EBS volumes rather than a machine image.
---
# EBS Volume Builder
@ -14,15 +15,15 @@ The `amazon-ebsvolume` Packer builder is able to create Amazon Elastic Block
Store volumes which are prepopulated with filesystems or data.
This builder builds EBS volumes by launching an EC2 instance from a source AMI,
provisioning that running machine, and then destroying the source machine, keeping
the volumes intact.
provisioning that running machine, and then destroying the source machine,
keeping the volumes intact.
This is all done in your own AWS account. The builder will create temporary
key pairs, security group rules, etc. that provide it temporary access to the
This is all done in your own AWS account. The builder will create temporary key
pairs, security group rules, etc. that provide it temporary access to the
instance while the image is being created.
The builder does *not* manage EBS Volumes. Once it creates volumes and stores
it in your account, it is up to you to use, delete, etc. the volumes.
The builder does *not* manage EBS Volumes. Once it creates volumes and stores it
in your account, it is up to you to use, delete, etc. the volumes.
-> **Note:** Temporary resources are, by default, all created with the prefix
`packer`. This can be useful if you want to restrict the security groups and
@ -40,110 +41,111 @@ builder.
### Required:
- `access_key` (string) - The access key used to communicate with AWS. [Learn
- `access_key` (string) - The access key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `instance_type` (string) - The EC2 instance type to use while building the
- `instance_type` (string) - The EC2 instance type to use while building the
AMI, such as `m1.small`.
- `region` (string) - The name of the region, such as `us-east-1`, in which to
- `region` (string) - The name of the region, such as `us-east-1`, in which to
launch the EC2 instance to create the AMI.
- `secret_key` (string) - The secret key used to communicate with AWS. [Learn
- `secret_key` (string) - The secret key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `source_ami` (string) - The initial AMI used as a base for the newly
- `source_ami` (string) - The initial AMI used as a base for the newly
created machine. `source_ami_filter` may be used instead to populate this
automatically.
### Optional:
- `ebs_volumes` (array of block device mappings) - Add the block
- `ebs_volumes` (array of block device mappings) - Add the block
device mappings to the AMI. The block device mappings allow for keys:
- `device_name` (string) - The device name exposed to the instance (for
- `device_name` (string) - The device name exposed to the instance (for
example, `/dev/sdh` or `xvdh`). Required when specifying `volume_size`.
- `delete_on_termination` (boolean) - Indicates whether the EBS volume is
- `delete_on_termination` (boolean) - Indicates whether the EBS volume is
deleted on instance termination
- `encrypted` (boolean) - Indicates whether to encrypt the volume or not
- `iops` (integer) - The number of I/O operations per second (IOPS) that the
- `encrypted` (boolean) - Indicates whether to encrypt the volume or not
- `iops` (integer) - The number of I/O operations per second (IOPS) that the
volume supports. See the documentation on
[IOPs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html)
for more information
- `no_device` (boolean) - Suppresses the specified device included in the
- `no_device` (boolean) - Suppresses the specified device included in the
block device mapping of the AMI
- `snapshot_id` (string) - The ID of the snapshot
- `virtual_name` (string) - The virtual device name. See the documentation on
- `snapshot_id` (string) - The ID of the snapshot
- `virtual_name` (string) - The virtual device name. See the documentation on
[Block Device
Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html)
for more information
- `volume_size` (integer) - The size of the volume, in GiB. Required if not
- `volume_size` (integer) - The size of the volume, in GiB. Required if not
specifying a `snapshot_id`
- `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD)
- `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD)
volumes, `io1` for Provisioned IOPS (SSD) volumes, and `standard` for Magnetic
volumes
- `tags` (map) - Tags to apply to the volume. These are retained after the
- `tags` (map) - Tags to apply to the volume. These are retained after the
builder completes. This is a [configuration template]
(/docs/templates/configuration-templates.html) where the `SourceAMI`
variable is replaced with the source AMI ID and `BuildRegion` variable
is replaced with the value of `region`.
- `associate_public_ip_address` (boolean) - If using a non-default VPC, public
- `associate_public_ip_address` (boolean) - If using a non-default VPC, public
IP addresses are not provided by default. If this is toggled, your new
instance will get a Public IP.
- `availability_zone` (string) - Destination availability zone to launch
- `availability_zone` (string) - Destination availability zone to launch
instance in. Leave this empty to allow Amazon to auto-assign.
- `ebs_optimized` (boolean) - Mark instance as [EBS
- `ebs_optimized` (boolean) - Mark instance as [EBS
Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html).
Default `false`.
- `enhanced_networking` (boolean) - Enable enhanced
- `enhanced_networking` (boolean) - Enable enhanced
networking (SriovNetSupport and ENA) on HVM-compatible AMIs. If true, add
`ec2:ModifyInstanceAttribute` to your AWS IAM policy.
- `iam_instance_profile` (string) - The name of an [IAM instance
- `iam_instance_profile` (string) - The name of an [IAM instance
profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)
to launch the EC2 instance with.
- `run_tags` (object of key/value strings) - Tags to apply to the instance
- `run_tags` (object of key/value strings) - Tags to apply to the instance
that is *launched* to create the AMI. These tags are *not* applied to the
resulting AMI unless they're duplicated in `tags`. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `security_group_id` (string) - The ID (*not* the name) of the security group
- `security_group_id` (string) - The ID (*not* the name) of the security group
to assign to the instance. By default this is not set and Packer will
automatically create a new temporary security group to allow SSH access.
Note that if this is specified, you must be sure the security group allows
access to the `ssh_port` given below.
- `security_group_ids` (array of strings) - A list of security groups as
- `security_group_ids` (array of strings) - A list of security groups as
described above. Note that if this is specified, you must omit the
`security_group_id`.
- `shutdown_behavior` (string) - Automatically terminate instances on shutdown
- `shutdown_behavior` (string) - Automatically terminate instances on shutdown
in case Packer exits ungracefully. Possible values are `stop` and `terminate`.
Defaults to `stop`.
- `skip_region_validation` (boolean) - Set to `true` if you want to skip
- `skip_region_validation` (boolean) - Set to `true` if you want to skip
validation of the region configuration option. Defaults to `false`.
- `snapshot_groups` (array of strings) - A list of groups that have access to
- `snapshot_groups` (array of strings) - A list of groups that have access to
create volumes from the snapshot(s). By default no groups have permission to create
volumes form the snapshot(s). `all` will make the snapshot publicly accessible.
- `snapshot_users` (array of strings) - A list of account IDs that have access to
- `snapshot_users` (array of strings) - A list of account IDs that have access to
create volumes from the snapshot(s). By default no additional users other than the
user creating the AMI has permissions to create volumes from the backing snapshot(s).
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
Example:
``` {.javascript}
"source_ami_filter": {
```json
{
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "*ubuntu-xenial-16.04-amd64-server-*",
@ -151,6 +153,7 @@ builder.
},
"owners": ["099720109477"],
"most_recent": true
}
}
```
@ -158,18 +161,18 @@ builder.
NOTE: This will fail unless *exactly* one AMI is returned. In the above
example, `most_recent` will cause this to succeed by selecting the newest image.
- `filters` (map of strings) - filters used to select a `source_ami`.
- `filters` (map of strings) - filters used to select a `source_ami`.
NOTE: This will fail unless *exactly* one AMI is returned.
Any filter described in the docs for [DescribeImages](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)
is valid.
- `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
- `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
This is helpful to limit the AMIs to a trusted third party, or to your own account.
- `most_recent` (bool) - Selects the newest created image when true.
- `most_recent` (bool) - Selects the newest created image when true.
This is most useful for selecting a daily distro build.
- `spot_price` (string) - The maximum hourly price to pay for a spot instance
- `spot_price` (string) - The maximum hourly price to pay for a spot instance
to create the AMI. Spot instances are a type of instance that EC2 starts
when the current spot price is less than the maximum price you specify. Spot
price will be updated based on available spot instance capacity and current
@ -177,95 +180,95 @@ builder.
`auto` for Packer to automatically discover the best spot price or to `0`
to use an on-demand instance (default).
- `spot_price_auto_product` (string) - Required if `spot_price` is set
- `spot_price_auto_product` (string) - Required if `spot_price` is set
to `auto`. This tells Packer what sort of AMI you're launching to find the
best spot price. This must be one of: `Linux/UNIX`, `SUSE Linux`, `Windows`,
`Linux/UNIX (Amazon VPC)`, `SUSE Linux (Amazon VPC)` or `Windows (Amazon VPC)`
- `ssh_keypair_name` (string) - If specified, this is the key that will be
- `ssh_keypair_name` (string) - If specified, this is the key that will be
used for SSH with the machine. By default, this is blank, and Packer will
generate a temporary key pair unless
[`ssh_password`](/docs/templates/communicator.html#ssh_password) is used.
[`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file)
must be specified with this.
- `ssh_private_ip` (boolean) - If `true`, then SSH will always use the private
- `ssh_private_ip` (boolean) - If `true`, then SSH will always use the private
IP if available. Also works for WinRM.
- `subnet_id` (string) - If using VPC, the ID of the subnet, such as
- `subnet_id` (string) - If using VPC, the ID of the subnet, such as
`subnet-12345def`, where Packer will launch the EC2 instance. This field is
required if you are using an non-default VPC.
- `temporary_key_pair_name` (string) - The name of the temporary key pair
- `temporary_key_pair_name` (string) - The name of the temporary key pair
to generate. By default, Packer generates a name that looks like
`packer_<UUID>`, where \<UUID\> is a 36 character unique identifier.
- `token` (string) - The access token to use. This is different from the
- `token` (string) - The access token to use. This is different from the
access key and secret key. If you're not sure what this is, then you
probably don't need it. This will also be read from the `AWS_SESSION_TOKEN`
environmental variable.
- `user_data` (string) - User data to apply when launching the instance. Note
- `user_data` (string) - User data to apply when launching the instance. Note
that you need to be careful about escaping characters due to the templates
being JSON. It is often more convenient to use `user_data_file`, instead.
- `user_data_file` (string) - Path to a file that will be used for the user
- `user_data_file` (string) - Path to a file that will be used for the user
data when launching the instance.
- `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
- `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
in order to create a temporary security group within the VPC. Requires `subnet_id`
to be set.
- `windows_password_timeout` (string) - The timeout for waiting for a Windows
- `windows_password_timeout` (string) - The timeout for waiting for a Windows
password for Windows instances. Defaults to 20 minutes. Example value: `10m`
## Basic Example
```
```json
{
"type" : "amazon-ebsvolume",
"secret_key" : "YOUR SECRET KEY HERE",
"access_key" : "YOUR KEY HERE",
"region" : "us-east-1",
"ssh_username" : "ubuntu",
"instance_type" : "t2.medium",
"source_ami" : "ami-40d28157",
"ebs_volumes" : [
{
"volume_type" : "gp2",
"device_name" : "/dev/xvdf",
"delete_on_termination" : false,
"tags" : {
"zpool" : "data",
"Name" : "Data1"
},
"volume_size" : 10
"type" : "amazon-ebsvolume",
"secret_key" : "YOUR SECRET KEY HERE",
"access_key" : "YOUR KEY HERE",
"region" : "us-east-1",
"ssh_username" : "ubuntu",
"instance_type" : "t2.medium",
"source_ami" : "ami-40d28157",
"ebs_volumes" : [
{
"volume_type" : "gp2",
"device_name" : "/dev/xvdf",
"delete_on_termination" : false,
"tags" : {
"zpool" : "data",
"Name" : "Data1"
},
{
"volume_type" : "gp2",
"device_name" : "/dev/xvdg",
"tags" : {
"zpool" : "data",
"Name" : "Data2"
},
"delete_on_termination" : false,
"volume_size" : 10
"volume_size" : 10
},
{
"volume_type" : "gp2",
"device_name" : "/dev/xvdg",
"tags" : {
"zpool" : "data",
"Name" : "Data2"
},
{
"volume_size" : 10,
"tags" : {
"Name" : "Data3",
"zpool" : "data"
},
"delete_on_termination" : false,
"device_name" : "/dev/xvdh",
"volume_type" : "gp2"
}
]
"delete_on_termination" : false,
"volume_size" : 10
},
{
"volume_size" : 10,
"tags" : {
"Name" : "Data3",
"zpool" : "data"
},
"delete_on_termination" : false,
"device_name" : "/dev/xvdh",
"volume_type" : "gp2"
}
]
}
```
-&gt; **Note:** Packer can also read the access key and secret access key from
-> **Note:** Packer can also read the access key and secret access key from
environmental variables. See the configuration reference in the section above
for more information on what environmental variables Packer will look for.
@ -281,7 +284,7 @@ with the `-debug` flag. In debug mode, the Amazon builder will save the private
key in the current directory and will output the DNS or IP information as well.
You can use this information to access the instance as it is running.
-&gt; **Note:** Packer uses pre-built AMIs as the source for building images.
-> **Note:** Packer uses pre-built AMIs as the source for building images.
These source AMIs may include volumes that are not flagged to be destroyed on
termination of the instance building the new image. In addition to those volumes
created by this builder, any volumes inn the source AMI which are not marked for

View File

@ -1,12 +1,13 @@
---
description: |
The `amazon-instance` Packer builder is able to create Amazon AMIs backed by
instance storage as the root device. For more information on the difference
between instance storage and EBS-backed instances, see the storage for the root
device section in the EC2 documentation.
layout: docs
page_title: 'Amazon AMI Builder (instance-store)'
...
sidebar_current: docs-builders-amazon-instance
page_title: Amazon instance-store - Builders
description: |-
The amazon-instance Packer builder is able to create Amazon AMIs backed by
instance storage as the root device. For more information on the difference
between instance storage and EBS-backed instances, see the storage for the
root device section in the EC2 documentation.
---
# AMI Builder (instance-store)
@ -51,45 +52,45 @@ builder.
### Required:
- `access_key` (string) - The access key used to communicate with AWS. [Learn
- `access_key` (string) - The access key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `account_id` (string) - Your AWS account ID. This is required for bundling
- `account_id` (string) - Your AWS account ID. This is required for bundling
the AMI. This is *not the same* as the access key. You can find your account
ID in the security credentials page of your AWS account.
- `ami_name` (string) - The name of the resulting AMI that will appear when
- `ami_name` (string) - The name of the resulting AMI that will appear when
managing AMIs in the AWS console or via APIs. This must be unique. To help
make this unique, use a function like `timestamp` (see [configuration
templates](/docs/templates/configuration-templates.html) for more info)
- `instance_type` (string) - The EC2 instance type to use while building the
- `instance_type` (string) - The EC2 instance type to use while building the
AMI, such as `m1.small`.
- `region` (string) - The name of the region, such as `us-east-1`, in which to
- `region` (string) - The name of the region, such as `us-east-1`, in which to
launch the EC2 instance to create the AMI.
- `s3_bucket` (string) - The name of the S3 bucket to upload the AMI. This
- `s3_bucket` (string) - The name of the S3 bucket to upload the AMI. This
bucket will be created if it doesn't exist.
- `secret_key` (string) - The secret key used to communicate with AWS. [Learn
- `secret_key` (string) - The secret key used to communicate with AWS. [Learn
how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `source_ami` (string) - The initial AMI used as a base for the newly
- `source_ami` (string) - The initial AMI used as a base for the newly
created machine.
- `x509_cert_path` (string) - The local path to a valid X509 certificate for
- `x509_cert_path` (string) - The local path to a valid X509 certificate for
your AWS account. This is used for bundling the AMI. This X509 certificate
must be registered with your account from the security credentials page in
the AWS console.
- `x509_key_path` (string) - The local path to the private key for the X509
- `x509_key_path` (string) - The local path to the private key for the X509
certificate specified by `x509_cert_path`. This is used for bundling
the AMI.
### Optional:
- `ami_block_device_mappings` (array of block device mappings) - Add one or
- `ami_block_device_mappings` (array of block device mappings) - Add one or
more [block device mappings](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html)
to the AMI. These will be attached when booting a new instance from your
AMI. To add a block device during the Packer build see
@ -97,145 +98,146 @@ builder.
on the type of VM you use. The block device mappings allow for the following
configuration:
- `delete_on_termination` (boolean) - Indicates whether the EBS volume is
- `delete_on_termination` (boolean) - Indicates whether the EBS volume is
deleted on instance termination. Default `false`. **NOTE**: If this
value is not explicitly set to `true` and volumes are not cleaned up by
an alternative method, additional volumes will accumulate after
every build.
- `device_name` (string) - The device name exposed to the instance (for
- `device_name` (string) - The device name exposed to the instance (for
example, `/dev/sdh` or `xvdh`). Required when specifying `volume_size`.
- `encrypted` (boolean) - Indicates whether to encrypt the volume or not
- `encrypted` (boolean) - Indicates whether to encrypt the volume or not
- `iops` (integer) - The number of I/O operations per second (IOPS) that the
- `iops` (integer) - The number of I/O operations per second (IOPS) that the
volume supports. See the documentation on
[IOPs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html)
for more information
- `no_device` (boolean) - Suppresses the specified device included in the
- `no_device` (boolean) - Suppresses the specified device included in the
block device mapping of the AMI
- `snapshot_id` (string) - The ID of the snapshot
- `snapshot_id` (string) - The ID of the snapshot
- `virtual_name` (string) - The virtual device name. See the documentation on
- `virtual_name` (string) - The virtual device name. See the documentation on
[Block Device
Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html)
for more information
- `volume_size` (integer) - The size of the volume, in GiB. Required if not
- `volume_size` (integer) - The size of the volume, in GiB. Required if not
specifying a `snapshot_id`
- `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD)
- `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD)
volumes, `io1` for Provisioned IOPS (SSD) volumes, and `standard` for Magnetic
volumes
- `ami_description` (string) - The description to set for the
- `ami_description` (string) - The description to set for the
resulting AMI(s). By default this description is empty. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `ami_groups` (array of strings) - A list of groups that have access to
- `ami_groups` (array of strings) - A list of groups that have access to
launch the resulting AMI(s). By default no groups have permission to launch
the AMI. `all` will make the AMI publicly accessible. AWS currently doesn't
accept any value other than `all`.
- `ami_product_codes` (array of strings) - A list of product codes to
- `ami_product_codes` (array of strings) - A list of product codes to
associate with the AMI. By default no product codes are associated with
the AMI.
- `ami_regions` (array of strings) - A list of regions to copy the AMI to.
- `ami_regions` (array of strings) - A list of regions to copy the AMI to.
Tags and attributes are copied along with the AMI. AMI copying takes time
depending on the size of the AMI, but will generally take many minutes.
- `ami_users` (array of strings) - A list of account IDs that have access to
- `ami_users` (array of strings) - A list of account IDs that have access to
launch the resulting AMI(s). By default no additional users other than the
user creating the AMI has permissions to launch it.
- `ami_virtualization_type` (string) - The type of virtualization for the AMI
- `ami_virtualization_type` (string) - The type of virtualization for the AMI
you are building. This option is required to register HVM images. Can be
`paravirtual` (default) or `hvm`.
- `associate_public_ip_address` (boolean) - If using a non-default VPC, public
- `associate_public_ip_address` (boolean) - If using a non-default VPC, public
IP addresses are not provided by default. If this is toggled, your new
instance will get a Public IP.
- `availability_zone` (string) - Destination availability zone to launch
- `availability_zone` (string) - Destination availability zone to launch
instance in. Leave this empty to allow Amazon to auto-assign.
- `bundle_destination` (string) - The directory on the running instance where
- `bundle_destination` (string) - The directory on the running instance where
the bundled AMI will be saved prior to uploading. By default this is `/tmp`.
This directory must exist and be writable.
- `bundle_prefix` (string) - The prefix for files created from bundling the
- `bundle_prefix` (string) - The prefix for files created from bundling the
root volume. By default this is `image-{{timestamp}}`. The `timestamp`
variable should be used to make sure this is unique, otherwise it can
collide with other created AMIs by Packer in your account.
- `bundle_upload_command` (string) - The command to use to upload the
- `bundle_upload_command` (string) - The command to use to upload the
bundled volume. See the "custom bundle commands" section below for
more information.
- `bundle_vol_command` (string) - The command to use to bundle the volume. See
- `bundle_vol_command` (string) - The command to use to bundle the volume. See
the "custom bundle commands" section below for more information.
- `ebs_optimized` (boolean) - Mark instance as [EBS
- `ebs_optimized` (boolean) - Mark instance as [EBS
Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html).
Default `false`.
- `enhanced_networking` (boolean) - Enable enhanced
- `enhanced_networking` (boolean) - Enable enhanced
networking (SriovNetSupport and ENA) on HVM-compatible AMIs. If true, add
`ec2:ModifyInstanceAttribute` to your AWS IAM policy.
- `force_deregister` (boolean) - Force Packer to first deregister an existing
- `force_deregister` (boolean) - Force Packer to first deregister an existing
AMI if one with the same name already exists. Defaults to `false`.
- `force_delete_snapshot` (boolean) - Force Packer to delete snapshots associated with
- `force_delete_snapshot` (boolean) - Force Packer to delete snapshots associated with
AMIs, which have been deregistered by `force_deregister`. Defaults to `false`.
- `iam_instance_profile` (string) - The name of an [IAM instance
- `iam_instance_profile` (string) - The name of an [IAM instance
profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)
to launch the EC2 instance with.
- `launch_block_device_mappings` (array of block device mappings) - Add one or
- `launch_block_device_mappings` (array of block device mappings) - Add one or
more block devices before the Packer build starts. These are not necessarily
preserved when booting from the AMI built with Packer. See
`ami_block_device_mappings`, above, for details.
- `run_tags` (object of key/value strings) - Tags to apply to the instance
- `run_tags` (object of key/value strings) - Tags to apply to the instance
that is *launched* to create the AMI. These tags are *not* applied to the
resulting AMI unless they're duplicated in `tags`. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `security_group_id` (string) - The ID (*not* the name) of the security group
- `security_group_id` (string) - The ID (*not* the name) of the security group
to assign to the instance. By default this is not set and Packer will
automatically create a new temporary security group to allow SSH access.
Note that if this is specified, you must be sure the security group allows
access to the `ssh_port` given below.
- `security_group_ids` (array of strings) - A list of security groups as
- `security_group_ids` (array of strings) - A list of security groups as
described above. Note that if this is specified, you must omit the
`security_group_id`.
- `skip_region_validation` (boolean) - Set to true if you want to skip
- `skip_region_validation` (boolean) - Set to true if you want to skip
validation of the region configuration option. Defaults to `false`.
- `snapshot_groups` (array of strings) - A list of groups that have access to
- `snapshot_groups` (array of strings) - A list of groups that have access to
create volumes from the snapshot(s). By default no groups have permission to create
volumes form the snapshot(s). `all` will make the snapshot publicly accessible.
- `snapshot_users` (array of strings) - A list of account IDs that have access to
- `snapshot_users` (array of strings) - A list of account IDs that have access to
create volumes from the snapshot(s). By default no additional users other than the
user creating the AMI has permissions to create volumes from the backing snapshot(s).
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
Example:
``` {.javascript}
"source_ami_filter": {
```json
{
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "*ubuntu-xenial-16.04-amd64-server-*",
@ -243,6 +245,7 @@ builder.
},
"owners": ["099720109477"],
"most_recent": true
}
}
```
@ -250,21 +253,21 @@ builder.
NOTE: This will fail unless *exactly* one AMI is returned. In the above
example, `most_recent` will cause this to succeed by selecting the newest image.
- `filters` (map of strings) - filters used to select a `source_ami`.
- `filters` (map of strings) - filters used to select a `source_ami`.
NOTE: This will fail unless *exactly* one AMI is returned.
Any filter described in the docs for [DescribeImages](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)
is valid.
- `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
- `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
This is helpful to limit the AMIs to a trusted third party, or to your own account.
- `most_recent` (bool) - Selects the newest created image when true.
- `most_recent` (bool) - Selects the newest created image when true.
This is most useful for selecting a daily distro build.
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
They will override AMI tags if already applied to snapshot.
- `spot_price` (string) - The maximum hourly price to launch a spot instance
- `spot_price` (string) - The maximum hourly price to launch a spot instance
to create the AMI. It is a type of instances that EC2 starts when the
maximum price that you specify exceeds the current spot price. Spot price
will be updated based on available spot instance capacity and current spot
@ -272,12 +275,12 @@ builder.
for Packer to automatically discover the best spot price or to `0` to use
an on-demand instance (default).
- `spot_price_auto_product` (string) - Required if `spot_price` is set
- `spot_price_auto_product` (string) - Required if `spot_price` is set
to `auto`. This tells Packer what sort of AMI you're launching to find the
best spot price. This must be one of: `Linux/UNIX`, `SUSE Linux`, `Windows`,
`Linux/UNIX (Amazon VPC)`, `SUSE Linux (Amazon VPC)`, `Windows (Amazon VPC)`
- `ssh_keypair_name` (string) - If specified, this is the key that will be
- `ssh_keypair_name` (string) - If specified, this is the key that will be
used for SSH with the machine. The key must match a key pair name loaded
up into Amazon EC2. By default, this is blank, and Packer will
generate a temporary key pair unless
@ -285,7 +288,7 @@ builder.
[`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file)
or `ssh_agent_auth` must be specified when `ssh_keypair_name` is utilized.
- `ssh_agent_auth` (boolean) - If true, the local SSH agent will be used to
- `ssh_agent_auth` (boolean) - If true, the local SSH agent will be used to
authenticate connections to the source instance. No temporary key pair will
be created, and the values of `ssh_password` and `ssh_private_key_file` will
be ignored. To use this option with a key pair already configured in the source
@ -293,46 +296,46 @@ builder.
in AWS with the source instance, set the `ssh_keypair_name` field to the name
of the key pair.
- `ssh_private_ip` (boolean) - If true, then SSH will always use the private
- `ssh_private_ip` (boolean) - If true, then SSH will always use the private
IP if available. Also works for WinRM.
- `subnet_id` (string) - If using VPC, the ID of the subnet, such as
- `subnet_id` (string) - If using VPC, the ID of the subnet, such as
`subnet-12345def`, where Packer will launch the EC2 instance. This field is
required if you are using an non-default VPC.
- `tags` (object of key/value strings) - Tags applied to the AMI. This is a
- `tags` (object of key/value strings) - Tags applied to the AMI. This is a
[configuration template](/docs/templates/configuration-templates.html)
where the `SourceAMI` variable is replaced with the source AMI ID and
`BuildRegion` variable is replaced with the value of `region`.
- `temporary_key_pair_name` (string) - The name of the temporary key pair
- `temporary_key_pair_name` (string) - The name of the temporary key pair
to generate. By default, Packer generates a name that looks like
`packer_<UUID>`, where \<UUID\> is a 36 character unique identifier.
- `user_data` (string) - User data to apply when launching the instance. Note
- `user_data` (string) - User data to apply when launching the instance. Note
that you need to be careful about escaping characters due to the templates
being JSON. It is often more convenient to use `user_data_file`, instead.
- `user_data_file` (string) - Path to a file that will be used for the user
- `user_data_file` (string) - Path to a file that will be used for the user
data when launching the instance.
- `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
- `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
in order to create a temporary security group within the VPC.
- `x509_upload_path` (string) - The path on the remote machine where the X509
- `x509_upload_path` (string) - The path on the remote machine where the X509
certificate will be uploaded. This path must already exist and be writable.
X509 certificates are uploaded after provisioning is run, so it is perfectly
okay to create this directory as part of the provisioning process. Defaults to
`/tmp`.
- `windows_password_timeout` (string) - The timeout for waiting for a Windows
- `windows_password_timeout` (string) - The timeout for waiting for a Windows
password for Windows instances. Defaults to 20 minutes. Example value: `10m`
## Basic Example
Here is a basic example. It is completely valid except for the access keys:
``` {.javascript}
```json
{
"type": "amazon-instance",
"access_key": "YOUR KEY HERE",
@ -352,7 +355,7 @@ Here is a basic example. It is completely valid except for the access keys:
}
```
-&gt; **Note:** Packer can also read the access key and secret access key from
-> **Note:** Packer can also read the access key and secret access key from
environmental variables. See the configuration reference in the section above
for more information on what environmental variables Packer will look for.
@ -387,7 +390,7 @@ multiple lines for convenience of reading. The bundle volume command is
responsible for executing `ec2-bundle-vol` in order to store and image of the
root filesystem to use to create the AMI.
``` {.text}
```text
sudo -i -n ec2-bundle-vol \
-k {{.KeyPath}} \
-u {{.AccountId}} \
@ -403,7 +406,7 @@ sudo -i -n ec2-bundle-vol \
The available template variables should be self-explanatory based on the
parameters they're used to satisfy the `ec2-bundle-vol` command.
\~&gt; **Warning!** Some versions of ec2-bundle-vol silently ignore all .pem and
~> **Warning!** Some versions of ec2-bundle-vol silently ignore all .pem and
.gpg files during the bundling of the AMI, which can cause problems on some
systems, such as Ubuntu. You may want to customize the bundle volume command to
include those files (see the `--no-filter` option of `ec2-bundle-vol`).
@ -415,7 +418,7 @@ multiple lines for convenience of reading. Access key and secret key are omitted
if using instance profile. The bundle upload command is responsible for taking
the bundled volume and uploading it to S3.
``` {.text}
```text
sudo -i -n ec2-upload-bundle \
-b {{.BucketName}} \
-m {{.ManifestPath}} \

View File

@ -1,10 +1,11 @@
---
description: |
Packer is able to create Amazon AMIs. To achieve this, Packer comes with
multiple builders depending on the strategy you want to use to build the AMI.
layout: docs
page_title: Amazon AMI Builder
...
sidebar_current: docs-builders-amazon
page_title: Amazon AMI - Builders
description: |-
Packer is able to create Amazon AMIs. To achieve this, Packer comes with
multiple builders depending on the strategy you want to use to build the AMI.
---
# Amazon AMI Builder
@ -33,7 +34,7 @@ Packer supports the following builders at the moment:
not require running in AWS. This is an **advanced builder and should not be
used by newcomers**.
-&gt; **Don't know which builder to use?** If in doubt, use the [amazon-ebs
-> **Don't know which builder to use?** If in doubt, use the [amazon-ebs
builder](/docs/builders/amazon-ebs.html). It is much easier to use and Amazon
generally recommends EBS-backed images nowadays.
@ -86,7 +87,7 @@ following steps:
3. Lookup an IAM role for the current EC2 instance (if you're running in EC2)
\~&gt; **Subtle details of automatic lookup may change over time.** The most
~> **Subtle details of automatic lookup may change over time.** The most
reliable way to specify your configuration is by setting them in template
variables (directly or indirectly), or by using the `AWS_ACCESS_KEY_ID` and
`AWS_SECRET_ACCESS_KEY` environment variables.
@ -104,7 +105,7 @@ the instance's IAM profile, if it has one.
The following policy document provides the minimal set permissions necessary for
Packer to work:
``` {.javascript}
```javascript
{
"Version": "2012-10-17",
"Statement": [{
@ -163,7 +164,7 @@ The example policy below may help packer work with IAM roles. Note that this
example provides more than the minimal set of permissions needed for packer to
work, but specifics will depend on your use-case.
``` {.json}
```json
{
"Sid": "PackerIAMPassRole",
"Effect": "Allow",

View File

@ -1,18 +1,24 @@
---
description: |
layout: docs
page_title: Authorizing Packer Builds in Azure
...
sidebar_current: docs-builders-azure-setup
page_title: Setup - Azure - Builders
description: |-
In order to build VMs in Azure, Packer needs various configuration options.
These options and how to obtain them are documented on this page.
---
# Authorizing Packer Builds in Azure
In order to build VMs in Azure Packer needs 6 configuration options to be specified:
- `subscription_id` - UUID identifying your Azure subscription (where billing is handled)
- `client_id` - UUID identifying the Active Directory service principal that will run your Packer builds
- `client_secret` - service principal secret / password
- `resource_group_name` - name of the resource group where your VHD(s) will be stored
- `storage_account` - name of the storage account where your VHD(s) will be stored
-> Behind the scenes Packer uses the OAuth protocol to authenticate against Azure Active Directory and authorize requests to the Azure Service Management API. These topics are unnecessarily complicated so we will try to ignore them for the rest of this document.<br /><br />You do not need to understand how OAuth works in order to use Packer with Azure, though the Active Directory terms "service principal" and "role" will be useful for understanding Azure's access policies.
@ -49,7 +55,9 @@ To get the credentials above, we will need to install the Azure CLI. Please refe
If you already have node.js installed you can use `npm` to install `azure-cli`:
npm install -g azure-cli --no-progress
```shell
$ npm install -g azure-cli --no-progress
```
## Guided Setup
@ -63,20 +71,26 @@ If you want more control or the script does not work for you, you can also use t
Login using the Azure CLI
azure config mode arm
azure login -u USERNAME
```shell
$ azure config mode arm
$ azure login -u USERNAME
```
Get your account information
azure account list --json | jq '.[].name'
azure account set ACCOUNTNAME
azure account show --json | jq ".[] | .id"
```shell
$ azure account list --json | jq -r '.[].name'
$ azure account set ACCOUNTNAME
$ azure account show --json | jq -r ".[] | .id"
```
-> Throughout this document when you see a command pipe to `jq` you may instead omit `--json` and everything after it, but the output will be more verbose. For example you can simply run `azure account list` instead.
This will print out one line that look like this:
"4f562e88-8caf-421a-b4da-e3f6786c52ec"
```
4f562e88-8caf-421a-b4da-e3f6786c52ec
```
This is your `subscription_id`. Note it for later.
@ -84,9 +98,12 @@ This is your `subscription_id`. Note it for later.
A [resource group](https://azure.microsoft.com/en-us/documentation/articles/resource-group-overview/#resource-groups) is used to organize related resources. Resource groups and storage accounts are tied to a location. To see available locations, run:
azure location list
...
azure group create -n GROUPNAME -l LOCATION
```shell
$ azure location list
# ...
$ azure group create -n GROUPNAME -l LOCATION
```
Your storage account (below) will need to use the same `GROUPNAME` and `LOCATION`.
@ -94,8 +111,13 @@ Your storage account (below) will need to use the same `GROUPNAME` and `LOCATION
We will need to create a storage account where your Packer artifacts will be stored. We will create a `LRS` storage account which is the least expensive price/GB at the time of writing.
azure storage account create -g GROUPNAME \
-l LOCATION --sku-name LRS --kind storage STORAGENAME
```shell
$ azure storage account create \
-g GROUPNAME \
-l LOCATION \
--sku-name LRS \
--kind storage STORAGENAME
```
-> `LRS` is meant as a literal "LRS" and not as a variable.
@ -105,7 +127,13 @@ Make sure that `GROUPNAME` and `LOCATION` are the same as above.
An application represents a way to authorize access to the Azure API. Note that you will need to specify a URL for your application (this is intended to be used for OAuth callbacks) but these do not actually need to be valid URLs.
azure ad app create -n APPNAME -i APPURL --home-page APPURL -p PASSWORD
```shell
$ azure ad app create \
-n APPNAME \
-i APPURL \
--home-page APPURL \
-p PASSWORD
```
Password is your `client_secret` and can be anything you like. I recommend using `openssl rand -base64 24`.
@ -115,21 +143,31 @@ You cannot directly grant permissions to an application. Instead, you create a s
First, get the `APPID` for the application we just created.
azure ad app list --json | \
jq '.[] | select(.displayName | contains("APPNAME")) | .appId'
azure ad sp create --applicationId APPID
```shell
$ azure ad app list --json \
| jq '.[] | select(.displayName | contains("APPNAME")) | .appId'
# ...
$ azure ad sp create --applicationId APPID
```
### Grant Permissions to Your Application
Finally, we will associate the proper permissions with our application's service principal. We're going to assign the `Owner` role to our Packer application and change the scope to manage our whole subscription. (The `Owner` role can be scoped to a specific resource group to further reduce the scope of the account.) This allows Packer to create temporary resource groups for each build.
azure role assignment create --spn APPURL -o "Owner" \
-c /subscriptions/SUBSCRIPTIONID
```shell
$ azure role assignment create \
--spn APPURL \
-o "Owner" \
-c /subscriptions/SUBSCRIPTIONID
```
There are a lot of pre-defined roles and you can define your own with more granular permissions, though this is out of scope. You can see a list of pre-configured roles via:
azure role list --json | \
jq ".[] | {name:.Name, description:.Description}"
```shell
$ azure role list --json \
| jq ".[] | {name:.Name, description:.Description}"
```
### Configuring Packer
@ -138,12 +176,17 @@ Now (finally) everything has been setup in Azure. Let's get our configuration ke
Get `subscription_id`:
azure account show --json | jq ".[] | .id"
```shell
$ azure account show --json \
| jq ".[] | .id"
```
Get `client_id`
azure ad app list --json | \
jq '.[] | select(.displayName | contains("APPNAME")) | .appId'
```shell
$ azure ad app list --json \
| jq '.[] | select(.displayName | contains("APPNAME")) | .appId'
```
Get `client_secret`
@ -151,8 +194,12 @@ This cannot be retrieved. If you forgot this, you will have to delete and re-cre
Get `resource_group_name`
azure group list
```shell
$ azure group list
```
Get `storage_account`
azure storage account list
```shell
$ azure storage account list
```

View File

@ -1,9 +1,10 @@
---
description: |
layout: docs
page_title: Azure Resource Manager
...
sidebar_current: docs-builders-azure
page_title: Azure - Builders
description: |-
Packer supports building VHDs in Azure Resource manager.
---
# Azure Resource Manager Builder
@ -25,89 +26,89 @@ builder.
### Required:
- `client_id` (string) The Active Directory service principal associated with your builder.
- `client_id` (string) The Active Directory service principal associated with your builder.
- `client_secret` (string) The password or secret for your service principal.
- `client_secret` (string) The password or secret for your service principal.
- `resource_group_name` (string) Resource group under which the final artifact will be stored.
- `resource_group_name` (string) Resource group under which the final artifact will be stored.
- `storage_account` (string) Storage account under which the final artifact will be stored.
- `storage_account` (string) Storage account under which the final artifact will be stored.
- `subscription_id` (string) Subscription under which the build will be performed. **The service principal specified in `client_id` must have full access to this subscription.**
- `subscription_id` (string) Subscription under which the build will be performed. **The service principal specified in `client_id` must have full access to this subscription.**
- `capture_container_name` (string) Destination container name. Essentially the "directory" where your VHD will be organized in Azure. The captured VHD's URL will be https://<storage_account>.blob.core.windows.net/system/Microsoft.Compute/Images/<capture_container_name>/<capture_name_prefix>.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.vhd.
- `capture_container_name` (string) Destination container name. Essentially the "directory" where your VHD will be organized in Azure. The captured VHD's URL will be https://<storage_account>.blob.core.windows.net/system/Microsoft.Compute/Images/<capture_container_name>/<capture_name_prefix>.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.vhd.
- `capture_name_prefix` (string) VHD prefix. The final artifacts will be named `PREFIX-osDisk.UUID` and `PREFIX-vmTemplate.UUID`.
- `capture_name_prefix` (string) VHD prefix. The final artifacts will be named `PREFIX-osDisk.UUID` and `PREFIX-vmTemplate.UUID`.
- `image_publisher` (string) PublisherName for your base image. See [documentation](https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching/) for details.
- `image_publisher` (string) PublisherName for your base image. See [documentation](https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching/) for details.
CLI example `azure vm image list-publishers -l westus`
- `image_offer` (string) Offer for your base image. See [documentation](https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching/) for details.
- `image_offer` (string) Offer for your base image. See [documentation](https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching/) for details.
CLI example `azure vm image list-offers -l westus -p Canonical`
- `image_sku` (string) SKU for your base image. See [documentation](https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching/) for details.
- `image_sku` (string) SKU for your base image. See [documentation](https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching/) for details.
CLI example `azure vm image list-skus -l westus -p Canonical -o UbuntuServer`
- `location` (string) Azure datacenter in which your VM will build.
- `location` (string) Azure datacenter in which your VM will build.
CLI example `azure location list`
### Optional:
- `azure_tags` (object of name/value strings) - the user can define up to 15 tags. Tag names cannot exceed 512
- `azure_tags` (object of name/value strings) - the user can define up to 15 tags. Tag names cannot exceed 512
characters, and tag values cannot exceed 256 characters. Tags are applied to every resource deployed by a Packer
build, i.e. Resource Group, VM, NIC, VNET, Public IP, KeyVault, etc.
- `cloud_environment_name` (string) One of `Public`, `China`, `Germany`, or
- `cloud_environment_name` (string) One of `Public`, `China`, `Germany`, or
`USGovernment`. Defaults to `Public`. Long forms such as
`USGovernmentCloud` and `AzureUSGovernmentCloud` are also supported.
- `image_version` (string) Specify a specific version of an OS to boot from. Defaults to `latest`. There may be a
- `image_version` (string) Specify a specific version of an OS to boot from. Defaults to `latest`. There may be a
difference in versions available across regions due to image synchronization latency. To ensure a consistent
version across regions set this value to one that is available in all regions where you are deploying.
CLI example `azure vm image list -l westus -p Canonical -o UbuntuServer -k 16.04.0-LTS`
- `image_url` (string) Specify a custom VHD to use. If this value is set, do not set image_publisher, image_offer,
- `image_url` (string) Specify a custom VHD to use. If this value is set, do not set image_publisher, image_offer,
image_sku, or image_version.
- `temp_compute_name` (string) temporary name assigned to the VM. If this value is not set, a random value will be assigned. Knowing the resource group and VM name allows one to execute commands to update the VM during a Packer build, e.g. attach a resource disk to the VM.
- `temp_resource_group_name` (string) temporary name assigned to the resource group. If this value is not set, a random value will be assigned.
- `temp_compute_name` (string) temporary name assigned to the VM. If this value is not set, a random value will be assigned. Knowing the resource group and VM name allows one to execute commands to update the VM during a Packer build, e.g. attach a resource disk to the VM.
- `tenant_id` (string) The account identifier with which your `client_id` and `subscription_id` are associated. If not
- `temp_resource_group_name` (string) temporary name assigned to the resource group. If this value is not set, a random value will be assigned.
- `tenant_id` (string) The account identifier with which your `client_id` and `subscription_id` are associated. If not
specified, `tenant_id` will be looked up using `subscription_id`.
- `object_id` (string) Specify an OAuth Object ID to protect WinRM certificates
- `object_id` (string) Specify an OAuth Object ID to protect WinRM certificates
created at runtime. This variable is required when creating images based on
Windows; this variable is not used by non-Windows builds. See `Windows`
behavior for `os_type`, below.
- `os_type` (string) If either `Linux` or `Windows` is specified Packer will
- `os_type` (string) If either `Linux` or `Windows` is specified Packer will
automatically configure authentication credentials for the provisioned machine. For
`Linux` this configures an SSH authorized key. For `Windows` this
configures a WinRM certificate.
- `os_disk_size_gb` (int32) Specify the size of the OS disk in GB (gigabytes). Values of zero or less than zero are
- `os_disk_size_gb` (int32) Specify the size of the OS disk in GB (gigabytes). Values of zero or less than zero are
ignored.
- `virtual_network_name` (string) Use a pre-existing virtual network for the VM. This option enables private
- `virtual_network_name` (string) Use a pre-existing virtual network for the VM. This option enables private
communication with the VM, no public IP address is **used** or **provisioned**. This value should only be set if
Packer is executed from a host on the same subnet / virtual network.
- `virtual_network_resource_group_name` (string) If virtual_network_name is set, this value **may** also be set. If
- `virtual_network_resource_group_name` (string) If virtual_network_name is set, this value **may** also be set. If
virtual_network_name is set, and this value is not set the builder attempts to determine the resource group
containing the virtual network. If the resource group cannot be found, or it cannot be disambiguated, this value
should be set.
- `virtual_network_subnet_name` (string) If virtual_network_name is set, this value **may** also be set. If
- `virtual_network_subnet_name` (string) If virtual_network_name is set, this value **may** also be set. If
virtual_network_name is set, and this value is not set the builder attempts to determine the subnet to use with
the virtual network. If the subnet cannot be found, or it cannot be disambiguated, this value should be set.
- `vm_size` (string) Size of the VM used for building. This can be changed
- `vm_size` (string) Size of the VM used for building. This can be changed
when you deploy a VM from your VHD. See
[pricing](https://azure.microsoft.com/en-us/pricing/details/virtual-machines/) information. Defaults to `Standard_A1`.
@ -118,7 +119,7 @@ builder.
Here is a basic example for Azure.
``` {.javascript}
```json
{
"type": "azure-arm",
@ -136,7 +137,7 @@ Here is a basic example for Azure.
"image_publisher": "Canonical",
"image_offer": "UbuntuServer",
"image_sku": "14.04.4-LTS",
"azure_tags": {
"dept": "engineering"
},
@ -156,31 +157,37 @@ Please refer to the Azure [examples](https://github.com/mitchellh/packer/tree/ma
The following provisioner snippet shows how to sysprep a Windows VM. Deprovision should be the last operation executed by a build.
``` {.javascript}
"provisioners": [
{
"type": "powershell",
"inline": [
"if( Test-Path $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml ){ rm $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml -Force}",
"& $Env:SystemRoot\\System32\\Sysprep\\Sysprep.exe /oobe /generalize /shutdown /quiet"
]
}
]
```json
{
"provisioners": [
{
"type": "powershell",
"inline": [
"if( Test-Path $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml ){ rm $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml -Force}",
"& $Env:SystemRoot\\System32\\Sysprep\\Sysprep.exe /oobe /generalize /shutdown /quiet"
]
}
]
}
```
### Linux
The following provisioner snippet shows how to deprovision a Linux VM. Deprovision should be the last operation executed by a build.
``` {.javascript}
"provisioners": [{
"execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'",
"inline": [
"/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"
],
"inline_shebang": "/bin/sh -x",
"type": "shell"
}]
```json
{
"provisioners": [
{
"execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'",
"inline": [
"/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"
],
"inline_shebang": "/bin/sh -x",
"type": "shell"
}
]
}
```
To learn more about the Linux deprovision process please see WALinuxAgent's [README](https://github.com/Azure/WALinuxAgent/blob/master/README.md).
@ -205,7 +212,7 @@ The Azure builder attempts to pick default values that provide for a just works
## Implementation
\~&gt; **Warning!** This is an advanced topic. You do not need to understand the implementation to use the Azure
~> **Warning!** This is an advanced topic. You do not need to understand the implementation to use the Azure
builder.
The Azure builder uses ARM

View File

@ -1,12 +1,13 @@
---
description: |
The `cloudstack` Packer builder is able to create new templates for use with
CloudStack. The builder takes either an ISO or an existing template as it's
source, runs any provisioning necessary on the instance after launching it
and then creates a new template from that instance.
layout: docs
page_title: CloudStack Builder
...
sidebar_current: docs-builders-cloudstack
page_title: CloudStack - Builders
description: |-
The cloudstack Packer builder is able to create new templates for use with
CloudStack. The builder takes either an ISO or an existing template as it's
source, runs any provisioning necessary on the instance after launching it and
then creates a new template from that instance.
---
# CloudStack Builder
@ -32,101 +33,101 @@ builder.
### Required:
- `api_url` (string) - The CloudStack API endpoint we will connect to.
- `api_url` (string) - The CloudStack API endpoint we will connect to.
- `api_key` (string) - The API key used to sign all API requests.
- `api_key` (string) - The API key used to sign all API requests.
- `cidr_list` (array) - List of CIDR's that will have access to the new
- `cidr_list` (array) - List of CIDR's that will have access to the new
instance. This is needed in order for any provisioners to be able to
connect to the instance. Usually this will be the NAT address of your
current location. Only required when `use_local_ip_address` is `false`.
- `instance_name` (string) - The name of the instance. Defaults to
- `instance_name` (string) - The name of the instance. Defaults to
"packer-UUID" where UUID is dynamically generated.
- `network` (string) - The name or ID of the network to connect the instance
- `network` (string) - The name or ID of the network to connect the instance
to.
- `secret_key` (string) - The secret key used to sign all API requests.
- `secret_key` (string) - The secret key used to sign all API requests.
- `service_offering` (string) - The name or ID of the service offering used
- `service_offering` (string) - The name or ID of the service offering used
for the instance.
- `soure_iso` (string) - The name or ID of an ISO that will be mounted before
- `soure_iso` (string) - The name or ID of an ISO that will be mounted before
booting the instance. This option is mutual exclusive with `source_template`.
- `source_template` (string) - The name or ID of the template used as base
- `source_template` (string) - The name or ID of the template used as base
template for the instance. This option is mutual explusive with `source_iso`.
- `template_name` (string) - The name of the new template. Defaults to
- `template_name` (string) - The name of the new template. Defaults to
"packer-{{timestamp}}" where timestamp will be the current time.
- `template_display_text` (string) - The display text of the new template.
- `template_display_text` (string) - The display text of the new template.
Defaults to the `template_name`.
- `template_os` (string) - The name or ID of the template OS for the new
- `template_os` (string) - The name or ID of the template OS for the new
template that will be created.
- `zone` (string) - The name or ID of the zone where the instance will be
- `zone` (string) - The name or ID of the zone where the instance will be
created.
### Optional:
- `async_timeout` (int) - The time duration to wait for async calls to
- `async_timeout` (int) - The time duration to wait for async calls to
finish. Defaults to 30m.
- `disk_offering` (string) - The name or ID of the disk offering used for the
- `disk_offering` (string) - The name or ID of the disk offering used for the
instance. This option is only available (and also required) when using
`source_iso`.
- `disk_size` (int) - The size (in GB) of the root disk of the new instance.
- `disk_size` (int) - The size (in GB) of the root disk of the new instance.
This option is only available when using `source_template`.
- `http_get_only` (boolean) - Some cloud providers only allow HTTP GET calls to
- `http_get_only` (boolean) - Some cloud providers only allow HTTP GET calls to
their CloudStack API. If using such a provider, you need to set this to `true`
in order for the provider to only make GET calls and no POST calls.
- `hypervisor` (string) - The target hypervisor (e.g. `XenServer`, `KVM`) for
- `hypervisor` (string) - The target hypervisor (e.g. `XenServer`, `KVM`) for
the new template. This option is required when using `source_iso`.
- `keypair` (string) - The name of the SSH key pair that will be used to
- `keypair` (string) - The name of the SSH key pair that will be used to
access the instance. The SSH key pair is assumed to be already available
within CloudStack.
- `project` (string) - The name or ID of the project to deploy the instance to.
- `project` (string) - The name or ID of the project to deploy the instance to.
- `public_ip_address` (string) - The public IP address or it's ID used for
- `public_ip_address` (string) - The public IP address or it's ID used for
connecting any provisioners to. If not provided, a temporary public IP
address will be associated and released during the Packer run.
- `ssl_no_verify` (boolean) - Set to `true` to skip SSL verification. Defaults
- `ssl_no_verify` (boolean) - Set to `true` to skip SSL verification. Defaults
to `false`.
- `template_featured` (boolean) - Set to `true` to indicate that the template
- `template_featured` (boolean) - Set to `true` to indicate that the template
is featured. Defaults to `false`.
- `template_public` (boolean) - Set to `true` to indicate that the template is
- `template_public` (boolean) - Set to `true` to indicate that the template is
available for all accounts. Defaults to `false`.
- `template_password_enabled` (boolean) - Set to `true` to indicate the template
- `template_password_enabled` (boolean) - Set to `true` to indicate the template
should be password enabled. Defaults to `false`.
- `template_requires_hvm` (boolean) - Set to `true` to indicate the template
- `template_requires_hvm` (boolean) - Set to `true` to indicate the template
requires hardware-assisted virtualization. Defaults to `false`.
- `template_scalable` (boolean) - Set to `true` to indicate that the template
- `template_scalable` (boolean) - Set to `true` to indicate that the template
contains tools to support dynamic scaling of VM cpu/memory. Defaults to `false`.
- `user_data` (string) - User data to launch with the instance.
- `user_data` (string) - User data to launch with the instance.
- `use_local_ip_address` (boolean) - Set to `true` to indicate that the
- `use_local_ip_address` (boolean) - Set to `true` to indicate that the
provisioners should connect to the local IP address of the instance.
## Basic Example
Here is a basic example.
``` {.javascript}
```json
{
"type": "cloudstack",
"api_url": "https://cloudstack.company.com/client/api",
@ -134,7 +135,7 @@ Here is a basic example.
"secret_key": "YOUR_SECRET_KEY",
"disk_offering": "Small - 20GB",
"cidr_list": ["0.0.0.0/0"]
"cidr_list": ["0.0.0.0/0"],
"hypervisor": "KVM",
"network": "management",
"service_offering": "small",

View File

@ -1,15 +1,16 @@
---
description: |
Packer is extensible, allowing you to write new builders without having to
modify the core source code of Packer itself. Documentation for creating new
builders is covered in the custom builders page of the Packer plugin section.
layout: docs
page_title: Custom Builder
...
sidebar_current: docs-builders-custom
page_title: Custom - Builders
description: |-
Packer is extensible, allowing you to write new builders without having to
modify the core source code of Packer itself. Documentation for creating new
builders is covered in the custom builders page of the Packer plugin section.
---
# Custom Builder
Packer is extensible, allowing you to write new builders without having to
modify the core source code of Packer itself. Documentation for creating new
builders is covered in the [custom builders](/docs/extend/builder.html) page of
builders is covered in the [custom builders](/docs/extending/custom-builders.html) page of
the Packer plugin section.

View File

@ -1,13 +1,15 @@
---
description: |
The `digitalocean` Packer builder is able to create new images for use with
DigitalOcean. The builder takes a source image, runs any provisioning necessary
on the image after launching it, then snapshots it into a reusable image. This
reusable image can then be used as the foundation of new servers that are
launched within DigitalOcean.
layout: docs
page_title: DigitalOcean Builder
...
sidebar_current: docs-builders-digitalocean
page_title: DigitalOcean - Builders
description: |-
The digitalocean Packer builder is able to create new images for use with
DigitalOcean. The builder takes a source image, runs any provisioning
necessary on the image after launching it, then snapshots it into a reusable
image. This reusable image can then be used as the foundation of new servers
that are launched within DigitalOcean.
---
# DigitalOcean Builder
@ -34,48 +36,48 @@ builder.
### Required:
- `api_token` (string) - The client TOKEN to use to access your account. It
- `api_token` (string) - The client TOKEN to use to access your account. It
can also be specified via environment variable `DIGITALOCEAN_API_TOKEN`,
if set.
- `image` (string) - The name (or slug) of the base image to use. This is the
- `image` (string) - The name (or slug) of the base image to use. This is the
image that will be used to launch a new droplet and provision it. See
[https://developers.digitalocean.com/documentation/v2/\#list-all-images](https://developers.digitalocean.com/documentation/v2/#list-all-images) for
details on how to get a list of the accepted image names/slugs.
- `region` (string) - The name (or slug) of the region to launch the
- `region` (string) - The name (or slug) of the region to launch the
droplet in. Consequently, this is the region where the snapshot will
be available. See
[https://developers.digitalocean.com/documentation/v2/\#list-all-regions](https://developers.digitalocean.com/documentation/v2/#list-all-regions) for
the accepted region names/slugs.
- `size` (string) - The name (or slug) of the droplet size to use. See
- `size` (string) - The name (or slug) of the droplet size to use. See
[https://developers.digitalocean.com/documentation/v2/\#list-all-sizes](https://developers.digitalocean.com/documentation/v2/#list-all-sizes) for
the accepted size names/slugs.
### Optional:
- `api_url` (string) - Non standard api endpoint URL. Set this if you are
- `api_url` (string) - Non standard api endpoint URL. Set this if you are
using a DigitalOcean API compatible service. It can also be specified via
environment variable `DIGITALOCEAN_API_URL`.
- `droplet_name` (string) - The name assigned to the droplet. DigitalOcean
- `droplet_name` (string) - The name assigned to the droplet. DigitalOcean
sets the hostname of the machine to this value.
- `private_networking` (boolean) - Set to `true` to enable private networking
- `private_networking` (boolean) - Set to `true` to enable private networking
for the droplet being created. This defaults to `false`, or not enabled.
- `snapshot_name` (string) - The name of the resulting snapshot that will
- `snapshot_name` (string) - The name of the resulting snapshot that will
appear in your account. This must be unique. To help make this unique, use a
function like `timestamp` (see [configuration
templates](/docs/templates/configuration-templates.html) for more info)
- `state_timeout` (string) - The time to wait, as a duration string, for a
- `state_timeout` (string) - The time to wait, as a duration string, for a
droplet to enter a desired state (such as "active") before timing out. The
default state timeout is "6m".
- `user_data` (string) - User data to launch with the Droplet.
- `user_data_file` (string) - Path to a file that will be used for the user
- `user_data` (string) - User data to launch with the Droplet.
- `user_data_file` (string) - Path to a file that will be used for the user
data when launching the Droplet.
@ -84,7 +86,7 @@ builder.
Here is a basic example. It is completely valid as soon as you enter your own
access tokens:
``` {.javascript}
```json
{
"type": "digitalocean",
"api_token": "YOUR API KEY",

View File

@ -1,11 +1,12 @@
---
description: |
The `docker` Packer builder builds Docker images using Docker. The builder
starts a Docker container, runs provisioners within this container, then exports
the container for reuse or commits the image.
layout: docs
page_title: Docker Builder
...
sidebar_current: docs-builders-docker
page_title: Docker - Builders
description: |-
The docker Packer builder builds Docker images using Docker. The builder
starts a Docker container, runs provisioners within this container, then
exports the container for reuse or commits the image.
---
# Docker Builder
@ -34,7 +35,7 @@ Packer within that environment.
Below is a fully functioning example. It doesn't do anything useful, since no
provisioners are defined, but it will effectively repackage an image.
``` {.javascript}
```json
{
"type": "docker",
"image": "ubuntu",
@ -48,7 +49,7 @@ Below is another example, the same as above but instead of exporting the running
container, this one commits the container to an image. The image can then be
more easily tagged, pushed, etc.
``` {.javascript}
```json
{
"type": "docker",
"image": "ubuntu",
@ -62,26 +63,53 @@ Below is an example using the changes argument of the builder. This feature allo
Example uses of all of the options, assuming one is building an NGINX image from ubuntu as an simple example:
```
```json
{
"type": "docker",
"image": "ubuntu",
"commit": true,
"changes": [
"USER www-data",
"WORKDIR /var/www",
"ENV HOSTNAME www.example.com",
"VOLUME /test1 /test2",
"EXPOSE 80 443",
"CMD [\"nginx\", \"-g\", \"daemon off;\"]",
"MAINTAINER Captain Kirk",
"ENTRYPOINT /var/www/start.sh"
]
"type": "docker",
"image": "ubuntu",
"commit": true,
"changes": [
"USER www-data",
"WORKDIR /var/www",
"ENV HOSTNAME www.example.com",
"VOLUME /test1 /test2",
"EXPOSE 80 443",
"CMD [\"nginx\", \"-g\", \"daemon off;\"]",
"MAINTAINER Captain Kirk",
"ENTRYPOINT /var/www/start.sh"
]
}
```
Allowed metadata fields that can be changed are:
<<<<<<< HEAD
- `CMD`
- String, supports both array (escaped) and string form
- EX: `”CMD [\"nginx\", \"-g\", \"daemon off;\"]"`
- EX: `"CMD nginx -g daemon off;”`
- `ENTRYPOINT`
- String
- EX: `“ENTRYPOINT /var/www/start.sh”`
- `ENV`
- String, note there is no equal sign:
- EX: `“ENV HOSTNAME www.example.com”` not `“ENV HOSTNAME=www.example.com”`
- `EXPOSE`
- String, space separated ports
- EX: `“EXPOSE 80 443”`
- `MAINTAINER`
- String
- EX: `“MAINTAINER NAME”`
- `USER`
- String
- EX: `“USER USERNAME”`
- `VOLUME`
- String
- EX: `“VOLUME FROM TO“`
- `WORKDIR`
- String
- EX: `“WORKDIR PATH”`
=======
- CMD
- String, supports both array (escaped) and string form
- EX: `"CMD [\"nginx\", \"-g\", \"daemon off;\"]"`
@ -107,6 +135,7 @@ Allowed metadata fields that can be changed are:
- WORKDIR
- String
- EX: `"WORKDIR PATH"`
>>>>>>> mitchellh/master
## Configuration Reference
@ -122,40 +151,40 @@ builder.
You must specify (only) one of `commit`, `discard`, or `export_path`.
- `commit` (boolean) - If true, the container will be committed to an image
- `commit` (boolean) - If true, the container will be committed to an image
rather than exported.
- `discard` (boolean) - Throw away the container when the build is complete.
- `discard` (boolean) - Throw away the container when the build is complete.
This is useful for the [artifice
post-processor](https://www.packer.io/docs/post-processors/artifice.html).
- `export_path` (string) - The path where the final container will be exported
- `export_path` (string) - The path where the final container will be exported
as a tar file.
- `image` (string) - The base image for the Docker container that will
- `image` (string) - The base image for the Docker container that will
be started. This image will be pulled from the Docker registry if it doesn't
already exist.
### Optional:
- `author` (string) - Set the author (e-mail) of a commit.
- `author` (string) - Set the author (e-mail) of a commit.
- `aws_access_key` (string) - The AWS access key used to communicate with AWS.
- `aws_access_key` (string) - The AWS access key used to communicate with AWS.
[Learn how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `aws_secret_key` (string) - The AWS secret key used to communicate with AWS.
- `aws_secret_key` (string) - The AWS secret key used to communicate with AWS.
[Learn how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
- `aws_token` (string) - The AWS access token to use. This is different from the
- `aws_token` (string) - The AWS access token to use. This is different from the
access key and secret key. If you're not sure what this is, then you
probably don't need it. This will also be read from the `AWS_SESSION_TOKEN`
environmental variable.
- `changes` (array of strings) - Dockerfile instructions to add to the commit.
- `changes` (array of strings) - Dockerfile instructions to add to the commit.
Example of instructions are `CMD`, `ENTRYPOINT`, `ENV`, and `EXPOSE`. Example:
`[ "USER ubuntu", "WORKDIR /app", "EXPOSE 8080" ]`
- `ecr_login` (boolean) - Defaults to false. If true, the builder will login in
- `ecr_login` (boolean) - Defaults to false. If true, the builder will login in
order to pull the image from
[Amazon EC2 Container Registry (ECR)](https://aws.amazon.com/ecr/).
The builder only logs in for the duration of the pull. If true
@ -163,33 +192,33 @@ You must specify (only) one of `commit`, `discard`, or `export_path`.
`login_password` will be ignored. For more information see the
[section on ECR](#amazon-ec2-container-registry).
- `login` (boolean) - Defaults to false. If true, the builder will login in
- `login` (boolean) - Defaults to false. If true, the builder will login in
order to pull the image. The builder only logs in for the duration of
the pull. It always logs out afterwards. For log into ECR see `ecr_login`.
- `login_email` (string) - The email to use to authenticate to login.
- `login_email` (string) - The email to use to authenticate to login.
- `login_username` (string) - The username to use to authenticate to login.
- `login_username` (string) - The username to use to authenticate to login.
- `login_password` (string) - The password to use to authenticate to login.
- `login_password` (string) - The password to use to authenticate to login.
- `login_server` (string) - The server address to login to.
- `login_server` (string) - The server address to login to.
- `message` (string) - Set a message for the commit.
- `message` (string) - Set a message for the commit.
- `privileged` (boolean) - If true, run the docker container with the
- `privileged` (boolean) - If true, run the docker container with the
`--privileged` flag. This defaults to false if not set.
- `pull` (boolean) - If true, the configured image will be pulled using
- `pull` (boolean) - If true, the configured image will be pulled using
`docker pull` prior to use. Otherwise, it is assumed the image already
exists and can be used. This defaults to true if not set.
- `run_command` (array of strings) - An array of arguments to pass to
- `run_command` (array of strings) - An array of arguments to pass to
`docker run` in order to run the container. By default this is set to
`["-d", "-i", "-t", "{{.Image}}", "/bin/bash"]`. As you can see, you have a
couple template variables to customize, as well.
- `volumes` (map of strings to strings) - A mapping of additional volumes to
- `volumes` (map of strings to strings) - A mapping of additional volumes to
mount into this container. The key of the object is the host path, the value
is the container path.
@ -209,7 +238,7 @@ created image. This is accomplished using a sequence definition (a collection of
post-processors that are treated as as single pipeline, see
[Post-Processors](/docs/templates/post-processors.html) for more information):
``` {.javascript}
```json
{
"post-processors": [
[
@ -233,7 +262,7 @@ pushing the image to a container repository.
If you want to do this manually, however, perhaps from a script, you can import
the image using the process below:
``` {.text}
```shell
$ docker import - registry.mydomain.com/mycontainer:latest < artifact.tar
```
@ -248,7 +277,7 @@ which tags and pushes an image. This is accomplished using a sequence definition
(a collection of post-processors that are treated as as single pipeline, see
[Post-Processors](/docs/templates/post-processors.html) for more information):
``` {.javascript}
```json
{
"post-processors": [
[
@ -273,7 +302,7 @@ Going a step further, if you wanted to tag and push an image to multiple
container repositories, this could be accomplished by defining two,
nearly-identical sequence definitions, as demonstrated by the example below:
``` {.javascript}
```json
{
"post-processors": [
[
@ -305,7 +334,7 @@ Packer can tag and push images for use in
processors work as described above and example configuration properties are
shown below:
``` {.javascript}
```json
{
"post-processors": [
[
@ -346,11 +375,11 @@ Dockerfiles have some additional features that Packer doesn't support which are
able to be worked around. Many of these features will be automated by Packer in
the future:
- Dockerfiles will snapshot the container at each step, allowing you to go
- Dockerfiles will snapshot the container at each step, allowing you to go
back to any step in the history of building. Packer doesn't do this yet, but
inter-step snapshotting is on the way.
- Dockerfiles can contain information such as exposed ports, shared volumes,
- Dockerfiles can contain information such as exposed ports, shared volumes,
and other metadata. Packer builds a raw Docker container image that has none
of this metadata. You can pass in much of this metadata at runtime with
`docker run`.

View File

@ -1,11 +1,12 @@
---
description: |
The `file` Packer builder is not really a builder, it just creates an
artifact from a file. It can be used to debug post-processors without
incurring high wait times. It does not run any provisioners.
layout: docs
page_title: File Builder
...
sidebar_current: docs-builders-file
page_title: File - Builders
description: |-
The file Packer builder is not really a builder, it just creates an artifact
from a file. It can be used to debug post-processors without incurring high
wait times. It does not run any provisioners.
---
# File Builder
@ -20,11 +21,11 @@ wait times. It does not run any provisioners.
Below is a fully functioning example. It doesn't do anything useful, since no
provisioners are defined, but it will connect to the specified host via ssh.
``` {.javascript}
```json
{
"type": "file",
"content": "Lorem ipsum dolor sit amet",
"target": "dummy_artifact"
"type": "file",
"content": "Lorem ipsum dolor sit amet",
"target": "dummy_artifact"
}
```
@ -38,7 +39,7 @@ Any [communicator](/docs/templates/communicator.html) defined is ignored.
### Required:
- `target` (string) - The path for a file which will be copied as the
- `target` (string) - The path for a file which will be copied as the
artifact.
### Optional:
@ -46,7 +47,7 @@ Any [communicator](/docs/templates/communicator.html) defined is ignored.
You can only define one of `source` or `content`. If none of them is
defined the artifact will be empty.
- `source` (string) - The path for a file which will be copied as the
- `source` (string) - The path for a file which will be copied as the
artifact.
- `content` (string) - The content that will be put into the artifact.
- `content` (string) - The content that will be put into the artifact.

View File

@ -1,12 +1,11 @@
---
description: |
The `googlecompute` Packer builder is able to create images for use with Google
Compute Engine (GCE) based on existing images. Building GCE images from scratch
is not possible from Packer at this time. For building images from scratch, please see
[Building GCE Images from Scratch](https://cloud.google.com/compute/docs/tutorials/building-images).
layout: docs
page_title: Google Compute Builder
...
sidebar_current: docs-builders-googlecompute
page_title: Google Compute - Builders
description: |-
The googlecompute Packer builder is able to create images for use with
Google Cloud Compute Engine (GCE) based on existing images.
---
# Google Compute Builder
@ -39,18 +38,17 @@ scopes when launching the instance.
For `gcloud`, do this via the `--scopes` parameter:
``` {.sh}
gcloud compute --project YOUR_PROJECT instances create "INSTANCE-NAME" ... \
--scopes "https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/devstorage.full_control" \
...
```shell
$ gcloud compute --project YOUR_PROJECT instances create "INSTANCE-NAME" ... \
--scopes "https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/devstorage.full_control" \
```
For the [Google Developers Console](https://console.developers.google.com):
1. Choose "Show advanced options"
2. Tick "Enable Compute Engine service account"
3. Choose "Read Write" for Compute
4. Chose "Full" for "Storage"
1. Choose "Show advanced options"
1. Tick "Enable Compute Engine service account"
1. Choose "Read Write" for Compute
1. Chose "Full" for "Storage"
**The service account will be used automatically by Packer as long as there is
no *account file* specified in the Packer configuration file.**
@ -62,32 +60,40 @@ you to create and download a credential file that will let you use the
`googlecompute` Packer builder anywhere. To make the process more
straightforwarded, it is documented here.
1. Log into the [Google Developers
1. Log into the [Google Developers
Console](https://console.developers.google.com) and select a project.
2. Under the "APIs & Auth" section, click "Credentials."
1. Under the "APIs & Auth" section, click "Credentials."
3. Click the "Create new Client ID" button, select "Service account", and click
1. Click the "Create new Client ID" button, select "Service account", and click
"Create Client ID"
4. Click "Generate new JSON key" for the Service Account you just created. A
1. Click "Generate new JSON key" for the Service Account you just created. A
JSON file will be downloaded automatically. This is your *account file*.
### Precedence of Authentication Methods
Packer looks for credentials in the following places, preferring the first location found:
1. A `account_file` option in your packer file.
1. A `account_file` option in your packer file.
2. A JSON file (Service Account) whose path is specified by the `GOOGLE_APPLICATION_CREDENTIALS` environment variable.
1. A JSON file (Service Account) whose path is specified by the `GOOGLE_APPLICATION_CREDENTIALS` environment variable.
3. A JSON file in a location known to the `gcloud` command-line tool. (`gcloud` creates it when it's configured)
1. A JSON file in a location known to the `gcloud` command-line tool. (`gcloud` creates it when it's configured)
On Windows, this is: `%APPDATA%/gcloud/application_default_credentials.json`.
On Windows, this is:
On other systems: `$HOME/.config/gcloud/application_default_credentials.json`.
```
%APPDATA%/gcloud/application_default_credentials.json
```
4. On Google Compute Engine and Google App Engine Managed VMs, it fetches credentials from the metadata server. (Needs a correct VM authentication scope configuration, see above)
On other systems:
```
$HOME/.config/gcloud/application_default_credentials.json
```
1. On Google Compute Engine and Google App Engine Managed VMs, it fetches credentials from the metadata server. (Needs a correct VM authentication scope configuration, see above)
## Basic Example
@ -97,15 +103,17 @@ repackage an existing GCE image. The account_file is obtained in the previous
section. If it parses as JSON it is assumed to be the file itself, otherwise it
is assumed to be the path to the file containing the JSON.
``` {.json}
```json
{
"builders": [{
"type": "googlecompute",
"account_file": "account.json",
"project_id": "my project",
"source_image": "debian-7-wheezy-v20150127",
"zone": "us-central1-a"
}]
"builders": [
{
"type": "googlecompute",
"account_file": "account.json",
"project_id": "my project",
"source_image": "debian-7-wheezy-v20150127",
"zone": "us-central1-a"
}
]
}
```
@ -147,104 +155,106 @@ builder.
### Required:
- `project_id` (string) - The project ID that will be used to launch instances
- `project_id` (string) - The project ID that will be used to launch instances
and store images.
- `source_image` (string) - The source image to use to create the new image
- `source_image` (string) - The source image to use to create the new image
from. You can also specify `source_image_family` instead. If both
`source_image` and `source_image_family` are specified, `source_image`
takes precedence. Example: `"debian-8-jessie-v20161027"`
- `source_image_family` (string) - The source image family to use to create
- `source_image_family` (string) - The source image family to use to create
the new image from. The image family always returns its latest image that
is not deprecated. Example: `"debian-8"`.
- `zone` (string) - The zone in which to launch the instance used to create
- `zone` (string) - The zone in which to launch the instance used to create
the image. Example: `"us-central1-a"`
### Optional:
- `account_file` (string) - The JSON file containing your account credentials.
- `account_file` (string) - The JSON file containing your account credentials.
Not required if you run Packer on a GCE instance with a service account.
Instructions for creating file or using service accounts are above.
- `address` (string) - The name of a pre-allocated static external IP address.
- `address` (string) - The name of a pre-allocated static external IP address.
Note, must be the name and not the actual IP address.
- `disk_name` (string) - The name of the disk, if unset the instance name will be
- `disk_name` (string) - The name of the disk, if unset the instance name will be
used.
- `disk_size` (integer) - The size of the disk in GB. This defaults to `10`,
- `disk_size` (integer) - The size of the disk in GB. This defaults to `10`,
which is 10GB.
- `disk_type` (string) - Type of disk used to back your instance, like `pd-ssd` or `pd-standard`. Defaults to `pd-standard`.
- `disk_type` (string) - Type of disk used to back your instance, like `pd-ssd` or `pd-standard`. Defaults to `pd-standard`.
- `image_description` (string) - The description of the resulting image.
- `image_description` (string) - The description of the resulting image.
- `image_family` (string) - The name of the image family to which the
- `image_family` (string) - The name of the image family to which the
resulting image belongs. You can create disks by specifying an image family
instead of a specific image name. The image family always returns its
latest image that is not deprecated.
- `image_name` (string) - The unique name of the resulting image. Defaults to
- `image_name` (string) - The unique name of the resulting image. Defaults to
`"packer-{{timestamp}}"`.
- `instance_name` (string) - A name to give the launched instance. Beware that
- `instance_name` (string) - A name to give the launched instance. Beware that
this must be unique. Defaults to `"packer-{{uuid}}"`.
- `machine_type` (string) - The machine type. Defaults to `"n1-standard-1"`.
- `machine_type` (string) - The machine type. Defaults to `"n1-standard-1"`.
- `metadata` (object of key/value strings) - Metadata applied to the launched
- `metadata` (object of key/value strings) - Metadata applied to the launched
instance.
- `network` (string) - The Google Compute network to use for the
- `network` (string) - The Google Compute network to use for the
launched instance. Defaults to `"default"`.
- `network_project_id` (string) - The project ID for the network and subnetwork
- `network_project_id` (string) - The project ID for the network and subnetwork
to use for launched instance. Defaults to `project_id`.
- `omit_external_ip` (boolean) - If true, the instance will not have an external IP.
- `omit_external_ip` (boolean) - If true, the instance will not have an external IP.
`use_internal_ip` must be true if this property is true.
- `on_host_maintenance` (string) - Sets Host Maintenance Option. Valid
- `on_host_maintenance` (string) - Sets Host Maintenance Option. Valid
choices are `MIGRATE` and `TERMINATE`. Please see [GCE Instance Scheduling
Options](https://cloud.google.com/compute/docs/instances/setting-instance-scheduling-options),
as not all machine_types support `MIGRATE` (i.e. machines with GPUs).
If preemptible is true this can only be `TERMINATE`. If preemptible
is false, it defaults to `MIGRATE`
- `preemptible` (boolean) - If true, launch a preembtible instance.
- `preemptible` (boolean) - If true, launch a preembtible instance.
- `region` (string) - The region in which to launch the instance. Defaults to
- `region` (string) - The region in which to launch the instance. Defaults to
to the region hosting the specified `zone`.
- `scopes` (array of strings) - The service account scopes for launched instance.
- `scopes` (array of strings) - The service account scopes for launched instance.
Defaults to:
``` {.json}
[ "https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/compute",
"https://www.googleapis.com/auth/devstorage.full_control" ]
```
```json
[
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/compute",
"https://www.googleapis.com/auth/devstorage.full_control"
]
```
- `source_image_project_id` (string) - The project ID of the
- `source_image_project_id` (string) - The project ID of the
project containing the source image.
- `startup_script_file` (string) - The filepath to a startup script to run on
- `startup_script_file` (string) - The filepath to a startup script to run on
the VM from which the image will be made.
- `state_timeout` (string) - The time to wait for instance state changes.
- `state_timeout` (string) - The time to wait for instance state changes.
Defaults to `"5m"`.
- `subnetwork` (string) - The Google Compute subnetwork to use for the launched
- `subnetwork` (string) - The Google Compute subnetwork to use for the launched
instance. Only required if the `network` has been created with custom
subnetting.
Note, the region of the subnetwork must match the `region` or `zone` in
which the VM is launched.
- `tags` (array of strings)
- `tags` (array of strings)
- `use_internal_ip` (boolean) - If true, use the instance's internal IP
- `use_internal_ip` (boolean) - If true, use the instance's internal IP
instead of its external IP during building.
## Startup Scripts

View File

@ -1,8 +1,10 @@
---
layout: docs
sidebar_current: docs-builders-hyperv-iso
page_title: Hyper-V ISO - Builders
description: |-
The Hyper-V Packer builder is able to create Hyper-V virtual machines and export them.
layout: "docs"
page_title: "Hyper-V Builder (from an ISO)"
The Hyper-V Packer builder is able to create Hyper-V virtual machines and
export them.
---
# Hyper-V Builder (from an ISO)
@ -23,7 +25,7 @@ Here is a basic example. This example is not functional. It will start the
OS installer but then fail because we don't provide the preseed file for
Ubuntu to self-install. Still, the example serves to show the basic configuration:
```javascript
```json
{
"type": "hyperv-iso",
"iso_url": "http://releases.ubuntu.com/12.04/ubuntu-12.04.5-server-amd64.iso",
@ -51,78 +53,78 @@ can be configured for this builder.
### Required:
- `iso_checksum` (string) - The checksum for the OS ISO file. Because ISO
- `iso_checksum` (string) - The checksum for the OS ISO file. Because ISO
files are so large, this is required and Packer will verify it prior
to booting a virtual machine with the ISO attached. The type of the
checksum is specified with `iso_checksum_type`, documented below.
- `iso_checksum_type` (string) - The type of the checksum specified in
- `iso_checksum_type` (string) - The type of the checksum specified in
`iso_checksum`. Valid values are "none", "md5", "sha1", "sha256", or
"sha512" currently. While "none" will skip checksumming, this is not
recommended since ISO files are generally large and corruption does happen
from time to time.
- `iso_url` (string) - A URL to the ISO containing the installation image.
- `iso_url` (string) - A URL to the ISO containing the installation image.
This URL can be either an HTTP URL or a file URL (or path to a file).
If this is an HTTP URL, Packer will download iso and cache it between
runs.
### Optional:
- `boot_command` (array of strings) - This is an array of commands to type
- `boot_command` (array of strings) - This is an array of commands to type
when the virtual machine is first booted. The goal of these commands should
be to type just enough to initialize the operating system installer. Special
keys can be typed as well, and are covered in the section below on the boot
command. If this is not specified, it is assumed the installer will start
itself.
- `boot_wait` (string) - The time to wait after booting the initial virtual
- `boot_wait` (string) - The time to wait after booting the initial virtual
machine before typing the `boot_command`. The value of this should be
a duration. Examples are "5s" and "1m30s" which will cause Packer to wait
five seconds and one minute 30 seconds, respectively. If this isn't specified,
the default is 10 seconds.
- `cpu` (integer) - The number of cpus the virtual machine should use. If this isn't specified,
- `cpu` (integer) - The number of cpus the virtual machine should use. If this isn't specified,
the default is 1 cpu.
- `disk_size` (integer) - The size, in megabytes, of the hard disk to create
- `disk_size` (integer) - The size, in megabytes, of the hard disk to create
for the VM. By default, this is 40 GB.
- `enable_dynamic_memory` (bool) - If true enable dynamic memory for virtual machine.
- `enable_dynamic_memory` (bool) - If true enable dynamic memory for virtual machine.
This defaults to false.
- `enable_mac_spoofing` (bool) - If true enable mac spoofing for virtual machine.
- `enable_mac_spoofing` (bool) - If true enable mac spoofing for virtual machine.
This defaults to false.
- `enable_secure_boot` (bool) - If true enable secure boot for virtual machine.
- `enable_secure_boot` (bool) - If true enable secure boot for virtual machine.
This defaults to false.
- `enable_virtualization_extensions` (bool) - If true enable virtualization extensions for virtual machine.
- `enable_virtualization_extensions` (bool) - If true enable virtualization extensions for virtual machine.
This defaults to false. For nested virtualization you need to enable mac spoofing, disable dynamic memory
and have at least 4GB of RAM for virtual machine.
- `floppy_files` (array of strings) - A list of files to place onto a floppy
- `floppy_files` (array of strings) - A list of files to place onto a floppy
disk that is attached when the VM is booted. This is most useful
for unattended Windows installs, which look for an `Autounattend.xml` file
on removable media. By default, no floppy will be attached. All files
listed in this setting get placed into the root directory of the floppy
and the floppy is attached as the first floppy device. Currently, no
support exists for creating sub-directories on the floppy. Wildcard
characters (*, ?, and []) are allowed. Directory names are also allowed,
characters (`*`, `?`, and `[]`) are allowed. Directory names are also allowed,
which will add all the files found in the directory to the floppy.
- `generation` (integer) - The Hyper-V generation for the virtual machine. By
- `generation` (integer) - The Hyper-V generation for the virtual machine. By
default, this is 1. Generation 2 Hyper-V virtual machines do not support
floppy drives. In this scenario use `secondary_iso_images` instead. Hard
drives and dvd drives will also be scsi and not ide.
drives and dvd drives will also be scsi and not ide.
- `guest_additions_mode` (string) - How should guest additions be installed.
- `guest_additions_mode` (string) - How should guest additions be installed.
If value `attach` then attach iso image with by specified by `guest_additions_path`.
Otherwise guest additions is not installed.
- `guest_additions_path` (string) - The path to the iso image for guest additions.
- `guest_additions_path` (string) - The path to the iso image for guest additions.
- `http_directory` (string) - Path to a directory to serve using an HTTP
- `http_directory` (string) - Path to a directory to serve using an HTTP
server. The files in this directory will be available over HTTP that will
be requestable from the virtual machine. This is useful for hosting
kickstart files and so on. By default this is "", which means no HTTP
@ -130,68 +132,68 @@ can be configured for this builder.
available as variables in `boot_command`. This is covered in more detail
below.
- `http_port_min` and `http_port_max` (integer) - These are the minimum and
- `http_port_min` and `http_port_max` (integer) - These are the minimum and
maximum port to use for the HTTP server started to serve the `http_directory`.
Because Packer often runs in parallel, Packer will choose a randomly available
port in this range to run the HTTP server. If you want to force the HTTP
server to be on one port, make this minimum and maximum port the same.
By default the values are 8000 and 9000, respectively.
- `iso_urls` (array of strings) - Multiple URLs for the ISO to download.
- `iso_urls` (array of strings) - Multiple URLs for the ISO to download.
Packer will try these in order. If anything goes wrong attempting to download
or while downloading a single URL, it will move on to the next. All URLs
must point to the same file (same checksum). By default this is empty
and `iso_url` is used. Only one of `iso_url` or `iso_urls` can be specified.
- `iso_target_extension` (string) - The extension of the iso file after
- `iso_target_extension` (string) - The extension of the iso file after
download. This defaults to "iso".
- `iso_target_path` (string) - The path where the iso should be saved after
- `iso_target_path` (string) - The path where the iso should be saved after
download. By default will go in the packer cache, with a hash of the
original filename as its name.
- `output_directory` (string) - This is the path to the directory where the
- `output_directory` (string) - This is the path to the directory where the
resulting virtual machine will be created. This may be relative or absolute.
If relative, the path is relative to the working directory when `packer`
is executed. This directory must not exist or be empty prior to running the builder.
By default this is "output-BUILDNAME" where "BUILDNAME" is the name
of the build.
- `ram_size` (integer) - The size, in megabytes, of the ram to create
- `ram_size` (integer) - The size, in megabytes, of the ram to create
for the VM. By default, this is 1 GB.
* `secondary_iso_images` (array of strings) - A list of iso paths to attached to a
VM when it is booted. This is most useful for unattended Windows installs, which
look for an `Autounattend.xml` file on removable media. By default, no
secondary iso will be attached.
* `secondary_iso_images` (array of strings) - A list of iso paths to attached to a
VM when it is booted. This is most useful for unattended Windows installs, which
look for an `Autounattend.xml` file on removable media. By default, no
secondary iso will be attached.
- `shutdown_command` (string) - The command to use to gracefully shut down the machine once all
- `shutdown_command` (string) - The command to use to gracefully shut down the machine once all
the provisioning is done. By default this is an empty string, which tells Packer to just
forcefully shut down the machine unless a shutdown command takes place inside script so this may
safely be omitted. If one or more scripts require a reboot it is suggested to leave this blank
since reboots may fail and specify the final shutdown command in your last script.
- `shutdown_timeout` (string) - The amount of time to wait after executing
- `shutdown_timeout` (string) - The amount of time to wait after executing
the `shutdown_command` for the virtual machine to actually shut down.
If it doesn't shut down in this time, it is an error. By default, the timeout
is "5m", or five minutes.
- `skip_compaction` (bool) - If true skip compacting the hard disk for virtual machine when
- `skip_compaction` (bool) - If true skip compacting the hard disk for virtual machine when
exporting. This defaults to false.
- `switch_name` (string) - The name of the switch to connect the virtual machine to. Be defaulting
- `switch_name` (string) - The name of the switch to connect the virtual machine to. Be defaulting
this to an empty string, Packer will try to determine the switch to use by looking for
external switch that is up and running.
- `switch_vlan_id` (string) - This is the vlan of the virtual switch's network card.
- `switch_vlan_id` (string) - This is the vlan of the virtual switch's network card.
By default none is set. If none is set then a vlan is not set on the switch's network card.
If this value is set it should match the vlan specified in by `vlan_id`.
- `vlan_id` (string) - This is the vlan of the virtual machine's network card for the new virtual
machine. By default none is set. If none is set then vlans are not set on the virtual machine's
- `vlan_id` (string) - This is the vlan of the virtual machine's network card for the new virtual
machine. By default none is set. If none is set then vlans are not set on the virtual machine's
network card.
- `vm_name` (string) - This is the name of the virtual machine for the new virtual
- `vm_name` (string) - This is the name of the virtual machine for the new virtual
machine, without the file extension. By default this is "packer-BUILDNAME",
where "BUILDNAME" is the name of the build.
@ -211,47 +213,47 @@ to the machine, simulating a human actually typing the keyboard. There are
a set of special keys available. If these are in your boot command, they
will be replaced by the proper key:
- `<bs>` - Backspace
- `<bs>` - Backspace
- `<del>` - Delete
- `<del>` - Delete
- `<enter>` and `<return>` - Simulates an actual "enter" or "return" keypress.
- `<enter>` and `<return>` - Simulates an actual "enter" or "return" keypress.
- `<esc>` - Simulates pressing the escape key.
- `<esc>` - Simulates pressing the escape key.
- `<tab>` - Simulates pressing the tab key.
- `<tab>` - Simulates pressing the tab key.
- `<f1>` - `<f12>` - Simulates pressing a function key.
- `<f1>` - `<f12>` - Simulates pressing a function key.
- `<up>` `<down>` `<left>` `<right>` - Simulates pressing an arrow key.
- `<up>` `<down>` `<left>` `<right>` - Simulates pressing an arrow key.
- `<spacebar>` - Simulates pressing the spacebar.
- `<spacebar>` - Simulates pressing the spacebar.
- `<insert>` - Simulates pressing the insert key.
- `<insert>` - Simulates pressing the insert key.
- `<home>` `<end>` - Simulates pressing the home and end keys.
- `<home>` `<end>` - Simulates pressing the home and end keys.
- `<pageUp>` `<pageDown>` - Simulates pressing the page up and page down keys.
- `<pageUp>` `<pageDown>` - Simulates pressing the page up and page down keys.
- `<leftAlt>` `<rightAlt>` - Simulates pressing the alt key.
- `<leftAlt>` `<rightAlt>` - Simulates pressing the alt key.
- `<leftCtrl>` `<rightCtrl>` - Simulates pressing the ctrl key.
- `<leftCtrl>` `<rightCtrl>` - Simulates pressing the ctrl key.
- `<leftShift>` `<rightShift>` - Simulates pressing the shift key.
- `<leftShift>` `<rightShift>` - Simulates pressing the shift key.
- `<leftAltOn>` `<rightAltOn>` - Simulates pressing and holding the alt key.
- `<leftAltOn>` `<rightAltOn>` - Simulates pressing and holding the alt key.
- `<leftCtrlOn>` `<rightCtrlOn>` - Simulates pressing and holding the ctrl key.
- `<leftCtrlOn>` `<rightCtrlOn>` - Simulates pressing and holding the ctrl key.
- `<leftShiftOn>` `<rightShiftOn>` - Simulates pressing and holding the shift key.
- `<leftShiftOn>` `<rightShiftOn>` - Simulates pressing and holding the shift key.
- `<leftAltOff>` `<rightAltOff>` - Simulates releasing a held alt key.
- `<leftAltOff>` `<rightAltOff>` - Simulates releasing a held alt key.
- `<leftCtrlOff>` `<rightCtrlOff>` - Simulates releasing a held ctrl key.
- `<leftCtrlOff>` `<rightCtrlOff>` - Simulates releasing a held ctrl key.
- `<leftShiftOff>` `<rightShiftOff>` - Simulates releasing a held shift key.
- `<leftShiftOff>` `<rightShiftOff>` - Simulates releasing a held shift key.
- `<wait>` `<wait5>` `<wait10>` - Adds a 1, 5 or 10 second pause before
- `<wait>` `<wait5>` `<wait10>` - Adds a 1, 5 or 10 second pause before
sending any additional keys. This is useful if you have to generally wait
for the UI to update before typing more.
@ -269,7 +271,7 @@ The available variables are:
Example boot command. This is actually a working boot command used to start
an Ubuntu 12.04 installer:
```text
```json
[
"<esc><esc><enter><wait>",
"/install/vmlinuz noapic ",
@ -290,20 +292,20 @@ for the version of Hyper-V that is running.
## Generation 1 vs Generation 2
Floppy drives are no longer supported by generation 2 machines. This requires you to
Floppy drives are no longer supported by generation 2 machines. This requires you to
take another approach when dealing with preseed or answer files. Two possible options
are using virtual dvd drives or using the built in web server.
When dealing with Windows you need to enable UEFI drives for generation 2 virtual machines.
When dealing with Windows you need to enable UEFI drives for generation 2 virtual machines.
## Creating iso from directory
Programs like mkisofs can be used to create an iso from a directory.
Programs like mkisofs can be used to create an iso from a directory.
There is a [windows version of mkisofs](http://opensourcepack.blogspot.co.uk/p/cdrtools.html).
Example powershell script. This is an actually working powershell script used to create a Windows answer iso:
```text
```powershell
$isoFolder = "answer-iso"
if (test-path $isoFolder){
remove-item $isoFolder -Force -Recurse
@ -323,7 +325,7 @@ copy windows\common\win-updates.ps1 $isoFolder\
copy windows\common\run-sysprep.ps1 $isoFolder\
copy windows\common\run-sysprep.cmd $isoFolder\
$textFile = "$isoFolder\Autounattend.xml"
$textFile = "$isoFolder\Autounattend.xml"
$c = Get-Content -Encoding UTF8 $textFile
@ -342,49 +344,52 @@ if (test-path $isoFolder){
Packer config:
```javascript
```json
{
"builders": [
{
"vm_name":"windows2012r2",
"type": "hyperv-iso",
"disk_size": 61440,
"floppy_files": [],
"secondary_iso_images": [
"./windows/windows-2012R2-serverdatacenter-amd64/answer.iso"
],
"http_directory": "./windows/common/http/",
"boot_wait": "0s",
"boot_command": [
"a<wait>a<wait>a"
],
"iso_url": "http://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.16384.WINBLUE_RTM.130821-1623_X64FRE_SERVER_EVAL_EN-US-IRM_SSS_X64FREE_EN-US_DV5.ISO",
"iso_checksum_type": "md5",
"iso_checksum": "458ff91f8abc21b75cb544744bf92e6a",
"communicator":"winrm",
"winrm_username": "vagrant",
"winrm_password": "vagrant",
"winrm_timeout" : "4h",
"shutdown_command": "f:\\run-sysprep.cmd",
"ram_size": 4096,
"cpu": 4,
"generation": 2,
"switch_name":"LAN",
"enable_secure_boot":true
}],
"provisioners": [{
"type": "powershell",
"elevated_user":"vagrant",
"elevated_password":"vagrant",
"scripts": [
"./windows/common/install-7zip.ps1",
"./windows/common/install-chef.ps1",
"./windows/common/compile-dotnet-assemblies.ps1",
"./windows/common/cleanup.ps1",
"./windows/common/ultradefrag.ps1",
"./windows/common/sdelete.ps1"
]
}],
{
"vm_name":"windows2012r2",
"type": "hyperv-iso",
"disk_size": 61440,
"floppy_files": [],
"secondary_iso_images": [
"./windows/windows-2012R2-serverdatacenter-amd64/answer.iso"
],
"http_directory": "./windows/common/http/",
"boot_wait": "0s",
"boot_command": [
"a<wait>a<wait>a"
],
"iso_url": "http://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.16384.WINBLUE_RTM.130821-1623_X64FRE_SERVER_EVAL_EN-US-IRM_SSS_X64FREE_EN-US_DV5.ISO",
"iso_checksum_type": "md5",
"iso_checksum": "458ff91f8abc21b75cb544744bf92e6a",
"communicator":"winrm",
"winrm_username": "vagrant",
"winrm_password": "vagrant",
"winrm_timeout" : "4h",
"shutdown_command": "f:\\run-sysprep.cmd",
"ram_size": 4096,
"cpu": 4,
"generation": 2,
"switch_name":"LAN",
"enable_secure_boot":true
}
],
"provisioners": [
{
"type": "powershell",
"elevated_user":"vagrant",
"elevated_password":"vagrant",
"scripts": [
"./windows/common/install-7zip.ps1",
"./windows/common/install-chef.ps1",
"./windows/common/compile-dotnet-assemblies.ps1",
"./windows/common/cleanup.ps1",
"./windows/common/ultradefrag.ps1",
"./windows/common/sdelete.ps1"
]
}
],
"post-processors": [
{
"type": "vagrant",
@ -483,7 +488,7 @@ autounattend.xml:
</CreatePartition>
<CreatePartition wcm:action="add">
<Order>4</Order>
<Extend>true</Extend>
<Extend>true</Extend>
<Type>Primary</Type>
</CreatePartition>
</CreatePartitions>
@ -576,7 +581,7 @@ autounattend.xml:
<HKLMProxyEnable>true</HKLMProxyEnable>
<HKLMProxyServer>cache-proxy:3142</HKLMProxyServer>
</component>
Finish Setup cache proxy during installation -->
Finish Setup cache proxy during installation -->
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AutoLogon>
<Password>
@ -808,7 +813,7 @@ sysprep-unattend.xml:
</component>
</settings>
<settings pass="oobeSystem">
<!-- Setup proxy after sysprep
<!-- Setup proxy after sysprep
<component name="Microsoft-Windows-IE-ClientNetworkProtocolImplementation" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<POLICYProxySettingsPerUser>1</POLICYProxySettingsPerUser>
<HKLMProxyEnable>false</HKLMProxyEnable>
@ -868,7 +873,7 @@ a virtual switch with an `External` connection type.
### Packer config:
```javascript
```json
{
"variables": {
"vm_name": "ubuntu-xenial",
@ -880,39 +885,40 @@ a virtual switch with an `External` connection type.
"iso_checksum": "DE5EE8665048F009577763EFBF4A6F0558833E59"
},
"builders": [
{
"vm_name":"{{user `vm_name`}}",
"type": "hyperv-iso",
"disk_size": "{{user `disk_size`}}",
"guest_additions_mode": "disable",
"iso_url": "{{user `iso_url`}}",
"iso_checksum_type": "{{user `iso_checksum_type`}}",
"iso_checksum": "{{user `iso_checksum`}}",
"communicator":"ssh",
"ssh_username": "packer",
"ssh_password": "packer",
"ssh_timeout" : "4h",
"http_directory": "./",
"boot_wait": "5s",
"boot_command": [
"<esc><wait10><esc><esc><enter><wait>",
"set gfxpayload=1024x768<enter>",
"linux /install/vmlinuz ",
"preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/hyperv-taliesins.cfg ",
"debian-installer=en_US auto locale=en_US kbd-chooser/method=us ",
"hostname={{.Name}} ",
"fb=false debconf/frontend=noninteractive ",
"keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA ",
"keyboard-configuration/variant=USA console-setup/ask_detect=false <enter>",
"initrd /install/initrd.gz<enter>",
"boot<enter>"
],
"shutdown_command": "echo 'packer' | sudo -S -E shutdown -P now",
"ram_size": "{{user `ram_size`}}",
"cpu": "{{user `cpu`}}",
"generation": 2,
"enable_secure_boot": false
}]
{
"vm_name":"{{user `vm_name`}}",
"type": "hyperv-iso",
"disk_size": "{{user `disk_size`}}",
"guest_additions_mode": "disable",
"iso_url": "{{user `iso_url`}}",
"iso_checksum_type": "{{user `iso_checksum_type`}}",
"iso_checksum": "{{user `iso_checksum`}}",
"communicator":"ssh",
"ssh_username": "packer",
"ssh_password": "packer",
"ssh_timeout" : "4h",
"http_directory": "./",
"boot_wait": "5s",
"boot_command": [
"<esc><wait10><esc><esc><enter><wait>",
"set gfxpayload=1024x768<enter>",
"linux /install/vmlinuz ",
"preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/hyperv-taliesins.cfg ",
"debian-installer=en_US auto locale=en_US kbd-chooser/method=us ",
"hostname={{.Name}} ",
"fb=false debconf/frontend=noninteractive ",
"keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA ",
"keyboard-configuration/variant=USA console-setup/ask_detect=false <enter>",
"initrd /install/initrd.gz<enter>",
"boot<enter>"
],
"shutdown_command": "echo 'packer' | sudo -S -E shutdown -P now",
"ram_size": "{{user `ram_size`}}",
"cpu": "{{user `cpu`}}",
"generation": 2,
"enable_secure_boot": false
}
]
}
```

View File

@ -1,8 +1,10 @@
---
layout: "docs"
page_title: "Hyper-V Builder"
layout: docs
sidebar_current: docs-builders-hyperv
page_title: Hyper-V - Builders
description: |-
The Hyper-V Packer builder is able to create Hyper-V virtual machines and export them.
The Hyper-V Packer builder is able to create Hyper-V virtual machines and
export them.
---
# HyperV Builder
@ -12,7 +14,7 @@ virtual machines and export them.
Packer currently only support building HyperV machines with an iso:
* [hyperv-iso](/docs/builders/hyperv-iso.html) - Starts from
- [hyperv-iso](/docs/builders/hyperv-iso.html) - Starts from
an ISO file, creates a brand new Hyper-V VM, installs an OS,
provisions software within the OS, then exports that machine to create
an image. This is best for people who want to start from scratch.

View File

@ -0,0 +1,18 @@
---
layout: docs
page_title: Builders
sidebar_current: docs-builders
description: |-
Builders are responsible for creating machines and generating images from them
for various platforms.
---
# Builders
Builders are responsible for creating machines and generating images from them
for various platforms. For example, there are separate builders for EC2, VMware,
VirtualBox, etc. Packer comes with many builders by default, and can also be
extended to add new builders.
To learn more about an individual builder, choose it from the sidebar. Each
builder has its own configuration options and parameters.

View File

@ -1,12 +1,13 @@
---
description: |
The `null` Packer builder is not really a builder, it just sets up an SSH
connection and runs the provisioners. It can be used to debug provisioners
without incurring high wait times. It does not create any kind of image or
artifact.
layout: docs
page_title: Null Builder
...
sidebar_current: docs-builders-null
page_title: Null - Builders
description: |-
The null Packer builder is not really a builder, it just sets up an SSH
connection and runs the provisioners. It can be used to debug provisioners
without incurring high wait times. It does not create any kind of image or
artifact.
---
# Null Builder
@ -22,7 +23,7 @@ artifact.
Below is a fully functioning example. It doesn't do anything useful, since no
provisioners are defined, but it will connect to the specified host via ssh.
``` {.javascript}
```json
{
"type": "null",
"ssh_host": "127.0.0.1",

View File

@ -1,9 +1,10 @@
---
description: |
The 1&1 builder is able to create images for 1&1 cloud.
layout: docs
page_title: 1&1 Builder
...
sidebar_current: docs-builders-oneandone
page_title: 1&1 - Builders
description: |-
The 1&1 builder is able to create images for 1&1 cloud.
---
# 1&1 Builder
@ -23,21 +24,21 @@ builder.
### Required
- `source_image_name` (string) - 1&1 Server Appliance name of type `IMAGE`.
- `source_image_name` (string) - 1&1 Server Appliance name of type `IMAGE`.
- `token` (string) - 1&1 REST API Token. This can be specified via environment variable `ONEANDONE_TOKEN`
- `token` (string) - 1&1 REST API Token. This can be specified via environment variable `ONEANDONE_TOKEN`
### Optional
- `data_center_name` - Name of virtual data center. Possible values "ES", "US", "GB", "DE". Default value "US"
- `disk_size` (string) - Amount of disk space for this image in GB. Defaults to "50"
- `data_center_name` - Name of virtual data center. Possible values "ES", "US", "GB", "DE". Default value "US"
- `image_name` (string) - Resulting image. If "image_name" is not provided Packer will generate it
- `disk_size` (string) - Amount of disk space for this image in GB. Defaults to "50"
- `retries` (int) - Number of retries Packer will make status requests while waiting for the build to complete. Default value "600".
- `image_name` (string) - Resulting image. If "image_name" is not provided Packer will generate it
- `url` (string) - Endpoint for the 1&1 REST API. Default URL "https://cloudpanel-api.1and1.com/v1"
- `retries` (int) - Number of retries Packer will make status requests while waiting for the build to complete. Default value "600".
- `url` (string) - Endpoint for the 1&1 REST API. Default URL "https://cloudpanel-api.1and1.com/v1"
## Example
@ -46,14 +47,14 @@ Here is a basic example:
```json
{
"builders":[
{
"type":"oneandone",
"disk_size":"50",
"image_name":"test5",
"source_image_name":"ubuntu1604-64min",
"ssh_username" :"root"
}
]
"builders":[
{
"type":"oneandone",
"disk_size":"50",
"image_name":"test5",
"source_image_name":"ubuntu1604-64min",
"ssh_username" :"root"
}
]
}
```
```

View File

@ -1,15 +1,14 @@
---
description: |
The `openstack` Packer builder is able to create new images for use with
OpenStack. The builder takes a source image, runs any provisioning necessary on
the image after launching it, then creates a new reusable image. This reusable
image can then be used as the foundation of new servers that are launched within
OpenStack. The builder will create temporary keypairs that provide temporary
access to the server while the image is being created. This simplifies
configuration quite a bit.
layout: docs
page_title: OpenStack Builder
...
sidebar_current: docs-builders-openstack
page_title: OpenStack - Builders
description: |-
The openstack Packer builder is able to create new images for use with
OpenStack. The builder takes a source image, runs any provisioning necessary
on the image after launching it, then creates a new reusable image. This
reusable image can then be used as the foundation of new servers that are
launched within OpenStack.
---
# OpenStack Builder
@ -26,7 +25,7 @@ created. This simplifies configuration quite a bit.
The builder does *not* manage images. Once it creates an image, it is up to you
to use it or delete it.
\~&gt; **OpenStack Liberty or later requires OpenSSL!** To use the OpenStack
~> **OpenStack Liberty or later requires OpenSSL!** To use the OpenStack
builder with OpenStack Liberty (Oct 2015) or later you need to have OpenSSL
installed _if you are using temporary key pairs_, i.e. don't use
[`ssh_keypair_name`](openstack.html#ssh_keypair_name) nor
@ -45,110 +44,110 @@ builder.
### Required:
- `flavor` (string) - The ID, name, or full URL for the desired flavor for the
- `flavor` (string) - The ID, name, or full URL for the desired flavor for the
server to be created.
- `image_name` (string) - The name of the resulting image.
- `image_name` (string) - The name of the resulting image.
- `identity_endpoint` (string) - The URL to the OpenStack Identity service.
- `identity_endpoint` (string) - The URL to the OpenStack Identity service.
If not specified, Packer will use the environment variables `OS_AUTH_URL`,
if set.
- `source_image` (string) - The ID or full URL to the base image to use. This
- `source_image` (string) - The ID or full URL to the base image to use. This
is the image that will be used to launch a new server and provision it.
Unless you specify completely custom SSH settings, the source image must
have `cloud-init` installed so that the keypair gets assigned properly.
- `source_image_name` (string) - The name of the base image to use. This
- `source_image_name` (string) - The name of the base image to use. This
is an alternative way of providing `source_image` and only either of them
can be specified.
- `username` or `user_id` (string) - The username or id used to connect to
- `username` or `user_id` (string) - The username or id used to connect to
the OpenStack service. If not specified, Packer will use the environment
variable `OS_USERNAME` or `OS_USERID`, if set.
- `password` (string) - The password used to connect to the OpenStack service.
- `password` (string) - The password used to connect to the OpenStack service.
If not specified, Packer will use the environment variables `OS_PASSWORD`,
if set.
### Optional:
- `availability_zone` (string) - The availability zone to launch the
- `availability_zone` (string) - The availability zone to launch the
server in. If this isn't specified, the default enforced by your OpenStack
cluster will be used. This may be required for some OpenStack clusters.
- `config_drive` (boolean) - Whether or not nova should use ConfigDrive for
- `config_drive` (boolean) - Whether or not nova should use ConfigDrive for
cloud-init metadata.
- `domain_name` or `domain_id` (string) - The Domain name or ID you are
- `domain_name` or `domain_id` (string) - The Domain name or ID you are
authenticating with. OpenStack installations require this if identity v3 is used.
Packer will use the environment variable `OS_DOMAIN_NAME` or `OS_DOMAIN_ID`, if set.
- `endpoint_type` (string) - The endpoint type to use. Can be any of "internal",
- `endpoint_type` (string) - The endpoint type to use. Can be any of "internal",
"internalURL", "admin", "adminURL", "public", and "publicURL". By default
this is "public".
- `floating_ip` (string) - A specific floating IP to assign to this instance.
- `floating_ip` (string) - A specific floating IP to assign to this instance.
- `floating_ip_pool` (string) - The name of the floating IP pool to use to
- `floating_ip_pool` (string) - The name of the floating IP pool to use to
allocate a floating IP.
- `image_members` (array of strings) - List of members to add to the image
- `image_members` (array of strings) - List of members to add to the image
after creation. An image member is usually a project (also called the
“tenant”) with whom the image is shared.
- `image_visibility` (string) - One of "public", "private", "shared", or
- `image_visibility` (string) - One of "public", "private", "shared", or
"community".
- `insecure` (boolean) - Whether or not the connection to OpenStack can be
- `insecure` (boolean) - Whether or not the connection to OpenStack can be
done over an insecure connection. By default this is false.
- `metadata` (object of key/value strings) - Glance metadata that will be
- `metadata` (object of key/value strings) - Glance metadata that will be
applied to the image.
- `instance_metadata` (object of key/value strings) - Metadata that is
- `instance_metadata` (object of key/value strings) - Metadata that is
applied to the server instance created by Packer. Also called server
properties in some documentation. The strings have a max size of 255 bytes
each.
- `networks` (array of strings) - A list of networks by UUID to attach to
- `networks` (array of strings) - A list of networks by UUID to attach to
this instance.
- `rackconnect_wait` (boolean) - For rackspace, whether or not to wait for
- `rackconnect_wait` (boolean) - For rackspace, whether or not to wait for
Rackconnect to assign the machine an IP address before connecting via SSH.
Defaults to false.
- `region` (string) - The name of the region, such as "DFW", in which to
- `region` (string) - The name of the region, such as "DFW", in which to
launch the server to create the AMI. If not specified, Packer will use the
environment variable `OS_REGION_NAME`, if set.
- `reuse_ips` (boolean) - Whether or not to attempt to reuse existing
- `reuse_ips` (boolean) - Whether or not to attempt to reuse existing
unassigned floating ips in the project before allocating a new one. Note
that it is not possible to safely do this concurrently, so if you are
running multiple openstack builds concurrently, or if other processes are
assigning and using floating IPs in the same openstack project while packer
is running, you should not set this to true. Defaults to false.
- `security_groups` (array of strings) - A list of security groups by name to
- `security_groups` (array of strings) - A list of security groups by name to
add to this instance.
- `ssh_interface` (string) - The type of interface to connect via SSH. Values
- `ssh_interface` (string) - The type of interface to connect via SSH. Values
useful for Rackspace are "public" or "private", and the default behavior is
to connect via whichever is returned first from the OpenStack API.
- `ssh_ip_version` (string) - The IP version to use for SSH connections, valid
- `ssh_ip_version` (string) - The IP version to use for SSH connections, valid
values are `4` and `6`. Useful on dual stacked instances where the default
behavior is to connect via whichever IP address is returned first from the
OpenStack API.
- `ssh_keypair_name` (string) - If specified, this is the key that will be
- `ssh_keypair_name` (string) - If specified, this is the key that will be
used for SSH with the machine. By default, this is blank, and Packer will
generate a temporary keypair.
[`ssh_password`](/docs/templates/communicator.html#ssh_password) is used.
[`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file)
or `ssh_agent_auth` must be specified when `ssh_keypair_name` is utilized.
- `ssh_agent_auth` (boolean) - If true, the local SSH agent will be used to
- `ssh_agent_auth` (boolean) - If true, the local SSH agent will be used to
authenticate connections to the source instance. No temporary keypair will
be created, and the values of `ssh_password` and `ssh_private_key_file` will
be ignored. To use this option with a key pair already configured in the source
@ -156,30 +155,30 @@ builder.
with the source instance, set the `ssh_keypair_name` field to the name
of the key pair.
- `temporary_key_pair_name` (string) - The name of the temporary key pair
- `temporary_key_pair_name` (string) - The name of the temporary key pair
to generate. By default, Packer generates a name that looks like
`packer_<UUID>`, where \<UUID\> is a 36 character unique identifier.
- `tenant_id` or `tenant_name` (string) - The tenant ID or name to boot the
- `tenant_id` or `tenant_name` (string) - The tenant ID or name to boot the
instance into. Some OpenStack installations require this. If not specified,
Packer will use the environment variable `OS_TENANT_NAME`, if set. Tenant
is also called Project in later versions of OpenStack.
- `use_floating_ip` (boolean) - _Deprecated_ use `floating_ip` or `floating_ip_pool`
- `use_floating_ip` (boolean) - _Deprecated_ use `floating_ip` or `floating_ip_pool`
instead.
- `user_data` (string) - User data to apply when launching the instance. Note
- `user_data` (string) - User data to apply when launching the instance. Note
that you need to be careful about escaping characters due to the templates
being JSON. It is often more convenient to use `user_data_file`, instead.
- `user_data_file` (string) - Path to a file that will be used for the user
- `user_data_file` (string) - Path to a file that will be used for the user
data when launching the instance.
## Basic Example: DevStack
Here is a basic example. This is a example to build on DevStack running in a VM.
``` {.javascript}
```json
{
"type": "openstack",
"identity_endpoint": "http://<destack-ip>:5000/v3",
@ -202,7 +201,7 @@ Here is a basic example. This is a example to build on DevStack running in a VM.
Here is a basic example. This is a working example to build a Ubuntu 12.04 LTS
(Precise Pangolin) on Rackspace OpenStack cloud offering.
``` {.javascript}
```json
{
"type": "openstack",
"username": "foo",
@ -220,7 +219,7 @@ Here is a basic example. This is a working example to build a Ubuntu 12.04 LTS
This example builds an Ubuntu 14.04 image on a private OpenStack cloud, powered
by Metacloud.
``` {.javascript}
```json
{
"type": "openstack",
"ssh_username": "root",
@ -235,18 +234,18 @@ appear in the template. That is because I source a standard OpenStack script
with environment variables set before I run this. This script is setting
environment variables like:
- `OS_AUTH_URL`
- `OS_TENANT_ID`
- `OS_USERNAME`
- `OS_PASSWORD`
- `OS_AUTH_URL`
- `OS_TENANT_ID`
- `OS_USERNAME`
- `OS_PASSWORD`
This is slightly different when identity v3 is used:
- `OS_AUTH_URL`
- `OS_USERNAME`
- `OS_PASSWORD`
- `OS_DOMAIN_NAME`
- `OS_TENANT_NAME`
- `OS_AUTH_URL`
- `OS_USERNAME`
- `OS_PASSWORD`
- `OS_DOMAIN_NAME`
- `OS_TENANT_NAME`
This will authenticate the user on the domain and scope you to the project.
A tenant is the same as a project. It's optional to use names or IDs in v3.
@ -255,11 +254,13 @@ This means you can use `OS_USERNAME` or `OS_USERID`, `OS_TENANT_ID` or
The above example would be equivalent to an RC file looking like this :
export OS_AUTH_URL="https://identity.myprovider/v3"
export OS_USERNAME="myuser"
export OS_PASSWORD="password"
export OS_USER_DOMAIN_NAME="mydomain"
export OS_PROJECT_DOMAIN_NAME="mydomain"
```shell
export OS_AUTH_URL="https://identity.myprovider/v3"
export OS_USERNAME="myuser"
export OS_PASSWORD="password"
export OS_USER_DOMAIN_NAME="mydomain"
export OS_PROJECT_DOMAIN_NAME="mydomain"
```
## Notes on OpenStack Authorization
@ -270,9 +271,12 @@ File v3_. Source the file, and select your wanted region by setting
environment variable `OS_REGION_NAME` or `OS_REGION_ID` and `export
OS_TENANT_NAME=$OS_PROJECT_NAME` or `export OS_TENANT_ID=$OS_PROJECT_ID`.
\~&gt; `OS_TENANT_NAME` or `OS_TENANT_ID` must be used even with Identity v3,
~> `OS_TENANT_NAME` or `OS_TENANT_ID` must be used even with Identity v3,
`OS_PROJECT_NAME` and `OS_PROJECT_ID` has no effect in Packer.
To troubleshoot authorization issues test you environment variables with the
OpenStack cli. It can be installed with
```pip install --user python-openstackclient```.
```
$ pip install --user python-openstackclient
```

View File

@ -1,10 +1,12 @@
---
description: |
The Parallels Packer builder is able to create Parallels Desktop for Mac virtual
machines and export them in the PVM format, starting from an ISO image.
layout: docs
page_title: 'Parallels Builder (from an ISO)'
...
sidebar_current: docs-builders-parallels-iso
page_title: Parallels ISO - Builders
description: |-
The Parallels Packer builder is able to create Parallels Desktop for Mac
virtual machines and export them in the PVM format, starting from an ISO
image.
---
# Parallels Builder (from an ISO)
@ -25,7 +27,7 @@ Here is a basic example. This example is not functional. It will start the OS
installer but then fail because we don't provide the preseed file for Ubuntu to
self-install. Still, the example serves to show the basic configuration:
``` {.javascript}
```json
{
"type": "parallels-iso",
"guest_os_type": "ubuntu",
@ -56,56 +58,56 @@ builder.
### Required:
- `iso_checksum` (string) - The checksum for the OS ISO file. Because ISO
- `iso_checksum` (string) - The checksum for the OS ISO file. Because ISO
files are so large, this is required and Packer will verify it prior to
booting a virtual machine with the ISO attached. The type of the checksum is
specified with `iso_checksum_type`, documented below. At least one of
`iso_checksum` and `iso_checksum_url` must be defined. This has precedence
over `iso_checksum_url` type.
- `iso_checksum_type` (string) - The type of the checksum specified in
- `iso_checksum_type` (string) - The type of the checksum specified in
`iso_checksum`. Valid values are "none", "md5", "sha1", "sha256", or
"sha512" currently. While "none" will skip checksumming, this is not
recommended since ISO files are generally large and corruption does happen
from time to time.
- `iso_checksum_url` (string) - A URL to a GNU or BSD style checksum file
- `iso_checksum_url` (string) - A URL to a GNU or BSD style checksum file
containing a checksum for the OS ISO file. At least one of `iso_checksum`
and `iso_checksum_url` must be defined. This will be ignored if
`iso_checksum` is non empty.
- `iso_url` (string) - A URL to the ISO containing the installation image.
- `iso_url` (string) - A URL to the ISO containing the installation image.
This URL can be either an HTTP URL or a file URL (or path to a file). If
this is an HTTP URL, Packer will download it and cache it between runs.
- `parallels_tools_flavor` (string) - The flavor of the Parallels Tools ISO to
- `parallels_tools_flavor` (string) - The flavor of the Parallels Tools ISO to
install into the VM. Valid values are "win", "lin", "mac", "os2"
and "other". This can be omitted only if `parallels_tools_mode`
is "disable".
- `ssh_username` (string) - The username to use to SSH into the machine once
- `ssh_username` (string) - The username to use to SSH into the machine once
the OS is installed.
### Optional:
- `boot_command` (array of strings) - This is an array of commands to type
- `boot_command` (array of strings) - This is an array of commands to type
when the virtual machine is first booted. The goal of these commands should
be to type just enough to initialize the operating system installer. Special
keys can be typed as well, and are covered in the section below on the
boot command. If this is not specified, it is assumed the installer will
start itself.
- `boot_wait` (string) - The time to wait after booting the initial virtual
- `boot_wait` (string) - The time to wait after booting the initial virtual
machine before typing the `boot_command`. The value of this should be
a duration. Examples are "5s" and "1m30s" which will cause Packer to wait
five seconds and one minute 30 seconds, respectively. If this isn't
specified, the default is 10 seconds.
- `disk_size` (integer) - The size, in megabytes, of the hard disk to create
- `disk_size` (integer) - The size, in megabytes, of the hard disk to create
for the VM. By default, this is 40000 (about 40 GB).
- `disk_type` (string) - The type for image file based virtual disk drives,
- `disk_type` (string) - The type for image file based virtual disk drives,
defaults to `expand`. Valid options are `expand` (expanding disk) that the
image file is small initially and grows in size as you add data to it, and
`plain` (plain disk) that the image file has a fixed size from the moment it
@ -113,7 +115,7 @@ builder.
perform faster than expanding disks. `skip_compaction` will be set to true
automatically for plain disks.
- `floppy_files` (array of strings) - A list of files to place onto a floppy
- `floppy_files` (array of strings) - A list of files to place onto a floppy
disk that is attached when the VM is booted. This is most useful for
unattended Windows installs, which look for an `Autounattend.xml` file on
removable media. By default, no floppy will be attached. All files listed in
@ -123,64 +125,64 @@ builder.
and \[\]) are allowed. Directory names are also allowed, which will add all
the files found in the directory to the floppy.
- `floppy_dirs` (array of strings) - A list of directories to place onto
- `floppy_dirs` (array of strings) - A list of directories to place onto
the floppy disk recursively. This is similar to the `floppy_files` option
except that the directory structure is preserved. This is useful for when
your floppy disk includes drivers or if you just want to organize it's
contents as a hierarchy. Wildcard characters (\*, ?, and \[\]) are allowed.
- `guest_os_type` (string) - The guest OS type being installed. By default
- `guest_os_type` (string) - The guest OS type being installed. By default
this is "other", but you can get *dramatic* performance improvements by
setting this to the proper value. To view all available values for this run
`prlctl create x --distribution list`. Setting the correct value hints to
Parallels Desktop how to optimize the virtual hardware to work best with
that operating system.
- `hard_drive_interface` (string) - The type of controller that the hard
- `hard_drive_interface` (string) - The type of controller that the hard
drives are attached to, defaults to "sata". Valid options are "sata", "ide",
and "scsi".
- `host_interfaces` (array of strings) - A list of which interfaces on the
- `host_interfaces` (array of strings) - A list of which interfaces on the
host should be searched for a IP address. The first IP address found on one
of these will be used as `{{ .HTTPIP }}` in the `boot_command`. Defaults to
\["en0", "en1", "en2", "en3", "en4", "en5", "en6", "en7", "en8", "en9",
"ppp0", "ppp1", "ppp2"\].
- `http_directory` (string) - Path to a directory to serve using an
- `http_directory` (string) - Path to a directory to serve using an
HTTP server. The files in this directory will be available over HTTP that
will be requestable from the virtual machine. This is useful for hosting
kickstart files and so on. By default this is "", which means no HTTP server
will be started. The address and port of the HTTP server will be available
as variables in `boot_command`. This is covered in more detail below.
- `http_port_min` and `http_port_max` (integer) - These are the minimum and
- `http_port_min` and `http_port_max` (integer) - These are the minimum and
maximum port to use for the HTTP server started to serve the
`http_directory`. Because Packer often runs in parallel, Packer will choose
a randomly available port in this range to run the HTTP server. If you want
to force the HTTP server to be on one port, make this minimum and maximum
port the same. By default the values are 8000 and 9000, respectively.
- `iso_target_extension` (string) - The extension of the iso file after
- `iso_target_extension` (string) - The extension of the iso file after
download. This defaults to "iso".
- `iso_target_path` (string) - The path where the iso should be saved after
- `iso_target_path` (string) - The path where the iso should be saved after
download. By default will go in the packer cache, with a hash of the
original filename as its name.
- `iso_urls` (array of strings) - Multiple URLs for the ISO to download.
- `iso_urls` (array of strings) - Multiple URLs for the ISO to download.
Packer will try these in order. If anything goes wrong attempting to
download or while downloading a single URL, it will move on to the next. All
URLs must point to the same file (same checksum). By default this is empty
and `iso_url` is used. Only one of `iso_url` or `iso_urls` can be specified.
- `output_directory` (string) - This is the path to the directory where the
- `output_directory` (string) - This is the path to the directory where the
resulting virtual machine will be created. This may be relative or absolute.
If relative, the path is relative to the working directory when `packer`
is executed. This directory must not exist or be empty prior to running
the builder. By default this is "output-BUILDNAME" where "BUILDNAME" is the
name of the build.
- `parallels_tools_guest_path` (string) - The path in the virtual machine to
- `parallels_tools_guest_path` (string) - The path in the virtual machine to
upload Parallels Tools. This only takes effect if `parallels_tools_mode`
is "upload". This is a [configuration
template](/docs/templates/configuration-templates.html) that has a single
@ -188,14 +190,14 @@ builder.
`parallels_tools_flavor`. By default this is "prl-tools-{{.Flavor}}.iso"
which should upload into the login directory of the user.
- `parallels_tools_mode` (string) - The method by which Parallels Tools are
- `parallels_tools_mode` (string) - The method by which Parallels Tools are
made available to the guest for installation. Valid options are "upload",
"attach", or "disable". If the mode is "attach" the Parallels Tools ISO will
be attached as a CD device to the virtual machine. If the mode is "upload"
the Parallels Tools ISO will be uploaded to the path specified by
`parallels_tools_guest_path`. The default value is "upload".
- `prlctl` (array of array of strings) - Custom `prlctl` commands to execute
- `prlctl` (array of array of strings) - Custom `prlctl` commands to execute
in order to further customize the virtual machine being created. The value
of this is an array of commands to execute. The commands are executed in the
order defined in the template. For each command, the command is defined
@ -206,32 +208,32 @@ builder.
variable is replaced with the VM name. More details on how to use `prlctl`
are below.
- `prlctl_post` (array of array of strings) - Identical to `prlctl`, except
- `prlctl_post` (array of array of strings) - Identical to `prlctl`, except
that it is run after the virtual machine is shutdown, and before the virtual
machine is exported.
- `prlctl_version_file` (string) - The path within the virtual machine to
- `prlctl_version_file` (string) - The path within the virtual machine to
upload a file that contains the `prlctl` version that was used to create
the machine. This information can be useful for provisioning. By default
this is ".prlctl\_version", which will generally upload it into the
home directory.
- `shutdown_command` (string) - The command to use to gracefully shut down the
- `shutdown_command` (string) - The command to use to gracefully shut down the
machine once all the provisioning is done. By default this is an empty
string, which tells Packer to just forcefully shut down the machine.
- `shutdown_timeout` (string) - The amount of time to wait after executing the
- `shutdown_timeout` (string) - The amount of time to wait after executing the
`shutdown_command` for the virtual machine to actually shut down. If it
doesn't shut down in this time, it is an error. By default, the timeout is
"5m", or five minutes.
- `skip_compaction` (boolean) - Virtual disk image is compacted at the end of
- `skip_compaction` (boolean) - Virtual disk image is compacted at the end of
the build process using `prl_disk_tool` utility (except for the case that
`disk_type` is set to `plain`). In certain rare cases, this might corrupt
the resulting disk image. If you find this to be the case, you can disable
compaction using this configuration value.
- `vm_name` (string) - This is the name of the PVM directory for the new
- `vm_name` (string) - This is the name of the PVM directory for the new
virtual machine, without the file extension. By default this is
"packer-BUILDNAME", where "BUILDNAME" is the name of the build.
@ -252,47 +254,47 @@ simulating a human actually typing the keyboard. There are a set of special keys
available. If these are in your boot command, they will be replaced by the
proper key:
- `<bs>` - Backspace
- `<bs>` - Backspace
- `<del>` - Delete
- `<del>` - Delete
- `<enter>` and `<return>` - Simulates an actual "enter" or "return" keypress.
- `<enter>` and `<return>` - Simulates an actual "enter" or "return" keypress.
- `<esc>` - Simulates pressing the escape key.
- `<esc>` - Simulates pressing the escape key.
- `<tab>` - Simulates pressing the tab key.
- `<tab>` - Simulates pressing the tab key.
- `<f1>` - `<f12>` - Simulates pressing a function key.
- `<f1>` - `<f12>` - Simulates pressing a function key.
- `<up>` `<down>` `<left>` `<right>` - Simulates pressing an arrow key.
- `<up>` `<down>` `<left>` `<right>` - Simulates pressing an arrow key.
- `<spacebar>` - Simulates pressing the spacebar.
- `<spacebar>` - Simulates pressing the spacebar.
- `<insert>` - Simulates pressing the insert key.
- `<insert>` - Simulates pressing the insert key.
- `<home>` `<end>` - Simulates pressing the home and end keys.
- `<home>` `<end>` - Simulates pressing the home and end keys.
- `<pageUp>` `<pageDown>` - Simulates pressing the page up and page down keys.
- `<pageUp>` `<pageDown>` - Simulates pressing the page up and page down keys.
- `<leftAlt>` `<rightAlt>` - Simulates pressing the alt key.
- `<leftAlt>` `<rightAlt>` - Simulates pressing the alt key.
- `<leftCtrl>` `<rightCtrl>` - Simulates pressing the ctrl key.
- `<leftCtrl>` `<rightCtrl>` - Simulates pressing the ctrl key.
- `<leftShift>` `<rightShift>` - Simulates pressing the shift key.
- `<leftShift>` `<rightShift>` - Simulates pressing the shift key.
- `<leftAltOn>` `<rightAltOn>` - Simulates pressing and holding the alt key.
- `<leftAltOn>` `<rightAltOn>` - Simulates pressing and holding the alt key.
- `<leftCtrlOn>` `<rightCtrlOn>` - Simulates pressing and holding the ctrl key.
- `<leftCtrlOn>` `<rightCtrlOn>` - Simulates pressing and holding the ctrl key.
- `<leftShiftOn>` `<rightShiftOn>` - Simulates pressing and holding the shift key.
- `<leftShiftOn>` `<rightShiftOn>` - Simulates pressing and holding the shift key.
- `<leftAltOff>` `<rightAltOff>` - Simulates releasing a held alt key.
- `<leftAltOff>` `<rightAltOff>` - Simulates releasing a held alt key.
- `<leftCtrlOff>` `<rightCtrlOff>` - Simulates releasing a held ctrl key.
- `<leftCtrlOff>` `<rightCtrlOff>` - Simulates releasing a held ctrl key.
- `<leftShiftOff>` `<rightShiftOff>` - Simulates releasing a held shift key.
- `<leftShiftOff>` `<rightShiftOff>` - Simulates releasing a held shift key.
- `<wait>` `<wait5>` `<wait10>` - Adds a 1, 5 or 10 second pause before
- `<wait>` `<wait5>` `<wait10>` - Adds a 1, 5 or 10 second pause before
sending any additional keys. This is useful if you have to generally wait
for the UI to update before typing more.
@ -306,7 +308,7 @@ In addition to the special keys, each command to type is treated as a
[configuration template](/docs/templates/configuration-templates.html). The
available variables are:
- `HTTPIP` and `HTTPPort` - The IP and port, respectively of an HTTP server
- `HTTPIP` and `HTTPPort` - The IP and port, respectively of an HTTP server
that is started serving the directory specified by the `http_directory`
configuration parameter. If `http_directory` isn't specified, these will be
blank!
@ -314,7 +316,7 @@ available variables are:
Example boot command. This is actually a working boot command used to start an
Ubuntu 12.04 installer:
``` {.text}
```text
[
"<esc><esc><enter><wait>",
"/install/vmlinuz noapic ",
@ -340,7 +342,7 @@ Extra `prlctl` commands are defined in the template in the `prlctl` section. An
example is shown below that sets the memory and number of CPUs within the
virtual machine:
``` {.javascript}
```json
{
"prlctl": [
["set", "{{.Name}}", "--memsize", "1024"],

Some files were not shown because too many files have changed in this diff Show More