Packer: Utilice HCL

Creado en 16 dic. 2014  ·  48Comentarios  ·  Fuente: hashicorp/packer

Sería genial tener YAML (o el HCL ) por menos dinero y también permitir comentarios. (Ver https://github.com/mitchellh/packer/issues/283)

Si JSON debe ser el formato de configuración, entonces sería bueno permitir claves / valores similares a comentarios (tal vez donde los nombres tengan un prefijo con un glifo similar a un comentario). Por ejemplo:

{
  "builders": [
...
  ],
  "provisioners": [
      {
      "#TODO": "turn this into a puppet manifest",
      "type": "shell",
      "script": "setup.sh"
    },
    {
      "type": "shell",
      "execute_command": "sudo -E /bin/bash '{{ .Path }}'",
      "#": "Run as sudo and remove all the things we don't need",
      "inline": ["DEBIAN_FRONTEND=noninteractive apt-get -y clean autoremove"]
    }
  ]
}
core enhancement post-1.0

Comentario más útil

Hola, todos ! Tengo buenas noticias 🎉 😃

Recientemente, me tomé bastante tiempo para hacer que el movimiento de HCL2 ocurriera y puede encontrar un PR implementándolo aquí: # 8423. Algunos binarios se pueden encontrar aquí .
Estamos haciendo todo lo posible para probar muchos casos diferentes para evitar errores, pero hay muchos constructores / aprovisionadores / posprocesadores y somos un equipo pequeño, por lo que cualquier ayuda será muy bienvenida para probar esto. Si prueba esto y encuentra un error; abra un nuevo problema que indique que se trata de un error de HCL.

La forma actual (antigua) de configurar Packer seguirá funcionando y actualmente planeamos admitir completamente ambas versiones durante un tiempo hasta que nos sintamos lo suficientemente seguros como para desaprobar la anterior.

Ejemplo de archivo hcl

build {
    sources = [
        "source.amazon-ebs.first",
    ]

    provisioner "shell" {
        inline = [
            "sleep 5"
        ]
    }

    post-processor "shell-local" {
        inline = [
            "sleep 5"
        ]
    }
}

source "amazon-ebs" "first" {
    // access_key = "{{user `aws_access_key`}}"
    // secret_key = "{{user `aws_secret_key`}}"

    ami_name = "hcl2-test"
    region = "us-east-1"
    instance_type = "t2.micro"

    kms_key_id = "c729958f-c6ba-44cd-ab39-35ab68ce0a6c"
    encrypt_boot = true
    source_ami_filter {
        filters {
          virtualization-type = "hvm"
          name =  "amzn-ami-hvm-????.??.?.????????-x86_64-gp2"
          root-device-type = "ebs"
        }
        most_recent = true
        owners = ["amazon"]
    }
    launch_block_device_mappings {
        device_name = "/dev/xvda"
        volume_size = 20
        volume_type = "gp2"
        delete_on_termination = "true"
    }
    launch_block_device_mappings {
        device_name = "/dev/xvdf"
        volume_size = 500
        volume_type = "gp2"
        delete_on_termination = true
        encrypted = true
    }

    ami_regions = ["eu-central-1"]
    run_tags {
        Name = "packer-solr-something"
        stack-name = "DevOps Tools"
    }

    communicator = "ssh"
    ssh_pty = true
    ssh_username = "ec2-user"
    associate_public_ip_address = true
}

PD: ¡ya viene el manejo de documentos y variables!

Todos 48 comentarios

cc @pandacalculus

HCL llegará pronto: sonrisa:

@delitescere ¿

Aquí las claves desconocidas se manejarían de manera diferente a como se manejan ahora. Esto propone claves "similares a comentarios" que se ignoran. El comentario se indica mediante un prefijo de comentario de cierre automático generalmente conocido (a saber: # , // , ; )

Fue una sugerencia alternativa dado el cambio de código más grande para admitir comentarios en JSON no estándar, o JSON5 o YAML o HCL.

El comentario de @sethvargo sobre la medida para apoyar a HCL resuelve el problema.

@sethvargo

HCL llegará pronto: sonrisa:

Perdón por molestarte, ¿alguna actualización sobre esto?

Todavía viene: sonríe:

Decidimos retrasar esto un poco, ya que todavía no tenemos un escritor de HCL y nos gustaría mantener packer fix como una opción para las próximas versiones.

He bebido el kool-aid HCL. : +1:

Ahora que existe https://github.com/hashicorp/hcl, ¿podemos obtener una alternativa a json? :)

@jevonearth que existe desde hace bastante tiempo: smile :

Dado que aún está por llegar, ¿es este un buen momento para presentar la solicitud de incluir archivos? ver https://github.com/mkheironimus/packergen

@jevonearth aquí hay una alternativa hasta que agregue hcl

todavía viene pronto?

@mitchellh @sethvargo es este el escritor de HCL que mencionaste: https://github.com/hashicorp/hcl/tree/master/hcl/printer

Esperando YAML. No me gusta mucho el HCL

Es un poco trivial envolver el empaquetador con una función bash y convertir yaml en json .

Para empezar:

ruby -r json -r yaml -e "yaml = YAML.load(File.read(\"$1\")); print yaml.to_json"

(y al revés)

ruby -r json -r yaml -e "json = JSON.parse(File.read(\"$1\")); print YAML::dump(json)"

Ya hice eso. Sería bueno no tener que hacerlo. Por eso existe este boleto para HCL

El 16 de enero de 2017, a las 12:31 p.m., Rickard von Essen [email protected] escribió:

Es un poco trivial envolver el empaquetador con una función bash y convertir yaml a json.

Para empezar:

ruby -r json -r yaml -e "yaml = YAML.load (Archivo.read (\" $ 1 \ ")); imprimir yaml.to_json"
(y al revés)

ruby -r json -r yaml -e "json = JSON.parse (Archivo.read (\" $ 1 \ ")); imprimir YAML :: dump (json)"
-
Estás recibiendo esto porque hiciste un comentario.
Responda a este correo electrónico directamente, véalo en GitHub o silencie el hilo.

HCL

HashiCorp necesita mostrar un poco de fe en sí mismo y usar HCL en todos los lugares que pueda. O HCL fue una buena idea y deberían ejecutarse con él, o HCL fue un error y Terraform es un desastre. Claramente, esto último no es cierto. Entonces, como nuevo evaluador / adoptante, debo decir que es motivo de preocupación que estos 2 productos se sientan como "dos agencias de inteligencia que no se comunican entre sí".

Estoy con @sethvargo. Pongamos nuestro sigilo de lobo huargo y proclamemos que "HCL está llegando". (No solo eso, también haz que suceda).

JSON

No es necesario realizar ningún cambio en los comentarios de calzador en JSON. La solución nos la dio Douglas Crockford y la ejemplificó Nicholas Chammas en The Notorious Two Eight Three https://github.com/mitchellh/packer/issues/283#issuecomment -60039068

YAML

A los mineros de Ruby les encantan algunos YAML y nos dieron una solución para usarlo desde sus inicios. Esto fue maravillosamente ejemplificado por Rickard von Essen 2 comentarios hace https://github.com/mitchellh/packer/issues/1768#issuecomment -272921740 (aunque yo preferiría usar ARGF.read como hago a continuación)

Etcétera

Me encanta que HashiCorp facilita el uso de tantos o tan pocos de sus productos como necesite. Encaja bien con la filosofía de Unix (como lo resume Peter H. Salus en A Quarter-Century of Unix (1994)):

  • Escribe programas que hagan una cosa y la hagan bien.
  • Escriba programas para trabajar juntos.
  • Escriba programas para manejar flujos de texto, porque es una interfaz universal.

Deberíamos estar bien con:

JSON

$ cat > example.json <<'EOF'
// from: https://www.packer.io/intro/getting-started/vagrant.html
{
    // can't we take this out?
    "variables": {
        "aws_access_key": "", // why is this blank?
        "aws_secret_key": ""  // ditto
    },
    "builders": [{
        "type": "amazon-ebs",
        "access_key": "{{user `aws_access_key`}}",
        "secret_key": "{{user `aws_secret_key`}}",
        "region": "us-west-2",
        "source_ami": "ami-b7a114d7",
        "instance_type": "t2.micro",
        "ssh_username": "ubuntu",
        "ami_name": "packer-example {{timestamp}}",
        "tags": {
            "created_by": "Packer.io/example"
        }
    }],
    "provisioners": [{
        "type": "shell",
        "inline": [
            "sleep 30",
            "sudo apt-get update",
            "sudo apt-get install -y redis-server"
        ]
    }],
    "post-processors": ["vagrant"]
}
EOF

$ packer validate <(jsmin < example.json)
Template validated successfully.

YAML

$ cat > example.yaml <<'EOF'
---
# from: https://www.packer.io/intro/getting-started/vagrant.html

# can't we take this out?
variables:
  aws_access_key: '' # why is this blank?
  aws_secret_key: '' # ditto

builders:
- type: amazon-ebs
  access_key: '{{user `aws_access_key`}}'
  secret_key: '{{user `aws_secret_key`}}'
  region: us-west-2
  source_ami: ami-b7a114d7
  instance_type: t2.micro
  ssh_username: ubuntu
  ami_name: packer-example {{timestamp}}
  tags:
    created_by: Packer.io/example

provisioners:
- type: shell
  inline:
  - sleep 30
  - sudo apt-get update
  - sudo apt-get install -y redis-server

post-processors:
- vagrant
EOF

$ packer validate <(ruby -r json -r yaml -e "print YAML.load(ARGF.read).to_json" < example.yaml)
Template validated successfully.

bitmoji

Estoy creando un pequeño pr para plantillas yaml, para mis pruebas limitadas funciona bien para mí.

Definitivamente algo que estamos planeando investigar. Sin embargo, por ahora, dado que esto no es algo a lo que nos dirigimos para la versión 1.0, cerraré esto. Consulte la lista de correo para obtener más detalles sobre 1.0.

Es hora de reabrir el problema. Definitivamente, HCL debería ser el idioma de configuración predeterminado en Packer.

PD: Todavía no tiene idea de por qué se cerraron casi todos los problemas, hay proyectos, hitos y etiquetas para administrar los problemas.

Esto es algo que planeamos hacer. Dado que es una revisión tan grande, queremos asegurarnos de hacerlo bien. El siguiente paso para nosotros es pasar por nuestro proceso de RFC, que sería un tema aparte.

Doy la bienvenida a JSON5, YAML y HCL. JSON puro es doloroso.

@ darkn3rd Sentimos su dolor y es lo suficientemente doloroso que nosotros, Joyent, mantengamos una rama JSON5 que rastrea master porque la situación actual es insostenible para cualquiera que realmente use y mantenga una cantidad real de plantillas de empaquetado: https: //github.com/joyent/packer/tree/f-json5

/ yo hace una nota mental para actualizar la rama esta semana

Estamos cerca de 3 años de "próximamente" ... Soy un principiante con el empacador y estoy asombrado, por decir lo mínimo, de que no sea compatible con HCL. No puedo esperar para probarlo.

Acabo de decirle a mi amigo "hey, lat, ha migrado ese horrible json a HCL, es una herramienta hashicorp, ¿verdad?". Qué equivocado estaba ...

Si es de interés, yacker (una utilidad de Python) envuelve Packer en un intérprete de YAML a JSON. No es nada devastador , solo le proporciona un contenedor YAML que convierte los archivos de plantilla y variables temporalmente a JSON antes de pasar el control a Packer.

https://yacker.readthedocs.io/en/latest/

Equipo Packer? ¿Por qué todavía no proporciona HCL? Creé un pequeño parche para el soporte de YAML hace casi más de un año, que funciona bien y lo rechazas con razón, que viene HCL. ¡Pero después de un año nada cambió!
¿Que dices?

Sigue viniendo: guiño:

@vtolstov ver # 7023

La gente de productos internos de HashiCorp ha decidido que vamos a saltarnos directamente sobre HCL1 e implementar HCL2 en su lugar; Lo siento, esto nunca se implementó, pero prometo que estamos trabajando activamente en el soporte de HCL2 en este momento.

Gracias por la actualizacion. No nos hemos rendido con esto.

¡Gracias @SwampDragons! Dado que esto se está trabajando activamente, ¿debería reabrirse este tema?

Buen punto; se cerró accidentalmente cuando cerramos el PR asociado sin fusionar.

¡Realmente emocionado por el soporte de HCL2 con Packer!

@SwampDragons ¿ Alguna noticia sobre HCL, por favor?

Esperamos (pero no prometemos) sacarlo con la versión 1.5.0. El equipo tiene un prototipo funcional en una sucursal, pero aún no está pulido ni endurecido y con @azr a punto de estar de baja por paternidad, podemos terminar teniendo que deslizarlo un poco más tarde. La meta es para fin de año, preferiblemente más cerca de septiembre que de diciembre.

Regresé después de algunos años y me sorprendió que aún estuviera abierto.
Me alegro de que esté en camino en 1.5.

@SwampDragons ¿Tiene algún cronograma aproximado para cuándo estará disponible 1.5.0 (incluso como versión beta)?

Si el cambio es complicado (y puede haber muy buenas razones para ello), ¿no es un riesgo y un costo de desarrollo mucho menor dejar una herramienta perfectamente buena sola y, en su lugar, en lugar de cambiar el formato de definición principal, proporcionar _adaptadores_ que conviertan formato-X a JSON?

Solo un pensamiento.

No quiero trivializar el problema y es posible que tenga razones realmente importantes para cambiar el formato principal, pero, considerando el tiempo y el esfuerzo que se está dedicando a esto, si se trata solo de cómo los usuarios definen sus archivos, entonces, como proyecto, es ¿Existe la necesidad de _adaptadores de idioma_ como yacker ?

@alanbchristie Para ser justos, no se ha trabajado activamente en todo este tiempo; ha sido un tema de segundo plano "deberíamos pensar en esto" durante mucho tiempo, más recientemente porque queríamos ver cómo fue el lanzamiento de HCL2 con Terraform 0.12 para poder aprender de su proceso antes de intentar hacerlo de nuevo nosotros mismos. . No creo que sea un proceso tan arduo como lo fue para Terraform, pero no puedo hablar de los detalles porque, como dije, es un proyecto en el que @azr estaba trabajando y él está experimentando la felicidad de los padres en este momento. ;) Cuando regrese le preguntaré si puede escribir una pequeña actualización de progreso para todos ustedes.

@NickLarsenNZ La hoja de ruta que le muestro a mi jefe dice en algún momento alrededor de octubre o noviembre. Si lo desea, puedo hacerle ping una vez que tengamos una compilación que se pueda probar.

Soy nuevo en el empaquetador ... pero seré honesto, el hecho de que este haya sido un problema sin resolver durante 5-6 años no solo es bastante desalentador, sino extremadamente frustrante.

Usar jq para eliminar comentarios mientras es una solución, significa que probablemente hay 99 comentarios que no se escribieron por cada 1 comentario escrito con jq para eliminar.

Podría seguir durante días cómo json, tal como lo implementó el empacador, no es adecuado para esta tarea, pero el hecho de que no permite comentarios y fomenta la duplicación de código / configuración (¿por qué siento que necesito escribir un paquete json pseudocompilador para habilitar la reutilización de la configuración).

Bloqueado para reducir el ruido; @azr está de regreso y le pediré que brinde una actualización sobre este tema, incluida la provisión de versiones beta, cuando tenga la oportunidad.

Hola, todos ! Tengo buenas noticias 🎉 😃

Recientemente, me tomé bastante tiempo para hacer que el movimiento de HCL2 ocurriera y puede encontrar un PR implementándolo aquí: # 8423. Algunos binarios se pueden encontrar aquí .
Estamos haciendo todo lo posible para probar muchos casos diferentes para evitar errores, pero hay muchos constructores / aprovisionadores / posprocesadores y somos un equipo pequeño, por lo que cualquier ayuda será muy bienvenida para probar esto. Si prueba esto y encuentra un error; abra un nuevo problema que indique que se trata de un error de HCL.

La forma actual (antigua) de configurar Packer seguirá funcionando y actualmente planeamos admitir completamente ambas versiones durante un tiempo hasta que nos sintamos lo suficientemente seguros como para desaprobar la anterior.

Ejemplo de archivo hcl

build {
    sources = [
        "source.amazon-ebs.first",
    ]

    provisioner "shell" {
        inline = [
            "sleep 5"
        ]
    }

    post-processor "shell-local" {
        inline = [
            "sleep 5"
        ]
    }
}

source "amazon-ebs" "first" {
    // access_key = "{{user `aws_access_key`}}"
    // secret_key = "{{user `aws_secret_key`}}"

    ami_name = "hcl2-test"
    region = "us-east-1"
    instance_type = "t2.micro"

    kms_key_id = "c729958f-c6ba-44cd-ab39-35ab68ce0a6c"
    encrypt_boot = true
    source_ami_filter {
        filters {
          virtualization-type = "hvm"
          name =  "amzn-ami-hvm-????.??.?.????????-x86_64-gp2"
          root-device-type = "ebs"
        }
        most_recent = true
        owners = ["amazon"]
    }
    launch_block_device_mappings {
        device_name = "/dev/xvda"
        volume_size = 20
        volume_type = "gp2"
        delete_on_termination = "true"
    }
    launch_block_device_mappings {
        device_name = "/dev/xvdf"
        volume_size = 500
        volume_type = "gp2"
        delete_on_termination = true
        encrypted = true
    }

    ami_regions = ["eu-central-1"]
    run_tags {
        Name = "packer-solr-something"
        stack-name = "DevOps Tools"
    }

    communicator = "ssh"
    ssh_pty = true
    ssh_username = "ec2-user"
    associate_public_ip_address = true
}

PD: ¡ya viene el manejo de documentos y variables!

Esta es una gran noticia @azr , gracias a ti y al equipo.

WRT: obsoleto JSON.
¿Es correcto que planee aprovechar el soporte JSON integrado de HCL / HCL2?

¿Hay un convertidor json2hcl? He hecho scripts de empaquetado bien hechos de Netflix OSS que me encantaría convertir a HCL.

¡Hola a todos, estoy emocionado con este cambio!

@ darkn3rd Planeo hacer un convertidor específico de empaquetador para que los usuarios puedan probarlo rápidamente sin demasiado trabajo de copiar, pegar y editar.

@mexisme La biblioteca HCL comprende completamente JSON, pero el formato se ha cambiado un poco, por lo que se necesitarán algunas modificaciones. Intentaré que el convertidor convierta un archivo a JSON también (o algo así).


⚠️ mi primer ejemplo ha cambiado y parece terraform un poco más.

Ejemplo de archivo hcl

build {
    sources = [
        "source.amazon-ebs.first",
    ]

    provisioner "shell" {
        inline = [
            "sleep 5"
        ]
    }

    post-processor "shell-local" {
        inline = [
            "sleep 5"
        ]
    }
}

source "amazon-ebs" "first" {
    // access_key = "{{user `aws_access_key`}}"
    // secret_key = "{{user `aws_secret_key`}}"

    ami_name = "hcl2-test"
    region = "us-east-1"
    instance_type = "t2.micro"

    kms_key_id = "c729958f-c6ba-44cd-ab39-35ab68ce0a6c"
    encrypt_boot = true
    source_ami_filter {
        filters {
          virtualization-type = "hvm"
          name =  "amzn-ami-hvm-????.??.?.????????-x86_64-gp2"
          root-device-type = "ebs"
        }
        most_recent = true
        owners = ["amazon"]
    }
    launch_block_device_mappings {
        device_name = "/dev/xvda"
        volume_size = 20
        volume_type = "gp2"
        delete_on_termination = "true"
    }
    launch_block_device_mappings {
        device_name = "/dev/xvdf"
        volume_size = 500
        volume_type = "gp2"
        delete_on_termination = true
        encrypted = true
    }

    ami_regions = ["eu-central-1"]
    run_tags {
        Name = "packer-solr-something"
        stack-name = "DevOps Tools"
    }

    communicator = "ssh"
    ssh_pty = true
    ssh_username = "ec2-user"
    associate_public_ip_address = true
}

Se pueden encontrar nuevos binarios aquí

Voy a bloquear este problema porque ha estado cerrado durante _30 días_ ⏳. Esto ayuda a nuestros mantenedores a encontrar y concentrarse en los problemas activos.

Si ha encontrado un problema que parece similar a este, abra un nuevo problema y complete la plantilla de problemas para que podamos capturar todos los detalles necesarios para investigar más a fondo.

¿Fue útil esta página
0 / 5 - 0 calificaciones