init and lxc config json loading
This commit is contained in:
parent
4dba728748
commit
e6a27d0bef
@ -1,12 +1,29 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="ef90a940-975e-45ac-b0cb-e18c5b09ff29" name="Changes" comment="" />
|
<list default="true" id="ef90a940-975e-45ac-b0cb-e18c5b09ff29" name="Changes" comment="base">
|
||||||
|
<change afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/requirements.txt" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/run.py" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/get_path_file.py" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/main.py" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/utils/__init__.py" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/utils/lxc_utils.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" />
|
||||||
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
</component>
|
</component>
|
||||||
|
<component name="FileTemplateManagerImpl">
|
||||||
|
<option name="RECENT_TEMPLATES">
|
||||||
|
<list>
|
||||||
|
<option value="Python Script" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
<component name="Git.Settings">
|
<component name="Git.Settings">
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
@ -14,7 +31,9 @@
|
|||||||
<option name="stateVersion" value="1" />
|
<option name="stateVersion" value="1" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectId" id="2QxREeVLT4IlTxqXEpzPYhB1R0E" />
|
<component name="ProjectId" id="2QxREeVLT4IlTxqXEpzPYhB1R0E" />
|
||||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
|
||||||
|
<ConfirmationsSetting value="2" id="Add" />
|
||||||
|
</component>
|
||||||
<component name="ProjectViewState">
|
<component name="ProjectViewState">
|
||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
<option name="showLibraryContents" value="true" />
|
<option name="showLibraryContents" value="true" />
|
||||||
@ -27,7 +46,12 @@
|
|||||||
"settings.editor.selected.configurable": "preferences.pluginManager"
|
"settings.editor.selected.configurable": "preferences.pluginManager"
|
||||||
}
|
}
|
||||||
}</component>
|
}</component>
|
||||||
<component name="RunManager">
|
<component name="RecentsManager">
|
||||||
|
<key name="MoveFile.RECENT_KEYS">
|
||||||
|
<recent name="C:\Users\lmbbrm3\PycharmProjects\ProxmoxDeploy\resources\lxc" />
|
||||||
|
</key>
|
||||||
|
</component>
|
||||||
|
<component name="RunManager" selected="Python.run">
|
||||||
<configuration name="main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
|
<configuration name="main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
|
||||||
<module name="ProxmoxDeploy" />
|
<module name="ProxmoxDeploy" />
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
@ -50,6 +74,33 @@
|
|||||||
<option name="INPUT_FILE" value="" />
|
<option name="INPUT_FILE" value="" />
|
||||||
<method v="2" />
|
<method v="2" />
|
||||||
</configuration>
|
</configuration>
|
||||||
|
<configuration name="run" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
||||||
|
<module name="ProxmoxDeploy" />
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs>
|
||||||
|
<env name="PYTHONUNBUFFERED" value="1" />
|
||||||
|
</envs>
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||||
|
<option name="IS_MODULE_SDK" value="true" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||||
|
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/run.py" />
|
||||||
|
<option name="PARAMETERS" value="" />
|
||||||
|
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||||
|
<option name="EMULATE_TERMINAL" value="false" />
|
||||||
|
<option name="MODULE_MODE" value="false" />
|
||||||
|
<option name="REDIRECT_INPUT" value="false" />
|
||||||
|
<option name="INPUT_FILE" value="" />
|
||||||
|
<method v="2" />
|
||||||
|
</configuration>
|
||||||
|
<recent_temporary>
|
||||||
|
<list>
|
||||||
|
<item itemvalue="Python.run" />
|
||||||
|
</list>
|
||||||
|
</recent_temporary>
|
||||||
</component>
|
</component>
|
||||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
<component name="TaskManager">
|
<component name="TaskManager">
|
||||||
@ -60,8 +111,16 @@
|
|||||||
<option name="presentableId" value="Default" />
|
<option name="presentableId" value="Default" />
|
||||||
<updated>1686293135999</updated>
|
<updated>1686293135999</updated>
|
||||||
<workItem from="1686293144782" duration="176000" />
|
<workItem from="1686293144782" duration="176000" />
|
||||||
<workItem from="1686293341823" duration="151000" />
|
<workItem from="1686293341823" duration="6751000" />
|
||||||
</task>
|
</task>
|
||||||
|
<task id="LOCAL-00001" summary="base">
|
||||||
|
<created>1686293500295</created>
|
||||||
|
<option name="number" value="00001" />
|
||||||
|
<option name="presentableId" value="LOCAL-00001" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1686293500295</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="2" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="TypeScriptGeneratedFilesManager">
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
@ -78,15 +137,12 @@
|
|||||||
</map>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="XDebuggerManager">
|
<component name="VcsManagerConfiguration">
|
||||||
<breakpoint-manager>
|
<MESSAGE value="base" />
|
||||||
<breakpoints>
|
<option name="LAST_COMMIT_MESSAGE" value="base" />
|
||||||
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
</component>
|
||||||
<url>file://$PROJECT_DIR$/main.py</url>
|
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
||||||
<line>8</line>
|
<SUITE FILE_PATH="coverage/ProxmoxDeploy$main.coverage" NAME="main Coverage Results" MODIFIED="1686295586466" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
||||||
<option name="timeStamp" value="1" />
|
<SUITE FILE_PATH="coverage/ProxmoxDeploy$run.coverage" NAME="run Coverage Results" MODIFIED="1686304048372" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
||||||
</line-breakpoint>
|
|
||||||
</breakpoints>
|
|
||||||
</breakpoint-manager>
|
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
16
main.py
16
main.py
@ -1,16 +0,0 @@
|
|||||||
# This is a sample Python script.
|
|
||||||
|
|
||||||
# Press Shift+F10 to execute it or replace it with your code.
|
|
||||||
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
|
|
||||||
|
|
||||||
|
|
||||||
def print_hi(name):
|
|
||||||
# Use a breakpoint in the code line below to debug your script.
|
|
||||||
print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.
|
|
||||||
|
|
||||||
|
|
||||||
# Press the green button in the gutter to run the script.
|
|
||||||
if __name__ == '__main__':
|
|
||||||
print_hi('PyCharm')
|
|
||||||
|
|
||||||
# See PyCharm help at https://www.jetbrains.com/help/pycharm/
|
|
0
requirements.txt
Normal file
0
requirements.txt
Normal file
26
resources/lxc/0000/config.json
Normal file
26
resources/lxc/0000/config.json
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"lxc_id": "0000",
|
||||||
|
"lxc_hostname": "test",
|
||||||
|
"os": "alpine",
|
||||||
|
"release": "3.17",
|
||||||
|
"resources": {
|
||||||
|
"cpu": "1",
|
||||||
|
"memory": "512",
|
||||||
|
"disk": "10",
|
||||||
|
"storage": "local-lvm"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"bridge": "vmbr0",
|
||||||
|
"ipv4": "dhcp",
|
||||||
|
"ipv6": "",
|
||||||
|
"mac": "00:00:00:00:00:00",
|
||||||
|
"gateway": "",
|
||||||
|
"vlan": ""
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"privileged": "false",
|
||||||
|
"start_on_boot": "false",
|
||||||
|
"password": "qwertz1234",
|
||||||
|
"ssh": false
|
||||||
|
}
|
||||||
|
}
|
0
resources/qemu/id/0000/config.json
Normal file
0
resources/qemu/id/0000/config.json
Normal file
7
run.py
Normal file
7
run.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
|
from src import main
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
logging.getLogger().setLevel(logging.INFO)
|
||||||
|
main.run()
|
3
src/get_path_file.py
Normal file
3
src/get_path_file.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import pathlib
|
||||||
|
|
||||||
|
project_path = pathlib.Path(__file__).parent.parent.resolve()
|
29
src/main.py
Normal file
29
src/main.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
from src.get_path_file import project_path
|
||||||
|
from src.utils.lxc_utils import load_lxc, get_all_lxcs
|
||||||
|
|
||||||
|
|
||||||
|
def run():
|
||||||
|
# Read all files in the resources directory
|
||||||
|
resources = os.listdir(project_path / "resources")
|
||||||
|
logging.info(f"Resources found: {resources}")
|
||||||
|
|
||||||
|
# Go through each LXC file
|
||||||
|
for resource in resources:
|
||||||
|
if resource == "lxc":
|
||||||
|
logging.info("LXC folder found")
|
||||||
|
|
||||||
|
# Read all files in the LXC directory
|
||||||
|
lxc_folders = os.listdir(project_path / "resources" / "lxc")
|
||||||
|
for lxc_folder in lxc_folders:
|
||||||
|
lxc_file = os.path.join(project_path / "resources" / "lxc", lxc_folder, "config.json")
|
||||||
|
logging.info(f"Reading LXC ID {lxc_file}")
|
||||||
|
|
||||||
|
# Open the file
|
||||||
|
with open(lxc_file, "r") as file:
|
||||||
|
# Load the LXC
|
||||||
|
load_lxc(file.read())
|
||||||
|
|
||||||
|
print(get_all_lxcs())
|
0
src/utils/__init__.py
Normal file
0
src/utils/__init__.py
Normal file
179
src/utils/lxc_utils.py
Normal file
179
src/utils/lxc_utils.py
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
|
lxcs = []
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_lxcs():
|
||||||
|
"""
|
||||||
|
Get all LXCs
|
||||||
|
:return: list of all lxcs
|
||||||
|
"""
|
||||||
|
return lxcs
|
||||||
|
|
||||||
|
|
||||||
|
def get_lxc(id):
|
||||||
|
"""
|
||||||
|
Get LXC by ID
|
||||||
|
:param id: lxc id
|
||||||
|
:return: lxc object
|
||||||
|
"""
|
||||||
|
for lxc in lxcs:
|
||||||
|
if lxc.get_lxc_id() == id:
|
||||||
|
return lxc
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def load_lxc(file):
|
||||||
|
"""
|
||||||
|
Load LXC from JSON file
|
||||||
|
|
||||||
|
:param file: json config file
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
# Load JSON data
|
||||||
|
data = json.loads(file)
|
||||||
|
|
||||||
|
# Extract values from JSON
|
||||||
|
lxc_id = data["lxc_id"]
|
||||||
|
lxc_hostname = data["lxc_hostname"]
|
||||||
|
disk_size = data["resources"]["disk"]
|
||||||
|
core_count = data["resources"]["cpu"]
|
||||||
|
ram_size = data["resources"]["memory"]
|
||||||
|
bridge = data["network"]["bridge"]
|
||||||
|
ipv4 = data["network"]["ipv4"]
|
||||||
|
gateway = data["network"]["gateway"]
|
||||||
|
disable_ipv6 = "yes" if data["network"]["ipv6"] == "" else "no"
|
||||||
|
mac = data["network"]["mac"]
|
||||||
|
vlan = data["network"]["vlan"]
|
||||||
|
ssh = "yes" if data["options"]["ssh"] else "no"
|
||||||
|
|
||||||
|
# Create LXC object
|
||||||
|
lxc = LXC(
|
||||||
|
lxc_id=lxc_id,
|
||||||
|
lxc_hostname=lxc_hostname,
|
||||||
|
disk_size=disk_size,
|
||||||
|
core_count=core_count,
|
||||||
|
ram_size=ram_size,
|
||||||
|
bridge=bridge,
|
||||||
|
ipv4=ipv4,
|
||||||
|
gateway=gateway,
|
||||||
|
disable_ipv6=disable_ipv6,
|
||||||
|
mac=mac,
|
||||||
|
vlan=vlan,
|
||||||
|
ssh=ssh
|
||||||
|
)
|
||||||
|
|
||||||
|
lxcs.append(lxc)
|
||||||
|
|
||||||
|
|
||||||
|
class LXC:
|
||||||
|
"""
|
||||||
|
LXC class
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, lxc_id, lxc_hostname, disk_size, core_count, ram_size, bridge, ipv4, gateway, disable_ipv6, mac,
|
||||||
|
vlan, ssh):
|
||||||
|
self.lxc_id = lxc_id
|
||||||
|
self.lxc_hostname = lxc_hostname
|
||||||
|
self.disk_size = disk_size
|
||||||
|
self.core_count = core_count
|
||||||
|
self.ram_size = ram_size
|
||||||
|
self.bridge = bridge
|
||||||
|
self.ipv4 = ipv4
|
||||||
|
self.gateway = gateway
|
||||||
|
self.disable_ipv6 = disable_ipv6
|
||||||
|
self.mac = mac
|
||||||
|
self.vlan = vlan
|
||||||
|
self.ssh = ssh
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"LXC {self.lxc_id} ({self.lxc_hostname})"
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"LXC {self.lxc_id} ({self.lxc_hostname})"
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
return self.lxc_id == other.lxc_id
|
||||||
|
|
||||||
|
def __hash__(self):
|
||||||
|
return hash(self.lxc_id)
|
||||||
|
|
||||||
|
def get_lxc_id(self):
|
||||||
|
return self.lxc_id
|
||||||
|
|
||||||
|
def get_lxc_hostname(self):
|
||||||
|
return self.lxc_hostname
|
||||||
|
|
||||||
|
def get_disk_size(self):
|
||||||
|
return self.disk_size
|
||||||
|
|
||||||
|
def get_core_count(self):
|
||||||
|
return self.core_count
|
||||||
|
|
||||||
|
def get_ram_size(self):
|
||||||
|
return self.ram_size
|
||||||
|
|
||||||
|
def get_bridge(self):
|
||||||
|
return self.bridge
|
||||||
|
|
||||||
|
def get_ipv4(self):
|
||||||
|
return self.ipv4
|
||||||
|
|
||||||
|
def get_gateway(self):
|
||||||
|
return self.gateway
|
||||||
|
|
||||||
|
def get_disable_ipv6(self):
|
||||||
|
return self.disable_ipv6
|
||||||
|
|
||||||
|
def get_mac(self):
|
||||||
|
return self.mac
|
||||||
|
|
||||||
|
def get_vlan(self):
|
||||||
|
return self.vlan
|
||||||
|
|
||||||
|
def get_ssh(self):
|
||||||
|
return self.ssh
|
||||||
|
|
||||||
|
def get_tteck_env_variables(self):
|
||||||
|
"""
|
||||||
|
Get TTECK environment variables to run scripts silently
|
||||||
|
:return: environment variables
|
||||||
|
"""
|
||||||
|
|
||||||
|
env_template = '''CT_TYPE="1"
|
||||||
|
PW=""
|
||||||
|
CT_ID={lxc_id}
|
||||||
|
HN={lxc_hostname}
|
||||||
|
DISK_SIZE="{disk_size}"
|
||||||
|
CORE_COUNT="{core_count}"
|
||||||
|
RAM_SIZE="{ram_size}"
|
||||||
|
BRG="{bridge}"
|
||||||
|
NET="{ipv4}"
|
||||||
|
GATE="{gateway}"
|
||||||
|
DISABLEIP6="{disable_ipv6}"
|
||||||
|
MTU=""
|
||||||
|
SD=""
|
||||||
|
NS=""
|
||||||
|
MAC="{mac}"
|
||||||
|
VLAN="{vlan}"
|
||||||
|
SSH="{ssh}"
|
||||||
|
VERB="no"'''
|
||||||
|
|
||||||
|
# Format the environment variables template
|
||||||
|
env_variables = env_template.format(
|
||||||
|
lxc_id=self.lxc_id,
|
||||||
|
lxc_hostname=self.lxc_hostname,
|
||||||
|
disk_size=self.disk_size,
|
||||||
|
core_count=self.core_count,
|
||||||
|
ram_size=self.ram_size,
|
||||||
|
bridge=self.bridge,
|
||||||
|
ipv4=self.ipv4,
|
||||||
|
gateway=self.gateway,
|
||||||
|
disable_ipv6=self.disable_ipv6,
|
||||||
|
mac=self.mac,
|
||||||
|
vlan=self.vlan,
|
||||||
|
ssh=self.ssh
|
||||||
|
)
|
||||||
|
|
||||||
|
return env_variables
|
Loading…
Reference in New Issue
Block a user