website/docs: tips & tricks for vfile [GH-2788]
This commit is contained in:
parent
86bb6105d5
commit
dbaa48ff5b
|
@ -128,9 +128,10 @@
|
|||
<ul class="sub unstyled">
|
||||
<li<%= sidebar_current("vagrantfile-version") %>><a href="/v2/vagrantfile/version.html">Configuration Version</a></li>
|
||||
<li<%= sidebar_current("vagrantfile-vagrantversion") %>><a href="/v2/vagrantfile/vagrant_version.html">Minimum Vagrant Version</a></li>
|
||||
<li<%= sidebar_current("vagrantfile-machine") %>><a href="/v2/vagrantfile/machine_settings.html">Machine Settings</a></li>
|
||||
<li<%= sidebar_current("vagrantfile-ssh") %>><a href="/v2/vagrantfile/ssh_settings.html">SSH Settings</a></li>
|
||||
<li<%= sidebar_current("vagrantfile-vagrant") %>><a href="/v2/vagrantfile/vagrant_settings.html">Vagrant Settings</a></li>
|
||||
<li<%= sidebar_current("vagrantfile-tips") %>><a href="/v2/vagrantfile/tips.html">Tips & Tricks</a></li>
|
||||
<li<%= sidebar_current("vagrantfile-machine") %>><a href="/v2/vagrantfile/machine_settings.html" class="nocap">config.vm</a></li>
|
||||
<li<%= sidebar_current("vagrantfile-ssh") %>><a href="/v2/vagrantfile/ssh_settings.html" class="nocap">config.ssh</a></li>
|
||||
<li<%= sidebar_current("vagrantfile-vagrant") %>><a href="/v2/vagrantfile/vagrant_settings.html" class="nocap">config.vagrant</a></li>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
|
|
|
@ -119,6 +119,10 @@
|
|||
padding: 12px 0;
|
||||
border-top: 1px solid fade(@white, 20%);
|
||||
|
||||
a.nocap {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
border-top: none;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
page_title: "Tips & Tricks - Vagrantfile"
|
||||
sidebar_current: "vagrantfile-tips"
|
||||
---
|
||||
|
||||
# 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:
|
||||
|
||||
<pre class="prettyprint">
|
||||
(1..3).each do |i|
|
||||
config.vm.define "slave-#{i}" do |slave|
|
||||
slave.vm.provision "shell",
|
||||
inline: "echo hello from slave #{i}"
|
||||
end
|
||||
end
|
||||
</pre>
|
||||
|
||||
<strong>Warning:</strong> 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>:
|
||||
|
||||
<pre class="prettyprint">
|
||||
# THIS DOES NOT WORK!
|
||||
for i in 1..3 do
|
||||
config.vm.define "slave-#{i}" do |slave|
|
||||
slave.vm.provision "shell",
|
||||
inline: "echo hello from slave #{i}"
|
||||
end
|
||||
end
|
||||
</pre>
|
||||
|
||||
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 slave will actually provision with the same text.
|
||||
|
||||
This is an easy mistake to make, and Vagrant can't really protect against it,
|
||||
so the best we can do is mention it here.
|
Loading…
Reference in New Issue