Proxmox Deploy LXC Container

Octopus.Script exported 05/04/2023 by domrichardson belongs to 'Proxmox' category.

Creates a new Proxmox LXC container using the Proxmox API.

Requires a Proxmox API token to authenticate to the Proxmox Server/Cluster

Parameters

When steps based on the template are included in a project's deployment process, the parameters below can be set.

Proxmox Host

Proxmox.Host = 1.2.3.4

The hostname or IP address of the Proxmox cluster/host

Proxmox Port

Proxmox.Port = 8006

Port number for Proxmox Cluster/Host

Proxmox User Account

Proxmox.User = root@pam

The Proxmox user account associated with the api token.

Proxmox Node

Proxmox.Node

The Proxmox node in the cluster.

Proxmox Token ID

Proxmox.TokenID

This is token id that was used to create an API token in proxmox.

Proxmox API Token

Proxmox.Token

The API Token secret key

LXC VM ID

Proxmox.LXC.VMID = -1

The new VMID for the new LXC container default is -1 to find the next ID

LXC Hostname

Proxmox.LXC.Hostname

The new LXC hostname

LXC OS Template

Proxmox.LXC.OSTemplate

The template image or backup image for the LXC

LXC Root Password

Proxmox.LXC.Password

This will be the root password once the LXC container has been created

LXC Storage

Proxmox.LXC.Storage = local

Where the rootfs for this LXC will be stored.

LXC Networks

Proxmox.LXC.Network = name=eth0,bridge=vmbr0

The list of network connections this LXC has. Each network connection on a new line.

name=,bridge=,firewall=<0|1>,gw=,ip=

More Info: https://pve.proxmox.com/pve-docs/api-viewer/#/nodes/{node}/lxc

LXC CPU Cores

Proxmox.LXC.Cores = 1

The amount of CPU cores the LXC is assigned

LXC Memory

Proxmox.LXC.Memory = 2048

The amount of Memory the LXC is assigned.

LXC Rootfs Size

Proxmox.LXC.RootSize = 60

The size of the root volume for this LXC, Size is in GB

LXC Start Once Created

Proxmox.LXC.StartOnCreate = False

Should the LXC start once the LXC has been created

LXC Overwrite Container

Proxmox.LXC.Force = False

Overwrites an existing LXC with the same VMID

Script body

Steps based on this template will execute the following PowerShell script.
Show script
# Proxmox Connection Variables
$ProxmoxHost = $OctopusParameters["Proxmox.Host"];
$ProxmoxPort = [int]$OctopusParameters["Proxmox.Port"];
$ProxmoxUser = $OctopusParameters["Proxmox.User"];

$ProxmoxNode = $OctopusParameters["Proxmox.Node"];

$ProxmoxTokenID = $OctopusParameters["Proxmox.TokenID"];
$ProxmoxToken = $OctopusParameters["Proxmox.Token"];

# LXC Variables
$LXC_VMID = [int]$OctopusParameters["Proxmox.LXC.VMID"];
$LXC_Hostname = $OctopusParameters["Proxmox.LXC.Hostname"];
$LXC_OSTemplate = $OctopusParameters["Proxmox.LXC.OSTemplate"];
$LXC_Storage = $OctopusParameters["Proxmox.LXC.Storage"];
$LXC_CPU = [int]$OctopusParameters["Proxmox.LXC.Cores"];
$LXC_Memory = [int]$OctopusParameters["Proxmox.LXC.Memory"];
$LXC_RootSize = [int]$OctopusParameters["Proxmox.LXC.RootSize"];
$LXC_Networks = $OctopusParameters["Proxmox.LXC.Network"];
$LXC_Password = $OctopusParameters["Proxmox.LXC.Password"];

$BaseURL = "https://$($ProxmoxHost):$($ProxmoxPort)/api2/json"

$header = @{
	"Authorization" = "PVEAPIToken=$($ProxmoxUser)!$($ProxmoxTokenID)=$($ProxmoxToken)"
}


Write-Host "Testing Connection To Proxmox Server/Cluster ..."

try{
	Invoke-RestMethod -Method GET -uri "$($BaseURL)" -Headers $header | out-null
}catch{
	throw "Couldn't Connect to the Proxmox Server/Cluster"
}

Write-Host "Successfully Connected To Proxmox Server/Cluster"

$LXC_Start = 0
try {
  $Start = [System.Convert]::ToBoolean($OctopusParameters["Proxmox.LXC.StartOnCreate"])
  
  if($Start -eq $True){
  	$LXC_Start = 1
  }
  
} catch {}

$LXC_Force = 0
try {
  $Force = [System.Convert]::ToBoolean($OctopusParameters["Proxmox.LXC.Force"])
  
  if($Force -eq $True){
  	$LXC_Force = 1
  }
  
} catch {}

if($LXC_CPU -lt 1){
	$LXC_CPU=1;
}

if($LXC_Memory -lt 16){
	$LXC_Memory = 16;
}

if($LXC_RootSize -lt 1){
	$LXC_RootSize = 1;
}

if($LXC_Hostname -eq $null -or $LXC_Hostname -eq ""){
	throw "LXC Hostname must be provided!"
}

if($LXC_OSTemplate -eq $null -or $LXC_OSTemplate -eq ""){
	throw "LXC OS Template must be provided!"
}

if($LXC_Storage -eq $null -or $LXC_Storage -eq ""){
	throw "LXC Storage must be provided!"
}

if($LXC_Networks -eq $null){
	throw "You must provide at least one network property"
}

if($LXC_Password -eq $null -or $LXC_Password -eq ""){
	throw "LXC Password must be provided!"
}

if($LXC_VMID -eq "-1"){
	$LXC_VMID=(Invoke-RestMethod -Method GET -uri "$($BaseURL)/cluster/nextid" -headers $header).data
    Write-Host "Found next vm id: $($LXC_VMID)"
}

if($LXC_VMID -lt 1){
	throw "The LXC VMID was not valid ($LXC_VMID), Set this to -1 to automatically find the next id"
}

$LXCData = @{
	"vmid" = $LXC_VMID
    "hostname" = $LXC_Hostname
    "ostemplate" = $LXC_OSTemplate
    "rootfs" = "volume=$($LXC_Storage):$($LXC_RootSize)"
    "cores" = $LXC_CPU
    "memory" = $LXC_Memory
    "storage" = $LXC_Storage
    "password" = $LXC_Password
    "start" = $LXC_Start
    "force" = $LXC_Force
}

$NetworkIndex = 0;

$Networks = $LXC_Networks.replace("\n", "`n").split("`n")

if($Networks.Count -lt 1){
	throw "You must provide at least one network property"
}

foreach ($network in $Networks){
    $LXCData["net$($NetworkIndex)"] = $network;
    $NetworkIndex++;
}

$existingLXC = $null;

try{
    $existingLXC = Invoke-RestMethod -Method GET -uri "$($BaseURL)/nodes/$($ProxmoxNode)/lxc/$($LXCData.vmid)" -Headers $header
}catch{}

if($existingLXC -ne $null -and $LXCData.force -eq 0){
    throw "LXC with VMID: $($LXCData.vmid) already exists. Use Force parameter to overwrite this LXC."

}elseif($existingLXC -ne $null -and $LXCData.force -eq 1){

    Write-host "Deleting existing LXC with VMID: $($LXCData.vmid)"
    $LXCDestroyAsyncTask =Invoke-RestMethod -Method DELETE -uri "$($BaseURL)/nodes/$($ProxmoxNode)/lxc/$($LXCData.vmid)" -Headers $header

    $count = 1;
    $maxCount = 10;
    $TaskID = $LXCDestroyAsyncTask.Data;

    DO
    {
        Write-Host "Checking if LXC has finished Deleting.."
        $LXCDestroyAsyncTaskStatus = (Invoke-RestMethod -Method GET -uri "$($BaseURL)/nodes/$($ProxmoxNode)/tasks/$($TaskID)/status" -Headers $header).data
    
        if($LXCDestroyAsyncTaskStatus.status -eq "stopped"){
    	    if($LXCDestroyAsyncTaskStatus.exitstatus -ne "OK"){
        	    Write-Error "LXC destroy task finished with error: $($LXCDestroyAsyncTaskStatus.exitstatus)"
            }else{
        	    Write-Host "LXC destroy task has successfully completed!"
            }
        
            break;
        }
    
	    Write-Host "LXC destroy task has not finished yet, retrying in 5 seconds.."
        Write-Host "Task Status: $($LXCDestroyAsyncTaskStatus.status)"
        sleep 5
    
        If($count -gt $maxCount) {
          Write-Warning "Task Timed out!"
          break;
        }
        $count++

    } While ($count -le $maxCount)
}

Write-Host ""

Write-Host "New LXC Summary:"

$LXCData | Convertto-json -depth 10

$LXCCreateAsyncTask = (Invoke-RestMethod -Method POST -uri "$($BaseURL)/nodes/$($ProxmoxNode)/lxc" -Headers $header -Body $LXCData)


$count = 1;
$maxCount = 10;

Write-Host ""

DO
{
 
 $TaskID = $LXCCreateAsyncTask.Data;
    Write-Host "Checking if LXC has finished creating.."
    $LXCCreateAsyncTaskStatus = (Invoke-RestMethod -Method GET -uri "$($BaseURL)/nodes/$($ProxmoxNode)/tasks/$($TaskID)/status" -Headers $header).data
    
    if($LXCCreateAsyncTaskStatus.status -eq "stopped"){
    	if($LXCCreateAsyncTaskStatus.exitstatus -ne "OK"){
        	Write-Error "LXC create task finished with error: $($LXCCreateAsyncTaskStatus.exitstatus)"
        }else{
        	Write-Host "LXC create task has successfully completed!"
        }
        
        break;
    }
    
	Write-Host "LXC create task has not finished yet, retrying in 5 seconds.."
    Write-Host "Task Status: $($LXCCreateAsyncTaskStatus.status)"
    sleep 5
    
    If($count -gt $maxCount) {
      Write-Warning "Task Timed out!"
      break;
    }
    $count++

} While ($count -le $maxCount)

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

Show JSON
{
  "Id": "ab90cb93-96ae-4841-8058-1cc5ec6feebe",
  "Name": "Proxmox Deploy LXC Container",
  "Description": "Creates a new Proxmox LXC container using the Proxmox API.\n\nRequires a Proxmox [API token](https://pve.proxmox.com/wiki/Proxmox_VE_API#API_Tokens) to authenticate to the Proxmox Server/Cluster",
  "Version": 3,
  "ExportedAt": "2023-05-04T10:44:27.968Z",
  "ActionType": "Octopus.Script",
  "Author": "domrichardson",
  "Packages": [],
  "Parameters": [
    {
      "Id": "c75c69c5-bdfb-4cbf-8b5a-aeb6ef93c274",
      "Name": "Proxmox.Host",
      "Label": "Proxmox Host",
      "HelpText": "The hostname or IP address of the Proxmox cluster/host",
      "DefaultValue": "1.2.3.4",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "eddd73e2-cb63-4c1b-8100-05e8e9586180",
      "Name": "Proxmox.Port",
      "Label": "Proxmox Port",
      "HelpText": "Port number for Proxmox Cluster/Host",
      "DefaultValue": "8006",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "eae18957-8977-4f51-8e09-2402453fd531",
      "Name": "Proxmox.User",
      "Label": "Proxmox User Account",
      "HelpText": "The Proxmox user account associated with the api token.",
      "DefaultValue": "root@pam",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "b413ee30-ba94-4ff3-8b4e-148c1fbc52f6",
      "Name": "Proxmox.Node",
      "Label": "Proxmox Node",
      "HelpText": "The Proxmox node in the cluster.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "3f70fe63-2b55-44f5-af8e-27d8717ade20",
      "Name": "Proxmox.TokenID",
      "Label": "Proxmox Token ID",
      "HelpText": "This is token id that was used to create an API token in proxmox.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "741c3b80-af85-47c6-b49e-36aea9b2bc9a",
      "Name": "Proxmox.Token",
      "Label": "Proxmox API Token",
      "HelpText": "The API Token secret key",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Id": "003db066-99a7-4d4c-a794-7a6310c2c86b",
      "Name": "Proxmox.LXC.VMID",
      "Label": "LXC VM ID",
      "HelpText": "The new VMID for the new LXC container default is -1 to find the next ID",
      "DefaultValue": "-1",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "63ba1450-8c9e-4d06-bedf-00389a63ef3f",
      "Name": "Proxmox.LXC.Hostname",
      "Label": "LXC Hostname",
      "HelpText": "The new LXC hostname",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "0a13d075-3a2f-4718-9793-f9b2f5963455",
      "Name": "Proxmox.LXC.OSTemplate",
      "Label": "LXC OS Template",
      "HelpText": "The template image or backup image for the LXC",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "55f7937b-4a5f-49bb-b129-f589c3ce51cc",
      "Name": "Proxmox.LXC.Password",
      "Label": "LXC Root Password",
      "HelpText": "This will be the root password once the LXC container has been created",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Id": "671751a5-d213-445a-a73f-dd9f1f33d754",
      "Name": "Proxmox.LXC.Storage",
      "Label": "LXC Storage",
      "HelpText": "Where the rootfs for this LXC will be stored.",
      "DefaultValue": "local",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "e796b021-0c31-4e03-8825-23c19cbf8876",
      "Name": "Proxmox.LXC.Network",
      "Label": "LXC Networks",
      "HelpText": "The list of network connections this LXC has. Each network connection on a new line.\n\n\n`name=<name>,bridge=<bridge>,firewall=<0|1>,gw=<IPv4>,ip=<IPv4/CIDR|dhcp|manual>`\n\n\nMore Info: [https://pve.proxmox.com/pve-docs/api-viewer/#/nodes/{node}/lxc](https://pve.proxmox.com/pve-docs/api-viewer/#/nodes/{node}/lxc)",
      "DefaultValue": "name=eth0,bridge=vmbr0",
      "DisplaySettings": {
        "Octopus.ControlType": "MultiLineText"
      }
    },
    {
      "Id": "c9e865ea-a7b2-42d3-aca6-8772e54b893a",
      "Name": "Proxmox.LXC.Cores",
      "Label": "LXC CPU Cores",
      "HelpText": "The amount of CPU cores the LXC is assigned",
      "DefaultValue": "1",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "74b64687-8aed-433d-bce3-714bfd738927",
      "Name": "Proxmox.LXC.Memory",
      "Label": "LXC Memory",
      "HelpText": "The amount of Memory the LXC is assigned.",
      "DefaultValue": "2048",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "85c52eb6-a25f-4f8e-a068-2a165160d94d",
      "Name": "Proxmox.LXC.RootSize",
      "Label": "LXC Rootfs Size",
      "HelpText": "The size of the root volume for this LXC, Size is in GB",
      "DefaultValue": "60",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "fd072ced-1c8b-4205-a724-e9456b5152c6",
      "Name": "Proxmox.LXC.StartOnCreate",
      "Label": "LXC Start Once Created",
      "HelpText": "Should the LXC start once the LXC has been created",
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "dfea6eea-47ff-4489-9434-8ff80bbb8694",
      "Name": "Proxmox.LXC.Force",
      "Label": "LXC Overwrite Container",
      "HelpText": "Overwrites an existing LXC with the same VMID",
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptBody": "# Proxmox Connection Variables\n$ProxmoxHost = $OctopusParameters[\"Proxmox.Host\"];\n$ProxmoxPort = [int]$OctopusParameters[\"Proxmox.Port\"];\n$ProxmoxUser = $OctopusParameters[\"Proxmox.User\"];\n\n$ProxmoxNode = $OctopusParameters[\"Proxmox.Node\"];\n\n$ProxmoxTokenID = $OctopusParameters[\"Proxmox.TokenID\"];\n$ProxmoxToken = $OctopusParameters[\"Proxmox.Token\"];\n\n# LXC Variables\n$LXC_VMID = [int]$OctopusParameters[\"Proxmox.LXC.VMID\"];\n$LXC_Hostname = $OctopusParameters[\"Proxmox.LXC.Hostname\"];\n$LXC_OSTemplate = $OctopusParameters[\"Proxmox.LXC.OSTemplate\"];\n$LXC_Storage = $OctopusParameters[\"Proxmox.LXC.Storage\"];\n$LXC_CPU = [int]$OctopusParameters[\"Proxmox.LXC.Cores\"];\n$LXC_Memory = [int]$OctopusParameters[\"Proxmox.LXC.Memory\"];\n$LXC_RootSize = [int]$OctopusParameters[\"Proxmox.LXC.RootSize\"];\n$LXC_Networks = $OctopusParameters[\"Proxmox.LXC.Network\"];\n$LXC_Password = $OctopusParameters[\"Proxmox.LXC.Password\"];\n\n$BaseURL = \"https://$($ProxmoxHost):$($ProxmoxPort)/api2/json\"\n\n$header = @{\n\t\"Authorization\" = \"PVEAPIToken=$($ProxmoxUser)!$($ProxmoxTokenID)=$($ProxmoxToken)\"\n}\n\n\nWrite-Host \"Testing Connection To Proxmox Server/Cluster ...\"\n\ntry{\n\tInvoke-RestMethod -Method GET -uri \"$($BaseURL)\" -Headers $header | out-null\n}catch{\n\tthrow \"Couldn't Connect to the Proxmox Server/Cluster\"\n}\n\nWrite-Host \"Successfully Connected To Proxmox Server/Cluster\"\n\n$LXC_Start = 0\ntry {\n  $Start = [System.Convert]::ToBoolean($OctopusParameters[\"Proxmox.LXC.StartOnCreate\"])\n  \n  if($Start -eq $True){\n  \t$LXC_Start = 1\n  }\n  \n} catch {}\n\n$LXC_Force = 0\ntry {\n  $Force = [System.Convert]::ToBoolean($OctopusParameters[\"Proxmox.LXC.Force\"])\n  \n  if($Force -eq $True){\n  \t$LXC_Force = 1\n  }\n  \n} catch {}\n\nif($LXC_CPU -lt 1){\n\t$LXC_CPU=1;\n}\n\nif($LXC_Memory -lt 16){\n\t$LXC_Memory = 16;\n}\n\nif($LXC_RootSize -lt 1){\n\t$LXC_RootSize = 1;\n}\n\nif($LXC_Hostname -eq $null -or $LXC_Hostname -eq \"\"){\n\tthrow \"LXC Hostname must be provided!\"\n}\n\nif($LXC_OSTemplate -eq $null -or $LXC_OSTemplate -eq \"\"){\n\tthrow \"LXC OS Template must be provided!\"\n}\n\nif($LXC_Storage -eq $null -or $LXC_Storage -eq \"\"){\n\tthrow \"LXC Storage must be provided!\"\n}\n\nif($LXC_Networks -eq $null){\n\tthrow \"You must provide at least one network property\"\n}\n\nif($LXC_Password -eq $null -or $LXC_Password -eq \"\"){\n\tthrow \"LXC Password must be provided!\"\n}\n\nif($LXC_VMID -eq \"-1\"){\n\t$LXC_VMID=(Invoke-RestMethod -Method GET -uri \"$($BaseURL)/cluster/nextid\" -headers $header).data\n    Write-Host \"Found next vm id: $($LXC_VMID)\"\n}\n\nif($LXC_VMID -lt 1){\n\tthrow \"The LXC VMID was not valid ($LXC_VMID), Set this to -1 to automatically find the next id\"\n}\n\n$LXCData = @{\n\t\"vmid\" = $LXC_VMID\n    \"hostname\" = $LXC_Hostname\n    \"ostemplate\" = $LXC_OSTemplate\n    \"rootfs\" = \"volume=$($LXC_Storage):$($LXC_RootSize)\"\n    \"cores\" = $LXC_CPU\n    \"memory\" = $LXC_Memory\n    \"storage\" = $LXC_Storage\n    \"password\" = $LXC_Password\n    \"start\" = $LXC_Start\n    \"force\" = $LXC_Force\n}\n\n$NetworkIndex = 0;\n\n$Networks = $LXC_Networks.replace(\"\\n\", \"`n\").split(\"`n\")\n\nif($Networks.Count -lt 1){\n\tthrow \"You must provide at least one network property\"\n}\n\nforeach ($network in $Networks){\n    $LXCData[\"net$($NetworkIndex)\"] = $network;\n    $NetworkIndex++;\n}\n\n$existingLXC = $null;\n\ntry{\n    $existingLXC = Invoke-RestMethod -Method GET -uri \"$($BaseURL)/nodes/$($ProxmoxNode)/lxc/$($LXCData.vmid)\" -Headers $header\n}catch{}\n\nif($existingLXC -ne $null -and $LXCData.force -eq 0){\n    throw \"LXC with VMID: $($LXCData.vmid) already exists. Use Force parameter to overwrite this LXC.\"\n\n}elseif($existingLXC -ne $null -and $LXCData.force -eq 1){\n\n    Write-host \"Deleting existing LXC with VMID: $($LXCData.vmid)\"\n    $LXCDestroyAsyncTask =Invoke-RestMethod -Method DELETE -uri \"$($BaseURL)/nodes/$($ProxmoxNode)/lxc/$($LXCData.vmid)\" -Headers $header\n\n    $count = 1;\n    $maxCount = 10;\n    $TaskID = $LXCDestroyAsyncTask.Data;\n\n    DO\n    {\n        Write-Host \"Checking if LXC has finished Deleting..\"\n        $LXCDestroyAsyncTaskStatus = (Invoke-RestMethod -Method GET -uri \"$($BaseURL)/nodes/$($ProxmoxNode)/tasks/$($TaskID)/status\" -Headers $header).data\n    \n        if($LXCDestroyAsyncTaskStatus.status -eq \"stopped\"){\n    \t    if($LXCDestroyAsyncTaskStatus.exitstatus -ne \"OK\"){\n        \t    Write-Error \"LXC destroy task finished with error: $($LXCDestroyAsyncTaskStatus.exitstatus)\"\n            }else{\n        \t    Write-Host \"LXC destroy task has successfully completed!\"\n            }\n        \n            break;\n        }\n    \n\t    Write-Host \"LXC destroy task has not finished yet, retrying in 5 seconds..\"\n        Write-Host \"Task Status: $($LXCDestroyAsyncTaskStatus.status)\"\n        sleep 5\n    \n        If($count -gt $maxCount) {\n          Write-Warning \"Task Timed out!\"\n          break;\n        }\n        $count++\n\n    } While ($count -le $maxCount)\n}\n\nWrite-Host \"\"\n\nWrite-Host \"New LXC Summary:\"\n\n$LXCData | Convertto-json -depth 10\n\n$LXCCreateAsyncTask = (Invoke-RestMethod -Method POST -uri \"$($BaseURL)/nodes/$($ProxmoxNode)/lxc\" -Headers $header -Body $LXCData)\n\n\n$count = 1;\n$maxCount = 10;\n\nWrite-Host \"\"\n\nDO\n{\n \n $TaskID = $LXCCreateAsyncTask.Data;\n    Write-Host \"Checking if LXC has finished creating..\"\n    $LXCCreateAsyncTaskStatus = (Invoke-RestMethod -Method GET -uri \"$($BaseURL)/nodes/$($ProxmoxNode)/tasks/$($TaskID)/status\" -Headers $header).data\n    \n    if($LXCCreateAsyncTaskStatus.status -eq \"stopped\"){\n    \tif($LXCCreateAsyncTaskStatus.exitstatus -ne \"OK\"){\n        \tWrite-Error \"LXC create task finished with error: $($LXCCreateAsyncTaskStatus.exitstatus)\"\n        }else{\n        \tWrite-Host \"LXC create task has successfully completed!\"\n        }\n        \n        break;\n    }\n    \n\tWrite-Host \"LXC create task has not finished yet, retrying in 5 seconds..\"\n    Write-Host \"Task Status: $($LXCCreateAsyncTaskStatus.status)\"\n    sleep 5\n    \n    If($count -gt $maxCount) {\n      Write-Warning \"Task Timed out!\"\n      break;\n    }\n    $count++\n\n} While ($count -le $maxCount)\n"
  },
  "Category": "Proxmox",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates/proxmox-deploy-lxc.json",
  "Website": "/step-templates/ab90cb93-96ae-4841-8058-1cc5ec6feebe",
  "Logo": "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CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmM2NTNiYTk5LWUwYTctNGVmMC1hNjc2LTg2NDRmMzYwOWEyNiIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4Yzc4MDlmOC02ZGQxLTQ3YTAtYjY3OS0yZWIyMGY5ZTBkMDMiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3ZWFiZDZkNC04MWFjLTQ5NzgtYmU0ZC0yODljNTVmNjY4NTEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJXaW5kb3dzIgogICBHSU1QOlRpbWVTdGFtcD0iMTY3ODgzNTI4ODI3NDc3OSIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmM1MGQ1MGY0LTIxMmYtNDhkYS1iODBiLTYxZWJkM2ZkODk3YyIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMy0wMy0xNFQyMzowODowOCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6CzfBpAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH5wMOFwgIv4E7tgAAIABJREFUeNrtnXl8XWWZx7/ZmrTpXtoCty1LoYLsFKFsLiMMLuMIIzPq4MKIio6CraVsAtViWVppIsugw4CIOKyDirIoouwUoUgByyLSBQOltGm6JE2zzh/P7zQnh5ubm+Q9TXL7/D6f+4EmN+e85z3v733W93nA4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HA6Hw+FwOBwOh8PhcDgcDofD4XA4HI5+QJFPwbvmowIYCxwCHAccBuwBjANKgDrg78DzwB+BR4A1QAPQNkCeoxgYBowHjgE+BBwETAFGaZzrgOXAEuAB4M9ALdAItPtScCRRDkwFvgU8rQXfBLRoQbXr0wa06ndbgNeAS4H9tSj7G8OA/YDvA69qjE0a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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History »