This is a big commit, and I apologize in advance for the future
git-blames all pointing to me. This commit does a few things:
1. Merges the website/docs and website/www repo into a single website repo
to be in line with other HashiCorp projects
2. Updates to use middleman-hashicorp
3. Converts less to scss to be in line with other projects
4. Updates page styles to be in line with other projects
5. Optimizes images
6. Prepare for S3 + Fastly deployment with scripts, etc.
7. Removes blog posts (they have been transferred to hashicorp.com with
redirects in place
8. Updated sitemap generation script for better SEO
9. Fixed many broken links
10. Add description to all fields
73 lines
2.2 KiB
Markdown
73 lines
2.2 KiB
Markdown
---
|
|
layout: "docs"
|
|
page_title: "Tips & Tricks - Vagrantfile"
|
|
sidebar_current: "vagrantfile-tips"
|
|
description: |-
|
|
The Vagrantfile is a very flexible configuration format. Since it is just
|
|
Ruby, there is a lot you can do with it. However, in that same vein, since
|
|
it is Ruby, there are a lot of ways you can shoot yourself in the foot. When
|
|
using some of the tips and tricks on this page, please take care to use them
|
|
correctly.
|
|
---
|
|
|
|
# Tips & Tricks
|
|
|
|
The Vagrantfile is a very flexible configuration format. Since it is just
|
|
Ruby, there is a lot you can do with it. However, in that same vein, since
|
|
it is Ruby, there are a lot of ways you can shoot yourself in the foot. When
|
|
using some of the tips and tricks on this page, please take care to use them
|
|
correctly.
|
|
|
|
## Loop Over VM Definitions
|
|
|
|
If you want to apply a slightly different configuration to many
|
|
multi-machine machines, you can use a loop to do this. For example, if
|
|
you wanted to create three machines:
|
|
|
|
```ruby
|
|
(1..3).each do |i|
|
|
config.vm.define "node-#{i}" do |node|
|
|
node.vm.provision "shell",
|
|
inline: "echo hello from node #{i}"
|
|
end
|
|
end
|
|
```
|
|
|
|
~> **Warning:** The inner portion of multi-machine definitions
|
|
and provider overrides are lazy-loaded. This can cause issues if you change
|
|
the value of a variable used within the configs. For example, the loop below
|
|
<em>does not work</em>:
|
|
|
|
```ruby
|
|
# THIS DOES NOT WORK!
|
|
for i in 1..3 do
|
|
config.vm.define "node-#{i}" do |node|
|
|
node.vm.provision "shell",
|
|
inline: "echo hello from node #{i}"
|
|
end
|
|
end
|
|
```
|
|
|
|
The `for i in ...` construct in Ruby actually modifies the value of `i`
|
|
for each iteration, rather than making a copy. Therefore, when you run this,
|
|
every node will actually provision with the same text.
|
|
|
|
This is an easy mistake to make, and Vagrant cannot really protect against it,
|
|
so the best we can do is mention it here.
|
|
|
|
## Overwrite host locale in ssh session
|
|
|
|
Usually, host locale environment variables are passed to guest. It may cause
|
|
failures if the guest software do not support host locale. One possible solution
|
|
is override locale in the `Vagrantfile`:
|
|
|
|
```ruby
|
|
ENV["LC_ALL"] = "en_US.UTF-8"
|
|
|
|
Vagrant.configure(2) do |config|
|
|
# ...
|
|
end
|
|
```
|
|
|
|
The change is only visible within the `Vagrantfile`.
|