From 1e9459a0675ddf635b04860a4e6afee62e1d8be0 Mon Sep 17 00:00:00 2001 From: Chris Bednarski Date: Thu, 23 Jul 2015 00:02:18 -0700 Subject: [PATCH 1/8] Changed push docs to more clearly explain how they work with Atlas --- .../docs/command-line/push.html.markdown | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/website/source/docs/command-line/push.html.markdown b/website/source/docs/command-line/push.html.markdown index 764333967..96e5b3e20 100644 --- a/website/source/docs/command-line/push.html.markdown +++ b/website/source/docs/command-line/push.html.markdown @@ -1,28 +1,21 @@ --- description: | - The `packer push` Packer command takes a template and pushes it to a build - service that will automatically build this Packer template. + The `packer push` command uploads a template and other required files to the Atlas build service, which will run your packer build for you. layout: docs page_title: 'Push - Command-Line' ... # Command-Line: Push -The `packer push` Packer command takes a template and pushes it to a Packer -build service such as [HashiCorp's Atlas](https://atlas.hashicorp.com). The -build service will automatically build your Packer template and expose the -artifacts. +The `packer push` command uploads a template and other required files to the Atlas service, which will run your packer build for you. [Learn more about Packer in Atlas.](https://atlas.hashicorp.com/help/packer/features) -External build services such as HashiCorp's Atlas make it easy to iterate on -Packer templates, especially when the builder you are running may not be easily -accessable (such as developing `qemu` builders on Mac or Windows). +Running builds remotely makes it easier to iterate on packer builds that are not supported on your operating system, for example, building docker or QEMU while developing on Mac or Windows. Also, the hard work of building VMs is offloaded to dedicated servers with more CPU, memory, and network resources. -!> The Packer build service will receive the raw copy of your Packer template -when you push. **If you have sensitive data in your Packer template, you should -move that data into Packer variables or environment variables!** +When you use push to run a build in Atlas, you may also want to store your build artifacts in Atlas. In order to do that you will also need to configure the [Atlas post-processor](/docs/post-processors/atlas.html). This is optional, and both the post-processor and push commands can be used independently. -For the `push` command to work, the [push -configuration](/docs/templates/push.html) must be completed within the template. +!> The push command uploads your template and other files, like provisioning scripts, to Atlas. Take care not to upload files that you don't intend to, like secrets or large binaries. **If you have secrets in your Packer template, you should [move them into environment variables](https://packer.io/docs/templates/user-variables.html).** + +Most push behavior is [configured in your packer template](/docs/templates/push.html). You can override or supplement your configuration using the options below. ## Options @@ -30,12 +23,16 @@ configuration](/docs/templates/push.html) must be completed within the template. template much like a VCS commit message. This message will be passed to the Packer build service. This option is also available as a short option `-m`. -- `-token` - An access token for authenticating the push to the Packer build - service such as Atlas. This can also be specified within the push - configuration in the template. +- `-token` - Your access token for the Atlas API. + +-> Login to Atlas to [generate an Atlas Token](https://atlas.hashicorp.com/settings/tokens). The most convenient way to configure your token is to set it to the `ATLAS_TOKEN` environment variable, but you can also use `-token` on the command line. - `-name` - The name of the build in the service. This typically looks like - `hashicorp/precise64`. + `hashicorp/precise64`, which follows the form `/`. This must be specified here or in your template. + +- `-var` - Set a variable in your packer template. This option can be used multiple times. This is useful for setting version numbers for your build. + +- `-var-file` - Set template variables from a file. ## Examples From a77ee557ac8dff754a025ffcc827cd91436fa443 Mon Sep 17 00:00:00 2001 From: Chris Bednarski Date: Fri, 24 Jul 2015 14:49:22 -0700 Subject: [PATCH 2/8] Starting rework of atlas post-processor page --- .../docs/post-processors/atlas.html.markdown | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/website/source/docs/post-processors/atlas.html.markdown b/website/source/docs/post-processors/atlas.html.markdown index 4f2cb3640..8839830d2 100644 --- a/website/source/docs/post-processors/atlas.html.markdown +++ b/website/source/docs/post-processors/atlas.html.markdown @@ -11,9 +11,9 @@ page_title: 'Atlas Post-Processor' Type: `atlas` -The Atlas post-processor for Packer receives an artifact from a Packer build and -uploads it to Atlas. [Atlas](https://atlas.hashicorp.com) hosts and serves -artifacts, allowing you to version and distribute them in a simple way. +The Atlas post-processor uploads artifacts from your packer builds to Atlas for hosting. Artifacts hosted in Atlas are are automatically made available for use with Vagrant and Terraform, and Atlas provides additional features for managing versions and releases. [Learn more about packer in Atlas.](https://atlas.hashicorp.com/help/packer/features) + +You can also use the push command to [run packer builds in Atlas](/docs/command-line/push.html). The push command and Atlas post-processor can be used together or independently. ## Workflow @@ -25,8 +25,7 @@ location in Atlas. Here is an example workflow: -1. Packer builds an AMI with the [Amazon AMI - builder](/docs/builders/amazon.html) +1. Packer builds an AMI with the [Amazon AMI builder](/docs/builders/amazon.html) 2. The `atlas` post-processor takes the resulting AMI and uploads it to Atlas. The `atlas` post-processor is configured with the name of the AMI, for example `hashicorp/foobar`, to create the artifact in Atlas or update the @@ -40,24 +39,19 @@ The configuration allows you to specify and access the artifact in Atlas. ### Required: -- `token` (string) - Your access token for the Atlas API. This can be - generated on your [tokens - page](https://atlas.hashicorp.com/settings/tokens). Alternatively you can - export your Atlas token as an environmental variable and remove it from - the configuration. +- `token` (string) - Your access token for the Atlas API. + +-> Login to Atlas to [generate an Atlas Token](https://atlas.hashicorp.com/settings/tokens). The most convenient way to configure your token is to set it to the `ATLAS_TOKEN` environment variable, but you can also use `token` configuration option. - `artifact` (string) - The shorthand tag for your artifact that maps to Atlas, i.e `hashicorp/foobar` for `atlas.hashicorp.com/hashicorp/foobar`. - You must have access to the organization, hashicorp in this example, in + You must have access to the organization—hashicorp in this example—in order to add an artifact to the organization in Atlas. - `artifact_type` (string) - For uploading AMIs to Atlas, `artifact_type` will always be `amazon.ami`. This field must be defined because Atlas can host other artifact types, such as Vagrant boxes. --> **Note:** If you want to upload Vagrant boxes to Atlas, use the [Atlas -post-processor](/docs/post-processors/atlas.html). - ### Optional: - `atlas_url` (string) - Override the base URL for Atlas. This is useful if From 30850b851d6dcad5979abd6d9787918c9e2a3c0f Mon Sep 17 00:00:00 2001 From: Chris Bednarski Date: Fri, 24 Jul 2015 14:54:46 -0700 Subject: [PATCH 3/8] Reformat --- .../docs/command-line/push.html.markdown | 38 ++++++++++++++----- .../docs/post-processors/atlas.html.markdown | 22 ++++++++--- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/website/source/docs/command-line/push.html.markdown b/website/source/docs/command-line/push.html.markdown index 96e5b3e20..06e5a3c98 100644 --- a/website/source/docs/command-line/push.html.markdown +++ b/website/source/docs/command-line/push.html.markdown @@ -1,21 +1,36 @@ --- description: | - The `packer push` command uploads a template and other required files to the Atlas build service, which will run your packer build for you. + The `packer push` command uploads a template and other required files to the + Atlas build service, which will run your packer build for you. layout: docs page_title: 'Push - Command-Line' ... # Command-Line: Push -The `packer push` command uploads a template and other required files to the Atlas service, which will run your packer build for you. [Learn more about Packer in Atlas.](https://atlas.hashicorp.com/help/packer/features) +The `packer push` command uploads a template and other required files to the +Atlas service, which will run your packer build for you. [Learn more about +Packer in Atlas.](https://atlas.hashicorp.com/help/packer/features) -Running builds remotely makes it easier to iterate on packer builds that are not supported on your operating system, for example, building docker or QEMU while developing on Mac or Windows. Also, the hard work of building VMs is offloaded to dedicated servers with more CPU, memory, and network resources. +Running builds remotely makes it easier to iterate on packer builds that are not +supported on your operating system, for example, building docker or QEMU while +developing on Mac or Windows. Also, the hard work of building VMs is offloaded +to dedicated servers with more CPU, memory, and network resources. -When you use push to run a build in Atlas, you may also want to store your build artifacts in Atlas. In order to do that you will also need to configure the [Atlas post-processor](/docs/post-processors/atlas.html). This is optional, and both the post-processor and push commands can be used independently. +When you use push to run a build in Atlas, you may also want to store your build +artifacts in Atlas. In order to do that you will also need to configure the +[Atlas post-processor](/docs/post-processors/atlas.html). This is optional, and +both the post-processor and push commands can be used independently. -!> The push command uploads your template and other files, like provisioning scripts, to Atlas. Take care not to upload files that you don't intend to, like secrets or large binaries. **If you have secrets in your Packer template, you should [move them into environment variables](https://packer.io/docs/templates/user-variables.html).** +!> The push command uploads your template and other files, like provisioning +scripts, to Atlas. Take care not to upload files that you don't intend to, like +secrets or large binaries. **If you have secrets in your Packer template, you +should [move them into environment +variables](https://packer.io/docs/templates/user-variables.html).** -Most push behavior is [configured in your packer template](/docs/templates/push.html). You can override or supplement your configuration using the options below. +Most push behavior is [configured in your packer +template](/docs/templates/push.html). You can override or supplement your +configuration using the options below. ## Options @@ -25,12 +40,17 @@ Most push behavior is [configured in your packer template](/docs/templates/push. - `-token` - Your access token for the Atlas API. --> Login to Atlas to [generate an Atlas Token](https://atlas.hashicorp.com/settings/tokens). The most convenient way to configure your token is to set it to the `ATLAS_TOKEN` environment variable, but you can also use `-token` on the command line. +-> Login to Atlas to [generate an Atlas +Token](https://atlas.hashicorp.com/settings/tokens). The most convenient way to +configure your token is to set it to the `ATLAS_TOKEN` environment variable, but +you can also use `-token` on the command line. - `-name` - The name of the build in the service. This typically looks like - `hashicorp/precise64`, which follows the form `/`. This must be specified here or in your template. + `hashicorp/precise64`, which follows the form `/`. This + must be specified here or in your template. -- `-var` - Set a variable in your packer template. This option can be used multiple times. This is useful for setting version numbers for your build. +- `-var` - Set a variable in your packer template. This option can be used + multiple times. This is useful for setting version numbers for your build. - `-var-file` - Set template variables from a file. diff --git a/website/source/docs/post-processors/atlas.html.markdown b/website/source/docs/post-processors/atlas.html.markdown index 8839830d2..435bec7c4 100644 --- a/website/source/docs/post-processors/atlas.html.markdown +++ b/website/source/docs/post-processors/atlas.html.markdown @@ -11,9 +11,15 @@ page_title: 'Atlas Post-Processor' Type: `atlas` -The Atlas post-processor uploads artifacts from your packer builds to Atlas for hosting. Artifacts hosted in Atlas are are automatically made available for use with Vagrant and Terraform, and Atlas provides additional features for managing versions and releases. [Learn more about packer in Atlas.](https://atlas.hashicorp.com/help/packer/features) +The Atlas post-processor uploads artifacts from your packer builds to Atlas for +hosting. Artifacts hosted in Atlas are are automatically made available for use +with Vagrant and Terraform, and Atlas provides additional features for managing +versions and releases. [Learn more about packer in +Atlas.](https://atlas.hashicorp.com/help/packer/features) -You can also use the push command to [run packer builds in Atlas](/docs/command-line/push.html). The push command and Atlas post-processor can be used together or independently. +You can also use the push command to [run packer builds in +Atlas](/docs/command-line/push.html). The push command and Atlas post-processor +can be used together or independently. ## Workflow @@ -25,7 +31,8 @@ location in Atlas. Here is an example workflow: -1. Packer builds an AMI with the [Amazon AMI builder](/docs/builders/amazon.html) +1. Packer builds an AMI with the [Amazon AMI + builder](/docs/builders/amazon.html) 2. The `atlas` post-processor takes the resulting AMI and uploads it to Atlas. The `atlas` post-processor is configured with the name of the AMI, for example `hashicorp/foobar`, to create the artifact in Atlas or update the @@ -41,12 +48,15 @@ The configuration allows you to specify and access the artifact in Atlas. - `token` (string) - Your access token for the Atlas API. --> Login to Atlas to [generate an Atlas Token](https://atlas.hashicorp.com/settings/tokens). The most convenient way to configure your token is to set it to the `ATLAS_TOKEN` environment variable, but you can also use `token` configuration option. +-> Login to Atlas to [generate an Atlas +Token](https://atlas.hashicorp.com/settings/tokens). The most convenient way to +configure your token is to set it to the `ATLAS_TOKEN` environment variable, but +you can also use `token` configuration option. - `artifact` (string) - The shorthand tag for your artifact that maps to Atlas, i.e `hashicorp/foobar` for `atlas.hashicorp.com/hashicorp/foobar`. - You must have access to the organization—hashicorp in this example—in - order to add an artifact to the organization in Atlas. + You must have access to the organization—hashicorp in this example—in order + to add an artifact to the organization in Atlas. - `artifact_type` (string) - For uploading AMIs to Atlas, `artifact_type` will always be `amazon.ami`. This field must be defined because Atlas can host From 54afe10ad10f8fc841d1f4f46a4a5feeca977d7c Mon Sep 17 00:00:00 2001 From: Chris Bednarski Date: Fri, 24 Jul 2015 20:59:40 -0700 Subject: [PATCH 4/8] Make the anchor work with the reformatter --- website/source/docs/builders/amazon.html.markdown | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/website/source/docs/builders/amazon.html.markdown b/website/source/docs/builders/amazon.html.markdown index 3eb79ac1e..a85e22d1a 100644 --- a/website/source/docs/builders/amazon.html.markdown +++ b/website/source/docs/builders/amazon.html.markdown @@ -32,11 +32,9 @@ Packer supports the following builders at the moment: builder](/docs/builders/amazon-ebs.html). It is much easier to use and Amazon generally recommends EBS-backed images nowadays. -
+ -\#\# Specifying Amazon Credentials - -
+## Specifying Amazon Credentials When you use any of the amazon builders, you must provide credentials to the API in the form of an access key id and secret. These look like: From 1420e2494cf7014c31df6c4914447c21ae1cea1d Mon Sep 17 00:00:00 2001 From: Chris Bednarski Date: Tue, 28 Jul 2015 16:24:43 -0700 Subject: [PATCH 5/8] Added note on 5g upload limit, and workaround --- .../docs/command-line/push.html.markdown | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/website/source/docs/command-line/push.html.markdown b/website/source/docs/command-line/push.html.markdown index 06e5a3c98..140c996d3 100644 --- a/website/source/docs/command-line/push.html.markdown +++ b/website/source/docs/command-line/push.html.markdown @@ -67,3 +67,27 @@ Push a Packer template with a custom token: ``` {.shell} $ packer push -token ABCD1234 template.json ``` + +## Limits + +`push` is limited to 5gb upload when pushing to Atlas. To be clear, packer *can* +build artifacts larger than 5gb, and Atlas *can* store artifacts larger than +5gb. However, the initial payload you push to *start* the build cannot exceed +5gb. If your boot ISO is larger than 5gb (for example if you are building OSX +images), you will need to put your boot ISO in an external web service and +download it during the packer run. + +The easiest way to host these in a secure fashion is to upload your ISO to +[Amazon +S3](http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html) +or [Google Cloud +Storage](https://cloud.google.com/storage/docs/gsutil/commands/signurl) and +download it using a signed URL. You can inject the signed URL into your build by +using a build variable (environment variable) in Atlas. Example: + +![Configure your signed URL in the Atlas build variables +menu](/assets/images/packer-signed-urls.png) + +You will also need to [configure your packer +template](http://stormchaser.local:4567/docs/templates/user-variables.html) to +use the variable injected by Atlas (or via `push -var`). From 6fac13868b5e5fc47cd98719197f32450c7e3a5d Mon Sep 17 00:00:00 2001 From: Chris Bednarski Date: Tue, 28 Jul 2015 16:46:45 -0700 Subject: [PATCH 6/8] Added screenshot for Atlas build variables --- .../source/assets/images/packer-signed-urls.png | Bin 0 -> 40501 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 website/source/assets/images/packer-signed-urls.png diff --git a/website/source/assets/images/packer-signed-urls.png b/website/source/assets/images/packer-signed-urls.png new file mode 100644 index 0000000000000000000000000000000000000000..4e9e17010d7d44c0b4cb21e62ccccd116ea8a4b3 GIT binary patch literal 40501 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 Date: Thu, 30 Jul 2015 15:58:12 -0700 Subject: [PATCH 7/8] Added a section to explain more clearly how to reference external resources like boot ISOs --- .../source/docs/command-line/push.html.markdown | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/website/source/docs/command-line/push.html.markdown b/website/source/docs/command-line/push.html.markdown index 140c996d3..bb35a9d40 100644 --- a/website/source/docs/command-line/push.html.markdown +++ b/website/source/docs/command-line/push.html.markdown @@ -77,17 +77,11 @@ build artifacts larger than 5gb, and Atlas *can* store artifacts larger than images), you will need to put your boot ISO in an external web service and download it during the packer run. -The easiest way to host these in a secure fashion is to upload your ISO to -[Amazon -S3](http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html) -or [Google Cloud -Storage](https://cloud.google.com/storage/docs/gsutil/commands/signurl) and -download it using a signed URL. You can inject the signed URL into your build by -using a build variable (environment variable) in Atlas. Example: +## Building Private `.iso` and `.dmg` Files + +If you want to build a private `.iso` file you can upload the `.iso` to a secure file hosting service like [Amazon S3](http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html), [Google Cloud Storage](https://cloud.google.com/storage/docs/gsutil/commands/signurl), or [Azure File Service](https://msdn.microsoft.com/en-us/library/azure/dn194274.aspx) and download it at build time using a signed URL. You should convert `.dmg` files to `.iso` and follow a similar procedure. + +Once you have added [variables in your packer template](/docs/templates/user-variables.html) you can specify credentials or signed URLs using Atlas environment variables, or via the `-var` flag when you run `push`. ![Configure your signed URL in the Atlas build variables menu](/assets/images/packer-signed-urls.png) - -You will also need to [configure your packer -template](http://stormchaser.local:4567/docs/templates/user-variables.html) to -use the variable injected by Atlas (or via `push -var`). From 5218c5a65b674c947e104fcdd4dc5b43dd41830e Mon Sep 17 00:00:00 2001 From: Chris Bednarski Date: Thu, 30 Jul 2015 16:09:40 -0700 Subject: [PATCH 8/8] Reformat --- .../source/docs/command-line/push.html.markdown | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/website/source/docs/command-line/push.html.markdown b/website/source/docs/command-line/push.html.markdown index bb35a9d40..57ea58cf0 100644 --- a/website/source/docs/command-line/push.html.markdown +++ b/website/source/docs/command-line/push.html.markdown @@ -79,9 +79,20 @@ download it during the packer run. ## Building Private `.iso` and `.dmg` Files -If you want to build a private `.iso` file you can upload the `.iso` to a secure file hosting service like [Amazon S3](http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html), [Google Cloud Storage](https://cloud.google.com/storage/docs/gsutil/commands/signurl), or [Azure File Service](https://msdn.microsoft.com/en-us/library/azure/dn194274.aspx) and download it at build time using a signed URL. You should convert `.dmg` files to `.iso` and follow a similar procedure. - -Once you have added [variables in your packer template](/docs/templates/user-variables.html) you can specify credentials or signed URLs using Atlas environment variables, or via the `-var` flag when you run `push`. +If you want to build a private `.iso` file you can upload the `.iso` to a secure +file hosting service like [Amazon +S3](http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html), +[Google Cloud +Storage](https://cloud.google.com/storage/docs/gsutil/commands/signurl), or +[Azure File +Service](https://msdn.microsoft.com/en-us/library/azure/dn194274.aspx) and +download it at build time using a signed URL. You should convert `.dmg` files to +`.iso` and follow a similar procedure. + +Once you have added [variables in your packer +template](/docs/templates/user-variables.html) you can specify credentials or +signed URLs using Atlas environment variables, or via the `-var` flag when you +run `push`. ![Configure your signed URL in the Atlas build variables menu](/assets/images/packer-signed-urls.png)