Packer: Gunakan HCL

Dibuat pada 16 Des 2014  ·  48Komentar  ·  Sumber: hashicorp/packer

Akan sangat bagus jika YAML (atau HCL ) lebih murah dan juga mengizinkan komentar. (Lihat https://github.com/mitchellh/packer/issues/283)

Jika JSON harus dalam format konfigurasi, maka akan lebih baik untuk mengizinkan kunci/nilai seperti komentar (mungkin di mana nama diawali dengan mesin terbang seperti komentar). Sebagai contoh:

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

Komentar yang paling membantu

Halo semuanya ! Saya punya kabar baik

Saya baru-baru ini mengambil beberapa waktu untuk membuat langkah HCL2 terjadi dan Anda dapat menemukan PR yang mengimplementasikannya di sini: #8423. Beberapa binari dapat ditemukan di sini .
Kami melakukan yang terbaik untuk menguji banyak kasus yang berbeda untuk menghindari bug tetapi ada banyak pembangun/penyedia/pasca-prosesor dan kami adalah tim kecil sehingga bantuan apa pun akan sangat diterima untuk menguji ini! Jika Anda mencoba ini dan menemukan bug; silakan buka masalah baru yang menyatakan bahwa itu adalah bug HCL.

Cara (lama) saat menyiapkan Packer akan tetap berfungsi dan saat ini kami berencana untuk sepenuhnya mendukung kedua versi untuk sementara waktu sampai kami merasa cukup percaya diri untuk tidak menggunakan versi lama.

Contoh file 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
}

PS: penanganan dokumen dan variabel akan datang!

Semua 48 komentar

cc @pandacalculus

HCL akan segera hadir :smile:

@delitescere Apakah masalah ini bukan duplikat #283? Saya perhatikan Anda menautkannya di posting awal, tetapi tidak jelas apa perbedaan antara kedua masalah tersebut.

Di sini kunci yang tidak dikenal akan ditangani secara berbeda dengan cara mereka sekarang. Ini mengusulkan kunci "seperti komentar" yang diabaikan. Komentar-ness ditunjukkan oleh awalan komentar penutupan diri yang umum dikenal (yaitu: # , // , ; )

Itu adalah saran alternatif mengingat perubahan kode yang lebih besar untuk mendukung komentar di JSON non-standar, atau JSON5 atau YAML atau HCL.

Komentar @sethvargo tentang langkah untuk mendukung HCL menyelesaikan masalah.

@sethvargo

HCL akan segera hadir :smile:

Maaf mengganggu Anda, ada pembaruan tentang ini?

Masih datang :smile:

Kami memutuskan untuk menunda ini sedikit, karena kami belum memiliki penulis HCL dan kami ingin mempertahankan packer fix sebagai opsi untuk beberapa versi berikutnya.

Saya telah minum HCL kool-aid. :+1:

Sekarang https://github.com/hashicorp/hcl ada, bisakah kita mendapatkan alternatif untuk json? :)

@jevonearth yang sudah ada cukup lama : smile:. HCL masih datang!

Karena masih akan datang, apakah ini saat yang tepat untuk meminta fitur sertakan file? lihat https://github.com/mkheironimus/packergen

@jevonearth inilah alternatif sampai menambahkan hcl

masih segera datang?

@mitchellh @sethvargo apakah ini penulis HCL yang Anda sebutkan: https://github.com/hashicorp/hcl/tree/master/hcl/printer

Menunggu YAML. Tidak benar-benar menjadi HCL

Agak sepele untuk membungkus packer dengan fungsi bash dan mengonversi yaml menjadi json .

Untuk membantu Anda memulai:

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

(dan sebaliknya)

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

Saya sudah membuat itu. Akan menyenangkan untuk tidak harus. Itu sebabnya tiket ini ada untuk HCL

Pada 16 Januari 2017, pukul 12:31, Rickard von Essen [email protected] menulis:

Agak sepele untuk membungkus packer dengan fungsi bash dan mengonversi yaml ke json.

Untuk membantu Anda memulai:

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

ruby -r json -r yaml -e "json = JSON.parse(File.read(\"$1\")); print YAML::dump(json)"
kan
Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub, atau matikan utasnya.

HCL

HashiCorp perlu menunjukkan sedikit kepercayaan pada dirinya sendiri dan menggunakan HCL di mana saja. Entah HCL adalah ide yang bagus dan mereka harus menjalankannya, atau HCL adalah kesalahan dan Terraform adalah bencana. Jelas yang terakhir ini tidak benar. Jadi, sebagai evaluator/adopter baru, saya harus mengatakan bahwa ada kekhawatiran bahwa 2 produk ini terasa seperti "dua badan intelijen yang tidak berbicara satu sama lain."

Saya bersama @sethvargo. Mari kita memakai sigil direwolf kita dan menyatakan bahwa "HCL akan datang". (Tidak hanya itu, wujudkan juga.)

JSON

Tidak perlu membuat perubahan apa pun pada komentar shoehorn ke JSON. Solusinya diberikan kepada kami oleh Douglas Crockford dan dicontohkan oleh Nicholas Chammas dalam The Notorious Two Eight Three https://github.com/mitchellh/packer/issues/283#issuecomment -60039068

YAML

Penambang Ruby menyukai mereka beberapa YAML dan memberi kami solusi untuk menggunakannya sejak awal. Ini luar biasa dicontohkan oleh Rickard von Essen 2 komentar yang lalu https://github.com/mitchellh/packer/issues/1768#issuecomment -272921740 (meskipun saya lebih suka menggunakan ARGF.read seperti yang saya lakukan di bawah)

dan lain-lain

Saya suka bahwa HashiCorp membuatnya mudah untuk menggunakan produk mereka sebanyak atau sesedikit yang Anda butuhkan. Ini cocok dengan filosofi unix (seperti yang diringkas oleh Peter H. Salus dalam A Quarter-Century of Unix (1994)):

  • Tulis program yang melakukan satu hal dan melakukannya dengan baik.
  • Menulis program untuk bekerja sama.
  • Tulis program untuk menangani aliran teks, karena itu adalah antarmuka universal.

Kita harus baik-baik saja dengan:

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

saya membuat pr kecil untuk templat yaml, untuk pengujian terbatas saya, ini berfungsi dengan baik untuk saya.

Pasti sesuatu yang kami rencanakan untuk diselidiki. Untuk saat ini, karena ini bukan sesuatu yang kami targetkan untuk 1.0, saya akan menutup ini. Silakan lihat milis untuk detail lebih lanjut tentang 1.0.

Saatnya untuk membuka kembali masalah. Jelas HCL harus menjadi bahasa konfigurasi default di Packer.

PS: Masih tidak tahu mengapa hampir semua masalah ditutup, ada proyek, pencapaian, dan tag untuk mengelola masalah.

Ini adalah sesuatu yang kami rencanakan untuk dilakukan. Karena ini adalah perombakan besar-besaran, kami ingin memastikan kami melakukannya dengan baik. Langkah selanjutnya bagi kami adalah melalui proses RFC kami, yang akan menjadi masalah terpisah.

Saya menyambut JSON5, YAML, dan HCL. JSON murni menyakitkan.

@darkn3rd Kami merasakan rasa sakit Anda dan itu cukup menyakitkan bahwa kami, Joyent, mempertahankan cabang JSON5 yang melacak master karena situasi saat ini tidak dapat dipertahankan bagi siapa saja yang benar-benar menggunakan dan memelihara jumlah nyata template packer: https: //github.com/joyent/packer/tree/f-json5

/me membuat catatan mental untuk memperbarui cabang minggu ini

Kami hampir 3 tahun "segera hadir"... Saya seorang pemula dengan packer dan saya heran, untuk sedikitnya, bahwa itu tidak mendukung HCL. Tidak sabar untuk mengujinya.

Saya baru saja mengatakan kepada teman saya "hei lat, migrasikan json yang mengerikan itu ke HCL, itu alat hashicorp, kan?". Betapa salahnya aku...

Jika menarik yacker (utilitas Python) membungkus Packer dalam juru bahasa YAML-ke-JSON. Itu tidak ada bumi-pecah - itu hanya menyediakan Anda dengan YAML-wrapper yang mengubah Template Dan file variabel sementara untuk JSON sebelum melewati kontrol untuk Packer.

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

Tim pengepakan? Mengapa Anda masih belum memberikan HCL? Saya membuat tambalan kecil untuk dukungan YAML hampir lebih dari setahun yang lalu, itu berfungsi dengan baik dan Anda menolaknya dengan alasan, bahwa HCL akan datang. Tapi setelah tahun tidak ada yang berubah!
Apa kamu bilang?

Masih datang :wink:

@vtolstov lihat #7023

Orang-orang produk internal di HashiCorp telah memutuskan bahwa kami akan langsung melewati HCL1 dan mengimplementasikan HCL2 sebagai gantinya; maaf ini tidak pernah diterapkan tetapi saya berjanji kami sedang aktif bekerja pada dukungan HCL2 sekarang.

Terima kasih atas pembaruannya. Kami belum menyerah dalam hal ini.

Terima kasih @SwampDragons! Mengingat ini sedang dikerjakan secara aktif, apakah masalah ini harus dibuka kembali?

Poin bagus; itu tidak sengaja ditutup ketika kami menutup PR terkait tanpa penggabungan.

Sangat bersemangat untuk dukungan HCL2 dengan packer!

@SwampDragons Ada berita tentang HCL?

Kami berharap (tetapi tidak menjanjikan) untuk mengeluarkannya dengan rilis 1.5.0. Tim memiliki prototipe yang berfungsi di cabang tetapi belum dipoles atau dikeraskan dan dengan @azr akan mengambil cuti orang tua, kami mungkin akhirnya harus menyelipkannya sedikit kemudian. Tujuannya adalah pada akhir tahun, sebaiknya lebih dekat ke September daripada Desember.

Saya kembali setelah beberapa tahun dan terkejut ini masih terbuka.
Senang itu dalam perjalanan dalam 1,5.

@SwampDragons Apakah Anda memiliki kerangka waktu kasar kapan 1.5.0 akan tersedia (bahkan sebagai beta)?

Jika perubahannya rumit (dan mungkin ada alasan yang sangat bagus untuk itu) maka bukankah itu risiko dan biaya pengembangan yang jauh lebih rendah untuk meninggalkan alat yang sangat bagus saja dan sebagai gantinya, alih-alih mengubah format definisi inti, berikan _adapter_ yang mengonversi format-X ke JSON?

Hanya pemikiran saja.

Saya tidak ingin meremehkan masalah dan Anda mungkin memiliki alasan yang sangat penting untuk mengubah format inti tetapi, mengingat waktu dan upaya yang dihabiskan untuk ini, jika itu hanya tentang bagaimana pengguna mendefinisikan file mereka, maka, sebagai sebuah proyek, adalah ada kebutuhan untuk _language adapters_ seperti yacker ?

@alanbchristie Agar adil, selama ini tidak dikerjakan secara aktif; sudah menjadi masalah "kita harus memikirkan ini" untuk waktu yang sangat lama, terakhir karena kami ingin menonton dan melihat bagaimana peluncuran HCL2 berjalan dengan Terraform 0.12 sehingga kami dapat belajar dari proses mereka sebelum mencoba melakukannya lagi sendiri . Saya tidak berpikir itu akan menjadi proses yang sulit seperti halnya untuk Terraform, tetapi saya tidak dapat berbicara secara detail karena seperti yang saya katakan ini adalah proyek yang sedang dikerjakan

@NickLarsenNZ Peta jalan yang saya tunjukkan kepada bos saya mengatakan sekitar bulan Oktober atau November. Jika Anda mau, saya dapat melakukan ping kepada Anda setelah kami memiliki build yang dapat dicoba.

Saya baru mengenal packer... tapi saya akan jujur, fakta ini telah menjadi masalah yang belum terselesaikan selama 5-6 tahun tidak hanya cukup mengecewakan, tapi sangat frustasi.

Menggunakan jq untuk menghapus komentar sementara solusi, berarti mungkin ada 99 komentar yang tidak tertulis untuk setiap 1 komentar yang ditulis dengan jq untuk dihapus.

Saya bisa terus berhari-hari bagaimana json, seperti yang diterapkan oleh packer, tidak cocok untuk tugas ini, tetapi faktanya ia tidak mengizinkan komentar dan mendorong duplikasi kode/konfigurasi (mengapa saya merasa perlu menulis json packer pseudo-compiler untuk mengaktifkan konfigurasi ulang).

Dikunci untuk mengurangi kebisingan; @azr kembali dan saya akan meminta dia memberikan pembaruan tentang masalah ini, termasuk menyediakan versi beta, ketika dia memiliki kesempatan.

Halo semuanya ! Saya punya kabar baik

Saya baru-baru ini mengambil beberapa waktu untuk membuat langkah HCL2 terjadi dan Anda dapat menemukan PR yang mengimplementasikannya di sini: #8423. Beberapa binari dapat ditemukan di sini .
Kami melakukan yang terbaik untuk menguji banyak kasus yang berbeda untuk menghindari bug tetapi ada banyak pembangun/penyedia/pasca-prosesor dan kami adalah tim kecil sehingga bantuan apa pun akan sangat diterima untuk menguji ini! Jika Anda mencoba ini dan menemukan bug; silakan buka masalah baru yang menyatakan bahwa itu adalah bug HCL.

Cara (lama) saat menyiapkan Packer akan tetap berfungsi dan saat ini kami berencana untuk sepenuhnya mendukung kedua versi untuk sementara waktu sampai kami merasa cukup percaya diri untuk tidak menggunakan versi lama.

Contoh file 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
}

PS: penanganan dokumen dan variabel akan datang!

Ini adalah berita bagus @azr , terima kasih untuk Anda dan tim.

WRT: menghentikan JSON.
Benarkah Anda berencana untuk memanfaatkan dukungan JSON bawaan HCL / HCL2?

Apakah ada konverter json2hcl? Saya telah membuat skrip pengepakan dengan baik dari Netflix OSS yang ingin saya konversi ke HCL.

Hai semuanya, saya senang dengan perubahan ini!

@ darkn3rd Saya berencana melakukan pengonversi khusus pengepakan sehingga pengguna dapat dengan cepat mencobanya tanpa terlalu banyak menyalin tempel & mengedit pekerjaan.

@mexisme Pustaka HCL sepenuhnya memahami JSON tetapi formatnya sedikit diubah sehingga perlu beberapa pengeditan. Saya akan mencoba agar konverter mengonversi file ke JSON juga (atau sesuatu).


️ contoh pertama saya telah berubah dan terlihat seperti terraform sedikit lagi.

Contoh file 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
}

Binari baru dapat ditemukan di sini

Saya akan mengunci masalah ini karena telah ditutup selama _30 hari_ . Ini membantu pengelola kami menemukan dan fokus pada masalah aktif.

Jika Anda menemukan masalah yang mirip dengan ini, silakan buka masalah baru dan lengkapi template masalah sehingga kami dapat menangkap semua detail yang diperlukan untuk menyelidiki lebih lanjut.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat