forked from dsccommunity/SqlServerDsc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
2-RemoveAvailabilityGroupReplica.ps1
111 lines (100 loc) · 4.13 KB
/
2-RemoveAvailabilityGroupReplica.ps1
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<#
.EXAMPLE
This example shows how to ensure that the Availability Group Replica 'SQL2' does not exist in the Availability Group 'TestAG'.
#>
$ConfigurationData = @{
AllNodes = @(
@{
NodeName = '*'
SQLInstanceName = 'MSSQLSERVER'
AvailabilityGroupName = 'TestAG'
<#
NOTE! THIS IS NOT RECOMMENDED IN PRODUCTION.
This is added so that AppVeyor automatic tests can pass, otherwise
the tests will fail on passwords being in plain text and not being
encrypted. Because it is not possible to have a certificate in
AppVeyor to encrypt the passwords we need to add the parameter
'PSDscAllowPlainTextPassword'.
NOTE! THIS IS NOT RECOMMENDED IN PRODUCTION.
#>
PSDscAllowPlainTextPassword = $true
},
@{
NodeName = 'SQL1'
Role = 'PrimaryReplica'
},
@{
NodeName = 'SQL2'
Role = 'SecondaryReplica'
}
)
}
Configuration Example
{
param(
[Parameter(Mandatory = $true)]
[System.Management.Automation.PSCredential]
$SqlAdministratorCredential
)
Import-DscResource -ModuleName SqlServerDsc
Node $AllNodes.NodeName {
# Adding the required service account to allow the cluster to log into SQL
SqlServerLogin AddNTServiceClusSvc
{
Ensure = 'Present'
Name = 'NT SERVICE\ClusSvc'
LoginType = 'WindowsUser'
ServerName = $Node.NodeName
InstanceName = $Node.SQLInstanceName
PsDscRunAsCredential = $SqlAdministratorCredential
}
# Add the required permissions to the cluster service login
SqlServerPermission AddNTServiceClusSvcPermissions
{
DependsOn = '[SqlServerLogin]AddNTServiceClusSvc'
Ensure = 'Present'
ServerName = $Node.NodeName
InstanceName = $Node.SqlInstanceName
Principal = 'NT SERVICE\ClusSvc'
Permission = 'AlterAnyAvailabilityGroup', 'ViewServerState'
PsDscRunAsCredential = $SqlAdministratorCredential
}
# Create a DatabaseMirroring endpoint
SqlServerEndpoint HADREndpoint
{
EndPointName = 'HADR'
Ensure = 'Present'
Port = 5022
ServerName = $Node.NodeName
InstanceName = $Node.SQLInstanceName
PsDscRunAsCredential = $SqlAdministratorCredential
}
if ( $Node.Role -eq 'PrimaryReplica' )
{
# Create the availability group on the instance tagged as the primary replica
SqlAG AddTestAG
{
Ensure = 'Present'
Name = $Node.AvailabilityGroupName
InstanceName = $Node.SQLInstanceName
ServerName = $Node.NodeName
DependsOn = '[SqlServerEndpoint]HADREndpoint', '[SqlServerPermission]AddNTServiceClusSvcPermissions'
PsDscRunAsCredential = $SqlAdministratorCredential
}
}
if ( $Node.Role -eq 'SecondaryReplica' )
{
# Add the availability group replica to the availability group
SqlAGReplica AddReplica
{
Ensure = 'Absent'
Name = $Node.NodeName
AvailabilityGroupName = $Node.AvailabilityGroupName
ServerName = $Node.NodeName
InstanceName = $Node.SQLInstanceName
PrimaryReplicaServerName = ( $AllNodes | Where-Object { $_.Role -eq 'PrimaryReplica' } ).NodeName
PrimaryReplicaInstanceName = ( $AllNodes | Where-Object { $_.Role -eq 'PrimaryReplica' } ).SQLInstanceName
}
}
}
}