Proxmox Deploy LXC Container

Octopus.Script exported 2023-05-04 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=<name>,bridge=<bridge>,firewall=<0|1>,gw=<IPv4>,ip=<IPv4/CIDR|dhcp|manual>

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.

# 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)

Provided under the Apache License version 2.0.

Report an issue

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

{
  "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//opt/buildagent/work/75443764cd38076d/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

Page updated on Thursday, May 4, 2023