Skip to content

Commit 3a0dc5d

Browse files
authored
Merge pull request #5674 from Microsoft/users/ncarlson/PortComposeChanges
Add support for changes in SF SDK 2.8 (#5553)
2 parents 142fd1d + 1586546 commit 3a0dc5d

12 files changed

+377
-59
lines changed

Tasks/ServiceFabricComposeDeploy/ServiceFabricComposeDeploy.ps1

+73-32
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,68 @@ try {
2222
$removeTimeoutSec = Get-VstsInput -Name removeTimeoutSec
2323
$getStatusTimeoutSec = Get-VstsInput -Name getStatusTimeoutSec
2424

25-
$deployParameters = @{
26-
'ApplicationName' = $applicationName
27-
'Compose' = $composeFilePath
28-
}
29-
$removeParameters = @{
30-
'Force' = $true
31-
}
32-
$getStatusParameters = @{
33-
'ApplicationName' = $applicationName
34-
}
35-
36-
$usePreviewApi = $false
37-
$regKey = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Service Fabric\' -ErrorAction SilentlyContinue
25+
$apiVersion = '2.8'
26+
$regKey = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Service Fabric SDK\' -ErrorAction SilentlyContinue
3827
if ($regKey)
3928
{
40-
if ($regKey.FabricVersion.StartsWith('255.255'))
29+
if ($regKey.FabricSDKVersion -match "^\d+\.\d+")
30+
{
31+
$regExVersion = $matches[0]
32+
33+
switch ($regExVersion) {
34+
'2.7' { $apiVersion = '2.7' }
35+
'2.8' { $apiVersion = '2.8' }
36+
'255.255' { $apiVersion = '255.255' }
37+
Default {
38+
$sdkVersion = New-Object Version
39+
if ([Version]::TryParse($matches[0], [ref]$sdkVersion)) {
40+
$minVersion = New-Object -TypeName Version -ArgumentList '2.7'
41+
if ($sdkVersion -lt $minVersion) {
42+
Write-Error (Get-VstsLocString -Key UnsupportedAPIVersion -ArgumentList $regKey.FabricSDKVersion)
43+
return;
44+
}
45+
}
46+
else {
47+
Write-Error (Get-VstsLocString -Key UnsupportedAPIVersion -ArgumentList $regKey.FabricSDKVersion)
48+
return;
49+
}
50+
}
51+
}
52+
}
53+
else
4154
{
42-
$usePreviewApi = $true
43-
Write-Verbose (Get-VstsLocString -Key UsingPreviewAPI)
55+
Write-Error (Get-VstsLocString -Key UnsupportedAPIVersion -ArgumentList $regKey.FabricSDKVersion)
56+
return;
57+
}
58+
}
59+
Write-Verbose (Get-VstsLocString -Key UsingAPIVersion -ArgumentList $apiVersion)
60+
61+
if ($apiVersion -eq '2.8')
62+
{
63+
$deployParameters = @{
64+
'DeploymentName' = $applicationName
65+
'Compose' = $composeFilePath
66+
}
67+
$removeParameters = @{
68+
'DeploymentName' = $applicationName
69+
'Force' = $true
70+
}
71+
$getStatusParameters = @{
72+
'DeploymentName' = $applicationName
73+
}
74+
}
75+
else
76+
{
77+
$deployParameters = @{
78+
'ApplicationName' = $applicationName
79+
'Compose' = $composeFilePath
80+
}
81+
$removeParameters = @{
82+
'ApplicationName' = $applicationName
83+
'Force' = $true
84+
}
85+
$getStatusParameters = @{
86+
'ApplicationName' = $applicationName
4487
}
4588
}
4689

@@ -93,7 +136,7 @@ try {
93136
}
94137
}
95138

96-
if ($usePreviewApi)
139+
if ($apiVersion -eq '255.255')
97140
{
98141
$deployParameters['RepositoryUserName'] = $username
99142
$deployParameters['RepositoryPassword'] = $password
@@ -120,49 +163,47 @@ try {
120163
$getStatusParameters['TimeoutSec'] = $getStatusTimeoutSec
121164
}
122165

123-
$existingApplication = Get-ServiceFabricComposeApplicationStatusHelper -UsePreviewAPI $usePreviewAPI -GetStatusParameters $getStatusParameters
166+
$existingApplication = Get-ServiceFabricComposeApplicationStatusHelper -ApiVersion $apiVersion -GetStatusParameters $getStatusParameters
124167
if ($existingApplication -ne $null)
125168
{
126169
Write-Host (Get-VstsLocString -Key RemovingApplication -ArgumentList $applicationName)
127-
$removeParameters['ApplicationName'] = $applicationName
128-
Remove-ServiceFabricComposeApplication @removeParameters
129170

171+
Remove-ServiceFabricComposeApplicationHelper -ApiVersion $apiVersion -RemoveParameters $removeParameters
130172
do
131173
{
132-
Write-Host (Get-VstsLocString -Key CurrentStatus -ArgumentList $existingApplication.ComposeApplicationStatus)
174+
Write-Host (Get-VstsLocString -Key CurrentStatus -ArgumentList $existingApplication.Status)
133175
Start-Sleep -Seconds 3
134-
$existingApplication = Get-ServiceFabricComposeApplicationStatusHelper -UsePreviewAPI $usePreviewAPI -GetStatusParameters $getStatusParameters
135-
176+
$existingApplication = Get-ServiceFabricComposeApplicationStatusHelper -ApiVersion $apiVersion -GetStatusParameters $getStatusParameters
136177
}
137178
while ($existingApplication -ne $null)
138179
Write-Host (Get-VstsLocString -Key ApplicationRemoved)
139180
}
140181

141182
Write-Host (Get-VstsLocString -Key CreatingApplication)
142-
New-ServiceFabricComposeApplication @deployParameters
183+
New-ServiceFabricComposeApplicationHelper -ApiVersion $apiVersion -DeployParameters $deployParameters
143184

144185
Write-Host (Get-VstsLocString -Key WaitingForDeploy)
145-
$newApplication = Get-ServiceFabricComposeApplicationStatusHelper -UsePreviewAPI $usePreviewAPI -GetStatusParameters $getStatusParameters
186+
$newApplication = Get-ServiceFabricComposeApplicationStatusHelper -ApiVersion $apiVersion -GetStatusParameters $getStatusParameters
146187
while (($newApplication -eq $null) -or `
147-
($newApplication.ComposeApplicationStatus -eq 'Provisioning') -or `
148-
($newApplication.ComposeApplicationStatus -eq 'Creating'))
188+
($newApplication.Status -eq 'Provisioning') -or `
189+
($newApplication.Status -eq 'Creating'))
149190
{
150191
if ($newApplication -eq $null)
151192
{
152193
Write-Host (Get-VstsLocString -Key WaitingForDeploy)
153194
}
154195
else
155196
{
156-
Write-Host (Get-VstsLocString -Key CurrentStatus -ArgumentList $newApplication.ComposeApplicationStatus)
197+
Write-Host (Get-VstsLocString -Key CurrentStatus -ArgumentList $newApplication.Status)
157198
}
158199
Start-Sleep -Seconds 3
159-
$newApplication = Get-ServiceFabricComposeApplicationStatusHelper -UsePreviewAPI $usePreviewAPI -GetStatusParameters $getStatusParameters
200+
$newApplication = Get-ServiceFabricComposeApplicationStatusHelper -ApiVersion $apiVersion -GetStatusParameters $getStatusParameters
160201
}
161-
Write-Host (Get-VstsLocString -Key CurrentStatus -ArgumentList $newApplication.ComposeApplicationStatus)
202+
Write-Host (Get-VstsLocString -Key CurrentStatus -ArgumentList $newApplication.Status)
162203

163-
if ($newApplication.ComposeApplicationStatus -ne 'Created')
204+
if ($newApplication.Status -ne 'Created' -and $newApplication.Status -ne 'Ready')
164205
{
165-
Write-Error (Get-VstsLocString -Key DeployFailed -ArgumentList @($newApplication.ComposeApplicationStatus.ToString(), $newApplication.StatusDetails))
206+
Write-Error (Get-VstsLocString -Key DeployFailed -ArgumentList @($newApplication.Status.ToString(), $newApplication.StatusDetails))
166207
}
167208
} finally {
168209
Trace-VstsLeavingInvocation $MyInvocation

Tasks/ServiceFabricComposeDeploy/Strings/resources.resjson/en-US/resources.resjson

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,6 @@
4343
"loc.messages.CurrentStatus": "Current Status: {0}",
4444
"loc.messages.DeployFailed": "Deploy Failed\nStatus: {0}\nDetails: {1}",
4545
"loc.messages.CheckingComposeFile": "Checking compose file",
46-
"loc.messages.UsingPreviewAPI": "Using the preview APIs"
46+
"loc.messages.UnsupportedAPIVersion": "Service Fabric SDK version {0} is not supported.",
47+
"loc.messages.UsingAPIVersion": "Using cmdlets for Service Fabric SDK version {0}."
4748
}

Tasks/ServiceFabricComposeDeploy/Tests/Deploy.ps1 Tasks/ServiceFabricComposeDeploy/Tests/Deploy.2.7.ps1

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ Register-Mock Get-VstsEndpoint { $vstsEndpoint } -- -Name $serviceConnectionName
4343

4444
# Setup mock Registry for Service Fabric
4545
$SfRegistry = @{
46-
"FabricVersion" = "5.6.1.2"
46+
"FabricSDKVersion" = "2.7.1.2"
4747
}
48-
Register-Mock Get-ItemProperty { $SfRegistry } -- -Path 'HKLM:\SOFTWARE\Microsoft\Service Fabric\' -ErrorAction SilentlyContinue
48+
Register-Mock Get-ItemProperty { $SfRegistry } -- -Path 'HKLM:\SOFTWARE\Microsoft\Service Fabric SDK\' -ErrorAction SilentlyContinue
4949

5050
# Setup mock results of cluster connection
5151
Register-Mock Connect-ServiceFabricClusterFromServiceEndpoint { } -- -ClusterConnectionParameters @{} -ConnectedServiceEndpoint $vstsEndpoint
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
[CmdletBinding()]
2+
param()
3+
4+
. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1
5+
6+
$serviceConnectionName = "random connection name"
7+
$composeFilePath = "docker-compose.yml"
8+
$applicationName = "fabric:/Application1"
9+
$serverCertThumbprint = "random thumbprint"
10+
$userName = "random user"
11+
$password = "random password"
12+
$connectionEndpointFullUrl = "https://mycluster.com:19000"
13+
$connectionEndpoint = ([System.Uri]$connectionEndpointFullUrl).Authority
14+
15+
# Setup input arguments
16+
Register-Mock Get-VstsInput { $serviceConnectionName } -Name serviceConnectionName -Require
17+
Register-Mock Get-VstsInput { $composeFilePath } -Name composeFilePath -Require
18+
Register-Mock Get-VstsInput { $applicationName } -Name applicationName -Require
19+
Register-Mock Get-VstsInput { $null } -Name deployTimeoutSec
20+
Register-Mock Get-VstsInput { $null } -Name removeTimeoutSec
21+
Register-Mock Get-VstsInput { $null } -Name getStatusTimeoutSec
22+
Register-Mock Get-VstsInput { "None" } -Name registryCredentials -Require
23+
24+
# Setup file resolution
25+
Register-Mock Find-VstsFiles { $composeFilePath } -- -LegacyPattern $composeFilePath
26+
27+
Register-Mock Assert-VstsPath
28+
Register-Mock Test-Path { $true } -- "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK"
29+
30+
# Setup mock VSTS service endpoint
31+
$vstsEndpoint = @{
32+
"url" = $connectionEndpointFullUrl
33+
"Auth" = @{
34+
"Scheme" = "UserNamePassword"
35+
"Parameters" = @{
36+
"ServerCertThumbprint" = $serverCertThumbprint
37+
"Username" = $userName
38+
"Password" = $password
39+
}
40+
}
41+
}
42+
Register-Mock Get-VstsEndpoint { $vstsEndpoint } -- -Name $serviceConnectionName -Require
43+
44+
# Setup mock Registry for Service Fabric
45+
$SfRegistry = @{
46+
"FabricSDKVersion" = "2.8.1.2"
47+
}
48+
Register-Mock Get-ItemProperty { $SfRegistry } -- -Path 'HKLM:\SOFTWARE\Microsoft\Service Fabric SDK\' -ErrorAction SilentlyContinue
49+
50+
# Setup mock results of cluster connection
51+
Register-Mock Connect-ServiceFabricClusterFromServiceEndpoint { } -- -ClusterConnectionParameters @{} -ConnectedServiceEndpoint $vstsEndpoint
52+
53+
$serviceFabricComposeDeploymentStatus = @{
54+
"DeploymentName" = $applicationName
55+
"ComposeDeploymentStatus" = "Created"
56+
"StatusDetails" = ""
57+
}
58+
59+
# Need to store the bool in an object so the lambdas will share the reference
60+
$removed = New-Object 'System.Collections.Generic.Dictionary[string, bool]'
61+
$removed.Value = $true
62+
63+
Register-Mock Get-ServiceFabricComposeDeploymentStatus {
64+
if (($removed.Value -eq $true))
65+
{
66+
return $null;
67+
}
68+
else
69+
{
70+
return $serviceFabricComposeDeploymentStatus
71+
}
72+
} -DeploymentName: $applicationName
73+
74+
Register-Mock Remove-ServiceFabricComposeDeployment {
75+
$removed.Value = $true
76+
} -Force: True -DeploymentName: $applicationName
77+
78+
Register-Mock Test-ServiceFabricApplicationPackage { } -- -ComposeFilePath: $composeFilePath -ErrorAction: Stop
79+
80+
Register-Mock New-ServiceFabricComposeDeployment {
81+
$removed.Value = $false
82+
} -- -DeploymentName: $applicationName -Compose: $composeFilePath
83+
84+
# Act
85+
. $PSScriptRoot\..\..\..\Tasks\ServiceFabricComposeDeploy\ps_modules\ServiceFabricHelpers\Connect-ServiceFabricClusterFromServiceEndpoint.ps1
86+
@( & $PSScriptRoot/../../../Tasks/ServiceFabricComposeDeploy/ServiceFabricComposeDeploy.ps1 )
87+
88+
# Assert
89+
Assert-WasCalled Get-ServiceFabricComposeDeploymentStatus -Times 2
90+
Assert-WasCalled Remove-ServiceFabricComposeDeployment -Times 0
91+
Assert-WasCalled New-ServiceFabricComposeDeployment -Times 1

Tasks/ServiceFabricComposeDeploy/Tests/DeployPreview.ps1

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ Register-Mock Get-VstsEndpoint { $vstsEndpoint } -- -Name $serviceConnectionName
4343

4444
# Setup mock Registry for Service Fabric
4545
$SfRegistry = @{
46-
"FabricVersion" = "255.255.1.2"
46+
"FabricSDKVersion" = "255.255.1.2"
4747
}
48-
Register-Mock Get-ItemProperty { $SfRegistry } -- -Path 'HKLM:\SOFTWARE\Microsoft\Service Fabric\' -ErrorAction SilentlyContinue
48+
Register-Mock Get-ItemProperty { $SfRegistry } -- -Path 'HKLM:\SOFTWARE\Microsoft\Service Fabric SDK\' -ErrorAction SilentlyContinue
4949

5050
# Setup mock results of cluster connection
5151
Register-Mock Connect-ServiceFabricClusterFromServiceEndpoint { } -- -ClusterConnectionParameters @{} -ConnectedServiceEndpoint $vstsEndpoint

Tasks/ServiceFabricComposeDeploy/Tests/L0.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,20 @@ describe('ServiceFabricComposeDeploy Suite', function () {
2727
});
2828

2929
if (psm.testSupported()) {
30-
it('Deploy', (done) => {
31-
psr.run(path.join(__dirname, 'Deploy.ps1'), done);
30+
it('Deploy 2.7', (done) => {
31+
psr.run(path.join(__dirname, 'Deploy.2.7.ps1'), done);
32+
})
33+
it('Deploy 2.8', (done) => {
34+
psr.run(path.join(__dirname, 'Deploy.2.8.ps1'), done);
3235
})
3336
it('Deploy Preview', (done) => {
3437
psr.run(path.join(__dirname, 'DeployPreview.ps1'), done);
3538
})
36-
it('Upgrade', (done) => {
37-
psr.run(path.join(__dirname, 'Upgrade.ps1'), done);
39+
it('Upgrade 2.7', (done) => {
40+
psr.run(path.join(__dirname, 'Upgrade.2.7.ps1'), done);
41+
})
42+
it('Upgrade 2.8', (done) => {
43+
psr.run(path.join(__dirname, 'Upgrade.2.8.ps1'), done);
3844
})
3945
it('Upgrade Preview', (done) => {
4046
psr.run(path.join(__dirname, 'UpgradePreview.ps1'), done);

Tasks/ServiceFabricComposeDeploy/Tests/Upgrade.ps1 Tasks/ServiceFabricComposeDeploy/Tests/Upgrade.2.7.ps1

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ Register-Mock Get-VstsEndpoint { $vstsEndpoint } -- -Name $serviceConnectionName
4343

4444
# Setup mock Registry for Service Fabric
4545
$SfRegistry = @{
46-
"FabricVersion" = "5.6.1.2"
46+
"FabricSDKVersion" = "2.7.1.2"
4747
}
48-
Register-Mock Get-ItemProperty { $SfRegistry } -- -Path 'HKLM:\SOFTWARE\Microsoft\Service Fabric\' -ErrorAction SilentlyContinue
48+
Register-Mock Get-ItemProperty { $SfRegistry } -- -Path 'HKLM:\SOFTWARE\Microsoft\Service Fabric SDK\' -ErrorAction SilentlyContinue
4949

5050
# Setup mock results of cluster connection
5151
Register-Mock Connect-ServiceFabricClusterFromServiceEndpoint { } -- -ClusterConnectionParameters @{} -ConnectedServiceEndpoint $vstsEndpoint

0 commit comments

Comments
 (0)