fixed running from repo remotely
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Mathieu Broillet 2023-06-15 16:55:40 +02:00
parent e654102176
commit 350fafbfe0
No known key found for this signature in database
GPG Key ID: 7D4F25BC50A0AA32
3 changed files with 41 additions and 31 deletions

View File

@ -1,7 +1,7 @@
import json
from pathlib import Path
from .lxc import LXC
from ..utils.proxmox import ProxmoxHost
lxcs = []
@ -10,23 +10,28 @@ def get_all_lxcs():
return lxcs
def load_lxc(lxc_id: int, filepath: Path):
def load_lxc(lxc_id: int, content: str or bytes, pve: ProxmoxHost):
"""Load LXC from JSON file
Parameters
----------
lxc_id : int
ID of the LXC to load
filepath : pathlib.Path
Path object to the JSON file of the LXC to load
content : str or bytes
Content of the JSON file
pve : ProxmoxHost
Proxmox host where the LXC is/will go on
Examples
--------
>>> load_lxc(100, Path("<full-path>/resources/lxc/100/config.json"))
>>> load_lxc(100, '{ <json-data> }')
"""
if isinstance(content, bytes):
content = content.decode("utf-8")
# Load JSON data
data = json.loads(filepath.read_text())
data = json.loads(content)
# Extract values from JSON
lxc_id = lxc_id
@ -39,7 +44,7 @@ def load_lxc(lxc_id: int, filepath: Path):
deploy = data["deploy"]
# Create LXC object
lxc = LXC(lxc_id, lxc_hostname, os, resources, network, options, creation, deploy)
lxc = LXC(lxc_id, lxc_hostname, os, resources, network, options, creation, deploy, pve)
lxcs.append(lxc)

View File

@ -1,7 +1,6 @@
import logging
from pathlib import PosixPath, PurePosixPath, Path
from pathlib import Path
from . import project_path
from .lxc.lxc_utils import load_lxc, get_all_lxcs
from .utils import git_utils
from .utils.proxmox import ProxmoxHost
@ -35,13 +34,13 @@ def run(args):
# Go through each LXC file
for resource in resources:
if resource.name == "lxc":
if resource == "lxc":
# Read all files in the LXC directory
lxc_folders = PosixPath(project_path).joinpath("resources", "lxc").glob("*")
lxc_folders = pve.list_dir(Path(args.path).joinpath(resource))
for lxc_folder in lxc_folders:
lxc_file = PosixPath(project_path).joinpath("resources", "lxc", lxc_folder, "config.json")
lxc_file_content = pve.read_file(Path(args.path).joinpath(resource, lxc_folder, "config.json"))
load_lxc(filepath=lxc_file, lxc_id=int(lxc_folder.name))
load_lxc(content=lxc_file_content, lxc_id=int(lxc_folder), pve=pve)
for lxc in get_all_lxcs():
logging.info(f"Loading LXC {lxc.lxc_id}")

View File

@ -37,7 +37,7 @@ class ProxmoxHost(LinuxMachine):
self.user = user
self.port = port
self.connection = None
self.repo_path = path
self.repo_path = path.as_posix()
def __str__(self):
return f"ProxmoxHost({self.host}, {self.user}, {self.port})"
@ -132,7 +132,7 @@ class ProxmoxHost(LinuxMachine):
def get_all_lxcs(self):
"""Get all the LXCs on the Proxmox host."""
pct_list_output = self.run_command("pct list")
pct_list_output = self.run_command("pct list", exception_on_exit=False)
pct_list_output = pct_list_output.split("\n")[1:]
ids = [line.split()[0] for line in pct_list_output]
@ -147,32 +147,23 @@ class ProxmoxHost(LinuxMachine):
def is_lxc_running(self, lxc_id):
"""Check if the given LXC is running on the Proxmox host."""
if not self.does_lxc_exist(lxc_id):
return False
pct_status_output = self.run_command(f"pct status {lxc_id}")
pct_status_output = self.run_command(f"pct status {lxc_id}", exception_on_exit=False)
return "running" in pct_status_output
def start_lxc(self, lxc_id):
"""Start the given LXC on the Proxmox host."""
if not self.does_lxc_exist(lxc_id):
raise Exception(f"LXC {lxc_id} does not exist")
if not self.is_lxc_running(lxc_id):
self.run_command(f"pct start {lxc_id}")
def stop_lxc(self, lxc_id):
"""Stop the given LXC on the Proxmox host."""
if not self.does_lxc_exist(lxc_id):
raise Exception(f"LXC {lxc_id} does not exist")
if self.is_lxc_running(lxc_id):
self.run_command(f"pct stop {lxc_id}")
def reboot_lxc(self, lxc_id):
"""Reboot the given LXC on the Proxmox host."""
if not self.does_lxc_exist(lxc_id):
raise Exception(f"LXC {lxc_id} does not exist")
self.run_command(f"pct reboot {lxc_id}")
@ -193,6 +184,7 @@ class ProxmoxHost(LinuxMachine):
def is_vm_running(self, vm_id):
"""Check if the given VM is running on the Proxmox host."""
if not self.does_vm_exist(vm_id):
return False
@ -201,24 +193,18 @@ class ProxmoxHost(LinuxMachine):
def start_vm(self, vm_id):
"""Start the given VM on the Proxmox host."""
if not self.does_vm_exist(vm_id):
raise Exception(f"VM {vm_id} does not exist")
if not self.is_vm_running(vm_id):
self.run_command(f"qm start {vm_id}")
def stop_vm(self, vm_id):
"""Stop the given VM on the Proxmox host."""
if not self.does_vm_exist(vm_id):
raise Exception(f"VM {vm_id} does not exist")
if self.is_vm_running(vm_id):
self.run_command(f"qm stop {vm_id}")
def reboot_vm(self, vm_id):
"""Reboot the given VM on the Proxmox host."""
if not self.does_vm_exist(vm_id):
raise Exception(f"VM {vm_id} does not exist")
self.run_command(f"qm reboot {vm_id}")
@ -246,3 +232,23 @@ class ProxmoxHost(LinuxMachine):
directory = str(directory.as_posix())
return fnmatch.filter(self.connection.sftp().listdir(path=directory), glob_filter)
def read_file(self, file: str or Path):
"""Read the given file.
Parameters
----------
file: str or Path
The file to read.
Returns
-------
file: file
The file object.
"""
if isinstance(file, Path):
file = str(file.as_posix())
with self.connection.sftp().open(file, 'r') as f:
return f.read()