Setting up a minimal CentOS7 VM with VMXNET3 NIC

Nov 27, 2014 • Jonathan Frappier

Now that CentOS7 is out, time to make sure I can setup my virtual machines with the VMXNET3 vmnic. As I documented in my previous post, CentOS 6.x using the VMXNET3 driver requires VMware Tools, VMware Tools needs Perl, Perl is not included in the minimal ISO so I need network access to get Perl to install VMware Tools to get network access. That order of operations doesn’t work very well.

Also, as of CentOS7, VMware now recommends Open Virtual Machine Tools so you would not be installing VMware Tools as I pointed out in my CentOS 6.x post on VMXNET3. Good news, though, VMXNET3 drivers in CentOS7 do not need VMware Tools but there are seemingly some new steps to get networking working. So, lets get started; now obviously we don’t want to install the OS every single time you need it, so my assumption here is that the use case if for your initial template build. With that assumption out of the way I am going to create a new virtual machine in the vSphere Web Client with the following settings:

VM hardware version 10 (since now we can edit them in the C# client)

Guest OS Family - Linux

Guest OS Version - CentOS 4/5/6/7 (64-bit)

Virtual Hardware

1 vCPU

1GB memory

New hard disk - thin provisioned

1x vmnic - VMXNET3 connected

Once the new machine is created, power it on and connect to the console, install the OS as you normally would - notice when you get to the Installation Summary screen the network says Not Connected; click on it and you’ll see that i seems to recognize the VMXNET3 controller. I am not going to set this adapter to “ON” right now, I am going to leave it “OFF” to show you how to bring it up on the command line. Finish the and reboot once completed. Log in and run ifconfig…egads command not found? What is Linux going all Microsoft on us and changing things for the sake of changing it!! Well if you tried to do a yum or ping anything right now, you’d not have network access as you might expect. So where to go from here?

Well it appears there is no more /etc/udev/rules.d/70-persistent-net.rules file any more, so lets have a look at /etc/sysconfig/network-scripts. Hmm where is my ifcfg-eth0 file?

That has been replaced now, notice the ifcfg-eno16777984 file, that is what we want (though not sure where the numbering comes from) - open it in vi so we can have a look. Yup looks just like the old ifcfg-eth0 file, lets get to work. Change BOOTPROTO from dhcp to none and add the following with valid information for your network; IPADDR, NETMASK, GATEWAY, DNS1. Here is what my file looks like now:

Now that you are all set, [esc] :wq [enter] to save it and service network restart - now ping 8.8.8.8…wait what - I STILL can’t ping? What is wrong? Apparently in CentOS7 restarting the network service is not enough, we need to bring the actual interface up. If you do an ls in /etc/sysconfig/network-scripts you’ll notice the ifup command - always been there, I never used it before but this is what you’ll use to bring up your interface, something like

ifup ifcfg-eno16777984

Now, here you can see our network is up

But… this will not be persistent over network service or virtual machine restarts so you’ll need also edit the ifcfg-eno######## file and change ONBOOT to yes, now you can restart networking or your virtual machine and maintain networking

In my last post, I showed you a simple example of an Ansible playbook using yum to update a package. Still really awesome, especially when you consider how often you might need to do that and how simple it is to handle that type of otherwise manual task. In this post, I am going to try and put together a slightly more complicated playbook to look at some of the other options available.

When deploying an Application Services blueprint, you notice that the workflow does not move past the 2nd step in the provisioning process - agent_bootstrap node setup, however the previous step which renames the virtual machines appears to work fine. In this scenario you have also successfully installed the AppD agent in the vSphere template.