Packer: HCL verwenden

Erstellt am 16. Dez. 2014  ·  48Kommentare  ·  Quelle: hashicorp/packer

Es wäre großartig, YAML (oder die HCL ) für weniger Cruft zu haben und auch Kommentare zuzulassen. (Siehe https://github.com/mitchellh/packer/issues/283)

Wenn JSON das Konfigurationsformat sein muss, wäre es schön, kommentarähnliche Schlüssel/Werte zuzulassen (vielleicht wo den Namen ein kommentarähnliches Glyphe vorangestellt ist). Zum Beispiel:

{
  "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

Hilfreichster Kommentar

Hallo alle zusammen ! Ich habe gute Neuigkeiten 🎉 😃

Ich habe vor kurzem einige Zeit gebraucht, um den HCL2-Umzug durchzuführen, und Sie finden eine PR, die ihn umsetzt, hier: #8423. Einige Binärdateien finden Sie hier .
Wir tun unser Bestes, um viele verschiedene Fälle zu testen, um Fehler zu vermeiden, aber es gibt viele Builder/Provisioner/Postprozessoren und wir sind ein kleines Team, daher ist jede Hilfe beim Testen sehr willkommen! Wenn Sie dies versuchen und einen Fehler finden; Bitte öffnen Sie ein neues Problem und geben Sie an, dass es sich um einen HCL-Fehler handelt.

Die aktuelle (alte) Methode zum Einrichten von Packer wird weiterhin funktionieren und wir planen derzeit, beide Versionen für eine Weile vollständig zu unterstützen, bis wir uns sicher genug fühlen, die alte Version zu verabschieden.

Beispiel hcl-Datei

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
}

PS: Handhabung von Dokumenten und Variablen kommt!

Alle 48 Kommentare

cc @pandacalculus

HCL kommt bald :smile:

@delitescere Ist dieses Problem kein Duplikat von #283? Ich habe bemerkt, dass Sie im ersten Beitrag darauf verlinkt haben, aber es ist nicht klar, was der Unterschied zwischen den beiden Problemen ist.

Hier würden unbekannte Schlüssel anders behandelt als jetzt. Dies schlägt "kommentarähnliche" Schlüssel vor, die ignoriert werden. Die Kommentarfähigkeit wird durch ein allgemein bekanntes selbstschließendes Kommentarpräfix angezeigt (nämlich: # , // , ; )

Angesichts der größeren Codeänderung war es ein alternativer Vorschlag, Kommentare in nicht standardmäßigem JSON oder JSON5 oder YAML oder HCL zu unterstützen.

Der Kommentar von

@sethvargo

HCL kommt bald :smile:

Tut mir leid, Sie zu stören, gibt es dazu Neuigkeiten?

Es kommt noch :smile:

Wir haben uns entschieden, dies etwas zu verschieben, da wir noch keinen HCL-Writer haben und packer fix als Option für die nächsten paar Versionen beibehalten möchten.

Ich habe das HCL kool-Aid getrunken. :+1:

Können wir jetzt, da https://github.com/hashicorp/hcl existiert, eine Alternative zu json bekommen? :)

@jevonearth das gibt es schon länger: smile:. HCL kommt noch!

Ist dies ein guter Zeitpunkt, um Feature-Request-Include-Dateien zu erstellen, da es immer noch kommt? siehe https://github.com/mkheironimus/packergen

@jevonearth hier ist eine Alternative, bis hcl hinzugefügt wird

kommt noch bald?

@mitchellh @sethvargo ist dies der HCL-Autor, den Sie erwähnt haben: https://github.com/hashicorp/hcl/tree/master/hcl/printer

Warten auf YAML. Nicht wirklich in HCL

Es ist ziemlich trivial, Packer mit einer Bash-Funktion zu umhüllen und yaml in json umzuwandeln.

Um Ihnen den Einstieg zu erleichtern:

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

(und umgekehrt)

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

Das habe ich schon gemacht. Es wäre schön, das nicht zu müssen. Deshalb gibt es dieses Ticket für HCL

Am 16. Januar 2017 um 12:31 Uhr schrieb Rickard von Essen [email protected] :

Es ist ziemlich trivial, Packer mit einer Bash-Funktion zu verpacken und yaml in json zu konvertieren.

Um Ihnen den Einstieg zu erleichtern:

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

ruby -r json -r yaml -e "json = JSON.parse(File.read(\"$1\")); print YAML::dump(json)"
Ich
Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub an oder schalten Sie den Thread stumm.

HCL

HashiCorp muss ein wenig Vertrauen in sich selbst zeigen und HCL überall einsetzen, wo es kann. Entweder war HCL eine gute Idee und sie sollten damit laufen, oder HCL war ein Fehler und Terraform ist eine Katastrophe. Letzteres ist eindeutig nicht wahr. Als neuer Bewerter/Anwender muss ich also sagen, dass es Anlass zur Sorge gibt, dass sich diese beiden Produkte wie "zwei Geheimdienste, die nicht miteinander reden" anfühlen.

Ich bin bei @sethvargo. Lasst uns unser Schattenwolf-Siegel aufsetzen und verkünden, dass "HCL kommt". (Nicht nur das, mach es auch möglich.)

JSON

Es müssen keine Änderungen an Schuhlöffelkommentaren in JSON vorgenommen werden. Die Lösung wurde uns von Douglas Crockford gegeben und von Nicholas Chammas in The Notorious Two Eight Three https://github.com/mitchellh/packer/issues/283#issuecomment -60039068 . veranschaulicht

YAML

Ruby-Miner lieben sie etwas YAML und haben uns eine Lösung gegeben, um es von Anfang an zu verwenden. Dies wurde wunderbar am Beispiel von Rickard von Essen 2 Kommentare vor https://github.com/mitchellh/packer/issues/1768#issuecomment -272.921.740 (obwohl ich bevorzugen würde mit ARGF.read wie ich weiter unten tun)

Und so weiter

Ich finde es toll, dass HashiCorp es einfach macht, so viele oder so wenige ihrer Produkte zu verwenden, wie Sie benötigen. Es passt gut zur Unix-Philosophie (wie von Peter H. Salus in A Quarter-Century of Unix (1994) zusammengefasst):

  • Schreiben Sie Programme, die eine Sache tun und sie gut machen.
  • Schreiben Sie Programme, um zusammenzuarbeiten.
  • Schreiben Sie Programme zur Verarbeitung von Textströmen, da dies eine universelle Schnittstelle ist.

Wir sollten gut damit zurechtkommen:

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

Ich erstelle kleine Pr für Yaml-Vorlagen, für meine begrenzten Tests funktioniert es für mich gut.

Definitiv etwas, das wir untersuchen wollen. Da dies jedoch nicht unser Ziel für 1.0 ist, werde ich dies vorerst schließen. Weitere Informationen zu 1.0 finden Sie in der Mailingliste .

Es ist Zeit, das Problem wieder zu öffnen. HCL sollte auf jeden Fall die Standardkonfigurationssprache in Packer sein.

PS: Hat immer noch keine Ahnung warum fast alle Issues geschlossen wurden, es gibt Projekte, Meilensteine ​​und Tags um Issues zu verwalten.

Dies ist etwas, was wir planen. Da es sich um eine so massive Überholung handelt, möchten wir sicherstellen, dass wir es gut machen. Der nächste Schritt für uns besteht darin, unseren RFC-Prozess zu durchlaufen, der zu einem separaten Thema wäre.

Ich begrüße JSON5, YAML und HCL. Reines JSON ist schmerzhaft.

@darkn3rd Wir spüren deinen Schmerz und es ist schmerzhaft genug, dass wir, Joyent, einen JSON5-Zweig pflegen , der master weil die aktuelle Situation für jeden unhaltbar ist, der tatsächlich jede Menge Packer-Vorlagen verwendet und pflegt: https: //github.com/joyent/packer/tree/f-json5

/me nimmt sich vor, den Zweig diese Woche zu aktualisieren

Wir sind in der Nähe von 3 Jahren "demnächst"... Ich bin ein Anfänger mit Packer und ich bin erstaunt, um es gelinde auszudrücken, dass es HCL nicht unterstützt. Kann es kaum erwarten es zu testen.

Ich sagte nur zu meinem Freund: "Hey, Lats migrieren diesen schrecklichen Json zu HCL, es ist ein Hashicorp-Tool, oder?". Wie falsch lag ich...

Wenn es von Interesse ist, verpackt yacker (ein Python-Dienstprogramm) Packer in einen YAML-zu-JSON-Interpreter. Es ist nichts Weltbewegendes - es bietet Ihnen nur einen YAML-Wrapper, der Vorlagen- und Variablendateien vorübergehend in JSON konvertiert, bevor er die Kontrolle an Packer übergibt.

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

Packer-Team? Warum stellen Sie immer noch kein HCL zur Verfügung? Ich habe vor fast mehr als einem Jahr einen kleinen Patch für die YAML-Unterstützung erstellt, das funktioniert gut und Sie lehnen es mit Grund ab, dass HCL kommt. Aber nach dem Jahr hat sich nichts geändert!
Was du sagst?

Kommt noch :zwinker:

@vtolstov siehe #7023

Interne Produktleute bei HashiCorp haben entschieden, dass wir HCL1 überspringen und stattdessen HCL2 implementieren; Entschuldigung, dass dies nie implementiert wurde, aber ich verspreche, dass wir gerade aktiv an der HCL2-Unterstützung arbeiten.

Danke für das Update. Wir haben das nicht aufgegeben.

Danke @SwampDragons! Sollte dieses Thema angesichts der Tatsache, dass daran aktiv gearbeitet wird, erneut geöffnet werden?

Guter Punkt; es wurde versehentlich geschlossen, als wir die zugehörige PR ohne Zusammenführung geschlossen haben.

Ich freue mich sehr auf die HCL2-Unterstützung mit Packer!

@SwampDragons Irgendwelche Neuigkeiten zu HCL, bitte?

Wir hoffen (aber nicht versprechend), es mit der Version 1.5.0 herauszubringen. Das Team hat einen funktionierenden Prototyp in einer Filiale, aber er ist noch nicht poliert oder gehärtet und da @azr kurz vor der Elternzeit steht, müssen wir ihn möglicherweise etwas später

Ich kam nach einigen Jahren zurück und war überrascht, dass dies noch offen war.
Gut, dass es in 1.5 auf dem Weg ist.

@SwampDragons Haben Sie einen groben Zeitrahmen dafür, wann 1.5.0 verfügbar sein wird (auch als Beta)?

Wenn die Änderung kompliziert ist (und dafür kann es sehr gute Gründe geben), ist es nicht ein viel geringeres Entwicklungsrisiko und -kosten, ein vollkommen gutes Werkzeug in Ruhe zu lassen und statt dessen das Kerndefinitionsformat zu ändern, _Adapter_ bereitzustellen, die konvertieren Format-X in JSON?

Nur ein Gedanke.

Ich möchte das Problem nicht trivialisieren und Sie haben vielleicht wirklich wichtige Gründe, das Kernformat zu ändern, aber in Anbetracht der Zeit und des Aufwands, die dafür aufgewendet werden, ist es, wenn es nur darum geht, wie Benutzer ihre Dateien definieren, als Projekt Braucht es _Sprachadapter_ wie yacker ?

@alanbchristie Um fair zu sein, wurde die ganze Zeit nicht aktiv daran gearbeitet; es war lange Zeit ein Nachholbedarf, "wir sollten darüber nachdenken", zuletzt, weil wir sehen und sehen wollten, wie der HCL2-Rollout mit Terraform 0.12 verlief, damit wir aus ihrem Prozess lernen konnten, bevor wir es selbst erneut versuchten . Ich glaube nicht, dass es ein annähernd so mühsamer Prozess sein wird wie für Terraform, aber ich kann nicht zu den Details sprechen, denn wie gesagt, es ist ein Projekt, an dem @azr gearbeitet hat und er gerade elterliche Glückseligkeit erlebt. ;) Wenn er zurückkommt, werde ich ihn fragen, ob er ein kleines Fortschrittsupdate für euch schreiben kann.

@NickLarsenNZ Die Roadmap, die ich meinem Chef zeige, sagt irgendwann im Oktober oder November. Wenn Sie möchten, kann ich Sie anpingen, sobald wir einen versuchbaren Build haben.

Ich bin neu bei Packer... aber um ehrlich zu sein, die Tatsache, dass dies seit 5-6 Jahren ein ungelöstes Thema war, ist nicht nur ziemlich entmutigend, sondern auch extrem frustrierend.

Die Verwendung von jq zum Entfernen von Kommentaren während eines Workarounds bedeutet, dass wahrscheinlich 99 Kommentare für jeden mit jq geschriebenen Kommentar ungeschrieben werden.

Ich könnte tagelang fortfahren, dass Json, wie es von Packer implementiert wird, für diese Aufgabe nicht geeignet ist, aber die Tatsache, dass es keine Kommentare zulässt und die Code- / Konfigurationsduplizierung fördert (warum habe ich das Gefühl, dass ich ein Packer-Json schreiben muss? Pseudo-Compiler, um die Wiederverwendung der Konfiguration zu ermöglichen).

Gesperrt, um Geräusche zu reduzieren; @azr ist zurück und ich werde ihn

Hallo alle zusammen ! Ich habe gute Neuigkeiten 🎉 😃

Ich habe vor kurzem einige Zeit gebraucht, um den HCL2-Umzug durchzuführen, und Sie finden eine PR, die ihn umsetzt, hier: #8423. Einige Binärdateien finden Sie hier .
Wir tun unser Bestes, um viele verschiedene Fälle zu testen, um Fehler zu vermeiden, aber es gibt viele Builder/Provisioner/Postprozessoren und wir sind ein kleines Team, daher ist jede Hilfe beim Testen sehr willkommen! Wenn Sie dies versuchen und einen Fehler finden; Bitte öffnen Sie ein neues Problem und geben Sie an, dass es sich um einen HCL-Fehler handelt.

Die aktuelle (alte) Methode zum Einrichten von Packer wird weiterhin funktionieren und wir planen derzeit, beide Versionen für eine Weile vollständig zu unterstützen, bis wir uns sicher genug fühlen, die alte Version zu verabschieden.

Beispiel hcl-Datei

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
}

PS: Handhabung von Dokumenten und Variablen kommt!

Das sind tolle Neuigkeiten @azr , danke an dich und das Team.

WRT: JSON wird eingestellt.
Ist es richtig, dass Sie die integrierte JSON-Unterstützung von HCL / HCL2 nutzen möchten?

Gibt es einen json2hcl-Konverter? Ich habe gut gemachte Packer-Skripte von Netflix OSS, die ich gerne in HCL konvertieren würde.

Hallo zusammen, ich freue mich über diese Veränderung!

@darkn3rd Ich habe vor, einen Packer-spezifischen Konverter zu erstellen, damit Benutzer ihn schnell ausprobieren können, ohne zu viel Kopieren, Einfügen und Bearbeiten.

@mexisme Die HCL-Bibliothek versteht JSON vollständig, aber das Format wurde ein wenig geändert, sodass einige Änderungen erforderlich sind. Ich werde versuchen, den Konverter auch eine Datei in JSON konvertieren zu lassen (oder so).


⚠️ mein erstes Beispiel hat sich verändert und sieht ein bisschen mehr nach Terraform aus.

Beispiel hcl-Datei

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
}

Neue Binärdateien finden Sie hier

Ich werde dieses Problem sperren, da es seit _30 Tagen_ geschlossen ist ⏳. Dies hilft unseren Betreuern, die aktiven Probleme zu finden und sich darauf zu konzentrieren.

Wenn Sie ein ähnliches Problem gefunden haben, öffnen Sie bitte ein neues Problem und füllen Sie die Problemvorlage aus, damit wir alle Details erfassen können, die für die weitere Untersuchung erforderlich sind.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

DanielBo picture DanielBo  ·  3Kommentare

jesse-c picture jesse-c  ·  3Kommentare

Tensho picture Tensho  ·  3Kommentare

wduncanfraser picture wduncanfraser  ·  3Kommentare

mushon4 picture mushon4  ·  3Kommentare