Vester and DSC, a comparison

Over the past couple of months, I have published several posts about Configuration drift and tools like Vester and DSC Resources for VMware. Because Vester and DSC Resources for VMware serve the same goal, let us review what these tools have in common and see some of the differences.
Some topics; general information about the tool, configuration of the tool, the tool in daily operations, performance and a summary.

Introduction

Both tools are built with PowerShell. Vester has been on the market for the longest time and dates from 2017. Vester comes as a PowerShell module and depends on two other modules; Pester and PowerCLI. Vester consists of three parts;

  • Commands that do the actual work, like creating configuration files, verifying the actual configuration and do remediation in case the actual configuration does not match the desired confguration.
  • Set of Test files. Each test file contains code that checks and applies a configuration item.
  • Config files, are key-value pairs with the desired values of the configuration items. Some examples: NTP settings, DNS servers, etc.

Desired State Configuration (DSC) was introduced in PowerShell 4 and brings a declarative model for the configuration of Windows Servers. DSC can copy files, edit the registry, install Windows features and components. After initial configuration, DSC can also test the desired configuration and if necessary perform remediation.
DSC Resources are what can be configured on a Windows server, but today not only on Windows Servers! DSC Resources for VMware was first released in December 2018. Instead of Windows servers, these resources can configure ESXi hosts and vCenter Servers, although the first edition had only a few resources. The second edition, released in June 2019 offered considerably more resources.
Both tools are available in the PowerShell Gallery and can be found in Github.

Vester – Configuration

If you haven’t heard about Vester before, I recommend reading my first post about this topic in this series and Brian Bunke’s three-part-series about Vester.

The ability to automatically create a Config file with all key=value pairs of the configuration is a very nice Vester feature. The New-VesterConfig command lets you select reference objects for Cluster, Datastore Cluster, ESXi host, Distributed switch, VM and creates the Config file. As the Config file is in .JSON format, editing the content (desired values) and copying is easy.

    "scope":  {
                  "datacenter":  "*",
                  "cluster":  "*",
                  "dscluster":  "*",
                  "host":  "*",
                  "vm":  "*",
                  "vds":  "*"
              },
    "Cluster":  {
                    "drscpuovercommitment":  90,
                    "drsDpmAutomation":  "automated",
                    "drsDpmEnable":  true,
                    "drsDpmThreshold":  4,
                    "drsenable":  true,
                    "drslevel":  "FullyAutomated",
                    "drsmemoryloadbalancing":  100,
                    "drsmode":  3,
                    "drsvmautomation":  false,

Config file – fragment

The number of configuration items in the Config file, is based on the Test files present under the folder <PS module path>\Vester\<Vester version>\Tests. Tests have the extension .Vester.ps1 and are grouped in six folders for; Cluster, Datastore Cluster, ESXi hosts, Network (Distributed switches), vCenter en VMs.
In most cases, each Test file contains just one configuration item, does not have dependencies to other test files. For all DRS and HA settings of a compute cluster, multiple test files are required.
Creating new Vester Test files is not difficult. Test files are well structured and contain two essential parts, first code to get the actual value of an item (quite often a PowerCLI Get- command). Second, the code to set the desired value, by means of a PowerCLI Set- command.

Currently Vester does not support multiple vCenter Servers. Before running any of the Vester commands, you must setup a connection to a vCenter Server and you will need at least one Config file for each vCenter Server.

DSC Resources for VMware – Configuration

Where Vester basically uses two commands, one to create the Config files and a second command to Verify and Remediate an environment, PowerShell DSC works differently. If PowerShell DSC is completely new, a good introduction can be found in this post. In general the steps to run PowerShell DSC in a Windows environment are:

  • First, create a DSC configuration file. The DSC configuration file contains an overview of where – which Windows hosts, called Nodes – to apply the configuration and what to apply (called Resources).
    Resources contain properties as key=value pairs. Where Vester usually needs a Test file for each property, a DSC resource can combine multiple properties.
  • Second step is to invoke the DSC configuration, this results in the creation of a .MOF file (aka Configuration Document) for every node mentioned in the DSC configuration. Each MOF file contains all the instructions that must be carried out on that Windows host.
  • Third step is to start the configuration jobs on the nodes, the MOF files are pushed to the nodes. MOF files are not self-executing but use the Local Configuration Manager (LCM) of the Windows host to read the MOF file and implement the configuration. The LCM can be seen as the “engine” that does the hard work. LCMs do have many, often advanced configuration options, each node can be configured individually.

And here is the thing with DSC Resources for VMware; vCenter Server appliances and ESXi hosts cannot execute .MOF files. Instead, to make this work, DSC Resources for VMware needs a LCM Proxy; that is a Windows host with PowerShell, a LCM and PowerCLI.
Instead of multiple MOF files for the vCenter Server and the ESXi hosts, one single MOF file for the LCM Proxy will be created. The LCM Proxy will apply the desired settings to the vSphere environment. See this post for more info.

After the installation of the PowerShell module, the available resources can be reviewed with the following command:

PS C:\VMwareDSC> Get-DscResource -Module VMware.vSphereDSC | Select-Object Name,Properties

Name                Properties                                                                     
----                ----------                                                                     
Cluster             {DependsOn, PsDscRunAsCredential, Server, Credential...}                       
Datacenter          {Credential, Ensure, Location, Name...}                                        
DatacenterFolder    {Credential, Ensure, Location, Name...}                                        
DrsCluster          {Credential, DatacenterLocation, DatacenterName, Ensure...}                    
Folder              {Credential, DatacenterLocation, DatacenterName, Ensure...}                    
HACluster           {Credential, DatacenterLocation, DatacenterName, Ensure...}                    
PowerCLISettings    {SettingsScope, CEIPDataTransferProxyPolicy, DefaultVIServerMode, DependsOn...}
vCenterSettings     {Credential, Server, DependsOn, EventMaxAge...}                                
vCenterStatistics   {Credential, Period, Server, DependsOn...}                                     
VMHostAccount       {Credential, Ensure, Id, Role...}                                              
VMHostDnsSettings   {Credential, Dhcp, DomainName, HostName...}                                    
VMHostNtpSettings   {Credential, Name, Server, DependsOn...}                                       
VMHostSatpClaimRule {Credential, Ensure, Name, RuleName...}                                        
VMHostService       {Credential, Key, Name, Server...}                                             
VMHostSettings      {Credential, Name, Server, DependsOn...}                                       
VMHostSyslog        {Credential, Name, Server, CheckSslCerts...}                                   
VMHostTpsSettings   {Credential, Name, Server, DependsOn...}                                       
VMHostVss           {Credential, Ensure, Name, Server...}                                          
VMHostVssBridge     {Credential, Ensure, Name, Server...}                                          
VMHostVssSecurity   {Credential, Ensure, Name, Server...}                                          
VMHostVssShaping    {Credential, Ensure, Name, Server...}                                          
VMHostVssTeaming    {Credential, Ensure, Name, Server...}       

Most of the resources relate to ESXi hosts (resource name starts with VMHost), The remaining resources relate to vCenter Server, Compute Clusters, Datacenters and Folders (as present in vCenter Servers). Resources for Datastore Clusters, Distributed switches and Virtual Machines aren’t available! To add new resources, you can contribute to the project or create your own resources.

To get more information about a resource, e.g. Datacenter:

PS C:\VMwareDSC> Get-DscResource Datacenter | Select-Object -ExpandProperty Properties | ft -AutoSize

Name                 PropertyType   IsMandatory Values           
----                 ------------   ----------- ------           
Credential           [PSCredential]        True {}               
Ensure               [string]              True {Absent, Present}
Location             [string]              True {}               
Name                 [string]              True {}               
Server               [string]              True {}               
DependsOn            [string[]]           False {}               
PsDscRunAsCredential [PSCredential]       False {}            

This way, an overview of all available properties is presented and shows which properties are mandatory. This resource for the Datacenter object shows properties which are typical for DSC, like Ensure (which will verify the presence of the resource) and DependsOn (Resources can depend on other resources). This resources can be used to create and verify the existence of Datacenter objects in a vCenter Environment. Under normal conditions Datacenter objects as well as Clusters don’t come and go, but this could be useful in “Green field” scenario’s).

In a previous post, some examples were presented how to create DSC configuration files and how to make the configuration files and .MOF files more secure.

Daily Operation

After creating the Vester Config file it is time to verify (test) the configuration. It is important to know that during verification (or remediation) the available Test files are leading. That means, if a configuration item is included in the Config file, but the actual Test file is not included in the folder structure, no error will be thrown. The other way around, a missing key-value pair in the Config file will result in an error!
Also worth mentioning are the scoping options within the Vester commands and in the Config files so you can check and apply settings to specific parts of the configuration.
After connecting to a vCenter Server, the Invoke-Vester command will verify the configuration and present the results. For each failed test, the configuration item, desired and actual values are shown.
Remediation is done by adding the -Remediate parameter, this will set the desired value for the failed items. If you are not completely sure, Invoke-Vester, also supports the -WhatIf parameter.

As using Invoke-Vester this way is the “manual, on-demand” way, by creating a scheduled task, Invoke-Vester can be run on a regular basis.
By adding the
-PassThru parameter, the results can be stored in a PowerShell variable and be used for further processing, e.g. creating a Dashboard, see this example.

PowerShell DSC has extensive configuration options and quite a few commands, so a reasonable learning curve is expected if it’s all new to you . Much of PowerShell DSC behavior depends on the configuration of the LCM. By default, configurations are pushed to the nodes, but the LCM can also be configured to pull it’s configuration from a central Configuration repository service.
The ConfigurationMode specifies how the LCM applies the configuration to the nodes. The default setting is ApplyAndMonitor; the LCM will apply any new configuration. After initial application of a new configuration, if the node drifts away from the desired state, no action will be taken but be reported in the logs. BTW logs can be found with:

PS C:\VMwareDSC> Get-WinEvent -LogName “Microsoft-Windows-Dsc/Operational” 

By changing the LCM ConfigurationMode to ApplyAndAutoCorrect, now the LCM will apply any new configuration. After initial configuration, if configuration drift is detected, the current configuration will be re-applied. So this is the start and forget mode.

Also worth mentioning are the following commands:

Get-DscConfiguration, gets the current configuration of the nodes, but doesn’t show configuration drift.
Test-DscConfiguration, tests whether the actual configuration matches the desired configuration and returns a True or False. Adding the Verbose option indicates which tests do fail.
Start-DscConfiguration, will apply the configuration (the MOF file) to the node.

In summary, you can choose a manual mode by doing a Start-DscConfiguration, followed by Test-DscConfiguration or configure the LCM ConfigurationMode as ApplyAndAutoCorrect and go for fully automatic remediation. A new configuration will be applied with the Start-DscConfiguration command.

Performance

Talking about configuration drift and tools, performance is not the first topic that comes to your mind. While working with both Vester and PowerShell DSC, I noticed differences in presenting results, but also differences in the execution time. So, let’s compare: I created identical configurations for both tools and ran a verification against two ESXi hosts. This is how the Vester configuration for the hosts looks like:

    "Host":  {
                 "esxntp":  [
                                "0.bg.pool.ntp.org",
                                "1.bg.pool.ntp.org",
                                "2.bg.pool.ntp.org"
                            ],
                 "EtcIssue":  "Hello World from issue!",
                 "EtcMotd":  "Hello World from motd!",
                 "MemShareForceSalting":  1,
                 "MemShareRateMax":  1000,
                 "MemShareScanGHz":  2,
                 "MemShareScanTime":  50,
                 "ntpservicepolicy":  "automatic",
                 "sshenable":  true,
                 "sshservicepolicy":  "on"
             },

 

The output running Vester in Test mode. Notice that the configuration of the NTP servers does not match the desired configuration. The summary shows 2 tests failed and the total time for this action is less then 6 seconds

PS C:\> Invoke-Vester -Test (Get-VesterTest -Scope Host)
Executing all tests in 'C:\Program Files\WindowsPowerShell\Modules\Vester\1.2.0\Private\Template\VesterTemplate.Tests
.ps1'

Executing script C:\Program Files\WindowsPowerShell\Modules\Vester\1.2.0\Private\Template\VesterTemplate.Tests.ps1

  Describing Host Configuration: AS-MemShareForceSalting.Vester.ps1
    [+] Host esx01.virtual.local - Mem.ShareForceSalting 1.07s
    [+] Host esx02.virtual.local - Mem.ShareForceSalting 285ms

  Describing Host Configuration: AS-MemShareRateMax.Vester.ps1
    [+] Host esx01.virtual.local - Mem.ShareRateMax 311ms
    [+] Host esx02.virtual.local - Mem.ShareRateMax 268ms

  Describing Host Configuration: AS-MemShareScanGHz.Vester.ps1
    [+] Host esx01.virtual.local - Mem.ShareScanGHz 334ms
    [+] Host esx02.virtual.local - Mem.ShareScanGHz 338ms

  Describing Host Configuration: AS-MemShareScanTime.Vester.ps1
    [+] Host esx01.virtual.local - Mem.ShareScanTime 625ms
    [+] Host esx02.virtual.local - Mem.ShareScanTime 260ms

  Describing Host Configuration: Etc-Issue.Vester.ps1
    [+] Host esx01.virtual.local - Etc issue file 338ms
    [+] Host esx02.virtual.local - Etc issue file 263ms

  Describing Host Configuration: Etc-Motd.Vester.ps1
    [+] Host esx01.virtual.local - Etc issue file 342ms
    [+] Host esx02.virtual.local - Etc issue file 261ms

  Describing Host Configuration: NTP-Servers.Vester.ps1
    [-] Host esx01.virtual.local - NTP Servers 146ms
      RuntimeException: Desired:   [System.Object[]] 0.bg.pool.ntp.org 1.bg.pool.ntp.org 2.bg.pool.ntp.org
      Actual:    [System.Object[]] 0.bg.pool.ntp.org 1.bg.pool.ntp.org 3.bg.pool.ntp.org
      Synopsis:  Server(s) to use for synchronizing the host's clock
      Link:      https://wahlnetwork.github.io/Vester/reference/tests/Host/NTP-Servers.html
      Test File: C:\Program Files\WindowsPowerShell\Modules\Vester\1.2.0\Tests\Host\NTP-Servers.Vester.ps1
      at <ScriptBlock>, C:\Program Files\WindowsPowerShell\Modules\Vester\1.2.0\Private\Template\VesterTemplate.Tests
.ps1: line 124
    [-] Host esx02.virtual.local - NTP Servers 166ms
      RuntimeException: Desired:   [System.Object[]] 0.bg.pool.ntp.org 1.bg.pool.ntp.org 2.bg.pool.ntp.org
      Actual:    [System.Object[]] 0.bg.pool.ntp.org 1.bg.pool.ntp.org 3.bg.pool.ntp.org
      Synopsis:  Server(s) to use for synchronizing the host's clock
      Link:      https://wahlnetwork.github.io/Vester/reference/tests/Host/NTP-Servers.html
      Test File: C:\Program Files\WindowsPowerShell\Modules\Vester\1.2.0\Tests\Host\NTP-Servers.Vester.ps1
      at <ScriptBlock>, C:\Program Files\WindowsPowerShell\Modules\Vester\1.2.0\Private\Template\VesterTemplate.Tests
.ps1: line 124

  Describing Host Configuration: NTP-Service-Policy.Vester.ps1
    [+] Host esx01.virtual.local - NTP Service Policy 186ms
    [+] Host esx02.virtual.local - NTP Service Policy 49ms

  Describing Host Configuration: SSH-Service-Policy.Vester.ps1
    [+] Host esx01.virtual.local - SSH Service Policy 256ms
    [+] Host esx02.virtual.local - SSH Service Policy 31ms

  Describing Host Configuration: SSH-Service.Vester.ps1
    [+] Host esx01.virtual.local - SSH Service State 221ms
    [+] Host esx02.virtual.local - SSH Service State 134ms
Tests completed in 5.89s
Tests Passed: 18, Failed: 2, Skipped: 0, Pending: 0, Inconclusive: 0

Next is the PowerShell DSC Configuration:

Configuration VMHostSettings_Config_Secure {
    Import-DscResource -ModuleName VMware.vSphereDSC

    Node $AllNodes.NodeName {
        $Server = $AllNodes.Server
        $Credential = $AllNodes.Credential

        foreach ($vmHost in $AllNodes.VMHosts) {
            $Name = $vmHost.Name
            VMHostNtpSettings "VMHostNtpSettings_$($Name)" {
                Name = $Name
                Server = $Server
                Credential = $Credential
                NtpServer = @('0.bg.pool.ntp.org', '1.bg.pool.ntp.org', '2.bg.pool.ntp.org')
                NtpServicePolicy = 'automatic'
            }

            VMHostTpsSettings "VMHostTpsSettings_$($Name)" {
                Name = $Name
                Server = $Server
                Credential = $Credential
                ShareScanTime = 50
                ShareScanGHz = 2
                ShareRateMax = 1000
                ShareForceSalting = 1
            }
            
            VMHostSettings "VMHostSettings_$($Name)" {
                Name = $Name
                Server = $Server
                Credential = $Credential
                Motd = 'Hello World from motd!'
                Issue = 'Hello World from issue!'
            }

            VMHostService "VMHostService_$($Name)" {
                Name = $Name
                Server = $Server
                Credential = $Credential
                Key = 'TSM-SSH'
                Policy = 'On'
                Running = $true
            }

        }
    }
}

Finally the output running PowerShell DSC. As expected, the NTP settings also report False, without showing the differences. The total time is almost 29 seconds!

PS C:\VMwareDSC> test-DscConfiguration -verbose
VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = TestConfiguration,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: An LCM method call arrived from computer WINJUMP1 with user sid S-1-5-21-399352726-802500733-1154220554-500.
VERBOSE: [WINJUMP1]: LCM:  [ Start  Test     ]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Resource ]  [[VMHostNtpSettings]VMHostNtpSettings_esx01.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Test     ]  [[VMHostNtpSettings]VMHostNtpSettings_esx01.virtual.local]
VERBOSE: [WINJUMP1]:                            [[VMHostNtpSettings]VMHostNtpSettings_esx01.virtual.local] 29-12-2019 10:23:04	Get-VMHost	Finished execution
VERBOSE: [WINJUMP1]: LCM:  [ End    Test     ]  [[VMHostNtpSettings]VMHostNtpSettings_esx01.virtual.local] False in 7.9220 seconds.
VERBOSE: [WINJUMP1]: LCM:  [ End    Resource ]  [[VMHostNtpSettings]VMHostNtpSettings_esx01.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Resource ]  [[VMHostTpsSettings]VMHostTpsSettings_esx01.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Test     ]  [[VMHostTpsSettings]VMHostTpsSettings_esx01.virtual.local]
VERBOSE: [WINJUMP1]:                            [[VMHostTpsSettings]VMHostTpsSettings_esx01.virtual.local] 29-12-2019 10:23:08	Get-VMHost	Finished execution
VERBOSE: [WINJUMP1]:                            [[VMHostTpsSettings]VMHostTpsSettings_esx01.virtual.local] 29-12-2019 10:23:08	Get-AdvancedSetting	Finished execution
VERBOSE: [WINJUMP1]: LCM:  [ End    Test     ]  [[VMHostTpsSettings]VMHostTpsSettings_esx01.virtual.local] True in 3.0000 seconds.
VERBOSE: [WINJUMP1]: LCM:  [ End    Resource ]  [[VMHostTpsSettings]VMHostTpsSettings_esx01.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Resource ]  [[VMHostSettings]VMHostSettings_esx01.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Test     ]  [[VMHostSettings]VMHostSettings_esx01.virtual.local]
VERBOSE: [WINJUMP1]:                            [[VMHostSettings]VMHostSettings_esx01.virtual.local] 12/29/2019 10:23:08 Entering Test
VERBOSE: [WINJUMP1]:                            [[VMHostSettings]VMHostSettings_esx01.virtual.local] 29-12-2019 10:23:11	Get-VMHost	Finished execution
VERBOSE: [WINJUMP1]:                            [[VMHostSettings]VMHostSettings_esx01.virtual.local] 12/29/2019 10:23:11 Entering ShouldUpdateVMHostSettings
VERBOSE: [WINJUMP1]:                            [[VMHostSettings]VMHostSettings_esx01.virtual.local] 29-12-2019 10:23:11	Get-AdvancedSetting	Finished execution
VERBOSE: [WINJUMP1]: LCM:  [ End    Test     ]  [[VMHostSettings]VMHostSettings_esx01.virtual.local] True in 2.8280 seconds.
VERBOSE: [WINJUMP1]: LCM:  [ End    Resource ]  [[VMHostSettings]VMHostSettings_esx01.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Resource ]  [[VMHostService]VMHostService_esx01.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Test     ]  [[VMHostService]VMHostService_esx01.virtual.local]
VERBOSE: [WINJUMP1]:                            [[VMHostService]VMHostService_esx01.virtual.local] 12/29/2019 10:23:11 Entering Test
VERBOSE: [WINJUMP1]:                            [[VMHostService]VMHostService_esx01.virtual.local] 29-12-2019 10:23:14	Get-VMHost	Finished execution
VERBOSE: [WINJUMP1]:                            [[VMHostService]VMHostService_esx01.virtual.local] 12/29/2019 10:23:14 Entering ShouldUpdateVMHostService
VERBOSE: [WINJUMP1]:                            [[VMHostService]VMHostService_esx01.virtual.local] 29-12-2019 10:23:14	Get-VMHostService	Finished execution
VERBOSE: [WINJUMP1]: LCM:  [ End    Test     ]  [[VMHostService]VMHostService_esx01.virtual.local] True in 2.6250 seconds.
VERBOSE: [WINJUMP1]: LCM:  [ End    Resource ]  [[VMHostService]VMHostService_esx01.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Resource ]  [[VMHostNtpSettings]VMHostNtpSettings_esx02.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Test     ]  [[VMHostNtpSettings]VMHostNtpSettings_esx02.virtual.local]
VERBOSE: [WINJUMP1]:                            [[VMHostNtpSettings]VMHostNtpSettings_esx02.virtual.local] 29-12-2019 10:23:16	Get-VMHost	Finished execution
VERBOSE: [WINJUMP1]: LCM:  [ End    Test     ]  [[VMHostNtpSettings]VMHostNtpSettings_esx02.virtual.local] False in 2.6090 seconds.
VERBOSE: [WINJUMP1]: LCM:  [ End    Resource ]  [[VMHostNtpSettings]VMHostNtpSettings_esx02.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Resource ]  [[VMHostTpsSettings]VMHostTpsSettings_esx02.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Test     ]  [[VMHostTpsSettings]VMHostTpsSettings_esx02.virtual.local]
VERBOSE: [WINJUMP1]:                            [[VMHostTpsSettings]VMHostTpsSettings_esx02.virtual.local] 29-12-2019 10:23:19	Get-VMHost	Finished execution
VERBOSE: [WINJUMP1]:                            [[VMHostTpsSettings]VMHostTpsSettings_esx02.virtual.local] 29-12-2019 10:23:20	Get-AdvancedSetting	Finished execution
VERBOSE: [WINJUMP1]: LCM:  [ End    Test     ]  [[VMHostTpsSettings]VMHostTpsSettings_esx02.virtual.local] True in 3.0630 seconds.
VERBOSE: [WINJUMP1]: LCM:  [ End    Resource ]  [[VMHostTpsSettings]VMHostTpsSettings_esx02.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Resource ]  [[VMHostSettings]VMHostSettings_esx02.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Test     ]  [[VMHostSettings]VMHostSettings_esx02.virtual.local]
VERBOSE: [WINJUMP1]:                            [[VMHostSettings]VMHostSettings_esx02.virtual.local] 12/29/2019 10:23:20 Entering Test
VERBOSE: [WINJUMP1]:                            [[VMHostSettings]VMHostSettings_esx02.virtual.local] 29-12-2019 10:23:22	Get-VMHost	Finished execution
VERBOSE: [WINJUMP1]:                            [[VMHostSettings]VMHostSettings_esx02.virtual.local] 12/29/2019 10:23:22 Entering ShouldUpdateVMHostSettings
VERBOSE: [WINJUMP1]:                            [[VMHostSettings]VMHostSettings_esx02.virtual.local] 29-12-2019 10:23:22	Get-AdvancedSetting	Finished execution
VERBOSE: [WINJUMP1]: LCM:  [ End    Test     ]  [[VMHostSettings]VMHostSettings_esx02.virtual.local] True in 2.7660 seconds.
VERBOSE: [WINJUMP1]: LCM:  [ End    Resource ]  [[VMHostSettings]VMHostSettings_esx02.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Resource ]  [[VMHostService]VMHostService_esx02.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ Start  Test     ]  [[VMHostService]VMHostService_esx02.virtual.local]
VERBOSE: [WINJUMP1]:                            [[VMHostService]VMHostService_esx02.virtual.local] 12/29/2019 10:23:22 Entering Test
VERBOSE: [WINJUMP1]:                            [[VMHostService]VMHostService_esx02.virtual.local] 29-12-2019 10:23:25	Get-VMHost	Finished execution
VERBOSE: [WINJUMP1]:                            [[VMHostService]VMHostService_esx02.virtual.local] 12/29/2019 10:23:25 Entering ShouldUpdateVMHostService
VERBOSE: [WINJUMP1]:                            [[VMHostService]VMHostService_esx02.virtual.local] 29-12-2019 10:23:25	Get-VMHostService	Finished execution
VERBOSE: [WINJUMP1]: LCM:  [ End    Test     ]  [[VMHostService]VMHostService_esx02.virtual.local] True in 2.5620 seconds.
VERBOSE: [WINJUMP1]: LCM:  [ End    Resource ]  [[VMHostService]VMHostService_esx02.virtual.local]
VERBOSE: [WINJUMP1]: LCM:  [ End    Test     ]     Completed processing test operation. The operation returned False.
VERBOSE: [WINJUMP1]: LCM:  [ End    Test     ]    in  28.5150 seconds.
VERBOSE: Operation 'Invoke CimMethod' complete.
False
VERBOSE: Time taken for configuration job to complete is 28.646 seconds

PS C:\VMwareDSC> 

Summary

How to go from here? Both tools have nice features, but also some negatives. Based on my experiences with both tools over the past period, I have created overviews with the pros and cons of both tools. I do understand that opinions may differ.

Vester, pros and cons:

+ Easy to get started

+ Can automatically create Config files

+ Out of the box many test files available

+ Easy to add new test files

+ Works great in brown field environments

+ Output of Invoke-Vester shows actual and desired values

+ Scoping options

– Management of Test files

– Cannot create new Datacenter, Cluster and Folder objects.

– Additional effort for fully automatic operation

DSC Resources for VMware, pros and cons:

+ Uses PowerShell DSC which is designed for desired state configuration

+ Extensive configuration options

+ Windows event logging

+ Works in green- and brown field environments

– Extensive configuration options

– Configuration is more complicated

– Limited set of DSC resources

– Adding new resources is complicated

 

As always, I thank you for reading and welcome your comments.

This is the seventh part of a series about configuration drift, Vester and DSC.
Overview of all posts in this series:

About Configuration Drift, Pester and Vester

Tips for writing Vester test files, part 1

Tips for writing Vester test files, part 2

Creating Dashboards for Vester

Vester Test file generator

Securing DSC resources for VMware

Another Vester test file generator and more vCenter checks

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: