Azure rendering solution deployment framework

This commit is contained in:
Rick Shahid 2022-11-24 07:32:06 -08:00
Родитель 04a06f7922
Коммит 3a45220e9e
33 изменённых файлов: 297 добавлений и 317 удалений

2
src/terraform/examples/e2e/.gitattributes поставляемый
Просмотреть файл

@ -1 +1 @@
*.blend filter=lfs diff=lfs merge=lfs -text
*.blend filter=lfs diff=lfs merge=lfs -text

Просмотреть файл

@ -106,4 +106,4 @@ jobs:
owner: context.repo.owner,
repo: context.repo.repo,
body: `Terraform Apply (${{env.solutionModule}})\n\n${{steps.apply.outputs.stdout}}`
})
})

Просмотреть файл

@ -109,4 +109,4 @@ jobs:
owner: context.repo.owner,
repo: context.repo.repo,
body: `Terraform Plan (${{env.solutionModule}})\n\n${{steps.plan.outputs.stdout}}`
})
})

Просмотреть файл

@ -4,4 +4,4 @@
resource_group_name = "ArtistAnywhere" # Set to the same value as securityResourceGroupName in global variables.tf file
storage_account_name = "azrender0" # Set to the same value as securityStorageAccountName in global variables.tf file
container_name = "terraform" # Set to the same value as terraformStorageContainerName in global variables.tf file
container_name = "terraform" # Set to the same value as terraformStorageContainerName in global variables.tf file

Просмотреть файл

@ -90,4 +90,4 @@ output "keyVaultKeyNameCacheEncryption" {
output "monitorWorkspaceName" {
value = var.monitorWorkspaceName
}
}

Просмотреть файл

@ -78,4 +78,4 @@ monitorWorkspace = {
name = "AzRender"
sku = "PerGB2018"
retentionDays = 90
}
}

Просмотреть файл

@ -236,4 +236,4 @@ output "keyVault" {
output "monitorWorkspace" {
value = var.monitorWorkspace
}
}

Просмотреть файл

@ -183,4 +183,4 @@ expressRouteGateway = {
authorizationKey = ""
enableFastPath = false # https://learn.microsoft.com/azure/expressroute/about-fastpath
}
}
}

Просмотреть файл

@ -792,4 +792,4 @@ output "storageEndpointSubnets" {
output "privateDns" {
value = var.privateDns
}
}

Просмотреть файл

@ -127,6 +127,7 @@ hammerspace = {
sshPublicKey = "" # "ssh-rsa ..."
disablePasswordAuth = false
}
enableAcceleratedNetworking = true
}
data = {
machine = {
@ -151,6 +152,7 @@ hammerspace = {
sshPublicKey = "" # "ssh-rsa ..."
disablePasswordAuth = false
}
enableAcceleratedNetworking = true
}
enableProximityPlacement = false
enableMarketplaceAgreement = true
@ -172,4 +174,4 @@ storageNetwork = {
virtualNetworkName = ""
}
]
}
}

Просмотреть файл

@ -10,4 +10,4 @@ fi
# hscli interface-update --node-name hs1Dsx1.hs1.azure --interface-name ib0 --ip 172.16.0.21/16
# hscli interface-update --node-name hs1Dsx2.hs1.azure --interface-name ib0 --ip 172.16.0.20/16
# hscli volume-update --internal-id 18 --additional-ip-add 172.16.0.21,,rdma
# hscli volume-update --internal-id 18 --additional-ip-add 172.16.0.21,,rdma

Просмотреть файл

@ -621,7 +621,7 @@ resource "azurerm_network_interface" "storage_primary" {
subnet_id = data.azurerm_subnet.storage_primary.id
private_ip_address_allocation = "Dynamic"
}
enable_accelerated_networking = true
enable_accelerated_networking = each.value.enableAcceleratedNetworking
}
resource "azurerm_network_interface" "storage_secondary" {
@ -636,7 +636,7 @@ resource "azurerm_network_interface" "storage_secondary" {
subnet_id = data.azurerm_subnet.storage_secondary.id
private_ip_address_allocation = "Dynamic"
}
enable_accelerated_networking = true
enable_accelerated_networking = each.value.enableAcceleratedNetworking
}
resource "azurerm_managed_disk" "storage" {
@ -929,4 +929,4 @@ output "resourceGroupNameNetApp" {
output "resourceGroupNameHammerspace" {
value = var.hammerspace.namePrefix == "" ? "" : azurerm_resource_group.hammerspace[0].name
}
}

Просмотреть файл

@ -105,4 +105,4 @@ computeNetwork = {
zoneName = ""
enableAutoRegistration = true
}
}
}

Просмотреть файл

@ -462,4 +462,4 @@ output "cacheMountAddresses" {
output "cachePrivateDnsFqdn" {
value = azurerm_private_dns_a_record.cache.fqdn
}
}

Просмотреть файл

@ -67,7 +67,7 @@ imageTemplates = [
}
},
{
name = "LnxFarm"
name = "LnxFarm1"
image = {
definitionName = "Linux"
customizeScript = "customize.sh"
@ -85,13 +85,35 @@ imageTemplates = [
renderEngines = [
"Blender",
"PBRT"
# "Unity",
# "Unreal"
]
}
},
{
name = "LnxArtist"
name = "LnxFarm2"
image = {
definitionName = "Linux"
customizeScript = "customize.sh"
terminateScript = "onTerminate.sh"
inputVersion = "Latest"
}
build = {
machineType = "Farm"
machineSize = "Standard_HB120rs_v2" # https://learn.microsoft.com/azure/virtual-machines/sizes
gpuPlatform = [] # GRID, CUDA and/or CUDA.OptiX
osDiskSizeGB = 480
timeoutMinutes = 240
outputVersion = "1.1.0"
renderManager = "Deadline" # RoyalRender or Deadline
renderEngines = [
"Blender",
"PBRT",
"Unity",
"Unreal"
]
}
},
{
name = "LnxArtist1"
image = {
definitionName = "Linux"
customizeScript = "customize.sh"
@ -109,8 +131,30 @@ imageTemplates = [
renderEngines = [
"Blender",
"PBRT"
# "Unity",
# "Unreal.PixelStream"
]
}
},
{
name = "LnxArtist2"
image = {
definitionName = "Linux"
customizeScript = "customize.sh"
terminateScript = "onTerminate.sh"
inputVersion = "Latest"
}
build = {
machineType = "Workstation"
machineSize = "Standard_NV36ads_A10_v5" # https://learn.microsoft.com/azure/virtual-machines/sizes
gpuPlatform = ["GRID"] # GRID, CUDA and/or CUDA.OptiX
osDiskSizeGB = 512
timeoutMinutes = 240
outputVersion = "2.1.0"
renderManager = "Deadline" # RoyalRender or Deadline
renderEngines = [
"Blender",
"PBRT",
"Unity",
"Unreal.PixelStream"
]
}
},
@ -134,7 +178,7 @@ imageTemplates = [
}
},
{
name = "WinFarm"
name = "WinFarm1"
image = {
definitionName = "WinFarm"
customizeScript = "customize.ps1"
@ -152,13 +196,35 @@ imageTemplates = [
renderEngines = [
"Blender",
"PBRT"
# "Unity",
# "Unreal"
]
}
},
{
name = "WinArtist"
name = "WinFarm2"
image = {
definitionName = "WinFarm"
customizeScript = "customize.ps1"
terminateScript = "onTerminate.ps1"
inputVersion = "Latest"
}
build = {
machineType = "Farm"
machineSize = "Standard_HB120rs_v2" # https://learn.microsoft.com/azure/virtual-machines/sizes
gpuPlatform = [] # GRID, CUDA and/or CUDA.OptiX
osDiskSizeGB = 480
timeoutMinutes = 420
outputVersion = "1.1.0"
renderManager = "Deadline" # RoyalRender or Deadline
renderEngines = [
"Blender",
"PBRT",
"Unity",
"Unreal"
]
}
},
{
name = "WinArtist1"
image = {
definitionName = "WinArtist"
customizeScript = "customize.ps1"
@ -176,8 +242,30 @@ imageTemplates = [
renderEngines = [
"Blender",
"PBRT"
# "Unity",
# "Unreal.PixelStream"
]
}
},
{
name = "WinArtist2"
image = {
definitionName = "WinArtist"
customizeScript = "customize.ps1"
terminateScript = "onTerminate.ps1"
inputVersion = "Latest"
}
build = {
machineType = "Workstation"
machineSize = "Standard_NV36ads_A10_v5" # https://learn.microsoft.com/azure/virtual-machines/sizes
gpuPlatform = ["GRID"] # GRID, CUDA and/or CUDA.OptiX
osDiskSizeGB = 512
timeoutMinutes = 420
outputVersion = "2.1.0"
renderManager = "Deadline" # RoyalRender or Deadline
renderEngines = [
"Blender",
"PBRT",
"Unity",
"Unreal.PixelStream"
]
}
}
@ -190,4 +278,4 @@ imageTemplates = [
computeNetwork = {
name = ""
resourceGroupName = ""
}
}

Просмотреть файл

@ -21,24 +21,31 @@ Write-Host "Customize (Start): Git"
$versionInfo = "2.38.1"
$installFile = "Git-$versionInfo-64-bit.exe"
$downloadUrl = "$storageContainerUrl/Git/$versionInfo/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
Start-Process -FilePath $installFile -ArgumentList "/SILENT /NORESTART" -Wait
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Start-Process -FilePath .\$installFile -ArgumentList "/silent /norestart" -Wait -RedirectStandardOutput "git.output.txt" -RedirectStandardError "git.error.txt"
$binPathGit = "C:\Program Files\Git\bin"
$binPaths += ";$binPathGit"
Write-Host "Customize (End): Git"
Write-Host "Customize (Start): Visual Studio Build Tools"
Write-Host "Customize (Start): CMake"
$versionInfo = "3.25.0"
$installFile = "cmake-$versionInfo-windows-x86_64.msi"
$downloadUrl = "$storageContainerUrl/CMake/$versionInfo/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Start-Process -FilePath "msiexec.exe" -ArgumentList "/i $installFile /quiet /norestart" -Wait -RedirectStandardOutput "cmake.output.txt" -RedirectStandardError "cmake.error.txt"
$binPathCMake = "C:\Program Files\CMake\bin"
$binPaths += ";$binPathCMake"
Write-Host "Customize (End): CMake"
Write-Host "Customize (Start): MSBuild"
$versionInfo = "2022"
$installFile = "vs_buildtools.exe"
$downloadUrl = "https://aka.ms/vs/17/release/$installFile"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
$componentIds = "--add Microsoft.VisualStudio.Component.Windows11SDK.22621"
$componentIds += " --add Microsoft.VisualStudio.Component.VC.CMake.Project"
Start-Process -FilePath $installFile -ArgumentList "--quiet --norestart $componentIds" -Wait
$binPathCMake = "C:\Program Files (x86)\Microsoft Visual Studio\$versionInfo\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin"
$installFile = "vs_BuildTools.exe"
$downloadUrl = "$storageContainerUrl/VS/$versionInfo/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Start-Process -FilePath .\$installFile -ArgumentList "--add Microsoft.Component.MSBuild --quiet --norestart" -Wait -RedirectStandardOutput "msbuild.output.txt" -RedirectStandardError "msbuild.error.txt"
$binPathMSBuild = "C:\Program Files (x86)\Microsoft Visual Studio\$versionInfo\BuildTools\MSBuild\Current\Bin"
$binPaths += ";$binPathCMake;$binPathMSBuild"
Write-Host "Customize (End): Visual Studio Build Tools"
$binPaths += ";$binPathMSBuild"
Write-Host "Customize (End): MSBuild"
Write-Host "Customize (Start): Image Build Parameters"
$buildConfigBytes = [System.Convert]::FromBase64String($buildConfigEncoded)
@ -57,8 +64,8 @@ if ($gpuPlatform -contains "GRID") {
Write-Host "Customize (Start): NVIDIA GPU (GRID)"
$installFile = "nvidia-gpu-grid.exe"
$downloadUrl = "https://go.microsoft.com/fwlink/?linkid=874181"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
Start-Process -FilePath ./$installFile -ArgumentList "-s -n" -Wait -RedirectStandardOutput "nvidia-grid.output.txt" -RedirectStandardError "nvidia-grid.error.txt"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Start-Process -FilePath .\$installFile -ArgumentList "-s -n" -Wait -RedirectStandardOutput "nvidia-grid.output.txt" -RedirectStandardError "nvidia-grid.error.txt"
Write-Host "Customize (End): NVIDIA GPU (GRID)"
}
@ -67,8 +74,8 @@ if ($gpuPlatform -contains "CUDA" -or $gpuPlatform -contains "CUDA.OptiX") {
$versionInfo = "11.8.0"
$installFile = "cuda_${versionInfo}_522.06_windows.exe"
$downloadUrl = "$storageContainerUrl/NVIDIA/CUDA/$versionInfo/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
Start-Process -FilePath ./$installFile -ArgumentList "-s -n" -Wait -RedirectStandardOutput "nvidia-cuda.output.txt" -RedirectStandardError "nvidia-cuda.error.txt"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Start-Process -FilePath .\$installFile -ArgumentList "-s -n" -Wait -RedirectStandardOutput "nvidia-cuda.output.txt" -RedirectStandardError "nvidia-cuda.error.txt"
[System.Environment]::SetEnvironmentVariable("CUDA_TOOLKIT_ROOT_DIR", "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8", [System.EnvironmentVariableTarget]::Machine)
Write-Host "Customize (End): NVIDIA GPU (CUDA)"
}
@ -78,8 +85,8 @@ if ($gpuPlatform -contains "CUDA.OptiX") {
$versionInfo = "7.6.0"
$installFile = "NVIDIA-OptiX-SDK-$versionInfo-win64-31894579.exe"
$downloadUrl = "$storageContainerUrl/NVIDIA/OptiX/$versionInfo/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
Start-Process -FilePath ./$installFile -ArgumentList "/s /n" -Wait -RedirectStandardOutput "nvidia-optix.output.txt" -RedirectStandardError "nvidia-optix.error.txt"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Start-Process -FilePath .\$installFile -ArgumentList "/s /n" -Wait -RedirectStandardOutput "nvidia-optix.output.txt" -RedirectStandardError "nvidia-optix.error.txt"
$sdkDirectory = "C:\ProgramData\NVIDIA Corporation\OptiX SDK $versionInfo\SDK"
$buildDirectory = "$sdkDirectory\build"
New-Item -ItemType Directory $buildDirectory
@ -93,7 +100,7 @@ if ($machineType -eq "Scheduler") {
Write-Host "Customize (Start): Azure CLI"
$installFile = "az-cli.msi"
$downloadUrl = "https://aka.ms/installazurecliwindows"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Start-Process -FilePath "msiexec.exe" -ArgumentList "/i $installFile /quiet /norestart" -Wait
Write-Host "Customize (End): Azure CLI"
@ -108,9 +115,7 @@ if ($machineType -eq "Scheduler") {
}
} else {
Write-Host "Customize (Start): NFS Client"
$installFile = "dism.exe"
$featureName = "ClientForNFS-Infrastructure"
Start-Process -FilePath $installFile -ArgumentList "/Enable-Feature /FeatureName:$featureName /Online /All /NoRestart" -Wait -Verb RunAs
Start-Process -FilePath "dism.exe" -ArgumentList "/Enable-Feature /FeatureName:ClientForNFS-Infrastructure /Online /All /NoRestart" -Wait -RedirectStandardOutput "nfs-client.output.txt" -RedirectStandardError "nfs-client.error.txt"
Write-Host "Customize (End): NFS Client"
}
@ -135,7 +140,6 @@ $rendererPathBlender = "C:\Program Files\Blender Foundation\Blender3"
$rendererPathPBRT3 = "C:\Program Files\PBRT\v3"
$rendererPathPBRT4 = "C:\Program Files\PBRT\v4"
$rendererPathUnreal = "C:\Program Files\Epic Games\Unreal5"
$rendererPathUnrealStream = "$rendererPathUnreal\Stream"
$rendererPathUnrealEditor = "$rendererPathUnreal\Engine\Binaries\Win64"
if ($renderEngines -contains "Blender") {
@ -151,7 +155,7 @@ switch ($renderManager) {
Write-Host "Customize (Start): Royal Render Download"
$installFile = "RoyalRender__${schedulerVersion}__installer.zip"
$downloadUrl = "$storageContainerUrl/RoyalRender/$schedulerVersion/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Expand-Archive -Path $installFile
Write-Host "Customize (End): Royal Render Download"
@ -179,7 +183,7 @@ switch ($renderManager) {
Write-Host "Customize (Start): Deadline Download"
$installFile = "Deadline-$schedulerVersion-windows-installers.zip"
$downloadUrl = "$storageContainerUrl/Deadline/$schedulerVersion/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Expand-Archive -Path $installFile
Write-Host "Customize (End): Deadline Download"
@ -213,7 +217,7 @@ switch ($renderManager) {
}
Start-Process -FilePath $installFile -ArgumentList $installArgs -Wait
Move-Item -Path $env:TMP\bitrock_installer.log -Destination .\bitrock_installer_client.log
Start-Process -FilePath "$schedulerClientBinPath\deadlinecommand.exe" -ArgumentList "-ChangeRepositorySkipValidation Direct $schedulerRepositoryLocalMount $schedulerRepositoryCertificate ''" -Wait
Start-Process -FilePath "$schedulerClientBinPath\deadlinecommand.exe" -ArgumentList "-ChangeRepositorySkipValidation Direct $schedulerRepositoryLocalMount $schedulerRepositoryCertificate ''" -Wait -RedirectStandardOutput "deadline-change-repository.output.txt" -RedirectStandardError "deadline-change-repository.error.txt"
Set-Location -Path $binDirectory
Write-Host "Customize (End): Deadline Client"
@ -233,8 +237,8 @@ if ($renderEngines -contains "Blender") {
$versionInfo = "3.3.1"
$installFile = "blender-$versionInfo-windows-x64.msi"
$downloadUrl = "$storageContainerUrl/Blender/$versionInfo/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
Start-Process -FilePath "msiexec.exe" -ArgumentList ('/i ' + $installFile + ' INSTALL_ROOT="' + $rendererPathBlender + '" /quiet /norestart') -Wait
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Start-Process -FilePath "msiexec.exe" -ArgumentList ('/i ' + $installFile + ' INSTALL_ROOT="' + $rendererPathBlender + '" /quiet /norestart') -Wait -RedirectStandardOutput "blender.output.txt" -RedirectStandardError "blender.error.txt"
Write-Host "Customize (End): Blender"
}
@ -257,86 +261,105 @@ if ($renderEngines -contains "PBRT") {
}
if ($renderEngines -contains "PBRT.Moana") {
Write-Host "Customize (Start): PBRT (Moana Island)"
Write-Host "Customize (Start): PBRT Data (Moana Island)"
$dataDirectory = "moana"
New-Item -ItemType Directory -Path $dataDirectory
$installFile = "island-basepackage-v1.1.tgz"
$downloadUrl = "$storageContainerUrl/PBRT/$dataDirectory/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
tar -xzf $installFile -C $dataDirectory
$installFile = "island-pbrt-v1.1.tgz"
$downloadUrl = "$storageContainerUrl/PBRT/$dataDirectory/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
tar -xzf $installFile -C $dataDirectory
$installFile = "island-pbrtV4-v2.0.tgz"
$downloadUrl = "$storageContainerUrl/PBRT/$dataDirectory/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
tar -xzf $installFile -C $dataDirectory
Write-Host "Customize (End): PBRT (Moana Island)"
Write-Host "Customize (End): PBRT Data (Moana Island)"
}
if ($renderEngines -contains "Unity") {
Write-Host "Customize (Start): Unity"
$installFile = "UnityHubSetup.exe"
$downloadUrl = "https://public-cdn.cloud.unity3d.com/hub/prod/$installFile"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
Start-Process -FilePath $installFile -ArgumentList "/S" -Wait
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Start-Process -FilePath .\$installFile -ArgumentList "/S" -Wait -RedirectStandardOutput "unity-hub.output.txt" -RedirectStandardError "unity-hub.error.txt"
Write-Host "Customize (End): Unity"
}
if ($renderEngines -contains "Unreal" || $renderEngines -contains "Unreal.PixelStream") {
Write-Host "Customize (Start): Unreal"
# netsh advfirewall firewall add rule name="Allow Unreal Editor" dir=in action=allow program="$rendererPathUnrealEditor\UnrealEditor.exe"
# $installFile = "dism.exe"
# $featureName = "NetFX3"
# Start-Process -FilePath $installFile -ArgumentList "/Enable-Feature /FeatureName:$featureName /Online /All /NoRestart" -Wait -Verb RunAs
Write-Host "Customize (Start): Unreal Engine"
Start-Process -FilePath "dism.exe" -ArgumentList "/Enable-Feature /FeatureName:NetFX3 /Online /All /NoRestart" -Wait -RedirectStandardOutput "net-fx3.output.txt" -RedirectStandardError "net-fx3.error.txt"
Set-Location -Path C:\
$versionInfo = "5.1.0"
$installFile = "UnrealEngine-$versionInfo-release.zip"
$downloadUrl = "$storageContainerUrl/Unreal/$versionInfo/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Expand-Archive -Path $installFile
New-Item -ItemType Directory -Path "$rendererPathUnreal"
Move-Item -Path "Unreal*\Unreal*\*" -Destination "$rendererPathUnreal"
Remove-Item -Path "Unreal*" -Exclude "*.zip" -Recurse
Set-Location -Path $binDirectory
$installFile = "$rendererPathUnreal\Setup.bat"
$setupScript = Get-Content -Path $installFile
$setupScript = $setupScript.Replace("/register", "/register /unattended")
$setupScript = $setupScript.Replace("pause", "rem pause")
Set-Content -Path $installFile -Value $setupScript
Start-Process -FilePath "$installFile" -Wait
$scriptFilePath = $installFile
$scriptFileText = Get-Content -Path $scriptFilePath
$scriptFileText = $scriptFileText.Replace("/register", "/register /unattended")
$scriptFileText = $scriptFileText.Replace("pause", "rem pause")
Set-Content -Path $scriptFilePath -Value $scriptFileText
Start-Process -FilePath "$installFile" -Wait -RedirectStandardOutput "unreal-engine.output.txt" -RedirectStandardError "unreal-engine.error.txt"
Write-Host "Customize (End): Unreal Engine"
if ($machineType -eq "Workstation") {
Write-Host "Customize (Start): Visual Studio"
$versionInfo = "2022"
$installFile = "VisualStudioSetup.exe"
$downloadUrl = "$storageContainerUrl/VS/$versionInfo/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
# $componentIds = "--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64"
# $componentIds += " --add Microsoft.VisualStudio.Component.Windows11SDK.22621"
# $componentIds += " --add Microsoft.VisualStudio.Component.VSSDK"
# $componentIds += " --add Microsoft.NetCore.Component.SDK"
# $componentIds += " --add Microsoft.Net.Component.4.8.SDK"
# Start-Process -FilePath .\$installFile -ArgumentList "$componentIds --quiet --norestart" -Wait -RedirectStandardOutput "vs.output.txt" -RedirectStandardError "vs.error.txt"
# [System.Environment]::SetEnvironmentVariable("MSBuildSDKsPath", "C:\Program Files\dotnet\sdk\7.0.100\Sdks", [System.EnvironmentVariableTarget]::Machine)
# [System.Environment]::SetEnvironmentVariable("MSBuildEnableWorkloadResolver", "false", [System.EnvironmentVariableTarget]::Machine)
# $binPathDotNet = "C:\Program Files\dotnet"
Write-Host "Customize (End): Visual Studio"
Write-Host "Customize (Start): Unreal Project Files"
& "$rendererPathUnreal\GenerateProjectFiles.bat"
[System.Environment]::SetEnvironmentVariable("PATH", "$env:PATH;C:\Program Files\dotnet", [System.EnvironmentVariableTarget]::Machine)
Start-Process -FilePath "$binPathMSBuild\MSBuild.exe" -ArgumentList "-restore -p:Platform=Win64 -p:Configuration=""Development Editor"" ""$rendererPathUnreal\UE5.sln""" -Wait
$installFile = "$rendererPathUnreal\GenerateProjectFiles.bat"
$scriptFilePath = $installFile
$scriptFileText = Get-Content -Path $scriptFilePath
$scriptFileText = $scriptFileText.Replace("pause", "rem pause")
Set-Content -Path $scriptFilePath -Value $scriptFileText
$scriptFilePath = "$rendererPathUnreal\Engine\Build\BatchFiles\GenerateProjectFiles.bat"
$scriptFileText = Get-Content -Path $scriptFilePath
$scriptFileText = $scriptFileText.Replace("pause", "rem pause")
Set-Content -Path $scriptFilePath -Value $scriptFileText
# Start-Process -FilePath "$installFile" -Wait -RedirectStandardOutput "unreal-files-generate.output.txt" -RedirectStandardError "unreal-files-generate.error.txt"
# Start-Process -FilePath "$binPathMSBuild\MSBuild.exe" -ArgumentList """$rendererPathUnreal\UE5.sln"" -p:Configuration=""Development Editor"" -p:Platform=Win64 -restore" -Wait -RedirectStandardOutput "unreal-files-build.output.txt" -RedirectStandardError "unreal-files-build.error.txt"
# Start-Process -FilePath "$binPathDotNet\dotnet.exe" -ArgumentList "build ""$rendererPathUnreal\UE5.sln"" -c ""Development Editor""" -Wait -RedirectStandardOutput "unreal-files-build.output.txt" -RedirectStandardError "unreal-files-build.error.txt"
Write-Host "Customize (End): Unreal Project Files"
Write-Host "Customize (Start): Unreal Editor Shortcut"
$shortcutPath = "$env:AllUsersProfile\Desktop\Epic Unreal Editor.lnk"
$scriptShell = New-Object -ComObject WScript.Shell
$shortcut = $scriptShell.CreateShortcut($shortcutPath)
$shortcut.WorkingDirectory = "$rendererPathUnrealEditor"
$shortcut.TargetPath = "$rendererPathUnrealEditor\UnrealEditor.exe"
$shortcut.Save()
Write-Host "Customize (End): Unreal Editor Shortcut"
# Write-Host "Customize (Start): Unreal Editor"
# netsh advfirewall firewall add rule name="Allow Unreal Editor" dir=in action=allow program="$rendererPathUnrealEditor\UnrealEditor.exe"
# $shortcutPath = "$env:AllUsersProfile\Desktop\Unreal Editor.lnk"
# $scriptShell = New-Object -ComObject WScript.Shell
# $shortcut = $scriptShell.CreateShortcut($shortcutPath)
# $shortcut.WorkingDirectory = "$rendererPathUnrealEditor"
# $shortcut.TargetPath = "$rendererPathUnrealEditor\UnrealEditor.exe"
# $shortcut.Save()
# Write-Host "Customize (End): Unreal Editor"
}
Write-Host "Customize (End): Unreal"
# if ($renderEngines -contains "Unreal.PixelStream") {
# Write-Host "Customize (Start): Unreal Pixel Streaming"
# $installFile = "PixelStreamingInfrastructure-UE5.1.zip"
# $downloadUrl = "$storageContainerUrl/Unreal/$installFile$storageContainerSas"
# (New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
# Expand-Archive -Path $installFile
# New-Item -ItemType Directory -Path "$rendererPathUnrealStream"
# Move-Item -Path "PixelStreaming*\PixelStreaming*\*" -Destination "$rendererPathUnrealStream"
# $installFile = "setup.bat"
# Set-Location -Path "$rendererPathUnrealStream/SignallingWebServer/platform_scripts/cmd"
# Start-Process -FilePath $installFile -Wait
# $installFile = "setup.bat"
# Set-Location -Path "$rendererPathUnrealStream/MatchMaker/platform_scripts/cmd"
# Start-Process -FilePath $installFile -Wait
# Set-Location -Path $binDirectory
# Start-Process -FilePath "$binPathGit\git.exe" -ArgumentList "clone --recursive https://github.com/EpicGames/PixelStreamingInfrastructure" -Wait -RedirectStandardOutput "unreal-stream-git.output.txt" -RedirectStandardError "unreal-stream-git.error.txt"
# $installFile = "PixelStreamingInfrastructure\SignallingWebServer\platform_scripts\cmd\setup.bat"
# Start-Process -FilePath .\$installFile -Wait -RedirectStandardOutput "unreal-stream-signalling.output.txt" -RedirectStandardError "unreal-stream-signalling.error.txt"
# $installFile = "PixelStreamingInfrastructure\Matchmaker\platform_scripts\cmd\setup.bat"
# Start-Process -FilePath .\$installFile -Wait -RedirectStandardOutput "unreal-stream-matchmaker.output.txt" -RedirectStandardError "unreal-stream-matchmaker.error.txt"
# Write-Host "Customize (End): Unreal Pixel Streaming"
# }
}
@ -361,7 +384,7 @@ if ($machineType -eq "Workstation") {
$versionInfo = "22.09.2"
$installFile = "pcoip-agent-graphics_$versionInfo.exe"
$downloadUrl = "$storageContainerUrl/Teradici/$versionInfo/$installFile$storageContainerSas"
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $pwd.Path + "\" + $installFile)
Start-Process -FilePath $installFile -ArgumentList "/S /NoPostReboot /Force" -Wait
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $pwd.Path -ChildPath $installFile))
Start-Process -FilePath .\$installFile -ArgumentList "/S /NoPostReboot /Force" -Wait -RedirectStandardOutput "pcopi-agent.output.txt" -RedirectStandardError "pcoip-agent.error.txt"
Write-Host "Customize (End): Teradici PCoIP"
}
}

Просмотреть файл

@ -10,22 +10,20 @@ storageContainerSas="?sv=2021-04-10&st=2022-01-01T08%3A00%3A00Z&se=2222-12-31T08
echo "Customize (Start): Image Build Platform"
yum -y install epel-release
yum -y install gcc gcc-c++
yum -y install python-pip
yum -y install nfs-utils
# yum -y install cmake
# yum -y install unzip
# yum -y install cmake
yum -y install git
yum -y install jq
versionInfo="3.25.0"
installFile="cmake-$versionInfo-linux-x86_64.sh"
downloadUrl="https://github.com/Kitware/CMake/releases/download/v$versionInfo/$installFile"
installFile="cmake-$versionInfo-linux-x86_64.tar.gz"
downloadUrl="$storageContainerUrl/CMake/$versionInfo/$installFile$storageContainerSas"
curl -o $installFile -L $downloadUrl
chmod +x $installFile
tar -xzf $installFile
installDirectory="cmake"
mkdir $installDirectory
./$installFile --skip-license --prefix="$binDirectory/$installDirectory" 1> "cmake.output.txt" 2> "cmake.error.txt"
binPathCMake="$binDirectory/$installDirectory/bin"
mv cmake-$versionInfo-linux-x86_64 $installDirectory
binPathCMake="$(pwd)/$installDirectory/bin"
binPaths="$binPaths:$binPathCMake"
echo "Customize (End): Image Build Platform"
@ -115,7 +113,6 @@ if [ $machineType == "Scheduler" ]; then
yum -y install cyclecloud8
binPaths="$binPaths:$cycleCloudPath/bin"
cd /opt/cycle_server
pip install ./tools/cyclecloud_api*.whl
unzip -q ./tools/cyclecloud-cli.zip
./cyclecloud-cli-installer/install.sh --installdir $cycleCloudPath
cd $binDirectory
@ -170,7 +167,6 @@ rendererPathBlender="/usr/local/blender3"
rendererPathPBRT3="/usr/local/pbrt/v3"
rendererPathPBRT4="/usr/local/pbrt/v4"
rendererPathUnreal="/usr/local/unreal5"
rendererPathUnrealStream="$rendererPathUnreal/stream"
if [[ $renderEngines == *Blender* ]]; then
binPaths="$binPaths:$rendererPathBlender"
@ -291,7 +287,7 @@ if [[ $renderEngines == *PBRT* ]]; then
fi
if [[ $renderEngines == *PBRT.Moana* ]]; then
echo "Customize (Start): PBRT (Moana Island)"
echo "Customize (Start): PBRT Data (Moana Island)"
dataDirectory="moana"
mkdir $dataDirectory
installFile="island-basepackage-v1.1.tgz"
@ -306,7 +302,7 @@ if [[ $renderEngines == *PBRT.Moana* ]]; then
downloadUrl="$storageContainerUrl/PBRT/$dataDirectory/$installFile$storageContainerSas"
curl -o $installFile -L $downloadUrl
tar -xzf $installFile -C $dataDirectory
echo "Customize (End): PBRT (Moana Island)"
echo "Customize (End): PBRT Data (Moana Island)"
fi
if [[ $renderEngines == *Unity* ]]; then
@ -323,48 +319,38 @@ if [[ $renderEngines == *Unity* ]]; then
echo "Customize (End): Unity"
fi
if [[ $renderEngines == *Unreal* ] || [ $renderEngines == *Unreal.PixelStream* ]]; then
echo "Customize (Start): Unreal"
# yum -y install libicu
if [[ $renderEngines == *Unreal* ]] || [[ $renderEngines == *Unreal.PixelStream* ]]; then
echo "Customize (Start): Unreal Engine"
yum -y install libicu
versionInfo="5.1.0"
installFile="UnrealEngine-$versionInfo-release.tar.gz"
downloadUrl="$storageContainerUrl/Unreal/$versionInfo/$installFile$storageContainerSas"
curl -o $installFile -L $downloadUrl
tar -xzf $installFile
mkdir $rendererPathUnreal
mv UnrealEngine*/* $rendererPathUnreal
rm -rf UnrealEngine-$versionInfo-release
$rendererPathUnreal/Setup.sh 1> "unreal-engine.output.txt" 2> "unreal-engine.error.txt"
echo "Customize (End): Unreal Engine"
cd UnrealEngine-$versionInfo
mkdir -p $rendererPathUnreal
mv * $rendererPathUnreal
$rendererPathUnreal/Setup.sh
cd $binDirectory
if [ $machineType == "Workstation" ]; then
echo "Customize (Start): Unreal Project Files"
$rendererPathUnreal/GenerateProjectFiles.sh
make -j -C $rendererPathUnreal
$rendererPathUnreal/GenerateProjectFiles.sh 1> "unreal-files-generate.output.txt" 2> "unreal-files-generate.error.txt"
make -j -C $rendererPathUnreal 1> "unreal-files-make.output.txt" 2> "unreal-files-make.error.txt"
echo "Customize (End): Unreal Project Files"
fi
echo "Customize (End): Unreal"
# if [[ $renderEngines == *Unreal.PixelStream* ]]; then
# echo "Customize (Start): Unreal Pixel Streaming"
# versionInfo="5.1"
# installFile="PixelStreamingInfrastructure-UE$versionInfo.zip"
# downloadUrl="$storageContainerUrl/Unreal/$installFile$storageContainerSas"
# curl -o $installFile -L $downloadUrl
# unzip -q $installFile
# cd PixelStreamingInfrastructure-UE$versionInfo
# mkdir -p $rendererPathUnrealStream
# mv * $rendererPathUnrealStream
# cd $rendererPathUnrealStream/SignallingWebServer/platform_scripts/bash
# chmod +x *.sh
# ./setup.sh
# cd $rendererPathUnrealStream/MatchMaker/platform_scripts/bash
# chmod +x *.sh
# ./setup.sh
# cd $binDirectory
# echo "Customize (End): Unreal Pixel Streaming"
# fi
if [[ $renderEngines == *Unreal.PixelStream* ]]; then
echo "Customize (Start): Unreal Pixel Streaming"
git clone --recursive https://github.com/EpicGames/PixelStreamingInfrastructure 1> "unreal-stream-git.output.txt" 2> "unreal-stream-git.error.txt"
installFile="PixelStreamingInfrastructure/SignallingWebServer/platform_scripts/bash/setup.sh"
chmod +x $installFile
./$installFile 1> "unreal-stream-signalling.output.txt" 2> "unreal-stream-signalling.error.txt"
installFile="PixelStreamingInfrastructure/Matchmaker/platform_scripts/bash/setup.sh"
chmod +x $installFile
./$installFile 1> "unreal-stream-matchmaker.output.txt" 2> "unreal-stream-matchmaker.error.txt"
echo "Customize (End): Unreal Pixel Streaming"
fi
fi
if [ $machineType == "Farm" ]; then
@ -379,7 +365,6 @@ fi
if [ $machineType == "Workstation" ]; then
echo "Customize (Start): Desktop Environment"
# dnf config-manager --set-enabled crb
yum -y groups install "KDE Plasma Workspaces" 1> "kde.output.txt" 2> "kde.error.txt"
echo "Customize (End): Desktop Environment"
@ -388,11 +373,11 @@ if [ $machineType == "Workstation" ]; then
installFile="pcoip-agent-offline-centos7.9_$versionInfo-1.el7.x86_64.tar.gz"
downloadUrl="$storageContainerUrl/Teradici/$versionInfo/$installFile$storageContainerSas"
curl -o $installFile -L $downloadUrl
installDirectory="pcoip"
installDirectory="pcoip-agent"
mkdir $installDirectory
tar -xzf $installFile -C $installDirectory
cd $installDirectory
./install-pcoip-agent.sh "pcoip-agent-graphics usb-vhci" 1> "pcoip.output.txt" 2> "pcoip.error.txt"
cd $installDirectory
./install-pcoip-agent.sh pcoip-agent-graphics usb-vhci 1> "$installDirectory.output.txt" 2> "$installDirectory.error.txt"
cd $binDirectory
echo "Customize (End): Teradici PCoIP"
fi
fi

Просмотреть файл

@ -454,9 +454,3 @@ output "imageGallery" {
output "imageTemplates" {
value = var.imageTemplates
}
output "imageDefinitionsLinux" {
value = [
for imageDefinition in var.imageGallery.imageDefinitions: imageDefinition if imageDefinition.type == "Linux"
]
}

Просмотреть файл

@ -6,15 +6,8 @@ resourceGroupName = "ArtistAnywhere.Scheduler"
virtualMachines = [
{
name = "LnxScheduler"
image = {
id = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/Linux/versions/0.0.0"
plan = {
name = ""
product = ""
publisher = ""
}
}
name = "LnxScheduler"
imageId = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/Linux/versions/0.0.0"
machineSize = "Standard_D8s_v5" # https://learn.microsoft.com/azure/virtual-machines/sizes
operatingSystem = {
type = "Linux"
@ -53,17 +46,11 @@ virtualMachines = [
monitorExtension = {
enable = false
}
enableAcceleratedNetworking = true
},
{
name = "" # "WinScheduler"
image = {
id = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/WinScheduler/versions/0.0.0"
plan = {
name = ""
product = ""
publisher = ""
}
}
name = "" # "WinScheduler"
imageId = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/WinScheduler/versions/0.0.0"
machineSize = "Standard_D8s_v5" # https://learn.microsoft.com/azure/virtual-machines/sizes
operatingSystem = {
type = "Windows"
@ -102,6 +89,7 @@ virtualMachines = [
monitorExtension = {
enable = false
}
enableAcceleratedNetworking = true
}
]
@ -136,4 +124,4 @@ computeGallery = { # Only applies if customExtension.cycleCloud.enable = true
name = ""
resourceGroupName = ""
imageVersionIdDefault = ""
}
}

Просмотреть файл

@ -44,4 +44,4 @@ $taskAction = New-ScheduledTaskAction -Execute $mountFile
$taskTrigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName $taskName -Action $taskAction -Trigger $taskTrigger -AsJob -User System -Force
Start-Process -FilePath $mountFile -Wait -RedirectStandardOutput "$mountFile.output.txt" -RedirectStandardError "$mountFile.error.txt"
Start-Process -FilePath $mountFile -Wait -RedirectStandardOutput "$mountFile.output.txt" -RedirectStandardError "$mountFile.error.txt"

Просмотреть файл

@ -200,13 +200,4 @@ if [ ${cycleCloud.enable} == true ]; then
cyclecloud initialize --url=https://localhost:8443 --username="${adminUsername}" --password="${adminPassword}" --batch --verify-ssl=false
cyclecloud account create -f $cycleAccountFile
cyclecloud import_template -f $clusterTemplateFile
versionInfo="0.2.11"
installFile="cyclecloud-scalelib-$versionInfo.tar.gz"
downloadUrl="https://github.com/Azure/cyclecloud-scalelib/archive/refs/tags/$versionInfo.tar.gz"
curl -o $installFile -L $downloadUrl
tar -xzf $installFile
cd cyclecloud-scalelib-$versionInfo
pip install -r dev-requirements.txt
python setup.py build
fi
fi

Просмотреть файл

@ -104,6 +104,7 @@ variable "virtualMachines" {
enable = bool
}
)
enableAcceleratedNetworking = bool
}
))
}
@ -227,18 +228,6 @@ locals {
imageGalleryName = !local.stateExistsImage ? var.computeGallery.name : try(data.terraform_remote_state.image.outputs.imageGallery.name, "")
imageResourceGroupName = !local.stateExistsImage ? var.computeGallery.resourceGroupName : try(data.terraform_remote_state.image.outputs.resourceGroupName, "")
imageVersionIdDefault = !local.stateExistsImage ? var.computeGallery.imageVersionIdDefault : "/subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${local.imageResourceGroupName}/providers/Microsoft.Compute/galleries/${local.imageGalleryName}/images/Linux/versions/0.0.0"
virtualMachinesLinux = [
for virtualMachine in var.virtualMachines : merge(virtualMachine, {
image = {
id = virtualMachine.image.id
plan = {
name = try(lower(data.terraform_remote_state.image.outputs.imageDefinitionsLinux[0].sku), "")
product = try(lower(data.terraform_remote_state.image.outputs.imageDefinitionsLinux[0].offer), "")
publisher = try(lower(data.terraform_remote_state.image.outputs.imageDefinitionsLinux[0].publisher), "")
}
}
}) if virtualMachine.operatingSystem.type == "Linux"
]
schedulerMachineNames = [
for virtualMachine in var.virtualMachines : virtualMachine.name if virtualMachine.name != ""
]
@ -265,12 +254,12 @@ resource "azurerm_network_interface" "scheduler" {
subnet_id = data.azurerm_subnet.farm.id
private_ip_address_allocation = "Dynamic"
}
enable_accelerated_networking = true
enable_accelerated_networking = each.value.enableAcceleratedNetworking
}
resource "azurerm_linux_virtual_machine" "scheduler" {
for_each = {
for virtualMachine in local.stateExistsImage ? local.virtualMachinesLinux : var.virtualMachines : virtualMachine.name => virtualMachine if virtualMachine.name != "" && virtualMachine.operatingSystem.type == "Linux" && !var.batchAccount.enable
for virtualMachine in var.virtualMachines : virtualMachine.name => virtualMachine if virtualMachine.name != "" && virtualMachine.operatingSystem.type == "Linux" && !var.batchAccount.enable
}
name = each.value.name
resource_group_name = azurerm_resource_group.scheduler.name
@ -299,14 +288,6 @@ resource "azurerm_linux_virtual_machine" "scheduler" {
boot_diagnostics {
storage_account_uri = null
}
dynamic plan {
for_each = each.value.image.plan.name == "" ? [] : [1]
content {
name = each.value.image.plan.name
product = each.value.image.plan.product
publisher = each.value.image.plan.publisher
}
}
dynamic admin_ssh_key {
for_each = each.value.adminLogin.sshPublicKey == "" ? [] : [1]
content {
@ -402,14 +383,6 @@ resource "azurerm_windows_virtual_machine" "scheduler" {
boot_diagnostics {
storage_account_uri = null
}
dynamic plan {
for_each = each.value.image.plan.name == "" ? [] : [1]
content {
name = each.value.image.plan.name
product = each.value.image.plan.product
publisher = each.value.image.plan.publisher
}
}
depends_on = [
azurerm_network_interface.scheduler
]
@ -536,4 +509,4 @@ output "virtualMachines" {
output "privateDnsRecord" {
value = azurerm_private_dns_a_record.scheduler
}
}

Просмотреть файл

@ -44,4 +44,4 @@ if ($queuedTasks -gt 0) { # Scale Up
}
}
}
}
}

Просмотреть файл

@ -52,4 +52,4 @@ else # Scale Down
fi
fi
done
fi
fi

Просмотреть файл

@ -6,15 +6,8 @@ resourceGroupName = "ArtistAnywhere.Farm"
virtualMachineScaleSets = [
{
name = "LnxFarm"
image = {
id = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/Linux/versions/1.0.0"
plan = {
name = ""
product = ""
publisher = ""
}
}
name = "LnxFarm"
imageId = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/Linux/versions/1.0.0"
machine = {
size = "Standard_HB120rs_v2"
count = 10
@ -67,17 +60,11 @@ virtualMachineScaleSets = [
enable = true
timeoutDelay = "PT5M"
}
enableAcceleratedNetworking = true
},
{
name = "" # "WinFarm"
image = {
id = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/WinFarm/versions/1.0.0"
plan = {
name = ""
product = ""
publisher = ""
}
}
name = "" # "WinFarm"
imageId = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/WinFarm/versions/1.0.0"
machine = {
size = "Standard_HB120rs_v2"
count = 10
@ -130,6 +117,7 @@ virtualMachineScaleSets = [
enable = true
timeoutDelay = "PT5M"
}
enableAcceleratedNetworking = true
}
]
@ -141,4 +129,4 @@ computeNetwork = {
name = ""
subnetName = ""
resourceGroupName = ""
}
}

Просмотреть файл

@ -26,4 +26,4 @@ for ($i = 0; $i -lt 12; $i++) {
%{ for fsPermission in fileSystemPermissions }
${fsPermission}
%{ endfor }
%{ endif }
%{ endif }

Просмотреть файл

@ -33,4 +33,4 @@ systemctl --now enable terminate.timer
%{ for fsPermission in fileSystemPermissions }
${fsPermission}
%{ endfor }
%{ endif }
%{ endif }

Просмотреть файл

@ -116,6 +116,7 @@ variable "virtualMachineScaleSets" {
timeoutDelay = string
}
)
enableAcceleratedNetworking = bool
}
))
}
@ -183,19 +184,6 @@ data "azurerm_subnet" "farm" {
locals {
stateExistsNetwork = try(length(data.terraform_remote_state.network.outputs) >= 0, false)
stateExistsImage = try(length(data.terraform_remote_state.image.outputs) >= 0, false)
virtualMachineScaleSetsLinux = [
for virtualMachineScaleSet in var.virtualMachineScaleSets : merge(virtualMachineScaleSet, {
image = {
id = virtualMachineScaleSet.image.id
plan = {
name = try(lower(data.terraform_remote_state.image.outputs.imageDefinitionsLinux[0].sku), "")
product = try(lower(data.terraform_remote_state.image.outputs.imageDefinitionsLinux[0].offer), "")
publisher = try(lower(data.terraform_remote_state.image.outputs.imageDefinitionsLinux[0].publisher), "")
}
}
}) if virtualMachineScaleSet.operatingSystem.type == "Linux"
]
}
resource "azurerm_role_assignment" "farm" {
@ -211,7 +199,7 @@ resource "azurerm_resource_group" "farm" {
resource "azurerm_linux_virtual_machine_scale_set" "farm" {
for_each = {
for virtualMachineScaleSet in local.stateExistsImage ? local.virtualMachineScaleSetsLinux : var.virtualMachineScaleSets : virtualMachineScaleSet.name => virtualMachineScaleSet if virtualMachineScaleSet.name != "" && virtualMachineScaleSet.operatingSystem.type == "Linux"
for virtualMachineScaleSet in var.virtualMachineScaleSets : virtualMachineScaleSet.name => virtualMachineScaleSet if virtualMachineScaleSet.name != "" && virtualMachineScaleSet.operatingSystem.type == "Linux"
}
name = each.value.name
resource_group_name = azurerm_resource_group.farm.name
@ -235,7 +223,7 @@ resource "azurerm_linux_virtual_machine_scale_set" "farm" {
primary = true
subnet_id = data.azurerm_subnet.farm.id
}
enable_accelerated_networking = true
enable_accelerated_networking = each.value.enableAcceleratedNetworking
}
os_disk {
storage_account_type = each.value.operatingSystem.disk.storageType
@ -257,14 +245,6 @@ resource "azurerm_linux_virtual_machine_scale_set" "farm" {
boot_diagnostics {
storage_account_uri = null
}
dynamic plan {
for_each = each.value.image.plan.name == "" ? [] : [1]
content {
name = each.value.image.plan.name
product = each.value.image.plan.product
publisher = each.value.image.plan.publisher
}
}
dynamic admin_ssh_key {
for_each = each.value.adminLogin.sshPublicKey == "" ? [] : [1]
content {
@ -352,7 +332,7 @@ resource "azurerm_windows_virtual_machine_scale_set" "farm" {
primary = true
subnet_id = data.azurerm_subnet.farm.id
}
enable_accelerated_networking = true
enable_accelerated_networking = each.value.enableAcceleratedNetworking
}
os_disk {
storage_account_type = each.value.operatingSystem.disk.storageType
@ -435,4 +415,4 @@ output "resourceGroupName" {
output "virtualMachineScaleSets" {
value = var.virtualMachineScaleSets
}
}

Просмотреть файл

@ -6,15 +6,8 @@ resourceGroupName = "ArtistAnywhere.Workstation"
virtualMachines = [
{
name = "LnxArtist"
image = {
id = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/Linux/versions/2.0.0"
plan = {
name = ""
product = ""
publisher = ""
}
}
name = "LnxArtist"
imageId = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/Linux/versions/2.0.0"
machineSize = "Standard_NV36ads_A10_v5" # https://learn.microsoft.com/azure/virtual-machines/sizes
operatingSystem = {
type = "Linux"
@ -42,17 +35,11 @@ virtualMachines = [
monitorExtension = {
enable = false
}
enableAcceleratedNetworking = true
},
{
name = "WinArtist"
image = {
id = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/WinArtist/versions/2.0.0"
plan = {
name = ""
product = ""
publisher = ""
}
}
name = "WinArtist"
imageId = "/subscriptions/5cc0d8f1-3643-410c-8646-1a2961134bd3/resourceGroups/ArtistAnywhere.Image/providers/Microsoft.Compute/galleries/Gallery/images/WinArtist/versions/2.0.0"
machineSize = "Standard_NV36ads_A10_v5" # https://learn.microsoft.com/azure/virtual-machines/sizes
operatingSystem = {
type = "Windows"
@ -80,6 +67,7 @@ virtualMachines = [
monitorExtension = {
enable = false
}
enableAcceleratedNetworking = true
}
]
@ -91,4 +79,4 @@ computeNetwork = {
name = ""
subnetName = ""
resourceGroupName = ""
}
}

Просмотреть файл

@ -18,4 +18,4 @@ $ErrorActionPreference = "Stop"
Register-ScheduledTask -TaskName $taskName -Action $taskAction -Trigger $taskTrigger -AsJob -User System -Force
Start-Process -FilePath $mountFile -Wait -RedirectStandardOutput "$mountFile.output.txt" -RedirectStandardError "$mountFile.error.txt"
%{ endif }
%{ endif }

Просмотреть файл

@ -13,4 +13,4 @@ source /etc/profile.d/aaa.sh # https://github.com/Azure/WALinuxAgent/issues/1561
echo "${fsMount}" >> /etc/fstab
%{ endfor }
mount -a
%{ endif }
%{ endif }

Просмотреть файл

@ -84,6 +84,7 @@ variable "virtualMachines" {
enable = bool
}
)
enableAcceleratedNetworking = bool
}
))
}
@ -151,19 +152,6 @@ data "azurerm_subnet" "workstation" {
locals {
stateExistsNetwork = try(length(data.terraform_remote_state.network.outputs) >= 0, false)
stateExistsImage = try(length(data.terraform_remote_state.image.outputs) >= 0, false)
virtualMachinesLinux = [
for virtualMachine in var.virtualMachines : merge(virtualMachine, {
image = {
id = virtualMachine.image.id
plan = {
name = try(lower(data.terraform_remote_state.image.outputs.imageDefinitionsLinux[0].sku), "")
product = try(lower(data.terraform_remote_state.image.outputs.imageDefinitionsLinux[0].offer), "")
publisher = try(lower(data.terraform_remote_state.image.outputs.imageDefinitionsLinux[0].publisher), "")
}
}
}) if virtualMachine.operatingSystem.type == "Linux"
]
}
resource "azurerm_resource_group" "workstation" {
@ -183,12 +171,12 @@ resource "azurerm_network_interface" "workstation" {
subnet_id = data.azurerm_subnet.workstation.id
private_ip_address_allocation = "Dynamic"
}
enable_accelerated_networking = true
enable_accelerated_networking = each.value.enableAcceleratedNetworking
}
resource "azurerm_linux_virtual_machine" "workstation" {
for_each = {
for virtualMachine in local.stateExistsImage ? local.virtualMachinesLinux : var.virtualMachines : virtualMachine.name => virtualMachine if virtualMachine.name != "" && virtualMachine.operatingSystem.type == "Linux"
for virtualMachine in var.virtualMachines : virtualMachine.name => virtualMachine if virtualMachine.name != "" && virtualMachine.operatingSystem.type == "Linux"
}
name = each.value.name
resource_group_name = azurerm_resource_group.workstation.name
@ -214,14 +202,6 @@ resource "azurerm_linux_virtual_machine" "workstation" {
boot_diagnostics {
storage_account_uri = null
}
dynamic plan {
for_each = each.value.image.plan.name == "" ? [] : [1]
content {
name = each.value.image.plan.name
product = each.value.image.plan.product
publisher = each.value.image.plan.publisher
}
}
dynamic admin_ssh_key {
for_each = each.value.adminLogin.sshPublicKey == "" ? [] : [1]
content {
@ -354,4 +334,4 @@ output "resourceGroupName" {
output "virtualMachines" {
value = var.virtualMachines
}
}

Просмотреть файл

@ -16,8 +16,8 @@ The following *core principles* are implemented throughout the AAA solution depl
| [2 Network](#2-network) | Deploys [Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview) and [Bastion](https://learn.microsoft.com/azure/bastion/bastion-overview) with [VPN](https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-about-vpngateways) or [ExpressRoute](https://learn.microsoft.com/azure/expressroute/expressroute-about-virtual-network-gateways) hybrid networking services. | Yes, if [Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview) not deployed. Otherwise, No | Yes, if [Virtual Network](https://learn.microsoft.com/azure/virtual-network/virtual-networks-overview) not deployed. Otherwise, No |
| [3 Storage](#3-storage) | Deploys [Blob (NFS v3 with sample content)](https://learn.microsoft.com/azure/storage/blobs/network-file-system-protocol-support), [Files](https://learn.microsoft.com/azure/storage/files/storage-files-introduction), [NetApp Files](https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-introduction) or [Hammerspace](https://azuremarketplace.microsoft.com/marketplace/apps/hammerspace.hammerspace_4_6_5) storage. | No | Yes |
| [4 Storage Cache](#4-storage-cache) | Deploys [HPC Cache](https://learn.microsoft.com/azure/hpc-cache/hpc-cache-overview) or [Avere vFXT](https://learn.microsoft.com/azure/avere-vfxt/avere-vfxt-overview) for highly-available and scalable file caching. | Yes | Maybe, depends on your<br>render scale requirements |
| [5 Compute Image](#5-compute-image) | Deploys [Compute Gallery](https://learn.microsoft.com/azure/virtual-machines/shared-image-galleries) images that are built via the managed [Image Builder](https://learn.microsoft.com/azure/virtual-machines/image-builder-overview) service. | No, specify your custom *image.id* reference [here](https://github.com/Azure/Avere/blob/main/src/terraform/examples/e2e/7.compute.farm/config.auto.tfvars#L11) | No, specify your custom *image.id* reference [here](https://github.com/Azure/Avere/blob/main/src/terraform/examples/e2e/7.compute.farm/config.auto.tfvars#L11) |
| [6 Compute Scheduler](#6-compute-scheduler) | Deploys [Virtual Machines](https://learn.microsoft.com/azure/virtual-machines) for job scheduling with optional [CycleCloud](https://learn.microsoft.com/azure/cyclecloud/overview) integration. | No, continue to use your current job scheduler | No, specify your custom *image.id* reference [here](https://github.com/Azure/Avere/blob/main/src/terraform/examples/e2e/6.compute.scheduler/config.auto.tfvars#L11) |
| [5 Compute Image](#5-compute-image) | Deploys [Compute Gallery](https://learn.microsoft.com/azure/virtual-machines/shared-image-galleries) images that are built via the managed [Image Builder](https://learn.microsoft.com/azure/virtual-machines/image-builder-overview) service. | No, specify your custom *imageId* reference [here](https://github.com/Azure/Avere/blob/main/src/terraform/examples/e2e/7.compute.farm/config.auto.tfvars#L10) | No, specify your custom *imageId* reference [here](https://github.com/Azure/Avere/blob/main/src/terraform/examples/e2e/7.compute.farm/config.auto.tfvars#L10) |
| [6 Compute Scheduler](#6-compute-scheduler) | Deploys [Virtual Machines](https://learn.microsoft.com/azure/virtual-machines) for job scheduling with optional [CycleCloud](https://learn.microsoft.com/azure/cyclecloud/overview) integration. | No, continue to use your current job scheduler | No, specify your custom *imageId* reference [here](https://github.com/Azure/Avere/blob/main/src/terraform/examples/e2e/6.compute.scheduler/config.auto.tfvars#L10) |
| [7 Compute Farm](#7-compute-farm) | Deploys [Virtual Machine Scale Sets](https://learn.microsoft.com/azure/virtual-machine-scale-sets/overview) for [Linux](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/linux_virtual_machine_scale_set) and/or [Windows](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/windows_virtual_machine_scale_set) render farms. | Yes, if [CycleCloud](https://learn.microsoft.com/azure/cyclecloud/overview) not deployed. Otherwise, No | Yes, if [CycleCloud](https://learn.microsoft.com/azure/cyclecloud/overview) not deployed. Otherwise, No |
| [8&#160;Compute&#160;Workstation](#8-compute-workstation) | Deploys [Virtual Machines](https://learn.microsoft.com/azure/virtual-machines) for [Linux](https://learn.microsoft.com/azure/virtual-machines/linux/overview) and/or [Windows](https://learn.microsoft.com/azure/virtual-machines/windows/overview) remote artist workstations. | No | Yes |
| [9 GitOps](#9-gitops) | Enables [Terraform Plan](https://www.terraform.io/cli/commands/plan) and [Apply](https://www.terraform.io/cli/commands/apply) workflows via [GitHub Actions](https://docs.github.com/actions) triggered by [Pull Requests](https://docs.github.com/pull-requests). | No | No |
@ -135,7 +135,7 @@ $localDirectory = "$Env:AppData\terraform.d\plugins\registry.terraform.io\hashic
New-Item -ItemType Directory -Path $localDirectory -Force
</code></p>
<p><code>
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, $localDirectory + "\terraform-provider-avere_$latestVersion.exe")
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, (Join-Path -Path $localDirectory -ChildPath "terraform-provider-avere_$latestVersion.exe"))
</code></p>
### Deployment Steps
@ -322,4 +322,4 @@ deadlinecommand -SubmitCommandLineJob -name Moana-Island-v3 -executable pbrt3 -a
deadlinecommand -SubmitCommandLineJob -name Moana-Island-v4 -executable pbrt4 -arguments "--outfile W:\pbrt\moana\island-v4.png R:\pbrt\moana\island\pbrt-v4\island.pbrt"
</code></p>
If you have any questions or issues, please contact rick.shahid@microsoft.com
If you have any questions or issues, please contact rick.shahid@microsoft.com