fix: restage stale proxmox iso
This commit is contained in:
parent
c736f367b0
commit
cda1fde1ae
|
|
@ -31,7 +31,7 @@ resource "null_resource" "stage_talos_image" {
|
|||
|
||||
provisioner "local-exec" {
|
||||
interpreter = ["python", "-c"]
|
||||
command = "import subprocess; subprocess.run(['python', r'${path.module}/scripts/stage_talos_image.py', '--api-url', '${var.proxmox_api_url}', '--api-token', '${var.proxmox_api_token}', '--node', '${self.triggers.proxmox_node}', '--storage', '${var.talos_image_storage}', '--image-url', '${local.talos_iso_download_url}', '--filename', '${self.triggers.filename}'], check=True)"
|
||||
command = "import subprocess; subprocess.run(['python', r'${path.module}/scripts/stage_talos_image.py', '--api-url', '${var.proxmox_api_url}', '--api-token', '${var.proxmox_api_token}', '--node', '${self.triggers.proxmox_node}', '--storage', '${var.talos_image_storage}', '--image-url', '${local.talos_iso_download_url}', '--filename', '${self.triggers.filename}', '--force'], check=True)"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,13 +21,18 @@ def api_request(base_url, token, method, path, data=None):
|
|||
return json.loads(response.read().decode())
|
||||
|
||||
|
||||
def ensure_image(base_url, token, node, storage, image_url, filename):
|
||||
def ensure_image(base_url, token, node, storage, image_url, filename, force=False):
|
||||
content_path = f"/api2/json/nodes/{node}/storage/{storage}/content"
|
||||
response = api_request(base_url, token, "GET", content_path)
|
||||
|
||||
for item in response.get("data", []):
|
||||
if item.get("volid", "").endswith(filename):
|
||||
return filename, False
|
||||
if not force:
|
||||
return filename, False
|
||||
volume_path = urllib.parse.quote(f"iso/{filename}", safe="")
|
||||
task = api_request(base_url, token, "DELETE", f"{content_path}/{volume_path}")
|
||||
wait_for_task(base_url, token, node, task.get("data"))
|
||||
break
|
||||
|
||||
download_path = f"/api2/json/nodes/{node}/storage/{storage}/download-url"
|
||||
task = api_request(base_url, token, "POST", download_path, {
|
||||
|
|
@ -82,10 +87,11 @@ def main():
|
|||
parser.add_argument("--storage", required=True)
|
||||
parser.add_argument("--image-url", required=True)
|
||||
parser.add_argument("--filename", required=True)
|
||||
parser.add_argument("--force", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
filename, downloaded = ensure_image(args.api_url, args.api_token, args.node, args.storage, args.image_url, args.filename)
|
||||
filename, downloaded = ensure_image(args.api_url, args.api_token, args.node, args.storage, args.image_url, args.filename, args.force)
|
||||
except urllib.error.HTTPError as exc:
|
||||
sys.stderr.write(exc.read().decode())
|
||||
raise
|
||||
|
|
|
|||
Loading…
Reference in a new issue