Uso del proveedor libvirt terraform para conectarse al puente de red de todo el sistema

Uso del proveedor libvirt terraform para conectarse al puente de red de todo el sistema

Estoy intentando utilizar el proveedor libvirt kvm terraform (https://github.com/dmacvicar/terraform-provider-libvirt) para conectar una máquina virtual de ejemplo a un puente de red existente que he creado. Estoy usando el ejemplo simple de aquí;https://github.com/fabianlee/terraform-libvirt-ubuntu-examples.git. Aquí está el tf, los detalles del puente están debajo; cualquier sugerencia será recibida con gratitud.

# variables that can be overriden
variable "hostname" { default = "simple" }
variable "domain" { default = "example.com" }
variable "memoryMB" { default = 1024*1 }
variable "cpu" { default = 1 }

# instance the provider
provider "libvirt" {
  uri = "qemu:///system"
}

# fetch the latest ubuntu release image from their mirrors
resource "libvirt_volume" "os_image" {
  name = "${var.hostname}-os_image"
  pool = "default"
  source = "https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img"
  format = "qcow2"
}

# Use CloudInit ISO to add ssh-key to the instance
resource "libvirt_cloudinit_disk" "commoninit" {
          name = "${var.hostname}-commoninit.iso"
          pool = "default"
          user_data = data.template_file.user_data.rendered
          network_config = data.template_file.network_config.rendered
}

resource "libvirt_network" "vm_network" {
  name = "test_net"
  mode = "bridge"
  bridge = "br0"
}


data "template_file" "user_data" {
  template = file("${path.module}/cloud_init.cfg")
  vars = {
    hostname = var.hostname
    fqdn = "${var.hostname}.${var.domain}"
  }
}

data "template_file" "network_config" {
  template = file("${path.module}/network_config_dhcp.cfg")
}


# Create the machine
resource "libvirt_domain" "domain-ubuntu" {
  name = var.hostname
  memory = var.memoryMB
  vcpu = var.cpu

  disk {
       volume_id = libvirt_volume.os_image.id
  }
  network_interface {
       network_name = "default"
  }

  cloudinit = libvirt_cloudinit_disk.commoninit.id

  # 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
  console {
    type        = "pty"
    target_port = "0"
    target_type = "serial"
  }

  graphics {
    type = "spice"
    listen_type = "address"
    autoport = "true"
  }
}

terraform { 
  required_version = ">= 0.12"
}

output "ips" {
  # show IP, run 'terraform refresh' if not populated
  value = libvirt_domain.domain-ubuntu.*.network_interface.0.addresses
}

Puente br0:

5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:1d:7d:0d:2a:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.250/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fde6:4511:f54:0:21d:7dff:fe0d:2a9d/64 scope global dynamic mngtmpaddr 
       valid_lft forever preferred_lft forever
    inet6 fe80::21d:7dff:fe0d:2a9d/64 scope link 
       valid_lft forever preferred_lft forever

Respuesta1

en el resource "libvirt_domain" "domain-ubuntu"deberías intentar configurar:

network_interface {
    network_name = libvirt_network.vm_network.name
}

en lugar de:

network_interface {
    network_name = "default"
}

información relacionada