Recently there has been a question about dealing with multiple VMware vCenters and our Chef plugins. Unlike AWS or AZURE, vCenter is (normally) deployed per Datacenter to allow for local control over your vSphere infrastructure.
(Yes, yes, I know you can make a super set vCenter instance, but more people I talk to, it’s just easier to connect to the DC you want to administer.)
Unfortunately, as you start using
knife-vrealize you may need
to flip back and forth between DCs. There are plugins like knife-block, which
I have even used in the past, but some places don’t allow for extra plugins. This
is a suggested way to do it purely through Ruby, Chef and your Shell.
First thing first, you need to edit your
knife.rb to allow for the ability to switch,
take this fake example:
knife[:ssh_user] = "root" knife[:vsphere_insecure] = true knife[:vsphere_host] = "central.tirefi.re" knife[:vsphere_dc] = "Datacenter" knife[:vsphere_user] = "firstname.lastname@example.org" if ENV['DC'] == 'EAST' knife[:vsphere_host] = "east.tirefi.re" knife[:vsphere_dc] = "Datacenter" end if ENV['DC'] == 'WEST' knife[:vsphere_host] = "west.tirefi.re" knife[:vsphere_dc] = "Datacenter" end
Now most of this should make some sense. You can pretty much assume I have 3 Datacenters,
west. My default datacenter, the one I connect to most of the time is
Now, lets say I did a
knife vsphere vm list:
14:16:20 JJs-MacBook-Pro ~ > knife vsphere vm list Folder: VM Name: jenkins IP: RAM: 4096 State: off [-- snip --] VM Name: pfsense IP: RAM: 4024 State: on
So I connect out to
centerals vCenter instance, and get back by Default information.
Ok, but my boss wants to see what’s in my
east datacenter. This is where Environment variables
come into play. With the changes to the
knife.rb above, you can “flip” with just giving the Shell
command an override.
Take for instance for
14:20:20 JJs-MacBook-Pro ~ > DC=EAST knife vsphere vm list Folder: VM Name: WIN-AD-EAST IP: RAM: 8096 State: on [-- snip --] VM Name: QuakeIIServer IP: RAM: 4024 State: on
or in the case of
14:23:20 JJs-MacBook-Pro ~ > DC=WEST knife vsphere vm list Folder: VM Name: WIN-AD-WEST IP: RAM: 8096 State: on [-- snip --] VM Name: TF2 IP: RAM: 4024 State: on
DC=WEST, which “flips” the location of the command endpoint. Just to be clear,
this works with any of the
vm clone etc, so you can change it via an option instead