Conclusa prima implementazione container su PVE.

This commit is contained in:
Emiliano Vavassori 2023-12-31 20:54:30 +01:00
parent fbf68c67b9
commit 2ed3e17ecd
7 changed files with 69 additions and 77 deletions

View File

@ -3,4 +3,4 @@ name: ${PROJECT}
description: ${DESCRIPTION} description: ${DESCRIPTION}
runtime: python runtime: python
template: template:
description: A ProxmoxVE VM template with Python description: Template for an LXC container over ProxmoxVE

61
pct/__main__.py Normal file
View File

@ -0,0 +1,61 @@
"""A ProxmoxVE Container template with Python"""
import yaml
from dotmap import DotMap
import pulumi
import pulumi_proxmoxve as proxmox
conf=DotMap(yaml.safe_load(open("input.yaml").read()))
config = pulumi.Config()
provider=proxmox.Provider("proxmoxve",
endpoint=conf.pve.url,
insecure=conf.pve.insecure,
username=conf.pve.username,
password=config.require_secret("password")
)
ct=proxmox.ct.Container(conf.ct.name,
console=proxmox.ct.ContainerConsoleArgs(enabled=True),
cpu=proxmox.ct.ContainerCpuArgs(cores=conf.ct.cores),
disk=proxmox.ct.ContainerDiskArgs(
datastore_id=conf.ct.storage,
size=conf.ct.disksize
),
initialization=proxmox.ct.ContainerInitializationArgs(
hostname=conf.ct.name,
ip_configs=[
proxmox.ct.ContainerInitializationIpConfigArgs(
ipv4=proxmox.ct.ContainerInitializationIpConfigIpv4Args(
address="dhcp"
)
)
],
user_account=proxmox.ct.ContainerInitializationUserAccountArgs(
password=conf.ct.password,
keys=conf.ct.sshkeys
),
),
memory=proxmox.ct.ContainerMemoryArgs(
dedicated=conf.ct.ram,
swap=conf.ct.ram
),
network_interfaces=[
proxmox.ct.ContainerNetworkInterfaceArgs(
name="eth0",
bridge="vmbr0",
enabled=True
)
],
node_name=conf.pve.nodename,
operating_system=proxmox.ct.ContainerOperatingSystemArgs(
template_file_id=f"local:vztmpl/{conf.ct.template}",
type=conf.ct.template_type
),
started=True,
opts=pulumi.ResourceOptions(
provider=provider
)
)
pulumi.export("id", pulumi.Output.all(ct.id).apply(lambda x: x[0]))

View File

@ -4,16 +4,17 @@ pve:
insecure: true insecure: true
username: root@pam username: root@pam
nodename: pve nodename: pve
storage: local
# Basic VM configuration # Basic VM configuration
ct: ct:
name: virtual-machine name: container
clone: 802 storage: local-lvm
sockets: 1 template: debian-12-standard_12.2-1_amd64.tar.zst
template_type: debian
cores: 1 cores: 1
ram: 2048 ram: 512
disksize: 20 swap: 512
disksize: 8
password: cicciopasticcio password: cicciopasticcio
sshkeys: sshkeys:
- "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFioHkaV1NhX6NCqsJakJw8EVBOcDHm1MEbpY499CPtG syntaxerrormmm@fisso" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFioHkaV1NhX6NCqsJakJw8EVBOcDHm1MEbpY499CPtG syntaxerrormmm@fisso"

View File

@ -1,70 +0,0 @@
"""A ProxmoxVE VM template with Python"""
import yaml
from dotmap import DotMap
import pulumi
import pulumi_proxmoxve as proxmox
conf = DotMap(yaml.safe_load(open("input.yaml").read()))
config = pulumi.Config()
provider = proxmox.Provider("proxmoxve",
virtual_environment = {
"endpoint": conf.pve.url,
"insecure": conf.pve.insecure,
"username": conf.pve.username,
"password": config.require_secret("password")
}
)
ct = proxmox.ct.Container(conf.ct.name,
clone = proxmox.ct.ContainerCloneArgs(
vm_id = conf.ct.clone,
full = True
),
console = proxmox.ct.ConsoleArgs(
type = "serial",
tty_count = 1,
enabled = True
),
cpu = proxmox.ct.ContainerCpuArgs(cores = conf.ct.cores),
disk = proxmox.ct.ContainerDiskArgs(datastore_id = conf.pve.storage),
initialization = proxmox.ct.ContainerInitializationArgs(
hostname = conf.ct.name,
ip_configs = [
proxmox.ct.ContainerInitializationIpConfigArgs(
ipv4 = proxmox.ct.ContainerInitializationIpConfigIpv4Args(
address = "dhcp"
)
)
],
user_account = proxmox.ct.ContainerInitializationUserAccountArgs(
password = conf.ct.password,
keys = conf.ct.sshkeys
),
),
memory = proxmox.ct.ContainerMemoryArgs(
dedicated = conf.ct.ram,
swap = conf.ct.ram
),
network_interfaces = [
proxmox.ct.ContainerNetworkInterfaceArgs("mynic",
bridge = "vmbr0",
enabled = True
)
],
node_name = conf.pve.nodename,
operating_system = proxmox.ct.ContainerOperatingSystemArgs(
template_file_id = "debian-11-standard_11.3-1_amd64.tar.zst"
),
started = True,
opts = pulumi.ResourceOptions(
provider = provider
)
)
# Getting local IP
# First item of the ipv4_addresses is of the loopback interface (so the usual 127.0.0.1). Let's get the second and grab only the text.
lanip = ct.initialization["ip_configs"]["ipv4"]["address"][0]
pulumi.export("ip", lanip)