Conclusa prima implementazione container su PVE.
This commit is contained in:
parent
fbf68c67b9
commit
2ed3e17ecd
@ -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
61
pct/__main__.py
Normal 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]))
|
@ -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"
|
@ -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)
|
|
Loading…
Reference in New Issue
Block a user