Packer: استخدم HCL

تم إنشاؤها على ١٦ ديسمبر ٢٠١٤  ·  48تعليقات  ·  مصدر: hashicorp/packer

سيكون من الرائع أن يكون لديك YAML (أو HCL ) لتقليل التعددية والسماح أيضًا بالتعليقات. (انظر https://github.com/mitchellh/packer/issues/283)

إذا كان يجب أن يكون JSON هو تنسيق التكوين ، فسيكون من الجيد السماح بالمفتاح / القيم الشبيهة بالتعليق (ربما حيث تكون الأسماء مسبوقة بحرف رسومي يشبه التعليق). على سبيل المثال:

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

التعليق الأكثر فائدة

مرحبا بالجميع ! لدي بعض الأخبار الجيدة 🎉 😃

لقد استغرقت مؤخرًا بعض الوقت لإجراء خطوة HCL2 ويمكنك العثور على علاقات عامة تنفذها هنا: # 8423. يمكن العثور على بعض الثنائيات هنا .
نحن نبذل قصارى جهدنا لاختبار الكثير من الحالات المختلفة لتجنب الأخطاء ولكن هناك الكثير من البنائين / مقدمي الخدمة / معالجات ما بعد ونحن فريق صغير لذا فإن أي مساعدة ستكون موضع ترحيب كبير لاختبار ذلك! إذا جربت ذلك ووجدت خطأ ؛ الرجاء فتح مشكلة جديدة تفيد بأنه خطأ HCL.

ستظل الطريقة (القديمة) الحالية لإعداد Packer تعمل ونخطط حاليًا لدعم كلا الإصدارين بشكل كامل لفترة من الوقت حتى نشعر بالثقة الكافية لإهمال الإصدار القديم.

مثال على ملف 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
}

ملاحظة: معالجة المستندات والمتغيرات قادمة!

ال 48 كومينتر

ccpandacalculus

HCL قريبًا: ابتسم:

delitescere أليست هذه المشكلة نسخة مكررة من # 283؟ لقد لاحظت أنك قمت بربطها في المنشور الأولي ، لكن ليس من الواضح ما هو الفرق بين المسألتين.

هنا سيتم التعامل مع المفاتيح غير المعروفة بشكل مختلف عما هي عليه الآن. هذا يقترح مفاتيح "شبيهة بالتعليق" يتم تجاهلها. تتم الإشارة إلى التعليق ببادئة تعليق ذاتية الإغلاق معروفة بشكل عام (بمعنى: # ، // ، ; )

لقد كان اقتراحًا بديلاً نظرًا للتغيير الأكبر في الكود لدعم التعليقات في JSON غير القياسي أو JSON5 أو YAML أو HCL.

تعليق sethvargo حول التحرك لدعم HCL يحل المشكلة.

تضمين التغريدة

HCL قريبًا: ابتسم:

آسف لإزعاجك ، أي تحديثات على هذا؟

لا يزال قادمًا: ابتسم:

قررنا تأخير هذا قليلاً ، نظرًا لأنه ليس لدينا كاتب HCL حتى الآن ونود الاحتفاظ بـ packer fix كخيار للإصدارات الزوجية التالية.

لقد شربت كوول ايد HCL. : +1:

الآن بعد أن خرج https://github.com/hashicorp/hcl ، هل يمكننا الحصول على بديل لـ json؟ :)

jevonearth التي كانت موجودة منذ بعض الوقت: ابتسامة :. HCL لا يزال قادم!

نظرًا لأنه لا يزال قادمًا ، فهل هذا هو الوقت المناسب لميزة طلب تضمين الملفات؟ انظر https://github.com/mkheironimus/packergen

jevonearth هيريس بديل حتى إضافة hcl

مازال قريبا؟

@ mitchellhsethvargo هذا كاتب HCL الذي ذكرته: https://github.com/hashicorp/hcl/tree/master/hcl/printer

في انتظار YAML. ليس حقا في HCL

إنه نوع من التافه أن يتم تغليف الحزم بوظيفة bash وتحويل yaml إلى json .

لتبدأ:

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

(والعكس)

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

لقد فعلت ذلك بالفعل. سيكون من الجميل ألا تضطر إلى ذلك. لهذا السبب توجد هذه التذكرة لـ HCL

في 16 كانون الثاني (يناير) 2017 ، في تمام الساعة 12:31 مساءً ، كتب Rickard von Essen [email protected] :

إنه نوع من التافه أن يتم تغليف الحزم بوظيفة bash وتحويل yaml إلى json.

لتبدأ:

ruby -r json -r yaml -e "yaml = YAML.load (File.read (\" $ 1 \ ")) ؛ اطبع yaml.to_json"
(والعكس)

ruby -r json -r yaml -e "json = JSON.parse (File.read (\" $ 1 \ ")) ؛ طباعة YAML :: dump (json)"
-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو اعرضها على GitHub ، أو قم بكتم صوت الموضوع.

HCL

تحتاج HashiCorp إلى إظهار القليل من الثقة في نفسها واستخدام HCL في كل مكان تستطيع. إما أن HCL كانت فكرة جيدة ويجب أن يتعاملوا معها ، أو أن HCL كان خطأ وأن Terraform هو كارثة. من الواضح أن هذا الأخير ليس صحيحًا. لذا ، بصفتي مقيِّمًا / متبنيًا جديدًا ، يجب أن أقول إنه من دواعي القلق أن هذين المنتجين يشعران وكأنهما "وكالتان استخباراتيتان لا تتحدثان مع بعضهما البعض."

أنا معsethvargo. دعونا نرتدي سيجيل الذئب الخاص بنا ونعلن أن "HCL قادم". (ليس هذا فقط ، بل اجعله يحدث أيضًا).

جسون

ليست هناك حاجة لإجراء أي تغييرات على تعليقات الأحذية في JSON. الحل قدمه لنا دوغلاس كروكفورد ومثله نيكولاس شماس في The Notorious Two Eight Three https://github.com/mitchellh/packer/issues/283#issuecomment -60039068

YAML

يحبهم عمال مناجم روبي بعضًا من YAML وقدموا لنا حلاً لاستخدامه منذ بدايته. تم تجسيد هذا بشكل رائع من خلال Rickard von Essen 2 تعليقات قبل https://github.com/mitchellh/packer/issues/1768#issuecomment -272921740 (على الرغم من أنني أفضل استخدام ARGF.read كما أفعل أدناه)

إلى آخره

أحب أن HashiCorp تجعل من السهل استخدام العديد أو القليل من منتجاتها حسب حاجتك. يتناسب بشكل جيد مع فلسفة يونكس (كما لخصها بيتر إتش سالوس في ربع قرن من يونكس (1994)):

  • اكتب البرامج التي تقوم بشيء واحد وتقوم به بشكل جيد.
  • اكتب برامج للعمل معًا.
  • اكتب برامج للتعامل مع تدفقات النص ، لأنها واجهة عالمية.

يجب أن نكون على ما يرام مع:

جسون

$ 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

أقوم بإنشاء علاقات عامة صغيرة لقوالب yaml ، بالنسبة للاختبار المحدود الذي أجريته ، فإنه يعمل بشكل جيد بالنسبة لي.

بالتأكيد شيء نخطط للتحقيق فيه. في الوقت الحالي ، على الرغم من ذلك ، نظرًا لأن هذا ليس شيئًا نستهدفه 1.0 ، فسوف أغلق هذا. يرجى الاطلاع على القائمة البريدية لمزيد من التفاصيل على 1.0.

حان الوقت لإعادة فتح الإصدار مرة أخرى. بالتأكيد يجب أن تكون HCL لغة التكوين الافتراضية في Packer.

ملاحظة: ليس لدي أي فكرة عن سبب إغلاق جميع المشكلات تقريبًا ، فهناك مشاريع ومعالم وعلامات لإدارة المشكلات.

هذا شيء نخطط للقيام به. نظرًا لأنه إصلاح شامل ، نريد التأكد من أننا نقوم به بشكل جيد. الخطوة التالية بالنسبة لنا هي المضي قدمًا في عملية RFC الخاصة بنا ، والتي ستكون في موضوع منفصل.

أرحب بـ JSON5 و YAML و HCL. Pure JSON مؤلم.

@ darkn3rd نشعر Joyent ، master لأن الوضع الحالي لا يمكن تحمله لأي شخص يستخدم ويحتفظ بالفعل بأي كمية حقيقية من قوالب التعبئة: https: //github.com/joyent/packer/tree/f-json5

/ قمت بتدوين ملاحظة ذهنية لتحديث الفرع هذا الأسبوع

لقد اقتربنا من 3 سنوات من "قريباً" ... أنا مبتدئ في Packer وأنا مندهش ، على أقل تقدير ، أنه لا يدعم HCL. لا أستطيع الانتظار لاختباره.

لقد قلت للتو يا صديقي "يا لات يهاجر ذلك json الفظيع إلى HCL ، إنها أداة هاشيكورب ، أليس كذلك؟". كم كنت مخطئا ...

إذا كان الأمر مثيرًا للاهتمام ، فإن yacker (إحدى أدوات Python المساعدة) يلف باكر في مترجم YAML-to-JSON. إنه لا شيء يحطم الأرض - إنه يوفر لك فقط غلاف YAML الذي يحول القوالب والملفات المتغيرة مؤقتًا إلى JSON قبل تمرير التحكم إلى Packer.

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

فريق باكر؟ لماذا ما زلت لا تقدم HCL؟ أقوم بإنشاء تصحيح صغير لدعم YAML منذ أكثر من عام تقريبًا ، وهذا يعمل بشكل جيد وأنت ترفضه لسبب ، أن HCL قادم. لكن بعد عام لم يتغير شيء!
ما تقوله؟

ما زال قادمًا: غمزة:

vtolstov انظر # 7023

قرر العاملون في المنتجات الداخلية في HashiCorp أننا سوف نتخطى HCL1 مباشرة ونطبق HCL2 بدلاً من ذلك ؛ عذرًا ، لم يتم تنفيذ هذا مطلقًا ، لكنني أعدك بأننا نعمل بنشاط على دعم HCL2 في الوقت الحالي.

شكرا لك على التحديث. نحن لم نتخل عن هذا.

شكرا لك SwampDragons! بالنظر إلى أن هذا يجري العمل به بنشاط ، هل ينبغي إعادة فتح هذه المشكلة؟

نقطة جيدة؛ تم إغلاقه عن طريق الخطأ عندما أغلقنا العلاقات العامة المرتبطة به دون دمج.

متحمس حقًا لدعم HCL2 مع باكر!

SwampDragons هل من أخبار عن HCL من فضلك؟

نحن نأمل (ولكن لا نعد بذلك) لإخراجها مع الإصدار 1.5.0. يمتلك الفريق نموذجًا أوليًا عمليًا في أحد الفروع ولكنه لم يتم صقله أو تقويته بعد ، ومع التراجع عنه لاحقًا. الهدف بحلول نهاية العام ، ويفضل أن يكون أقرب إلى سبتمبر من ديسمبر.

عدت بعد بضع سنوات وفوجئت أن هذا لا يزال مفتوحًا.
سعيد لأنه في طريقه في 1.5.

SwampDragons هل لديك أي أطر زمنية تقريبية كنسخة تجريبية)؟

إذا كان التغيير معقدًا (وقد تكون هناك أسباب وجيهة جدًا لذلك) ، فليس من مخاطر التطوير والتكلفة أقل بكثير لترك أداة جيدة تمامًا بمفردها وبدلاً من تغيير تنسيق التعريف الأساسي ، قم بتوفير _ محولات_ تحوّل format-X إلى JSON؟

مجرد فكرة.

لا أريد التقليل من أهمية المشكلة وقد يكون لديك أسباب مهمة حقًا لتغيير التنسيق الأساسي ، ولكن بالنظر إلى الوقت والجهد المبذولين في هذا الأمر ، إذا كان الأمر يتعلق فقط بكيفية تعريف المستخدمين لملفاتهم ، كمشروع ، هناك حاجة لمحولات اللغة مثل yacker ؟

alanbchristie لكي نكون منصفين ، لم يتم العمل بنشاط على هذا طوال الوقت ؛ لقد كانت مشكلة "يجب أن نفكر في هذه" المشكلة لفترة طويلة جدًا ، مؤخرًا لأننا أردنا أن نشاهد ونرى كيف تم طرح HCL2 مع Terraform 0.12 حتى نتمكن من التعلم من عمليتهم قبل محاولة القيام بذلك مرة أخرى بأنفسنا . لا أعتقد أنها ستكون عملية شاقة تقريبًا كما كانت بالنسبة لـ Terraform ، لكن لا يمكنني التحدث عن التفاصيل لأنني قلت إنه مشروع كان azr يعمل عليه وهو يعاني من النعيم الأبوي في الوقت الحالي. ؛) عندما يعود ، سأسأله عما إذا كان يمكنه كتابة تحديث بسيط للتقدم لكم جميعًا.

NickLarsenNZ تقول خارطة الطريق التي

أنا جديد في باكر ... لكنني سأكون صادقًا ، حقيقة أن هذه كانت مشكلة لم تتم معالجتها لمدة 5-6 سنوات ليست فقط محبطة إلى حد ما ، ولكنها محبطة للغاية.

استخدام jq لتجريد التعليقات أثناء الحل ، يعني أنه من المحتمل أن يكون هناك 99 تعليقًا لم تتم كتابتها لكل تعليق واحد مكتوب مع jq to strip.

يمكنني أن أستمر لعدة أيام في كيف أن json ، كما تم تنفيذه بواسطة Packer ، ليست مناسبة لهذه المهمة ، ولكن حقيقة أنها لا تسمح بالتعليقات وتشجع تكرار الكود / التكوين (لماذا أشعر أنني بحاجة إلى كتابة packer json مترجم زائف لتمكين إعادة استخدام التكوين).

مغلق لتقليل الضوضاء. عادazr وسأطلب منه تقديم تحديث حول هذه المشكلة ، بما في ذلك توفير

مرحبا بالجميع ! لدي بعض الأخبار الجيدة 🎉 😃

لقد استغرقت مؤخرًا بعض الوقت لإجراء خطوة HCL2 ويمكنك العثور على علاقات عامة تنفذها هنا: # 8423. يمكن العثور على بعض الثنائيات هنا .
نحن نبذل قصارى جهدنا لاختبار الكثير من الحالات المختلفة لتجنب الأخطاء ولكن هناك الكثير من البنائين / مقدمي الخدمة / معالجات ما بعد ونحن فريق صغير لذا فإن أي مساعدة ستكون موضع ترحيب كبير لاختبار ذلك! إذا جربت ذلك ووجدت خطأ ؛ الرجاء فتح مشكلة جديدة تفيد بأنه خطأ HCL.

ستظل الطريقة (القديمة) الحالية لإعداد Packer تعمل ونخطط حاليًا لدعم كلا الإصدارين بشكل كامل لفترة من الوقت حتى نشعر بالثقة الكافية لإهمال الإصدار القديم.

مثال على ملف 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
}

ملاحظة: معالجة المستندات والمتغيرات قادمة!

هذه أخبار رائعة azr ، شكرًا لك

WRT: يتم إهمال JSON.
هل من الصحيح أنك تخطط للاستفادة من دعم JSON المدمج في HCL / HCL2؟

هل يوجد محول json2hcl؟ لقد صنعت بشكل جيد نصوص برمجية من Netflix OSS أود تحويلها إلى HCL.

مرحبًا بالجميع ، أنا متحمس لهذا التغيير!

@ darkn3rd أخطط لعمل محول محدد

mexisme تتفهم مكتبة HCL تمامًا JSON لكن التنسيق يتغير قليلاً لذا ستكون هناك حاجة إلى بعض التعديلات. سأحاول جعل المحول يقوم بتحويل ملف إلى JSON أيضًا (أو شيء من هذا القبيل).


⚠️ لقد تغير المثال الأول الخاص بي ويبدو وكأنه نوع من التضاريس أكثر قليلاً.

مثال على ملف 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
}

يمكن العثور على ثنائيات جديدة هنا

سأقوم بقفل هذه المشكلة لأنه تم إغلاقه لمدة _30 يومًا_ ⏳. يساعد هذا المشرفين لدينا في العثور على المشكلات النشطة والتركيز عليها.

إذا وجدت مشكلة تبدو مشابهة لهذا ، فالرجاء فتح مشكلة جديدة وإكمال نموذج المشكلة حتى نتمكن من الحصول على جميع التفاصيل اللازمة لإجراء مزيد من التحقيق.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات