“Terraform-provider-proxmox”的版本间的差异
跳到导航
跳到搜索
(→改进) |
|||
(未显示同一用户的15个中间版本) | |||
第1行: | 第1行: | ||
terraform 和proxmox的笔记终于有空放上wiki了 | terraform 和proxmox的笔记终于有空放上wiki了 | ||
− | = | + | =prepare= |
− | Proxmox VE,terraform 已安装 | + | Proxmox VE,terraform 已安装 我们这里用了 Cloud-Init ,其实还可以ISO的 [https://github.com/Telmate/terraform-provider-proxmox/blob/master/docs/resources/vm_qemu.md 请见] |
+ | |||
+ | 相关下载 https://cloud-images.ubuntu.com/ | ||
+ | |||
+ | Oct 08 2023 update | ||
+ | |||
+ | https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img | ||
=创建Ubuntu(Cloud-Init) Template= | =创建Ubuntu(Cloud-Init) Template= | ||
第41行: | 第47行: | ||
=terraform= | =terraform= | ||
<pre> | <pre> | ||
+ | |||
+ | #用户名什么的 写在变量文件 | ||
+ | cat main.tf | ||
+ | terraform { | ||
+ | required_providers { | ||
+ | proxmox = { | ||
+ | source = "Telmate/proxmox" | ||
+ | version = "2.9.11" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | provider "proxmox" { | ||
+ | pm_tls_insecure = true | ||
+ | pm_api_url = "https://192.168.10.8:8006/api2/json" | ||
+ | pm_api_token_id = "terraform-evan@pve!terraform-token" | ||
+ | pm_api_token_secret = "48ad9bae-98ad-49f5-a6d3-ac08f8726020" | ||
+ | } | ||
+ | resource "proxmox_vm_qemu" "proxmox-ubuntu" { | ||
+ | # 创建数量填写这里 | ||
+ | count = 4 | ||
+ | name = "ubuntu-2004-${count.index + 1}" | ||
+ | desc = "Ubuntu develop environment" | ||
+ | |||
+ | # 节点名 | ||
+ | #target_node = "pve" | ||
+ | target_node = var.proxmox_host | ||
+ | |||
+ | # cloud-init template | ||
+ | #clone = "ubuntu-2004-cloudinit-template" | ||
+ | clone = var.template_name | ||
+ | |||
+ | # 关机 guest agent | ||
+ | agent = 0 | ||
+ | os_type = "ubuntu" | ||
+ | onboot = true | ||
+ | # CPU | ||
+ | cores = 2 | ||
+ | sockets = 2 | ||
+ | cpu = "host" | ||
+ | # 内存M | ||
+ | memory = 4384 | ||
+ | scsihw = "virtio-scsi-pci" | ||
+ | bootdisk = "scsi0" | ||
+ | |||
+ | # 硬盘设置,因计算的方式 101580M 代替 100G | ||
+ | disk { | ||
+ | slot = 0 | ||
+ | size = "28G" | ||
+ | type = "scsi" | ||
+ | storage = "local-lvm" | ||
+ | iothread = 1 | ||
+ | } | ||
+ | |||
+ | # 网络 | ||
+ | network { | ||
+ | model = "virtio" | ||
+ | bridge = "vmbr0" | ||
+ | } | ||
+ | |||
+ | lifecycle { | ||
+ | ignore_changes = [ | ||
+ | network, | ||
+ | ] | ||
+ | } | ||
+ | # 记住这里要使用IP CIDR。因为只创建一个虚拟机,虚拟机的 IP 是 192.168.1.41。如果要创建多个虚拟机的话,IP 将会是 .91、.92、.93 。 | ||
+ | #ipconfig0 = "ip=192.168.10.4${count.index + 1}/24,gw=192.168.10.1" | ||
+ | ipconfig0 = "ip=192.168.10.3${count.index + 1}/24,gw=192.168.10.1" | ||
+ | |||
+ | # 用户名和 SSH key | ||
+ | #ciuser = "evan" | ||
+ | ciuser = var.myuser | ||
+ | sshkeys = <<EOF | ||
+ | ${var.ssh_key} | ||
+ | EOF | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | cat vars.tf | ||
+ | |||
+ | variable "myuser" { | ||
+ | default = "evan" | ||
+ | } | ||
+ | variable "ssh_key" { | ||
+ | default = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTR3R8Bx1+koK8bJzoYMpGU1S8DTDnptWqrTCOMhrVlQH0I9ll/3ZAcD53JdzRXVLe1NqE6q5iTFO+HY5qxWfM0+gerJQlb1e5cb1+lUFhRVglpwYlxNSVXaJFeiCLswcnGcmqR1RnGAGhcf7ncslz/BLuxFndgLqhU04zj9ISJWYh+36vttqg9tP6a40MhmeWVPOuIGNlDDVVUyjxIepn83xr0PJyILLXTBH+OiQppO1bljguig67twUBsh/FW1Wdvuw33PjkgXmKLDVaKS2S0CtC9dPOrp0afS/fsKrIu16o/VtfSrNrTmsTCmE95Ug25yOS+WuVaU19Gauez2mj lx" | ||
+ | } | ||
+ | |||
+ | variable "proxmox_host" { | ||
+ | default = "pve" | ||
+ | } | ||
+ | |||
+ | variable "template_name" { | ||
+ | default = "ubuntu-2004-cloudinit-template" | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | #original notes | ||
#cat main.tf | #cat main.tf | ||
terraform { | terraform { | ||
第117行: | 第231行: | ||
</pre> | </pre> | ||
+ | == 运行== | ||
+ | <pre> | ||
+ | #init | ||
+ | terraform init | ||
+ | 可以使用 terraform fmt 和 terraform validate 对配置文件进行格式化和校验。 | ||
+ | |||
+ | 然后执行 terraform apply 并输入 yes 开始创建虚拟机 | ||
+ | |||
+ | #Destroy previously-created infrastructure | ||
+ | terraform destory | ||
+ | |||
+ | |||
+ | </pre> | ||
+ | |||
+ | =改进= | ||
+ | 使用 qm 创建 Ubuntu Cloud-Init Template,有可能要找个全 terraform的 | ||
+ | 通过 cloud-init 来对虚拟机进行高级定制 各种lib并没有安装 ,默认是非常干净的ubuntu | ||
+ | |||
+ | 还有,这两个文章的写作格式非常的值得学习 | ||
+ | |||
+ | [https://tcude.net/creating-a-vm-template-in-proxmox/ Creating a VM Template in Proxmox] | ||
+ | |||
+ | [https://tcude.net/using-terraform-with-proxmox/ Using Terraform with Proxmox] | ||
+ | |||
+ | =trouble shooting = | ||
+ | <pre> | ||
+ | 1.ubuntu terraform init | ||
+ | Terraform initialized in an empty directory! | ||
+ | |||
+ | #写多了一个 t ttf | ||
+ | ➜ ubuntu ls | ||
+ | main.ttf ubuntu.ttf | ||
+ | ➜ ubuntu mv main.ttf main.tf | ||
+ | |||
+ | 2.连不上 gihthub 问题 | ||
+ | ➜ ubuntu terraform init | ||
+ | |||
+ | Initializing the backend... | ||
+ | |||
+ | Initializing provider plugins... | ||
+ | - Finding telmate/proxmox versions matching "2.9.13"... | ||
+ | - Installing telmate/proxmox v2.9.13... | ||
+ | ╷ | ||
+ | │ Error: Failed to install provider | ||
+ | │ | ||
+ | │ Error while installing telmate/proxmox v2.9.13: Get | ||
+ | │ "https://github.com/Telmate/terraform-provider-proxmox/releases/download/v2.9.13/terraform-provider-proxmox_2.9.13_linux_amd64.zip": | ||
+ | │ dial tcp 20.205.243.166:443: i/o timeout | ||
+ | |||
+ | 本地有个 socket5 1081代理 | ||
+ | cat ~/.ssh/config | ||
+ | ### github.com | ||
+ | Host github.com | ||
+ | Hostname github.com | ||
+ | ProxyCommand nc -x localhost:1081 %h %p | ||
+ | # git-for-windows 下可以用 connect 代替 nc | ||
+ | # ProxyCommand connect -S localhost:1085 %h %p | ||
+ | 3. v2.9.13 版本有问题 | ||
+ | ubuntu terraform apply | ||
+ | ╷ | ||
+ | │ Error: user does not exist or has insufficient permissions on proxmox: ops@pve!terraform-token | ||
+ | │ | ||
+ | │ with provider["registry.terraform.io/telmate/proxmox"], | ||
+ | │ on main.tf line 10, in provider "proxmox": | ||
+ | │ 10: provider "proxmox" { | ||
+ | Also confirming v2.9.11 of provider works fine | ||
+ | https://github.com/Telmate/terraform-provider-proxmox/issues/703 | ||
+ | </pre> | ||
+ | =References= | ||
+ | 最好看的两个官方文档 | ||
+ | https://github.com/Telmate/terraform-provider-proxmox | ||
− | + | https://github.com/Telmate/terraform-provider-proxmox/blob/master/docs/resources/vm_qemu.md | |
− | + | ||
+ | https://registry.terraform.io/providers/Telmate/proxmox/latest/docs/guides/cloud_init | ||
+ | |||
+ | [https://zhuanlan.zhihu.com/p/453058774 快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机] | ||
+ | [https://juejin.cn/post/7049183628156207141 使用 Terraform 部署 Proxmox 虚拟机 ] | ||
[[category:devops]] [[category:terraform]] | [[category:devops]] [[category:terraform]] |
2023年10月8日 (日) 05:56的最新版本
terraform 和proxmox的笔记终于有空放上wiki了
目录
prepare
Proxmox VE,terraform 已安装 我们这里用了 Cloud-Init ,其实还可以ISO的 请见
相关下载 https://cloud-images.ubuntu.com/
Oct 08 2023 update
https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
创建Ubuntu(Cloud-Init) Template
#执行下面的命令创建一个虚拟机 #这里 9000 只是一个ID 你只要写个你的 proxmox还没用的ID就行了 qm create 9000 --name "ubuntu-2004-cloudinit-template" --memory 1024 --cores 1 --net0 virtio,bridge=vmbr0 qm importdisk 9000 ubuntu-20.04-server-cloudimg-amd64.img local-lvm qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0 qm set 9000 --boot c --bootdisk scsi0 qm set 9000 --ide2 local-lvm:cloudinit qm set 9000 --serial0 socket --vga serial0 qm set 9000 --agent enabled=1 #将刚创建好的虚拟机转换成模板 qm template 9000
API token
pveum user add terraform-evan@pve #我这里权限给得比较大 pveum aclmod / -user terraform-evan@pve -role Administrator pveum user token add terraform-evan@pve terraform-token --privsep=0 ──────────────┬──────────────────────────────────────┐ │ key │ value │ ╞══════════════╪══════════════════════════════════════╡ │ full-tokenid │ terraform-evan@pve!terraform-token │ ├──────────────┼──────────────────────────────────────┤ │ info │ {"privsep":"0"} │ ├──────────────┼──────────────────────────────────────┤ │ value │ 48ad9bae-98ad-49f5-a6d3-ac08f8700000 │ └──────────────┴──────────────────────────────────────┘
terraform
#用户名什么的 写在变量文件 cat main.tf terraform { required_providers { proxmox = { source = "Telmate/proxmox" version = "2.9.11" } } } provider "proxmox" { pm_tls_insecure = true pm_api_url = "https://192.168.10.8:8006/api2/json" pm_api_token_id = "terraform-evan@pve!terraform-token" pm_api_token_secret = "48ad9bae-98ad-49f5-a6d3-ac08f8726020" } resource "proxmox_vm_qemu" "proxmox-ubuntu" { # 创建数量填写这里 count = 4 name = "ubuntu-2004-${count.index + 1}" desc = "Ubuntu develop environment" # 节点名 #target_node = "pve" target_node = var.proxmox_host # cloud-init template #clone = "ubuntu-2004-cloudinit-template" clone = var.template_name # 关机 guest agent agent = 0 os_type = "ubuntu" onboot = true # CPU cores = 2 sockets = 2 cpu = "host" # 内存M memory = 4384 scsihw = "virtio-scsi-pci" bootdisk = "scsi0" # 硬盘设置,因计算的方式 101580M 代替 100G disk { slot = 0 size = "28G" type = "scsi" storage = "local-lvm" iothread = 1 } # 网络 network { model = "virtio" bridge = "vmbr0" } lifecycle { ignore_changes = [ network, ] } # 记住这里要使用IP CIDR。因为只创建一个虚拟机,虚拟机的 IP 是 192.168.1.41。如果要创建多个虚拟机的话,IP 将会是 .91、.92、.93 。 #ipconfig0 = "ip=192.168.10.4${count.index + 1}/24,gw=192.168.10.1" ipconfig0 = "ip=192.168.10.3${count.index + 1}/24,gw=192.168.10.1" # 用户名和 SSH key #ciuser = "evan" ciuser = var.myuser sshkeys = <<EOF ${var.ssh_key} EOF } cat vars.tf variable "myuser" { default = "evan" } variable "ssh_key" { default = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTR3R8Bx1+koK8bJzoYMpGU1S8DTDnptWqrTCOMhrVlQH0I9ll/3ZAcD53JdzRXVLe1NqE6q5iTFO+HY5qxWfM0+gerJQlb1e5cb1+lUFhRVglpwYlxNSVXaJFeiCLswcnGcmqR1RnGAGhcf7ncslz/BLuxFndgLqhU04zj9ISJWYh+36vttqg9tP6a40MhmeWVPOuIGNlDDVVUyjxIepn83xr0PJyILLXTBH+OiQppO1bljguig67twUBsh/FW1Wdvuw33PjkgXmKLDVaKS2S0CtC9dPOrp0afS/fsKrIu16o/VtfSrNrTmsTCmE95Ug25yOS+WuVaU19Gauez2mj lx" } variable "proxmox_host" { default = "pve" } variable "template_name" { default = "ubuntu-2004-cloudinit-template" } #original notes #cat main.tf terraform { required_providers { proxmox = { source = "Telmate/proxmox" version = "2.9.11" } } } provider "proxmox" { pm_tls_insecure = true pm_api_url = "https://192.168.10.8:8006/api2/json" pm_api_token_id = "terraform-evan@pve!terraform-token" pm_api_token_secret = "48ad9bae-98ad-49f5-a6d3-ac08f8000000" } resource "proxmox_vm_qemu" "proxmox-ubuntu" { # 创建数量填写这里 count = 4 #name = "ubuntu-2004-${count.index + 1}" name = "ubuntu-2004-${count.index + 1}" desc = "Ubuntu develop environment" # 节点名 target_node = "pve" # cloud-init template clone = "ubuntu-2004-cloudinit-template" # 关机 guest agent agent = 0 os_type = "ubuntu" onboot = true # CPU cores = 2 sockets = 2 cpu = "host" # 内存M memory = 4384 scsihw = "virtio-scsi-pci" bootdisk = "scsi0" # 硬盘设置,因计算的方式 101580M 代替 100G disk { slot = 0 size = "28G" type = "scsi" storage = "local-lvm" iothread = 1 } # 网络 network { model = "virtio" bridge = "vmbr0" } lifecycle { ignore_changes = [ network, ] } # 记住这里要使用IP CIDR。因为只创建一个虚拟机,虚拟机的 IP 是 192.168.1.41。如果要创建多个虚拟机的话,IP 将会是 .91、.92、.93 。 #ipconfig0 = "ip=192.168.10.4${count.index + 1}/24,gw=192.168.10.1" ipconfig0 = "ip=192.168.10.3${count.index + 1}/24,gw=192.168.10.1" # 用户名和 SSH key ciuser = "evan" sshkeys = <<EOF ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTR3R8Bx1stridoYMpGU1S8DTDnptWqrTCOMhrVlQH0I9ll/3ZAcD53JdzRXVLe1NqE6q5iTFO+HY5qxWfM0+gerJQlb1e5cb1+lUFhRVglpwYlxNSVXaJFeiCLswcnGcmqR1RnGAGhcf7ncslz/BLuxFndgLqhU04zj9ISJWYh+36vttqg9tP6a40MhmeWVPOuIGNlDDVVUyjxIepn83xr0PJyILLXTBH+OiQxxxguig67twUBsh/FW1Wdvuw33PjkgXmKLDVaKS2S0CtC9dPOrp0afS/fsKrIu16o/VtfSrNrTmsTCmE95Ug25yOS+WuVaU19Gauez2mj lx EOF }
运行
#init terraform init 可以使用 terraform fmt 和 terraform validate 对配置文件进行格式化和校验。 然后执行 terraform apply 并输入 yes 开始创建虚拟机 #Destroy previously-created infrastructure terraform destory
改进
使用 qm 创建 Ubuntu Cloud-Init Template,有可能要找个全 terraform的 通过 cloud-init 来对虚拟机进行高级定制 各种lib并没有安装 ,默认是非常干净的ubuntu
还有,这两个文章的写作格式非常的值得学习
Creating a VM Template in Proxmox
trouble shooting
1.ubuntu terraform init Terraform initialized in an empty directory! #写多了一个 t ttf ➜ ubuntu ls main.ttf ubuntu.ttf ➜ ubuntu mv main.ttf main.tf 2.连不上 gihthub 问题 ➜ ubuntu terraform init Initializing the backend... Initializing provider plugins... - Finding telmate/proxmox versions matching "2.9.13"... - Installing telmate/proxmox v2.9.13... ╷ │ Error: Failed to install provider │ │ Error while installing telmate/proxmox v2.9.13: Get │ "https://github.com/Telmate/terraform-provider-proxmox/releases/download/v2.9.13/terraform-provider-proxmox_2.9.13_linux_amd64.zip": │ dial tcp 20.205.243.166:443: i/o timeout 本地有个 socket5 1081代理 cat ~/.ssh/config ### github.com Host github.com Hostname github.com ProxyCommand nc -x localhost:1081 %h %p # git-for-windows 下可以用 connect 代替 nc # ProxyCommand connect -S localhost:1085 %h %p 3. v2.9.13 版本有问题 ubuntu terraform apply ╷ │ Error: user does not exist or has insufficient permissions on proxmox: ops@pve!terraform-token │ │ with provider["registry.terraform.io/telmate/proxmox"], │ on main.tf line 10, in provider "proxmox": │ 10: provider "proxmox" { Also confirming v2.9.11 of provider works fine https://github.com/Telmate/terraform-provider-proxmox/issues/703
References
最好看的两个官方文档 https://github.com/Telmate/terraform-provider-proxmox
https://github.com/Telmate/terraform-provider-proxmox/blob/master/docs/resources/vm_qemu.md
https://registry.terraform.io/providers/Telmate/proxmox/latest/docs/guides/cloud_init