Skip to content

Commit f44cad1

Browse files
Nickcandyyinghsugn
andauthored
OOB of Az.ConnectedKubernetes (#20904)
* Fix/connectedk8s ps5 (#20603) * Create RSAHelper.ps1 * Update New-AzConnectedKubernetes.ps1 * Add try-catch and update function parameters * Update New-AzConnectedKubernetes.ps1 * [Az.ConnectedKubernetes] Update ChangeLog (#20649) * Update RSAHelper.ps1 (coding style) * Update ChangeLog.md * upgrade Az.ConnectedKubernetes from 0.7.0 to 0.7.1 --------- Co-authored-by: Ann Lu <112682982+yinghsugn@users.noreply.github.com>
1 parent 80470b8 commit f44cad1

File tree

7 files changed

+178
-10
lines changed

7 files changed

+178
-10
lines changed

src/ConnectedKubernetes/Az.ConnectedKubernetes.psd1

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#
44
# Generated by: Microsoft Corporation
55
#
6-
# Generated on: 01/12/2022
6+
# Generated on: 17/01/2023
77
#
88

99
@{
@@ -12,7 +12,7 @@
1212
RootModule = './Az.ConnectedKubernetes.psm1'
1313

1414
# Version number of this module.
15-
ModuleVersion = '0.7.0'
15+
ModuleVersion = '0.7.1'
1616

1717
# Supported PSEditions
1818
CompatiblePSEditions = 'Core', 'Desktop'
@@ -51,7 +51,7 @@ DotNetFrameworkVersion = '4.7.2'
5151
# ProcessorArchitecture = ''
5252

5353
# Modules that must be imported into the global environment prior to importing this module
54-
RequiredModules = @(@{ModuleName = 'Az.Accounts'; ModuleVersion = '2.10.4'; })
54+
RequiredModules = @(@{ModuleName = 'Az.Accounts'; ModuleVersion = '2.11.1'; })
5555

5656
# Assemblies that must be loaded prior to importing this module
5757
RequiredAssemblies = './bin/Az.ConnectedKubernetes.private.dll'
@@ -110,7 +110,7 @@ PrivateData = @{
110110
# IconUri = ''
111111

112112
# ReleaseNotes of this module
113-
ReleaseNotes = '* Added the logic that prompt legal information when users call the parameter ''-AzureHybridBenefit'' in ''New-AzConnectedKubernetes'' or ''Update-AzConnectedKubernetes''.'
113+
ReleaseNotes = '* Made ''New-AzConnectedKubernetes'' support PowerShell 5.'
114114

115115
# Prerelease string of this module
116116
# Prerelease = ''

src/ConnectedKubernetes/ChangeLog.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
-->
2020
## Upcoming Release
2121

22+
## Version 0.7.1
23+
* Made `New-AzConnectedKubernetes` support PowerShell 5.
24+
2225
## Version 0.7.0
2326
* Added the logic that prompt legal information when users call the parameter "-AzureHybridBenefit" in `New-AzConnectedKubernetes` or `Update-AzConnectedKubernetes`.
2427

src/ConnectedKubernetes/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@
2424
[assembly: ComVisible(false)]
2525
[assembly: CLSCompliant(false)]
2626
[assembly: Guid("CE93AF3C-92E0-4357-93A0-22A5766CDF13")]
27-
[assembly: AssemblyVersion("0.7.0")]
28-
[assembly: AssemblyFileVersion("0.7.0")]
27+
[assembly: AssemblyVersion("0.7.1")]
28+
[assembly: AssemblyFileVersion("0.7.1")]

src/ConnectedKubernetes/custom/New-AzConnectedKubernetes.ps1

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,19 @@ function New-AzConnectedKubernetes {
349349
#Endregion
350350

351351
$RSA = [System.Security.Cryptography.RSA]::Create(4096)
352-
$AgentPublicKey = [System.Convert]::ToBase64String($RSA.ExportRSAPublicKey())
353-
$AgentPrivateKey = "-----BEGIN RSA PRIVATE KEY-----`n" + [System.Convert]::ToBase64String($RSA.ExportRSAPrivateKey()) + "`n-----END RSA PRIVATE KEY-----"
352+
if ($PSVersionTable.PSVersion.Major -eq 5) {
353+
try {
354+
. "$PSScriptRoot/../utils/RSAHelper.ps1"
355+
$AgentPublicKey = ExportRSAPublicKeyBase64($RSA)
356+
$AgentPrivateKey = ExportRSAPrivateKeyBase64($RSA)
357+
} catch {
358+
Write-Error "Unable to generate RSA keys"
359+
throw
360+
}
361+
} else {
362+
$AgentPublicKey = [System.Convert]::ToBase64String($RSA.ExportRSAPublicKey())
363+
$AgentPrivateKey = "-----BEGIN RSA PRIVATE KEY-----`n" + [System.Convert]::ToBase64String($RSA.ExportRSAPrivateKey()) + "`n-----END RSA PRIVATE KEY-----"
364+
}
354365

355366
$HelmChartPath = Join-Path -Path $ChartExportPath -ChildPath 'azure-arc-k8sagents'
356367
if (Test-Path Env:HELMCHART) {
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
function ExportRSAPrivateKeyBase64{
2+
param(
3+
[Parameter(Mandatory)]
4+
[System.Security.Cryptography.RSA]
5+
$RSA
6+
)
7+
process{
8+
$RSAParams = $RSA.ExportParameters(1)
9+
[byte]$Sequence = 0x30
10+
[byte[]]$Version = (0x00)
11+
$stream = [System.IO.MemoryStream]::new()
12+
$writer = [System.IO.BinaryWriter]::new($stream)
13+
$writer.Write($Sequence); # SEQUENCE
14+
$innerStream = [System.IO.MemoryStream]::new()
15+
$innerWriter = [System.IO.BinaryWriter]::new($innerStream)
16+
17+
EncodeIntegerBigEndian $innerWriter $Version
18+
EncodeIntegerBigEndian $innerWriter $RSAParams.Modulus
19+
EncodeIntegerBigEndian $innerWriter $RSAParams.Exponent
20+
EncodeIntegerBigEndian $innerWriter $RSAParams.D
21+
EncodeIntegerBigEndian $innerWriter $RSAParams.P
22+
EncodeIntegerBigEndian $innerWriter $RSAParams.Q
23+
EncodeIntegerBigEndian $innerWriter $RSAParams.DP
24+
EncodeIntegerBigEndian $innerWriter $RSAParams.DQ
25+
EncodeIntegerBigEndian $innerWriter $RSAParams.InverseQ
26+
27+
$length = ([int]($innerStream.Length))
28+
EncodeLength $writer $length
29+
$writer.Write($innerStream.GetBuffer(), 0, $length)
30+
31+
$base64 = [Convert]::ToBase64String($stream.GetBuffer(), 0, ([int]($stream.Length)))
32+
33+
$offset = 0
34+
$line_length = 64
35+
36+
$sb = [System.Text.StringBuilder]::new()
37+
[void]$sb.AppendLine("-----BEGIN RSA PRIVATE KEY-----")
38+
while ($offset -lt $base64.Length) {
39+
$line_end = [Math]::Min($offset + $line_length, $base64.Length)
40+
[void]$sb.AppendLine($base64.Substring($offset, $line_end - $offset))
41+
$offset = $line_end
42+
}
43+
44+
[void]$sb.AppendLine("-----END RSA PRIVATE KEY-----")
45+
46+
return $sb.ToString()
47+
}
48+
}
49+
50+
function ExportRSAPublicKeyBase64{
51+
param(
52+
[Parameter(Mandatory)]
53+
[System.Security.Cryptography.RSA]
54+
$RSA
55+
)
56+
process{
57+
$RSAParams = $RSA.ExportParameters(0)
58+
[byte]$Sequence = 0x30
59+
$stream = [System.IO.MemoryStream]::new()
60+
$writer = [System.IO.BinaryWriter]::new($stream)
61+
$writer.Write($Sequence); # SEQUENCE
62+
$innerStream = [System.IO.MemoryStream]::new()
63+
$innerWriter = [System.IO.BinaryWriter]::new($innerStream)
64+
EncodeIntegerBigEndian $innerWriter $RSAParams.Modulus
65+
EncodeIntegerBigEndian $innerWriter $RSAParams.Exponent
66+
67+
$length = ([int]($innerStream.Length))
68+
EncodeLength $writer $length
69+
$writer.Write($innerStream.GetBuffer(), 0, $length)
70+
71+
$base64 = [Convert]::ToBase64String($stream.GetBuffer(), 0, ([int]($stream.Length)))
72+
73+
$offset = 0
74+
$line_length = 64
75+
76+
$sb = [System.Text.StringBuilder]::new()
77+
78+
while ($offset -lt $base64.Length) {
79+
$line_end = [Math]::Min($offset + $line_length, $base64.Length)
80+
[void]$sb.AppendLine($base64.Substring($offset, $line_end - $offset))
81+
$offset = $line_end
82+
}
83+
84+
return $sb.ToString()
85+
}
86+
}
87+
88+
function EncodeLength{
89+
param(
90+
[System.IO.BinaryWriter]$stream,
91+
[int]$length
92+
)
93+
process{
94+
[byte]$bytex80 = 0x80
95+
if($length -lt 0){
96+
throw "Length must be non-negative"
97+
}
98+
if($length -lt $bytex80){
99+
$stream.Write(([byte]$length))
100+
}
101+
else{
102+
$temp = $length
103+
$bytesRequired = 0;
104+
while ($temp -gt 0) {
105+
$temp = $temp -shr 8
106+
$bytesRequired++
107+
}
108+
109+
[byte]$byteToWrite = $bytesRequired -bor $bytex80
110+
$stream.Write($byteToWrite)
111+
$iValue = ($bytesRequired - 1)
112+
[byte]$0ffByte = 0xff
113+
for ($i = $iValue; $i -ge 0; $i--) {
114+
[byte]$byteToWrite = ($length -shr (8 * $i) -band $0ffByte)
115+
$stream.Write($byteToWrite )
116+
}
117+
}
118+
}
119+
}
120+
121+
function EncodeIntegerBigEndian{
122+
param(
123+
[System.IO.BinaryWriter]$stream,
124+
[byte[]]$value,
125+
[bool]$forceUnsigned = $true
126+
)
127+
process{
128+
[byte]$Integer = 0x02
129+
130+
$stream.Write($Integer); # INTEGER
131+
$prefixZeros = 0
132+
for ($i = 0; $i -lt $value.Length; $i++) {
133+
if ($value[$i] -ne 0){break}
134+
$prefixZeros++
135+
}
136+
if(($value.Length - $prefixZeros) -eq 0){
137+
EncodeLength $stream 1
138+
$stream.Write(([byte]0))
139+
}
140+
else{
141+
[byte]$newByte = 0x7f
142+
if(($forceUnsigned) -AND ($value[$prefixZeros] -gt $newByte)){
143+
EncodeLength $stream ($value.Length - $prefixZeros +1)
144+
$stream.Write(([byte]0))
145+
}
146+
else{
147+
EncodeLength $stream ($value.Length - $prefixZeros)
148+
}
149+
for ($i = $prefixZeros; $i -lt $value.Length; $i++) {
150+
$stream.Write($value[$i])
151+
}
152+
}
153+
}
154+
}

tools/AzPreview/AzPreview.psd1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ RequiredModules = @(@{ModuleName = 'Az.Accounts'; ModuleVersion = '2.11.2'; },
7979
@{ModuleName = 'Az.Compute'; RequiredVersion = '5.4.0'; },
8080
@{ModuleName = 'Az.ConfidentialLedger'; RequiredVersion = '1.0.0'; },
8181
@{ModuleName = 'Az.Confluent'; RequiredVersion = '0.2.0'; },
82-
@{ModuleName = 'Az.ConnectedKubernetes'; RequiredVersion = '0.7.0'; },
82+
@{ModuleName = 'Az.ConnectedKubernetes'; RequiredVersion = '0.7.1'; },
8383
@{ModuleName = 'Az.ConnectedMachine'; RequiredVersion = '0.4.1'; },
8484
@{ModuleName = 'Az.ConnectedNetwork'; RequiredVersion = '0.1.0'; },
8585
@{ModuleName = 'Az.ContainerInstance'; RequiredVersion = '3.1.0'; },

tools/Docs/az-ps-latest.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pac23,[ps=true;customSource=https://azpspackage.blob.core.windows.net/docs-relea
2525
pac24,[ps=true;customSource=https://azpspackage.blob.core.windows.net/docs-release/Az.Compute.5.4.0.nupkg;sourceType=sa]Az.Compute,5.4.0
2626
pac25,[ps=true;customSource=https://azpspackage.blob.core.windows.net/docs-release/Az.ConfidentialLedger.1.0.0.nupkg;sourceType=sa]Az.ConfidentialLedger,1.0.0
2727
pac26,[ps=true;customSource=https://azpspackage.blob.core.windows.net/docs-release/Az.Confluent.0.2.0.nupkg;sourceType=sa]Az.Confluent,0.2.0
28-
pac27,[ps=true;customSource=https://azpspackage.blob.core.windows.net/docs-release/Az.ConnectedKubernetes.0.7.0.nupkg;sourceType=sa]Az.ConnectedKubernetes,0.7.0
28+
pac27,[ps=true;customSource=https://azpspackage.blob.core.windows.net/docs-release/Az.ConnectedKubernetes.0.7.1.nupkg;sourceType=sa]Az.ConnectedKubernetes,0.7.1
2929
pac28,[ps=true;customSource=https://azpspackage.blob.core.windows.net/docs-release/Az.ConnectedMachine.0.4.1.nupkg;sourceType=sa]Az.ConnectedMachine,0.4.1
3030
pac29,[ps=true;customSource=https://azpspackage.blob.core.windows.net/docs-release/Az.ConnectedNetwork.0.1.0.nupkg;sourceType=sa]Az.ConnectedNetwork,0.1.0
3131
pac30,[ps=true;customSource=https://azpspackage.blob.core.windows.net/docs-release/Az.ContainerInstance.3.1.0.nupkg;sourceType=sa]Az.ContainerInstance,3.1.0

0 commit comments

Comments
 (0)