#myOCD
Warning: Make sure you apply these additions to a new Vagrant instance or one that isn’t running. (If your instance isn’t new you will need to read the section called “Changing existing Vagrant instances”)
It’s always bugged me that Vagrant insists on calling a single instance default
1 no matter what you’ve set the name to in your Vagrantfile
configuration of the instance provider:
# Set the instance name
config.vm.provider :virtualbox do |v|
v.name = "VaporApps"
end
On top of that when you have several independent instances with their own Vagrantfile
’s it can be a little daunting when everything you ssh
into looks the same2:
Last login: Sun Jan 13 23:58:20 2019 from 10.0.2.2
vagrant@ubuntu-xenial:~$ whoami
vagrant
So, if you’re like me and don’t want to see a listing of all your Vagrant boxes called default
… like this:
dev:~ $ vagrant global-status
id name provider state directory
----------------------------------------------------------------------------------------
96e7803 default virtualbox poweroff /Users/dev/Development/Vapor
6f4dbab default virtualbox poweroff /Users/dev/Development/Clients/XXX/intranet-portal
d393ba0 default virtualbox poweroff /Users/dev/Development/Clients/XXX/D365Integration
45243f3 default virtualbox running /Users/dev/Development/VaporWebsites
fd57a2f default virtualbox poweroff /Users/dev/Development/OS Projects/Research
8182484 default virtualbox running /Users/dev/Projects/Ansible
and you want to know at a glance which instance you’re currently ssh
’d into… may I suggest these simple additions to your Vagrantfile
before you vagrant up
for the first time.
1. Wrap Your Instance in a define
Vagrant is able to define and control multiple instances in a single Vagrantfile, typically you would use this when developing a system that has a multi-machine setup, like a front-end reverse cache, an app server and backing it all possibly a database or some other data store (like an image store etc) or all of those things.
For my purposes, I’m going to use it to set the instance names for my various setups. The process is relatively simple, first off we can take our previous block where we set the instance name and wrap it in a define
block.
NB. It’s important to do this before you vagrant up
for the first time. If you have already created your instance and want to make these changes you should read the next section
# Use `define` to create our instance
config.vm.define "VaporApps" do |instance|
# Set the instance name
instance.vm.provider :virtualbox do |vm|
vm.name = "VaporApps"
end
end
1.1 Set a hostname
This is good, but we need to do one more thing so that when we ssh into an instance we can clearly see which one we’re in. We can set the hostname, by adding this line to our define
block:
# So we know which instance we're in easily in termninal
va.vm.hostname = "VaporApps"
So, the whole define block looks like this:
# Use `define` to create our instance
config.vm.define "VaporApps" do |instance|
# So we know which instance we're in easily in termninal
instance.vm.hostname = "VaporApps"
# Set the instance name
instance.vm.provider :virtualbox do |vm|
vm.name = "VaporApps"
end
end
With these changes in place we can immediately see the differences after issuing a vagrant up
command:
dev $ vagrant status
Current machine states:
VaporApps running (virtualbox)
dev $ vagrant ssh
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-141-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
Last login: Mon Jan 14 00:14:55 2019 from 10.0.2.2
vagrant@Websites:~$
Now at a glance we can see in our instance name and in an ssh session the name of the instance in the prompt, and the vagrant global-status
output now shows meaningful names for each of our instances.
Craigs-MacBook-Pro:Research $ vagrant global-status
id name provider state directory
--------------------------------------------------------------------------------------------------
96e7803 VaporApps virtualbox poweroff /Users/dev/Development/Vapor
6f4dbab XXXPortal virtualbox poweroff /Users/dev/Development/Clients/XXX/intranet-portal
d393ba0 XXX365Int virtualbox poweroff /Users/dev/Development/Clients/XXX/D365Integration
45243f3 Websites virtualbox running /Users/dev/Development/VaporWebsites
fd57a2f Research virtualbox poweroff /Users/dev/Development/OS Projects/Research
8182484 AnsibleTesting virtualbox running /Users/dev/Projects/Ansible
2. Changing existing Vagrant instances
If you’ve already got some Vagrant instances around the place making those
- Make sure the instance you want to update isn’t running by issuing the
vagrant status
to see if its running:
dev $ vagrant status
Current machine states:
default running (virtualbox)
- and then a
vagrant halt
to gracefully stop it. - Update your
Vagrantfile
with thedefine
block and set your hostname as described above. - Run
vagrant status
again and you should see the status has changed to show the name you specified in thedefine
block, however, now it’s saying that your instance isnot created
dev $ vagrant status
Current machine states:
VaporApps not created (virtualbox)
The environment has not yet been created. Run 'vagrant up' to
create the environment. If a machine is not created, only the
default provider will be shown. So if a provider is not listed,
then the machine is not created for that environment.
Don’t panic! This will be fixed in the next step.
- Open the
.vagrant/machines
directory and you should see another directory calleddefault
, rename it to the name you set in thedefine
statement. In my example that means the directorydefault
is renamedVaporApps
- Run
vagrant status
again and this time you should the standardpoweroff
status for your renamed instance.
dev $ vagrant status
Current machine states:
VaporApps poweroff (virtualbox)
The VM is powered off. To restart the VM, simply run `vagrant up`
Your instance now has a user friendly name… and is ready to vagrant up