Создан проект terraform
This commit is contained in:
commit
b1f0160bd7
10
.terraform.lock.hcl
generated
Normal file
10
.terraform.lock.hcl
generated
Normal file
@ -0,0 +1,10 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/telmate/proxmox" {
|
||||
version = "3.0.2-rc07"
|
||||
constraints = "3.0.2-rc07"
|
||||
hashes = [
|
||||
"h1:zp5hpQJQ4t4zROSLqdltVpBO+Riy9VugtfFbpyTw1aM=",
|
||||
]
|
||||
}
|
||||
1
.terraform/modules/modules.json
Normal file
1
.terraform/modules/modules.json
Normal file
@ -0,0 +1 @@
|
||||
{"Modules":[{"Key":"","Source":"","Dir":"."},{"Key":"app","Source":"./modules/lxc_container","Dir":"modules/lxc_container"}]}
|
||||
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2017 <copyright holders>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@ -0,0 +1,51 @@
|
||||
[](https://travis-ci.com/Telmate/terraform-provider-proxmox)
|
||||
|
||||
# Terraform provider plugin for Proxmox
|
||||
|
||||
This repository provides a Terraform provider for
|
||||
the [Proxmox virtualization platform](https://pve.proxmox.com/pve-docs/) and exposes Terraform resources to provision
|
||||
QEMU VMs and LXC Containers.
|
||||
|
||||
## Getting Started
|
||||
|
||||
In order to get started, use [the documentation included in this repository](docs/index.md). The documentation contains
|
||||
a list of the options for the provider. Moreover, there are some guides available how to combine options and start
|
||||
specific VMs.
|
||||
|
||||
## Quick Start
|
||||
|
||||
Follow this [install guide](docs/guides/installation.md) to install the plugin.
|
||||
|
||||
## Known Limitations
|
||||
|
||||
* `proxmox_vm_qemu`.`disk`.`size` attribute does not match what is displayed in the Proxmox UI.
|
||||
* Updates to `proxmox_vm_qemu` resources almost always result as a failed task within the Proxmox UI. This appears to be
|
||||
harmless and the desired configuration changes do get applied.
|
||||
* When using the `proxmox_lxc` resource, the provider will crash unless `rootfs` is defined.
|
||||
* When using the Network Boot mode (PXE), a valid NIC must be defined for the VM, and the boot order must specify network first.
|
||||
|
||||
## Contributing
|
||||
|
||||
When contributing, please also add documentation to help other users.
|
||||
|
||||
### Debugging the provider
|
||||
|
||||
Debugging is available for this provider through the Terraform Plugin SDK versions 2.0.0. Therefore, the plugin can be
|
||||
started with the debugging flag `--debug`.
|
||||
|
||||
For example (using [delve](https://github.com/go-delve/delve) as Debugger):
|
||||
|
||||
```bash
|
||||
dlv exec --headless ./terraform-provider-my-provider -- --debug
|
||||
```
|
||||
|
||||
For more information about debugging a provider please
|
||||
see: [Debugger-Based Debugging](https://www.terraform.io/docs/extend/debugging.html#debugger-based-debugging)
|
||||
|
||||
## Useful links
|
||||
|
||||
* [Proxmox](https://www.proxmox.com/en/)
|
||||
* [Proxmox documentation](https://pve.proxmox.com/pve-docs/)
|
||||
* [Terraform](https://www.terraform.io/)
|
||||
* [Terraform documentation](https://www.terraform.io/docs/index.html)
|
||||
* [Recommended ISO builder](https://github.com/Telmate/terraform-ubuntu-proxmox-iso)
|
||||
Binary file not shown.
21
main.tf
Normal file
21
main.tf
Normal file
@ -0,0 +1,21 @@
|
||||
module "app" {
|
||||
source = "./modules/lxc_container"
|
||||
|
||||
target_node = "px"
|
||||
vm_hostname = "app-01"
|
||||
ostemplate = "local:vztmpl/ubuntu-22.04-custome.tar.zst"
|
||||
ssh_public_key = file("./ssh/id_terraform.pub")
|
||||
private_key = file("./ssh/id_terraform")
|
||||
ip_address = "10.10.10.3/24"
|
||||
gateway = "10.10.10.1"
|
||||
bridge = "vmbr1"
|
||||
storage = "local"
|
||||
size = "8G"
|
||||
|
||||
lxc_resources = {
|
||||
cores = 2
|
||||
memory = 2048
|
||||
swap = 512
|
||||
}
|
||||
|
||||
}
|
||||
37
modules/lxc_container/main.tf
Normal file
37
modules/lxc_container/main.tf
Normal file
@ -0,0 +1,37 @@
|
||||
resource "proxmox_lxc" "app_container" {
|
||||
target_node = var.target_node
|
||||
hostname = var.vm_hostname
|
||||
ostemplate = var.ostemplate
|
||||
password = "password"
|
||||
|
||||
ssh_public_keys = var.ssh_public_key
|
||||
|
||||
cores = var.lxc_resources.cores
|
||||
memory = var.lxc_resources.memory
|
||||
swap = var.lxc_resources.swap
|
||||
|
||||
rootfs {
|
||||
storage = var.storage
|
||||
size = var.size
|
||||
}
|
||||
|
||||
network {
|
||||
name = "eth0"
|
||||
bridge = var.bridge
|
||||
ip = var.ip_address
|
||||
gw = var.gateway
|
||||
firewall = true
|
||||
}
|
||||
|
||||
start = true
|
||||
|
||||
connection {
|
||||
type = "ssh"
|
||||
host = var.ip_address
|
||||
user = "root"
|
||||
private_key = var.private_key
|
||||
timeout = "2m"
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
3
modules/lxc_container/outputs.tf
Normal file
3
modules/lxc_container/outputs.tf
Normal file
@ -0,0 +1,3 @@
|
||||
output "vm_hostname" {
|
||||
value = proxmox_lxc.app_container.hostname
|
||||
}
|
||||
18
modules/lxc_container/variables.tf
Normal file
18
modules/lxc_container/variables.tf
Normal file
@ -0,0 +1,18 @@
|
||||
variable "target_node" {}
|
||||
variable "vm_hostname" {}
|
||||
variable "ostemplate" {}
|
||||
variable "ssh_public_key" {}
|
||||
variable "private_key" {}
|
||||
variable "ip_address" {}
|
||||
variable "gateway" {}
|
||||
variable "bridge" {}
|
||||
variable "storage" {}
|
||||
variable "size" {}
|
||||
|
||||
variable "lxc_resources" {
|
||||
type = object({
|
||||
cores = number
|
||||
memory = number
|
||||
swap = number
|
||||
})
|
||||
}
|
||||
8
modules/lxc_container/versions.tf
Normal file
8
modules/lxc_container/versions.tf
Normal file
@ -0,0 +1,8 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
proxmox = {
|
||||
source = "telmate/proxmox"
|
||||
version = "3.0.2-rc07"
|
||||
}
|
||||
}
|
||||
}
|
||||
15
provider.tf
Normal file
15
provider.tf
Normal file
@ -0,0 +1,15 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
proxmox = {
|
||||
source = "telmate/proxmox"
|
||||
version = "3.0.2-rc07"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
provider "proxmox" {
|
||||
pm_api_url = "https://185.78.29.7:8006/api2/json"
|
||||
pm_api_token_id = "terraform@pve!tf"
|
||||
pm_api_token_secret = var.pm_token_secret
|
||||
pm_tls_insecure = true
|
||||
}
|
||||
7
ssh/id_terraform
Normal file
7
ssh/id_terraform
Normal file
@ -0,0 +1,7 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||
QyNTUxOQAAACD4l+WzhF319wL8LLXQMmGB4EshgxddjczgQsHzT0FYKAAAAJB9dIGTfXSB
|
||||
kwAAAAtzc2gtZWQyNTUxOQAAACD4l+WzhF319wL8LLXQMmGB4EshgxddjczgQsHzT0FYKA
|
||||
AAAED+NFo9Z3Zoo9k9c3gou33YGmE0/XhdI84dRFJEo0LZR/iX5bOEXfX3AvwstdAyYYHg
|
||||
SyGDF12NzOBCwfNPQVgoAAAADXRlcnJhZm9ybUBseGM=
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
1
ssh/id_terraform.pub
Normal file
1
ssh/id_terraform.pub
Normal file
@ -0,0 +1 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPiX5bOEXfX3AvwstdAyYYHgSyGDF12NzOBCwfNPQVgo terraform@lxc
|
||||
109
terraform.tfstate
Normal file
109
terraform.tfstate
Normal file
@ -0,0 +1,109 @@
|
||||
{
|
||||
"version": 4,
|
||||
"terraform_version": "1.14.6",
|
||||
"serial": 3,
|
||||
"lineage": "f4c291e8-3767-da71-b85c-0fdc56b7a316",
|
||||
"outputs": {},
|
||||
"resources": [
|
||||
{
|
||||
"module": "module.app",
|
||||
"mode": "managed",
|
||||
"type": "proxmox_lxc",
|
||||
"name": "app_container",
|
||||
"provider": "provider[\"registry.terraform.io/telmate/proxmox\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arch": "amd64",
|
||||
"bwlimit": 0,
|
||||
"clone": null,
|
||||
"clone_storage": null,
|
||||
"cmode": "tty",
|
||||
"console": true,
|
||||
"cores": 2,
|
||||
"cpulimit": 0,
|
||||
"cpuunits": 1024,
|
||||
"current_node": "px",
|
||||
"description": "",
|
||||
"features": [],
|
||||
"force": false,
|
||||
"full": null,
|
||||
"hagroup": "",
|
||||
"hastate": "",
|
||||
"hookscript": "",
|
||||
"hostname": "app-01",
|
||||
"id": "px/lxc/100",
|
||||
"ignore_unpack_errors": false,
|
||||
"lock": "",
|
||||
"memory": 2048,
|
||||
"mountpoint": [],
|
||||
"nameserver": "",
|
||||
"network": [
|
||||
{
|
||||
"bridge": "vmbr1",
|
||||
"firewall": true,
|
||||
"gw": "10.10.10.1",
|
||||
"gw6": "",
|
||||
"hwaddr": "BC:24:11:7F:7E:1B",
|
||||
"id": 0,
|
||||
"ip": "10.10.10.3/24",
|
||||
"ip6": "",
|
||||
"mtu": 0,
|
||||
"name": "eth0",
|
||||
"rate": 0,
|
||||
"tag": 0,
|
||||
"trunks": "",
|
||||
"type": "veth"
|
||||
}
|
||||
],
|
||||
"onboot": false,
|
||||
"ostemplate": "local:vztmpl/ubuntu-22.04-custome.tar.zst",
|
||||
"ostype": "ubuntu",
|
||||
"password": "password",
|
||||
"pool": null,
|
||||
"protection": false,
|
||||
"restore": false,
|
||||
"rootfs": [
|
||||
{
|
||||
"acl": false,
|
||||
"quota": false,
|
||||
"replicate": false,
|
||||
"ro": false,
|
||||
"shared": false,
|
||||
"size": "8G",
|
||||
"storage": "local",
|
||||
"volume": "local:100/vm-100-disk-0.raw"
|
||||
}
|
||||
],
|
||||
"searchdomain": "",
|
||||
"ssh_public_keys": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPiX5bOEXfX3AvwstdAyYYHgSyGDF12NzOBCwfNPQVgo terraform@lxc\n",
|
||||
"start": true,
|
||||
"startup": "",
|
||||
"swap": 512,
|
||||
"tags": "",
|
||||
"target_node": "px",
|
||||
"template": false,
|
||||
"timeouts": null,
|
||||
"tty": 2,
|
||||
"unique": false,
|
||||
"unprivileged": false,
|
||||
"unused": [],
|
||||
"vmid": 100
|
||||
},
|
||||
"sensitive_attributes": [
|
||||
[
|
||||
{
|
||||
"type": "get_attr",
|
||||
"value": "password"
|
||||
}
|
||||
]
|
||||
],
|
||||
"identity_schema_version": 0,
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWZhdWx0IjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"check_results": null
|
||||
}
|
||||
109
terraform.tfstate.backup
Normal file
109
terraform.tfstate.backup
Normal file
@ -0,0 +1,109 @@
|
||||
{
|
||||
"version": 4,
|
||||
"terraform_version": "1.14.6",
|
||||
"serial": 1,
|
||||
"lineage": "f4c291e8-3767-da71-b85c-0fdc56b7a316",
|
||||
"outputs": {},
|
||||
"resources": [
|
||||
{
|
||||
"module": "module.app",
|
||||
"mode": "managed",
|
||||
"type": "proxmox_lxc",
|
||||
"name": "app_container",
|
||||
"provider": "provider[\"registry.terraform.io/telmate/proxmox\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arch": "amd64",
|
||||
"bwlimit": 0,
|
||||
"clone": null,
|
||||
"clone_storage": null,
|
||||
"cmode": "tty",
|
||||
"console": true,
|
||||
"cores": 2,
|
||||
"cpulimit": 0,
|
||||
"cpuunits": 1024,
|
||||
"current_node": "px",
|
||||
"description": "",
|
||||
"features": [],
|
||||
"force": false,
|
||||
"full": null,
|
||||
"hagroup": "",
|
||||
"hastate": "",
|
||||
"hookscript": "",
|
||||
"hostname": "app-01",
|
||||
"id": "px/lxc/100",
|
||||
"ignore_unpack_errors": false,
|
||||
"lock": "",
|
||||
"memory": 2048,
|
||||
"mountpoint": [],
|
||||
"nameserver": "",
|
||||
"network": [
|
||||
{
|
||||
"bridge": "vmbr1",
|
||||
"firewall": true,
|
||||
"gw": "10.10.10.1",
|
||||
"gw6": "",
|
||||
"hwaddr": "BC:24:11:9A:C9:FA",
|
||||
"id": 0,
|
||||
"ip": "10.10.10.3/24",
|
||||
"ip6": "",
|
||||
"mtu": 0,
|
||||
"name": "eth0",
|
||||
"rate": 0,
|
||||
"tag": 0,
|
||||
"trunks": "",
|
||||
"type": "veth"
|
||||
}
|
||||
],
|
||||
"onboot": false,
|
||||
"ostemplate": "local:vztmpl/ubuntu-22.04-custome.tar.zst",
|
||||
"ostype": "ubuntu",
|
||||
"password": "password",
|
||||
"pool": null,
|
||||
"protection": false,
|
||||
"restore": false,
|
||||
"rootfs": [
|
||||
{
|
||||
"acl": false,
|
||||
"quota": false,
|
||||
"replicate": false,
|
||||
"ro": false,
|
||||
"shared": false,
|
||||
"size": "8G",
|
||||
"storage": "local",
|
||||
"volume": "local:100/vm-100-disk-0.raw"
|
||||
}
|
||||
],
|
||||
"searchdomain": "",
|
||||
"ssh_public_keys": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPiX5bOEXfX3AvwstdAyYYHgSyGDF12NzOBCwfNPQVgo terraform@lxc\n",
|
||||
"start": true,
|
||||
"startup": "",
|
||||
"swap": 512,
|
||||
"tags": "",
|
||||
"target_node": "px",
|
||||
"template": false,
|
||||
"timeouts": null,
|
||||
"tty": 2,
|
||||
"unique": false,
|
||||
"unprivileged": false,
|
||||
"unused": [],
|
||||
"vmid": 100
|
||||
},
|
||||
"sensitive_attributes": [
|
||||
[
|
||||
{
|
||||
"type": "get_attr",
|
||||
"value": "password"
|
||||
}
|
||||
]
|
||||
],
|
||||
"identity_schema_version": 0,
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWZhdWx0IjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"check_results": null
|
||||
}
|
||||
1
terraform.tfvars
Normal file
1
terraform.tfvars
Normal file
@ -0,0 +1 @@
|
||||
pm_token_secret = "e71efc34-8635-41fd-b8e9-019858b451a7"
|
||||
3
variables.tf
Normal file
3
variables.tf
Normal file
@ -0,0 +1,3 @@
|
||||
variable "pm_token_secret" {
|
||||
description = "Секрет токена Proxmox"
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user