Multiple disk from var-file - map

74 views
Skip to first unread message

Manish Garedia

unread,
Sep 1, 2020, 2:15:21 PM9/1/20
to Packer
Is there any way of using map in var-file:

I have something like this in packer.json

      "storage": [
        {
          "disk_size": "{{user `vm-disk-size`}}",
          "disk_thin_provisioned": true
        }
      ],
      "storage": [
        {
          "disk_size": "{{user `vm-disk-size`}}",
          "disk_thin_provisioned": true
        }
      ],

what's the best way to have this in var-file. FYI, I have tried to flatten the json but doesn't work.

Manish Garedia

unread,
Sep 1, 2020, 2:17:00 PM9/1/20
to Packer
Had to wrong json posted. here's the right one.

      "storage": [
        {
          "disk_size": "{{user `vm-disk-size`}}",
          "disk_thin_provisioned": true
        },
       {
          "disk_size": "{{user `vm-disk-size`}}",
          "disk_thin_provisioned": true
        }
      ],

Megan Marsh

unread,
Sep 2, 2020, 1:47:40 PM9/2/20
to packe...@googlegroups.com
var-files only support string variables, not maps. If you want to use map variables, consider upgrading to hcl2 templates.

--
This mailing list is governed under the HashiCorp Community Guidelines - https://www.hashicorp.com/community-guidelines.html. Behavior in violation of those guidelines may result in your removal from this mailing list.
 
GitHub Issues: https://github.com/hashicorp/packer/issues
IRC: #packer-tool on Freenode
---
You received this message because you are subscribed to the Google Groups "Packer" group.
To unsubscribe from this group and stop receiving emails from it, send an email to packer-tool...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/packer-tool/960198f1-4c34-4872-836e-70a9909457e0n%40googlegroups.com.

Manish Garedia

unread,
Sep 9, 2020, 2:23:52 PM9/9/20
to Packer
Thanks for the reply!

I have converted now everything to hcl2 templates. Can you please suggest what's the best way to pass storage as a MAP based on if there is going to a single disk or two disk?

source "vsphere-iso" "centos" {
  CPUs = var.vm-cpu-num
  RAM = var.vm-mem-size
  RAM_reserve_all = false
  boot_command = [
    "<tab> inst.text inst.ks=hd:fd0:/${ var.ks-file } <enter><wait>"
  ]
  boot_order = "disk,cdrom,floppy"
  boot_wait = "10s"
  cluster = var.vsphere-cluster
  communicator = "ssh"
  convert_to_template = true
  datastore = var.vsphere-datastore
  disk_controller_type = ["pvscsi"]
  floppy_files = [
    var.ks-file
  ]
  guest_os_type = "centos7_64Guest"
  host = var.vsphere-host
  insecure_connection = "true"
  iso_paths = [
    var.iso_url
  ]
  network_adapters {
      network = var.vsphere-network
      network_card = "vmxnet3"
    }
  notes = "Build via Packer"
  password = var.vsphere-password
  ssh_password = var.ssh_password
  ssh_username = "root"
  storage {
      disk_size = var.vm-disk-size
      disk_thin_provisioned = true
    }
    storage {
        disk_size = var.vm-disk-size2
        disk_thin_provisioned = true
      }
..
build {
  sources = [
    "source.vsphere-iso.centos"
  ]
}

Manish Garedia

unread,
Sep 10, 2020, 6:15:06 PM9/10/20
to Packer
Here's what I am trying to achieve it.

dynamic "storage" { 
 for_each = var.storage 
 content { 
 disk_size = storage.key disk_thin_provisioned = true }
}

and storage is defined as list variable in variables.pkr.hcl

variable "storage" { default = [] }

Running Packer like this:

packer build -var ks-file='"ks-2disk.cf"' -var storage='"["51200","25600"]"' .

Getting this error at this time: Error: Extra characters after expression

on line 1: (source code not available)

An expression was successfully parsed, but extra characters were found after it.


Wilken Rivera

unread,
Sep 10, 2020, 6:52:41 PM9/10/20
to packe...@googlegroups.com
Hi Manish

I believe the double quotes around the list may be the issue here.

Have you tried removing the quotes?

When specifying the list var on the cli you will need to drop the additional quotes so that it is read in as a list. 

-var 'storage=[”51200”,”25600”]’


Also for string list types you should specify the type as `list(string)` as opposed to using a default=[].

variable “storage” {
   type=list(string)
 }

Let me know if that helps. 


On Sep 10, 2020, at 18:15, Manish Garedia <gar...@gmail.com> wrote:

Here's what I am trying to achieve it.

Manish Garedia

unread,
Sep 10, 2020, 7:07:10 PM9/10/20
to packe...@googlegroups.com
Thanks for replying!

I change the variable as you suggested and remove the quotes but now getting this error about disk_size.

variable “storage” {
   type=list(string)
 }


✗ packer build  -var ks-file='"ks-2disk.cf"' -var storage='["51200", "25600"]'  .
Error: 1 error(s) occurred:

* storage[0].'disk_size' is required

  on centos.pkr.hcl line 1:
  (source code not available)

==> Wait completed after 4 microseconds

==> Builds finished but no artifacts were created.


Manish Garedia

unread,
Sep 10, 2020, 10:34:34 PM9/10/20
to Packer
I got it working by changing to:

dynamic "storage" { 
 for_each = var.storage 
 content { 
 disk_size = storage.value 
disk_thin_provisioned = true }
}

Reply all
Reply to author
Forward
0 new messages