equinix-labs / terraform-equinix-metal-eks-anywhere

EKS Anywhere on Equinix Metal (Baremetal)
https://deploy.equinix.com/labs/terraform-equinix-metal-eks-anywhere/
Apache License 2.0
9 stars 5 forks source link

POC Demo - Error: API Error HTTP 422 Userdata unrecognized userdata format #65

Open jasonbent opened 1 year ago

jasonbent commented 1 year ago

Trying to get the POC/Demo working and hitting this error under terraform 1.3.5

Any idea or pointers why this is occurring and/or known fixes...?

Thanks!

│ Error: API Error HTTP 422 Userdata unrecognized userdata format
│
│   with module.eksa.equinix_metal_device.eksa_admin,
│   on ..\..\main.tf line 141, in resource "equinix_metal_device" "eksa_admin":
│  141: resource "equinix_metal_device" "eksa_admin" {

Full Apply Results; Project ID redacted

C:\Repos\terraform-equinix-metal-eks-anywhere\examples\deploy>terraform.exe apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # module.eksa.equinix_metal_device.eksa_admin will be created
  + resource "equinix_metal_device" "eksa_admin" {
      + access_private_ipv4              = (known after apply)
      + access_public_ipv4               = (known after apply)
      + access_public_ipv6               = (known after apply)
      + always_pxe                       = false
      + billing_cycle                    = "hourly"
      + created                          = (known after apply)
      + deployed_facility                = (known after apply)
      + deployed_hardware_reservation_id = (known after apply)
      + force_detach_volumes             = false
      + hostname                         = (known after apply)
      + id                               = (known after apply)
      + locked                           = (known after apply)
      + metro                            = "sv"
      + network                          = (known after apply)
      + network_type                     = (known after apply)
      + operating_system                 = "ubuntu_20_04"
      + plan                             = "m3.small.x86"
      + ports                            = (known after apply)
      + project_id                       = "REDACTED"
      + root_password                    = (sensitive value)
      + ssh_key_ids                      = (known after apply)
      + state                            = (known after apply)
      + tags                             = (known after apply)
      + updated                          = (known after apply)
      + user_data                        = (sensitive value)
      + wait_for_reservation_deprovision = false
    }

  # module.eksa.equinix_metal_device.eksa_node_cp[0] will be created
  + resource "equinix_metal_device" "eksa_node_cp" {
      + access_private_ipv4              = (known after apply)
      + access_public_ipv4               = (known after apply)
      + access_public_ipv6               = (known after apply)
      + always_pxe                       = false
      + billing_cycle                    = "hourly"
      + created                          = (known after apply)
      + deployed_facility                = (known after apply)
      + deployed_hardware_reservation_id = (known after apply)
      + force_detach_volumes             = false
      + hostname                         = (known after apply)
      + id                               = (known after apply)
      + ipxe_script_url                  = (known after apply)
      + locked                           = (known after apply)
      + metro                            = "sv"
      + network                          = (known after apply)
      + network_type                     = (known after apply)
      + operating_system                 = "custom_ipxe"
      + plan                             = "m3.small.x86"
      + ports                            = (known after apply)
      + project_id                       = "REDACTED"
      + root_password                    = (sensitive value)
      + ssh_key_ids                      = (known after apply)
      + state                            = (known after apply)
      + tags                             = (known after apply)
      + updated                          = (known after apply)
      + wait_for_reservation_deprovision = false
    }

  # module.eksa.equinix_metal_device.eksa_node_dp[0] will be created
  + resource "equinix_metal_device" "eksa_node_dp" {
      + access_private_ipv4              = (known after apply)
      + access_public_ipv4               = (known after apply)
      + access_public_ipv6               = (known after apply)
      + always_pxe                       = false
      + billing_cycle                    = "hourly"
      + created                          = (known after apply)
      + deployed_facility                = (known after apply)
      + deployed_hardware_reservation_id = (known after apply)
      + force_detach_volumes             = false
      + hostname                         = (known after apply)
      + id                               = (known after apply)
      + ipxe_script_url                  = (known after apply)
      + locked                           = (known after apply)
      + metro                            = "sv"
      + network                          = (known after apply)
      + network_type                     = (known after apply)
      + operating_system                 = "custom_ipxe"
      + plan                             = "m3.small.x86"
      + ports                            = (known after apply)
      + project_id                       = "REDACTED"
      + root_password                    = (sensitive value)
      + ssh_key_ids                      = (known after apply)
      + state                            = (known after apply)
      + tags                             = (known after apply)
      + updated                          = (known after apply)
      + wait_for_reservation_deprovision = false
    }

  # module.eksa.equinix_metal_gateway.gw will be created
  + resource "equinix_metal_gateway" "gw" {
      + id                       = (known after apply)
      + ip_reservation_id        = (known after apply)
      + private_ipv4_subnet_size = (known after apply)
      + project_id               = "REDACTED"
      + state                    = (known after apply)
      + vlan_id                  = (known after apply)
      + vrf_id                   = (known after apply)
    }

  # module.eksa.equinix_metal_port.cp_bond0[0] will be created
  + resource "equinix_metal_port" "cp_bond0" {
      + bond_id           = (known after apply)
      + bond_name         = (known after apply)
      + bonded            = false
      + disbond_supported = (known after apply)
      + id                = (known after apply)
      + layer2            = true
      + mac               = (known after apply)
      + name              = (known after apply)
      + network_type      = (known after apply)
      + port_id           = (known after apply)
      + type              = (known after apply)
      + vlan_ids          = (known after apply)
      + vxlan_ids         = (known after apply)
    }

  # module.eksa.equinix_metal_port.cp_eth0[0] will be created
  + resource "equinix_metal_port" "cp_eth0" {
      + bond_id           = (known after apply)
      + bond_name         = (known after apply)
      + bonded            = false
      + disbond_supported = (known after apply)
      + id                = (known after apply)
      + mac               = (known after apply)
      + name              = (known after apply)
      + network_type      = (known after apply)
      + port_id           = (known after apply)
      + type              = (known after apply)
      + vlan_ids          = (known after apply)
      + vxlan_ids         = (known after apply)
    }

  # module.eksa.equinix_metal_port.dp_bond0[0] will be created
  + resource "equinix_metal_port" "dp_bond0" {
      + bond_id           = (known after apply)
      + bond_name         = (known after apply)
      + bonded            = false
      + disbond_supported = (known after apply)
      + id                = (known after apply)
      + layer2            = true
      + mac               = (known after apply)
      + name              = (known after apply)
      + network_type      = (known after apply)
      + port_id           = (known after apply)
      + type              = (known after apply)
      + vlan_ids          = (known after apply)
      + vxlan_ids         = (known after apply)
    }

  # module.eksa.equinix_metal_port.dp_eth0[0] will be created
  + resource "equinix_metal_port" "dp_eth0" {
      + bond_id           = (known after apply)
      + bond_name         = (known after apply)
      + bonded            = false
      + disbond_supported = (known after apply)
      + id                = (known after apply)
      + mac               = (known after apply)
      + name              = (known after apply)
      + network_type      = (known after apply)
      + port_id           = (known after apply)
      + type              = (known after apply)
      + vlan_ids          = (known after apply)
      + vxlan_ids         = (known after apply)
    }

  # module.eksa.equinix_metal_port.eksa_admin_bond0 will be created
  + resource "equinix_metal_port" "eksa_admin_bond0" {
      + bond_id           = (known after apply)
      + bond_name         = (known after apply)
      + bonded            = true
      + disbond_supported = (known after apply)
      + id                = (known after apply)
      + layer2            = false
      + mac               = (known after apply)
      + name              = (known after apply)
      + network_type      = (known after apply)
      + port_id           = (known after apply)
      + type              = (known after apply)
      + vlan_ids          = (known after apply)
      + vxlan_ids         = (known after apply)
    }

  # module.eksa.equinix_metal_reserved_ip_block.public_ips will be created
  + resource "equinix_metal_reserved_ip_block" "public_ips" {
      + address        = (known after apply)
      + address_family = (known after apply)
      + cidr           = (known after apply)
      + cidr_notation  = (known after apply)
      + custom_data    = jsonencode({})
      + gateway        = (known after apply)
      + global         = (known after apply)
      + id             = (known after apply)
      + manageable     = (known after apply)
      + management     = (known after apply)
      + metro          = "sv"
      + netmask        = (known after apply)
      + network        = (known after apply)
      + project_id     = "REDACTED"
      + public         = (known after apply)
      + quantity       = 16
      + tags           = (known after apply)
      + type           = "public_ipv4"
      + wait_for_state = "created"
    }

  # module.eksa.equinix_metal_ssh_key.ssh_pub_key will be created
  + resource "equinix_metal_ssh_key" "ssh_pub_key" {
      + created     = (known after apply)
      + fingerprint = (known after apply)
     + id          = (known after apply)
      + name        = (known after apply)
      + owner_id    = (known after apply)
      + public_key  = (known after apply)
      + updated     = (known after apply)
    }

  # module.eksa.equinix_metal_vlan.provisioning_vlan will be created
  + resource "equinix_metal_vlan" "provisioning_vlan" {
      + description = "provisioning_vlan"
      + id          = (known after apply)
      + metro       = "sv"
      + project_id  = "REDACTED"
      + vxlan       = (known after apply)
    }

  # module.eksa.local_file.ssh_private_key will be created
  + resource "local_file" "ssh_private_key" {
      + content              = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0600"
      + filename             = (known after apply)
      + id                   = (known after apply)
    }

  # module.eksa.null_resource.create_cluster will be created
  + resource "null_resource" "create_cluster" {
      + id       = (known after apply)
      + triggers = {
          + "ids" = (known after apply)
        }
    }

  # module.eksa.null_resource.wait_for_cloud_init will be created
  + resource "null_resource" "wait_for_cloud_init" {
      + id = (known after apply)
    }

  # module.eksa.random_string.resource_suffix will be created
  + resource "random_string" "resource_suffix" {
      + id          = (known after apply)
      + length      = 6
      + lower       = true
      + min_lower   = 0
      + min_numeric = 0
      + min_special = 0
      + min_upper   = 0
      + number      = true
      + numeric     = true
      + result      = (known after apply)
      + special     = false
      + upper       = false
    }

  # module.eksa.random_string.ssh_key_suffix will be created
  + resource "random_string" "ssh_key_suffix" {
      + id          = (known after apply)
      + length      = 3
      + lower       = true
      + min_lower   = 0
      + min_numeric = 0
      + min_special = 0
      + min_upper   = 0
      + number      = true
      + numeric     = true
      + result      = (known after apply)
      + special     = false
      + upper       = false
    }

  # module.eksa.tls_private_key.ssh_key_pair will be created
  + resource "tls_private_key" "ssh_key_pair" {
      + algorithm                     = "RSA"
      + ecdsa_curve                   = "P224"
      + id                            = (known after apply)
      + private_key_openssh           = (sensitive value)
      + private_key_pem               = (sensitive value)
      + private_key_pem_pkcs8         = (sensitive value)
      + public_key_fingerprint_md5    = (known after apply)
      + public_key_fingerprint_sha256 = (known after apply)
      + public_key_openssh            = (known after apply)
      + public_key_pem                = (known after apply)
      + rsa_bits                      = 4096
    }

Plan: 18 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + eksa_admin_ip           = (known after apply)
  + eksa_admin_ssh_key      = (known after apply)
  + eksa_admin_ssh_user     = "root"
  + eksa_nodes_sos          = (known after apply)
  + eksa_pool_admin         = (known after apply)
  + eksa_public_ips_cidr    = (known after apply)
  + eksa_public_ips_gateway = (known after apply)
  + eksa_public_ips_netmask = (known after apply)
  + eksa_vlan_id            = (known after apply)

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

module.eksa.tls_private_key.ssh_key_pair: Creating...
module.eksa.random_string.resource_suffix: Creating...
module.eksa.random_string.ssh_key_suffix: Creating...
module.eksa.random_string.resource_suffix: Creation complete after 0s [id=zpz0k7]
module.eksa.random_string.ssh_key_suffix: Creation complete after 0s [id=hkm]
module.eksa.equinix_metal_vlan.provisioning_vlan: Creating...
module.eksa.equinix_metal_reserved_ip_block.public_ips: Creating...
module.eksa.equinix_metal_vlan.provisioning_vlan: Creation complete after 2s [id=1ef8b88a-762c-4497-a327-b87754946bad]
module.eksa.tls_private_key.ssh_key_pair: Creation complete after 2s [id=40bb078d4033298b1b17d6e98dcfae8e0fff7089]
module.eksa.equinix_metal_ssh_key.ssh_pub_key: Creating...
module.eksa.local_file.ssh_private_key: Creating...
module.eksa.local_file.ssh_private_key: Creation complete after 0s [id=ae18c8bc2978795f474edd593d3fde37f75281fe]
module.eksa.equinix_metal_ssh_key.ssh_pub_key: Creation complete after 1s [id=6f96a44b-64a9-43d4-9283-e0578d578002]
module.eksa.equinix_metal_reserved_ip_block.public_ips: Creation complete after 2s [id=6be17170-551e-43b6-93be-dc8c1ecbbef8]
module.eksa.equinix_metal_gateway.gw: Creating...
module.eksa.equinix_metal_device.eksa_node_dp[0]: Creating...
module.eksa.equinix_metal_device.eksa_node_cp[0]: Creating...
module.eksa.equinix_metal_device.eksa_admin: Creating...
module.eksa.equinix_metal_gateway.gw: Creation complete after 1s [id=d2499c05-349c-4199-9296-9bebf869e42e]
module.eksa.equinix_metal_device.eksa_node_dp[0]: Still creating... [10s elapsed]
module.eksa.equinix_metal_device.eksa_node_cp[0]: Still creating... [10s elapsed]
module.eksa.equinix_metal_device.eksa_node_cp[0]: Still creating... [20s elapsed]
module.eksa.equinix_metal_device.eksa_node_dp[0]: Still creating... [20s elapsed]
module.eksa.equinix_metal_device.eksa_node_dp[0]: Still creating... [30s elapsed]
module.eksa.equinix_metal_device.eksa_node_cp[0]: Still creating... [30s elapsed]
module.eksa.equinix_metal_device.eksa_node_cp[0]: Still creating... [40s elapsed]
module.eksa.equinix_metal_device.eksa_node_dp[0]: Still creating... [40s elapsed]
module.eksa.equinix_metal_device.eksa_node_cp[0]: Still creating... [50s elapsed]
module.eksa.equinix_metal_device.eksa_node_dp[0]: Still creating... [50s elapsed]
module.eksa.equinix_metal_device.eksa_node_dp[0]: Creation complete after 1m15s [id=ffc39c07-af85-479e-acab-ff87a6e6d0c3]
module.eksa.equinix_metal_device.eksa_node_cp[0]: Creation complete after 1m26s [id=22c9f8a0-d5e1-4714-bb0c-0de748be5327]
module.eksa.equinix_metal_port.dp_bond0[0]: Creating...
module.eksa.equinix_metal_port.cp_bond0[0]: Creating...
module.eksa.equinix_metal_port.dp_bond0[0]: Still creating... [10s elapsed]
module.eksa.equinix_metal_port.cp_bond0[0]: Still creating... [10s elapsed]
module.eksa.equinix_metal_port.cp_bond0[0]: Creation complete after 13s [id=acc02bf6-b864-4dcb-849a-32a6cde594c3]
module.eksa.equinix_metal_port.cp_eth0[0]: Creating...
module.eksa.equinix_metal_port.dp_bond0[0]: Creation complete after 17s [id=7c5f901f-b15c-448c-81d6-7b61489a12e3]
module.eksa.equinix_metal_port.dp_eth0[0]: Creating...
module.eksa.equinix_metal_port.cp_eth0[0]: Still creating... [10s elapsed]
module.eksa.equinix_metal_port.dp_eth0[0]: Still creating... [10s elapsed]
module.eksa.equinix_metal_port.cp_eth0[0]: Creation complete after 17s [id=a49651de-22a4-4a0e-886e-a90875639af2]
module.eksa.equinix_metal_port.dp_eth0[0]: Creation complete after 17s [id=b7f60612-d368-4bb6-a1ae-d07e6fbf21ba]
╷
│ Error: API Error HTTP 422 Userdata unrecognized userdata format
│
│   with module.eksa.equinix_metal_device.eksa_admin,
│   on ..\..\main.tf line 141, in resource "equinix_metal_device" "eksa_admin":
│  141: resource "equinix_metal_device" "eksa_admin" {
│
╵

C:\Repos\terraform-equinix-metal-eks-anywhere\examples\deploy>terraform.exe state list
module.eksa.equinix_metal_device.eksa_node_cp[0]
module.eksa.equinix_metal_device.eksa_node_dp[0]
module.eksa.equinix_metal_gateway.gw
module.eksa.equinix_metal_port.cp_bond0[0]
module.eksa.equinix_metal_port.cp_eth0[0]
module.eksa.equinix_metal_port.dp_bond0[0]
module.eksa.equinix_metal_port.dp_eth0[0]
module.eksa.equinix_metal_reserved_ip_block.public_ips
module.eksa.equinix_metal_ssh_key.ssh_pub_key
module.eksa.equinix_metal_vlan.provisioning_vlan
module.eksa.local_file.ssh_private_key
module.eksa.random_string.resource_suffix
module.eksa.random_string.ssh_key_suffix
module.eksa.tls_private_key.ssh_key_pair