#PSDSC FailoverClusterDSC – Deploy a Storage Spaces Direct Cluster

I have been working on the FailoverClusterDsc resource module and finally had the chance to add some examples and make the repository public.

This is not a fork of the xFailoverCluster module. I am adding only the resources that I am developing from scratch to this module. These resources will follow the HQRM guidelines.

You can take a look at each of these resources to check what different configuration options are supported as of today.

Here is an example of creating and configuring a Storage Spaces Direct cluster.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
$configData = @{
	AllNodes = @(
		@{
    	    NodeName = 'localhost'
           	thumbprint = '25A1359A27FB3F2D562D7508D98E7189F2A1F1B0'
        	CertificateFile = 'C:\PublicKeys\S2D4N01.cer'
        	PsDscAllowDomainUser = $true
    	}
    )
}

Configuration CreateS2DCluster
{
    param
    (
        [Parameter(Mandatory = $true)]
        [pscredential]
        $Credential,
    	
    	[Parameter(Mandatory = $true)]
    	[String[]]
    	$ParticipantNodes,

    	[Parameter(Mandatory = $true)]
    	[String]
    	$ClusterName,

    	[Parameter(Mandatory = $true)]
    	[String]
    	$StaticAddress,

    	[Parameter(Mandatory = $true)]
    	[String[]]
    	$IgnoreNetworks,

    	[Parameter(Mandatory = $true)]
    	[String]
    	$QuorumResource,

    	[Parameter(Mandatory = $true)]
    	[String]
    	$QuorumType 
	)

	Import-DscResource -ModuleName FailoverClusterDsc

	Node $AllNodes.NodeName
	{
    	FailoverCluster CreateCluster
    	{
        	ClusterName = $ClusterName
        	StaticAddress = $StaticAddress
        	NoStorage = $true
        	IgnoreNetwork = $IgnoreNetworks
        	Ensure = 'Present'
        	PsDscRunAsCredential = $Credential
    	}

    	WaitForFailoverCluster WaitForCluster
    	{
        	ClusterName = $ClusterName
        	PsDscRunAsCredential = $Credential
    	}

    	Foreach ($node in $ParticipantNodes)
    	{
        	FailoverClusterNode $node
        	{
            	NodeName = $node
            	ClusterName = $ClusterName
            	PsDscRunAsCredential = $Credential
            	Ensure = 'Present'
        	}
    	}

    	FailoverClusterQuorum FileShareQuorum
    	{
        	IsSingleInstance = 'Yes'
        	QuorumType = $QuorumType
        	Resource = $QuorumResource
    	}

    	FailoverClusterS2D EnableS2D
    	{
        	IsSingleInstance = 'yes'
        	Ensure = 'Present'
    	}
	}
}

CreateS2DCluster -Credential (Get-Credential) -ConfigurationData $configData `
                                           -QuorumType 'NodeAndFileShareMajority' `
                                           -QuorumResource '\\sofs\share' `
                                           -ClusterName 'S2D4NCluster' `
                                           -StaticAddress '172.16.102.45' `
                                           -IgnoreNetworks @('172.16.103.0/24','172.16.104.0/24') `
                                           -ParticipantNodes @('S2D4N02','S2D4N03','S2D4N04')

In the above pattern, I am creating a failover cluster and then adding the remaining nodes using the same configuration document. You can, however, have the node addition configuration using the FailoverClusterNode resource as a separate configuration document that gets enacted on the participant node.

The failover cluster configuration requires administrator privileges and these resources do not have a Credential parameter of their own and depend on PSDscRunAsCredential. Therefore, you need at least PowerShell 5.0 to use these resources.

I am looking at expanding the resource modules to beyond what is there at the moment. If you see any issues or have feedback, feel free to create an issue in my repository. These resources lack tests today. I would be glad to accept any PRs for tests.

Share on: