Used latest version from Git because 0.6.2 gives me the error
2020/06/13 21:40:00 [TRACE] statemgr.Filesystem: removing lock metadata file .terraform.tfstate.lock.info
2020/06/13 21:40:00 [TRACE] statemgr.Filesystem: unlocking terraform.tfstate using fcntl flock
Error: storage pool 'ci-vm_pool' already exists
on main.tf line 71, in resource "libvirt_pool" "vm":
71: resource "libvirt_pool" "vm" {
Git version
d1cf93cdb066b2d3d2c2c046d2fb986808d9a424
Installed via
go get github.com/dmacvicar/terraform-provider-libvirt
go install github.com/dmacvicar/terraform-provider-libvirt
cp $GOPATH/bin/terraform-provider-libvirt ~/.terraform.d/plugins
Checklist
[X] Is it a bug or something that does not work as expected? Please make sure you fill the version information below:
################################################################################
# ENV VARS
################################################################################
# https://www.terraform.io/docs/commands/environment-variables.html
variable "VM_COUNT" {
default = 3
type = number
}
variable "VM_USER" {
default = "developer"
type = string
}
variable "VM_HOSTNAME" {
default = "ci-vm"
type = string
}
variable "VM_IMG_URL" {
default = "https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img"
type = string
}
variable "VM_IMG_FORMAT" {
default = "qcow2"
type = string
}
variable "VM_CIDR_RANGE" {
default = "10.10.10.10/24"
type = string
}
################################################################################
# PROVIDERS
################################################################################
# instance the provider
provider "libvirt" {
uri = "qemu:///system"
}
################################################################################
# DATA TEMPLATES
################################################################################
# https://www.terraform.io/docs/providers/template/d/file.html
# https://www.terraform.io/docs/providers/template/d/cloudinit_config.html
data "template_file" "user_data" {
template = file("${path.module}/cloud_init.cfg")
vars = {
VM_USER = var.VM_USER
}
}
data "template_file" "network_config" {
template = file("${path.module}/network_config.cfg")
}
################################################################################
# RESOURCES
################################################################################
resource "libvirt_pool" "vm" {
name = "${var.VM_HOSTNAME}_pool"
type = "dir"
path = "/tmp/terraform-provider-libvirt-pool-ubuntu"
}
# We fetch the latest ubuntu release image from their mirrors
resource "libvirt_volume" "vm" {
count = var.VM_COUNT
name = "${var.VM_HOSTNAME}-${count.index}_volume.${var.VM_IMG_FORMAT}"
pool = libvirt_pool.vm.name
source = var.VM_IMG_URL
format = var.VM_IMG_FORMAT
}
# Create a public network for the VMs
resource "libvirt_network" "vm_public_network" {
name = "${var.VM_HOSTNAME}_network"
mode = "nat"
domain = "${var.VM_HOSTNAME}.local"
addresses = ["${var.VM_CIDR_RANGE}"]
dhcp {
enabled = true
}
dns {
enabled = true
}
}
# for more info about paramater check this out
# https://github.com/dmacvicar/terraform-provider-libvirt/blob/master/website/docs/r/cloudinit.html.markdown
# Use CloudInit to add our ssh-key to the instance
# you can add also meta_data field
resource "libvirt_cloudinit_disk" "cloudinit" {
name = "${var.VM_HOSTNAME}_cloudinit.iso"
user_data = data.template_file.user_data.rendered
network_config = data.template_file.network_config.rendered
pool = libvirt_pool.vm.name
}
# Create the machine
resource "libvirt_domain" "vm" {
count = var.VM_COUNT
name = "${var.VM_HOSTNAME}-${count.index}"
memory = "1024"
vcpu = 1
cloudinit = "${libvirt_cloudinit_disk.cloudinit.id}"
# TODO: Automate the creation of public network
network_interface {
network_id = "${libvirt_network.vm_public_network.id}"
#network_id = "6d8e2494-835d-4baf-a14f-3a5c705febcc"
#network_name = "vm_docker_network"
network_name = "${libvirt_network.vm_public_network.name}"
}
# IMPORTANT
# Ubuntu can hang is a isa-serial is not present at boot time.
# If you find your CPU 100% and never is available this is why.
#
# This is a known bug on cloud images, since they expect a console
# we need to pass it:
# https://bugs.launchpad.net/cloud-images/+bug/1573095
console {
type = "pty"
target_port = "0"
target_type = "serial"
}
console {
type = "pty"
target_type = "virtio"
target_port = "1"
}
disk {
volume_id = "${libvirt_volume.vm[count.index].id}"
}
graphics {
type = "spice"
listen_type = "address"
autoport = true
}
}
################################################################################
# TERRAFORM CONFIG
################################################################################
terraform {
required_version = ">= 0.12"
}
The network_config.cfg looks like this
version: 2
ethernets:
ens3:
dhcp4: true
Steps to Reproduce Issue
Run
terraform init
terraform apply
Then I get the error message:
Error: Error creating libvirt network: virError(Code=38, Domain=0, Message='error creating bridge interface ci-vm_network-br: Numerical result out of range')
System Information
Linux distribution
Ubuntu 18.04
Terraform version
It does not show libvirt provider version but the binary I used, I downloaded was 0.6.2: https://github.com/dmacvicar/terraform-provider-libvirt/releases/download/v0.6.2/terraform-provider-libvirt-0.6.2+git.1585292411.8cbe9ad0.Ubuntu_18.04.amd64.tar.gz
Terraform v0.12.26
Provider and libvirt versions
Used latest version from Git because 0.6.2 gives me the error
Git version d1cf93cdb066b2d3d2c2c046d2fb986808d9a424
Installed via
Checklist
Description of Issue/Question
Setup
I wanted to spin up a test environment locally using the description from this stackoverflow answer: https://stackoverflow.com/a/58607900/4397899
The main.tf looks like
The network_config.cfg looks like this
Steps to Reproduce Issue
Run terraform init terraform apply
Then I get the error message: