Init commit
This commit is contained in:
34
lab/cloud-config/default.yml
Normal file
34
lab/cloud-config/default.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
#cloud-config
|
||||
# Создать passwd hash: openssl passwd -6
|
||||
|
||||
timezone: Europe/Moscow
|
||||
|
||||
users:
|
||||
- name: ubuntu
|
||||
groups: [sudo]
|
||||
shell: /bin/bash
|
||||
lock_passwd: false
|
||||
passwd: "$6$M8xzsYT0lwWjlcdH$HJRhw0rBb2WowCbqg03/WvMUlte0j5SLs9tAVCxCukEqWAt7XG0ceWYc5GRUBmRxFRTbcEDrdCVTXu5jIxN2f0"
|
||||
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
|
||||
ssh_authorized_keys:
|
||||
- ${ssh_key}
|
||||
|
||||
package_update: true
|
||||
|
||||
packages:
|
||||
- qemu-guest-agent
|
||||
|
||||
runcmd:
|
||||
- systemctl enable --now qemu-guest-agent
|
||||
- hostnamectl set-hostname ${hostname}
|
||||
- systemctl disable --now packagekit
|
||||
- systemctl disable --now ModemManager
|
||||
- systemctl disable --now multipathd
|
||||
|
||||
write_files:
|
||||
- path: /etc/motd
|
||||
content: |
|
||||
Managed by OpenTofu
|
||||
|
||||
|
||||
final_message: "cloud-init finished"
|
||||
34
lab/cloud-config/vm.yml
Normal file
34
lab/cloud-config/vm.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
#cloud-config
|
||||
# vpn
|
||||
|
||||
timezone: Europe/Moscow
|
||||
|
||||
users:
|
||||
- name: iurii
|
||||
groups: [sudo]
|
||||
shell: /bin/bash
|
||||
lock_passwd: false
|
||||
passwd: "$6$Zc8nwvtw0Kns5.sD$FpQ4aBSeGogefqjM4we4U5QQd4YBtC98tuG3rR4j9ZmbtC1kyFf2sY/IodYW3wG.U81aEntlZrtOTOqw3ZcOc0"
|
||||
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
|
||||
ssh_authorized_keys:
|
||||
- ${ssh_key}
|
||||
|
||||
package_update: true
|
||||
|
||||
packages:
|
||||
- qemu-guest-agent
|
||||
|
||||
runcmd:
|
||||
- systemctl enable --now qemu-guest-agent
|
||||
- hostnamectl set-hostname ${hostname}
|
||||
- systemctl disable --now packagekit
|
||||
- systemctl disable --now ModemManager
|
||||
- systemctl disable --now multipathd
|
||||
|
||||
write_files:
|
||||
- path: /etc/motd
|
||||
content: |
|
||||
Managed by OpenTofu
|
||||
|
||||
|
||||
final_message: "cloud-init finished"
|
||||
31
lab/locals.tf
Normal file
31
lab/locals.tf
Normal file
@@ -0,0 +1,31 @@
|
||||
# nodes — описание виртуальных машин
|
||||
#
|
||||
# vlan_id:
|
||||
# - опциональный параметр
|
||||
# - если НЕ указан → VM будет в обычной сети (untagged, vmbr0)
|
||||
# - если указан → VM попадет в соответствующий VLAN (например 20 → 192.168.20.0/24)
|
||||
# cloudinit:
|
||||
# - опциональный параметр
|
||||
# - указывает имя cloud-init файла для конкретной VM
|
||||
# - файл должен находиться в root: cloud-config/<имя>.yml
|
||||
# - если НЕ указан → используется "default.yml"
|
||||
# - если файл НЕ найден в root → используется fallback из модуля (modules/node/cloud-config/default.yml)
|
||||
#
|
||||
# пример:
|
||||
# - cloudinit = "worker.yml" → будет использован cloud-config/worker.yml
|
||||
# - cloudinit не задан → будет использован default.yml
|
||||
|
||||
locals {
|
||||
nodes = {
|
||||
vm1 = {
|
||||
cloudinit = "vm.yml"
|
||||
index = 1
|
||||
cpu = 1
|
||||
memory = 1024
|
||||
disk = var.worker_disk
|
||||
datastore = var.worker_datastore
|
||||
ip_offset = 0
|
||||
vlan_id = 20
|
||||
}
|
||||
}
|
||||
}
|
||||
27
lab/main.tf
Normal file
27
lab/main.tf
Normal file
@@ -0,0 +1,27 @@
|
||||
data "local_file" "ssh_key" {
|
||||
filename = pathexpand("~/.ssh/id_rsa.pub")
|
||||
}
|
||||
|
||||
module "cluster" {
|
||||
source = "../modules/node"
|
||||
|
||||
nodes = local.nodes
|
||||
ssh_key = trimspace(data.local_file.ssh_key.content)
|
||||
|
||||
cluster_ip_start = var.cluster_ip_start
|
||||
worker_vmid_start = var.worker_vmid_start
|
||||
|
||||
cloudinit_datastore = var.cloudinit_datastore
|
||||
proxmox_node = var.proxmox_node
|
||||
|
||||
node_bridge = var.node_bridge
|
||||
image_datastore = var.image_datastore
|
||||
image_file = var.image_file
|
||||
disk_interface = var.disk_interface
|
||||
|
||||
network_base = var.network_base
|
||||
network_cidr = var.network_cidr
|
||||
cluster_gateway = var.cluster_gateway
|
||||
|
||||
data_datastore = var.data_datastore
|
||||
}
|
||||
13
lab/outputs.tf
Normal file
13
lab/outputs.tf
Normal file
@@ -0,0 +1,13 @@
|
||||
output "nodes_ipv4" {
|
||||
value = module.cluster.ip_addresses
|
||||
}
|
||||
|
||||
output "nodes_hostnames" {
|
||||
value = module.cluster.hostnames
|
||||
}
|
||||
|
||||
output "nodes_vmid" {
|
||||
value = module.cluster.vmids
|
||||
}
|
||||
|
||||
|
||||
20
lab/providers.tf
Normal file
20
lab/providers.tf
Normal file
@@ -0,0 +1,20 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
proxmox = {
|
||||
source = "registry.opentofu.org/bpg/proxmox"
|
||||
version = "= 0.101.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
provider "proxmox" {
|
||||
endpoint = var.proxmox_endpoint
|
||||
api_token = "${var.proxmox_token_id}=${var.proxmox_token_secret}"
|
||||
insecure = true
|
||||
|
||||
ssh {
|
||||
username = "root"
|
||||
agent = true
|
||||
private_key = file(pathexpand("~/.ssh/id_rsa"))
|
||||
}
|
||||
}
|
||||
86
lab/variables.tf
Normal file
86
lab/variables.tf
Normal file
@@ -0,0 +1,86 @@
|
||||
variable "proxmox_endpoint" {}
|
||||
variable "proxmox_token_id" {}
|
||||
variable "proxmox_token_secret" {}
|
||||
|
||||
variable "proxmox_node" {
|
||||
type = string
|
||||
default = "ve"
|
||||
}
|
||||
|
||||
variable "cloudinit_datastore" {
|
||||
type = string
|
||||
default = "local"
|
||||
}
|
||||
|
||||
variable "disk_interface" {
|
||||
type = string
|
||||
default = "virtio0"
|
||||
}
|
||||
|
||||
variable "image_datastore" {
|
||||
type = string
|
||||
default = "local"
|
||||
}
|
||||
|
||||
variable "image_file" {
|
||||
type = string
|
||||
default = "import/ubuntu-24.qcow2"
|
||||
}
|
||||
|
||||
variable "worker_cpu" {
|
||||
default = 2
|
||||
}
|
||||
|
||||
|
||||
variable "worker_memory" {
|
||||
default = 2048
|
||||
}
|
||||
|
||||
|
||||
variable "worker_disk" {
|
||||
default = 20
|
||||
}
|
||||
|
||||
variable "network_base" {
|
||||
default = "192.168.22"
|
||||
}
|
||||
|
||||
variable "network_cidr" {
|
||||
default = "24"
|
||||
}
|
||||
|
||||
variable "cluster_gateway" {
|
||||
default = "192.168.22.1"
|
||||
}
|
||||
|
||||
variable "cluster_ip_start" {
|
||||
default = 10
|
||||
}
|
||||
|
||||
|
||||
variable "worker_ip_offset" {
|
||||
default = 5
|
||||
}
|
||||
|
||||
variable "node_bridge" {
|
||||
default = "vmbr0"
|
||||
}
|
||||
|
||||
variable "worker_datastore" {
|
||||
type = string
|
||||
default = "local-lvm"
|
||||
}
|
||||
|
||||
|
||||
|
||||
variable "worker_vmid_start" {
|
||||
type = number
|
||||
default = 3000
|
||||
}
|
||||
|
||||
variable "data_datastore" {
|
||||
type = string
|
||||
default = "data1"
|
||||
description = "Datastore for VM data disks"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user