JSON মেটাডেটা ফাইলের জন্য ভ্যাগ্র্যান্ট বক্স URL


18

আমার ভ্যাগ্রান্টফাইলে, আমি একটি বাক্সের ইউআরএল নির্দিষ্ট করতে পারি:

config.vm.box_url = "http://example.com/my-box.pkg"

আরও সাম্প্রতিক ডকুমেন্টেশন অনুসারে , আমার একটি জেএসওএন ফাইল তৈরি করতে সক্ষম হওয়া উচিত যাতে বাক্সের বিভিন্ন সংস্করণের URL গুলি থাকে। ডকুমেন্টেশনটি আরও বলেছে যে আমি চলাকালীন এই JSON ফাইলের URL টি ব্যবহার করতে পারি vagrant box add। আমি আশা করছিলাম যে এর জন্য JSON ফাইলটির URL টি ব্যবহার করতে পারব config.vm.box_url। তবে, এটি কাজ করবে বলে মনে হয় না। আমি যখন এটি চেষ্টা করি, এটি এটি একটি বাক্স ফাইলের মতো আচরণ করে:

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'my-box' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Adding box 'my-box' (v0) for provider: virtualbox
    default: Downloading: http://example.com/my-box.pkg.json
    default: Progress: 100% (Rate: 876k/s, Estimated time remaining: 0:00:01)
The box failed to unpackage properly. Please verify that the box
file you're trying to add is not corrupted and try again. The
output from attempting to unpackage (if any):

bsdtar.EXE: Unrecognized archive format: Illegal byte sequence
bsdtar.EXE: Error exit delayed from previous errors.

আমার ভ্যাগ্রান্টফাইলে একটি বক্স মেটাডেটা জেএসওএন ফাইল ব্যবহার করার জন্য ভ্যাগ্রান্টকে কী বলা সম্ভব? আমি বরং ভ্যাব্রেন্ট ক্লাউড ব্যবহার করতে হবে না।


আপনি কি কখনও এর জন্য কোনও সমাধান খুঁজে পেয়েছেন?
জিম রুবেনস্টাইন

দুর্ভাগ্যক্রমে, না। নিকোলাসের পরামর্শটি হয়ত কাজ করতে পারে তবে আমি নিশ্চিত যে আমার সার্ভারটি ইতিমধ্যে জেএসএনের জন্য সঠিক সামগ্রীর ধরণের শিরোনাম প্রেরণ করছে। Chux এর উত্তর সঠিক হতে পারে তবে ডকুমেন্টেশন অন্যথায় বোঝায় তাই আমি এখনও নিশ্চিত নই। দুর্ভাগ্যক্রমে, ভ্যাগ্র্যান্টের ডকুমেন্টেশন চারপাশে বেশ ভয়ঙ্কর এবং বেসিক-টিউটোরিয়ালটির মধ্যে খুব বেশি প্রসঙ্গ দেয় না এবং প্রজেক্টে-এবং-হ্যাং-আউট-অন-রাইকের স্তরের অবদান রাখে .... অন্তত যাইহোক আমার জন্য।
ব্র্যাড

আমি কোনও বাক্স + মেটাডেটা প্রকাশের সময়ে কথা বলার সাথে সাথে আমি কিছু পরীক্ষা করছি যা আমি স্থানীয়ভাবে যোদ্ধা মেঘের আচরণ অনুকরণ করতে পারি কিনা তা দেখতে। আমি আপনাকে জানাব যে এটি কীভাবে সক্রিয় হয়।
জিম রুবেনস্টাইন

উত্তর:


8

আজ অবধি (২০১-0-০7-২০১২, অস্পষ্ট 1.8.4), আপনি যদি নিজের হাতে ক্যাটালগটি ম্যানুয়াল পদ্ধতিতে চালাতে চান (অর্থাত্ বাক্সগুলি ম্যানুয়ালি আপডেট করতে এবং মেটাডেটা.জেসন ফাইল সম্পাদনা করতে চান), তবে এখনও এটি আচরণ করে আসল ক্যাটালগের মতো, নিম্নলিখিত বিষয়গুলি মনে রাখবেন:

  • ফাইলটির নাম "मेटाডাটা.জসন" রাখার দরকার নেই। যতক্ষণ না এটি প্রত্যাশিত মানগুলি অন্তর্ভুক্ত করে এটির কোনও নামকরণ করা যায়। আমি নীচের পদক্ষেপগুলি আরও স্পষ্ট করতে এখানে "metadata.json" ব্যবহার করছি।

  • প্রতিটি মেটাডেটা.জসন ফাইলটিতে কেবল একটি একক বাক্স থাকতে পারে। এটির একাধিক সংস্করণ থাকতে পারে এবং প্রতিটি সংস্করণে একাধিক সরবরাহকারী (ভার্চুয়ালবক্স, ভিএমওয়্যার, লিবারভিট) থাকতে পারে। আপনার যদি একাধিক বাক্সের প্রয়োজন হয় (বলুন, "ফেডোরা" এবং "উবুন্টু") আপনার দুটি পৃথক মেটাডেটা ফাইলের প্রয়োজন।

  • ভ্যাগ্র্যান্ট আশা করে যে মেটাডেটা.জেসন ফাইলটি একধরণের "অ্যাপ্লিকেশন / জেএসন" রয়েছে (যেমন উপরে বর্ণিত নিকোলাস হিন্দ্স। আপনার ওয়েবসার্ভার যদি এটি ফেরত না দেয় (বা, "পাঠ্য / প্লেইন" ফেরত দেয়)) তবে ভ্যাগ্র্যান্ট ধরে নিবে যে এটি একটি আসল বাক্স ফাইল , এবং এটি বিশ্লেষণ করার চেষ্টা করুন (এবং খারাপভাবে ব্যর্থ হন)।

  • হ্যাশিকর্পের আটলাস (যা ভ্যাগ্র্যান্ট ক্লাউড হিসাবে ব্যবহৃত হত) এর ব্যতিক্রম, কারণ আপনাকে "পাঠ্য / এইচটিএমএল" হিসাবে সরবরাহিত সামগ্রীতে আপনাকে পুনঃনির্দেশিত করে। এটির জন্য আমার সেরা অনুমানটি হ'ল এটির পুনঃনির্দেশগুলির সাথে কিছু করার আছে (নীচে এটিতে আরও)।

  • বাক্স ফাইলটি মেটাডেটা ফাইলের মতো একই স্থানে থাকা দরকার নেই। কোনও স্থানীয় ওয়েবসার্ভারে আপনার মেটাডেটা ফাইল এবং অ্যামাজন এস 3-এর বক্স থাকতে পারে এতে কোনও সমস্যা নেই।

সুতরাং, যতদূর আমি পেয়েছি, ওয়েবসভারে এটি কাজ করার সহজতম উপায়টি খুঁজে পেয়েছি এবং এখনও সাধারণ কার্যকারিতা রয়েছে এটি করা:

আপনার ওয়েবহোস্টে, এর অনুরূপ একটি ফাইল এবং ডিরেক্টরি কাঠামো তৈরি করুন:

d wwwroot/
d wwwroot/boxes
d wwwroot/boxes/yourname
f wwwroot/boxes/yourname/.htaccess
d wwwroot/boxes/yourname/box1
f wwwroot/boxes/yourname/box1/metadata.json
f wwwroot/boxes/yourname/box1/box1-$version1-$provider.box
f wwwroot/boxes/yourname/box1/box1-$version2-$provider.box
f wwwroot/boxes/yourname/box1/box1-$version2-$otherprovider.box
d wwwroot/boxes/yourname/box2
f wwwroot/boxes/yourname/box2/metadata.json
f wwwroot/boxes/yourname/box2/box2-$version1-$provider.box
(... etc)

(এই লেআউটটির অর্থ বাক্স 1 এর জন্য আপনার "মেটাডেটা.জসন" এর URL গুলি " HTTP: // আপনার হোস্ট / বাক্স / আপনার নাম / বক্স1 / বক্স1- 1 version1- $ Provider.box " এর মতো কিছুতে নির্দেশ করবে )

আপনার .htaccess এ, নিশ্চিত করুন যে "মেটাডাটা.জসন" ডিরেক্টরি সূচকের জন্য সেট করা আছে। নেতিবাচক ক্যাশে এবং প্রকৃত বিষয়বস্তুগুলি গোপন করার জন্য বাকীটি isচ্ছিক:

Header unset Pragma
FileETag None
Header unset ETag
DirectoryIndex metadata.json
IndexIgnore *
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate, private"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"

আপনার পরিবেশে, VAGRANT_SERVER_URL আপনার ওয়েবহোস্টের দিকে নির্দেশ করে রফতানি করুন। কোনও পিছনে স্ল্যাশ নোট করুন!

export VAGRANT_SERVER_URL="http://yourhost/boxes"

এটি জায়গায় (এবং সঠিক বিষয়বস্তুযুক্ত সমস্ত ফাইল) দিয়ে আপনি সরাসরি নিজের বাক্সটি যুক্ত করতে পারেন:

vagrant box add yourname/box1

যেহেতু "মেটাডাটা.জসন" বাক্স 1 ডিরেক্টরিটির সূচী ফাইল, তাই এটি বিষয়বস্তুটিকে ডানদিকে ডাইরেক্ট করা উচিত, ভিজান্টর এটি বেছে নেবে, মেটাডেটার ব্যাখ্যা করবে এবং উপযুক্ত বাক্সটি ডাউনলোড করবে।


19

আপনার প্রশ্নটি আবার পড়ার পরে, মনে হচ্ছে আপনি আমার থেকে কিছুটা আলাদা করার চেষ্টা করছেন - তবে আমার মনে হয় আমাদের শেষ লক্ষ্যটি একই।

আমি আমার বেস বাক্সগুলি হোস্টিংয়ের জন্য ভ্যাগ্রান্ট ক্লাউড পরিষেবাটি ব্যবহার করতে চাই না, তবে আমি আমার ডেভ টিমে একটি বিকাশ পরিবেশ বন্টন করতে সক্ষম হতে চাই এবং উন্নয়নের পরিবেশের জন্য metadata.jsonসংস্করণ ব্যবস্থা বজায় রাখতে ফাইলের বৈশিষ্ট্যগুলি ব্যবহার করতে চাই , যা কেবলমাত্র দ্বিধায় থাকা সুবিধাগুলি ব্যবহার করে আমার উন্নয়ন দলের কাছে উপলব্ধ হবে।

এই লেখার সময় (8/5/2014) এ অসম্পূর্ণ ডকুমেন্টেশনটি সত্যই বিচ্ছিন্ন, সম্ভবত এটি একটি তুলনামূলকভাবে নতুন বৈশিষ্ট্যযুক্ত তবে আমি নিশ্চিত যে ভ্যাগ্র্যান্টক্লাউডের একটি প্রদত্ত স্তর রয়েছে তার সাথে এরও কিছু করার আছে I'm ।

জিনিসটা কিভাবে ব্যবহার করতে metadata.jsonসংস্করণে ফাইল এবং বক্স বিতরণ, আমি VagrantCloud উপলব্ধ ভার্চুয়াল মেশিনের কিছু কটাক্ষপাত গ্রহণ করেন। সেগুলি সন্ধান করার পরে এবং কিছু যোদ্ধা কোড পড়ার পরে - কীভাবে আমার লক্ষ্য অর্জন করা যায় তা নির্ধারণ করা বেশ সহজ হয়ে ওঠে।

  • আপনার বাক্সটি প্যাকেজ করুন যেমন আপনি সাধারণভাবে করেন। আমার ক্ষেত্রে, আমি কেবল ভার্চুয়াল বাক্সের জন্য প্যাকেজিং করছি, কারণ আমাদের বিকাশকারীরা ভিএম চালানোর জন্য এটি ব্যবহার করবে। আমি আমার বেসবক্সের সাথে একটি ভ্যাগ্রান্টফাইলে প্যাকেজও করি যা বিকাশের পরিবেশের জন্য কিছু প্রভিশন করে (উপযুক্ত ফোল্ডারগুলিতে শেয়ার সেটআপ করে, কিছু বেসিক অ্যাপাচি কনফিগারেশন, ত্রুটি লগিং ইত্যাদি)
  • metadata.jsonআপনার বেস বাক্সটি বর্ণনা করতে একটি ফাইল তৈরি করুন , আমার দেখতে এটির মতো দেখাবে:

    {
        "description": "long box description",
        "short_description": "short box description",
        "name": "company/developer-environment",
        "versions": [{
            "version": "1",
            "status": "active",
            "description_html": "<p>Dev Environment</p>",
            "description_markdown": "Dev Environment",
            "providers": [{
                "name": "virtualbox",
                "url": "http:\/\/vagrant.domain.local/dev/company-developer-environment-1.box"
            }]
        }]
    }
    

আমি আমার metadata.jsonফাইলটি তৈরি করার পরে , এটি আমাদের অভ্যন্তরীণ নেটওয়ার্কে চলমান একটি স্থানীয় সার্ভারে আপলোড করেছি vagrant.domain.local/metadata.json। একবার আমি এটি করার পরে, যা কিছু ছিল তা হ'ল এটি পরীক্ষা করানো ছিল অসম্পূর্ণতার সাথে:

# add the box to vagrant using the definition from metadata.json
# (the box is actually downloaded here, so it can take a minute...or 10)
$ vagrant box add http://vagrant.domain.local/dev/metadata.json

# init the box (this creates a .vagrant folder and a Vagrantfile in the cwd with the appropriate box name)
$ vagrant init company/developer-environment

# boot the box
$ vagrant up

ভয়েলা, একটি দূরবর্তীভাবে হোস্ট করা, ভাগ করা এবং সংস্করণযুক্ত, ব্যক্তিগত বাক্স যা ভ্যাব্রেন্ট ক্লাউড ব্যবহারের প্রয়োজন হয় না।

আপনি যখন আপনার বাক্সের নতুন সংস্করণ তৈরি করবেন, আপনি এটি প্যাকেজ করবেন এবং metadata.jsonফাইলটি সম্পাদনা করবেন । আমি যা বলতে পারি সেগুলি থেকে আপনি যা চান সংস্করণীকরণ স্কিমটি ব্যবহার করতে পারেন এটি সেমেন্টিক সংস্করণ (১.০.০, ০.০.১, ইত্যাদি) বা সংস্করণের জন্য সহজ সাধারণ সংখ্যা (১, ২, ৩, ইত্যাদি)। আপনার বাক্স ব্যবহারকারীরা যখন vagrant upস্বয়ংক্রিয়ভাবে কোনও নতুন সংস্করণের জন্য আপনার মেটাডেটা.জসন ফাইলটি চেক করে, এবং vagrant box updateবাক্সটি আপডেট করার জন্য তাদের অনুরোধ করবে ।

আপনি বক্স নাম এবং বাক্স ইউআরএল সহ বেস ভ্যাগ্রান্টফায়াল সংজ্ঞায়িত করে vagrant box add <metadata.json url>এবং vagrant initবিটগুলি এড়িয়ে যেতে পারেন:

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "company/developer-environment"
  config.vm.box_url = "https://vagrant.domain.local/dev/metadata.json"
end

আপনি এই বিষয়বস্তুগুলির সাথে একটি ভ্যাগ্র্যান্টফিলি বিতরণ করতে পারেন এবং সমস্ত ব্যবহারকারী সবেমাত্র সক্ষম হবেন vagrant up। যদিও, সংস্করণগুলি আপডেট হওয়ার সাথে সাথে এটি কীভাবে কাজ করে সে সম্পর্কে আমি নিশ্চিত নই।


এটা নিখুঁত, ধন্যবাদ! তবে ... আমি কীভাবে সেই জেএসএন ইউআরএলকে ভ্যাগ্রান্টফাইলে যুক্ত করব?
ব্র্যাড

আপনার দরকার নেই। আপনি যখন বাক্সটি যুক্ত করেন ভ্যাগ্র্যান্ট বর্তমান বাক্স চিত্রটি ডাউনলোড করে এবং তথ্য সংরক্ষণ করে ~/.vagrant.d/boxes/<your box name>। সেই ফোল্ডারের ভিতরে এমন metadata_urlফাইল রয়েছে যা ডকুমেন্টেশনের চারদিকে রেফারেন্স করা থাকে, যা আপনার JSON ফাইলের জন্য URL টি ধারণ করে যা আপনার সংস্করণগুলি সংজ্ঞায়িত করে। ভ্যাগ্রান্ট এগুলি সমস্ত স্বয়ংক্রিয়ভাবে পরিচালনা করে, তাই আপনাকে যা করতে হবে তা হ'ল vagrant box add <your metadata.json url>, ঠিক তখনই vagrant init <boxname> && vagrant up, বাকীগুলি বাকীগুলি করে
জিম রুবেস্টেইন

আমি এটি বুঝতে পারি, তবে আমি বিকাশকারীদের উঠে আসা এবং চালনা করা যথাসম্ভব সহজ করার চেষ্টা করছি। ভ্যাগ্রান্টফাইলে একটি বক্সের ইউআরএল যুক্ত করে, কোনও vagrant box addপ্রয়োজন নেই। যদি আমি সেই জেএসওন ফাইলটির ইউআরএলকে ভ্যাগ্রান্টফাইলে সেট করতে পারি, তবে নতুন দফের জন্য দলে যোগ দেওয়ার জন্য এটি আরও একটি কম পদক্ষেপ get এটি বাক্সগুলির জন্য কাজ করে, তবে কেন এটি JSON ফাইলের জন্য কাজ করে না তা আমি বুঝতে পারি না।
ব্র্যাড

1
আহ, গ্যাচা - আমি আসলে তার সন্ধান পেয়েছি মাত্র চারপাশে বিচ্ছিন্ন হয়ে। আপনাকে নির্ধারণ করতে হবে config.vm.boxএবং আপনার বাক্সের নামটি config.vm.box_urlকোথায় boxএবং box_urlআপনার জসন ফাইলের URL URL
জিম রুবেনস্টাইন

1
@ জিমরুবেস্টেইন কল্পনাপ্রসূত উত্তর - ঠিক গোল্ডিলকসের মতো, খুব ছোট নয়, খুব বেশি দীর্ঘ নয় :)
স্টিভ জেনসেন

9

ভ্যাগ্র্যান্টের প্রয়োজন যে বাক্স মেটাডেটা ইউআরএলগুলি application/jsonসামগ্রীর ধরণের সাথে পরিবেশন করা উচিত । আপনি যে ত্রুটিটি পাচ্ছেন তা ইঙ্গিত করে যে ভ্যাগ্রেট আপনার URL টি নিয়মিত বাক্স হিসাবে ব্যাখ্যা করেছে।

আপনার HTTP সার্ভারটি Content-Typeযথাযথভাবে শিরোনামটি সেট করছে তা নিশ্চিত করুন । আপনার ফাইলের এক্সটেনশন থাকলে বেশিরভাগ এইচটিটিপি সার্ভার স্বয়ংক্রিয়ভাবে Content-Type শিরোনাম সেট করেapplication/json.json


1
আপনার উত্তরটি কেন উত্তর নয় তা আমি জানি না কারণ ভ্যাগ্রান্টের সাথে স্থানীয় বিধানের কাজ করার জন্য আমার ঠিক এটি করা দরকার ছিল।
গৌরব

4

আমি মনে করি আপনি তাদের নির্দেশাবলী মিশ্রিত করেছেন ..

যোদ্ধা ওয়েবসাইট থেকে নিম্নলিখিত নেওয়া হয়েছে:


বক্স ফাইল

আসল বক্স ফাইলটি ভ্যাগ্র্যান্টের জন্য প্রয়োজনীয় অংশ। আপনি সর্বদা একটি বাক্স ফাইলের পাশাপাশি একটি মেটাডেটা ফাইল ব্যবহার করার পরামর্শ দেওয়া হয়, তবে ডাইরেক্ট বক্স ফাইলগুলি ভ্যাগ্রান্টে উত্তরাধিকারসূত্রে কারণে সমর্থিত।

Box files are compressed using tar, tar.gz, or zip. The contents of the archive can be anything, and is specific to each provider. ভ্যাগ্র্যান্ট কোর নিজেই কেবল পরে বাক্সগুলি ব্যবহারের জন্য আনপ্যাক করে।

Within the archive, Vagrant does expect a single file: "metadata.json".এটি একটি জেএসওএন ফাইল যা উপরের "বক্স মেটাডেটা" উপাদানটির সাথে সম্পূর্ণ সম্পর্কিত নয়। This file must contain at least the "provider" key with the provider the box is for। উদাহরণস্বরূপ, যদি আপনার বাক্সটি ভার্চুয়ালবক্সের জন্য থাকে তবে মেটাডেটা.জসন এটির মতো দেখায়:

{
  "সরবরাহকারী": "ভার্চুয়ালবক্স"
}

If there is no metadata.json file or the file does not contain valid JSON with at least a "provider" key, then Vagrant will error when adding the box.


সুতরাং, আমি মনে করি আপনার বক্স ফাইল ফর্ম্যাটটি সম্ভবত ভুল। হয় এটি প্রস্তাবিত ফর্ম্যাট দিয়ে সংকুচিত হয় না, বা আপনি সংরক্ষণাগারের মধ্যে কোনও মেটাডেটা.জসন ফাইল অন্তর্ভুক্ত করেননি


একই সমস্যাযুক্ত অন্যদের জন্য, মেটাডেটা.জসন পাথ (উইন্ডোতে) হ'ল ... ব্যবহারকারী \ ব্যবহারকারীর নাম \ ভাগ্রেন্ট.ডি \ বাক্স \ বক্সনাম \ 0 \
ভার্চুয়ালবক্স

1

আপনি https://github.com/sparkoo/boxitory চেষ্টা করতে পারেন । এটি সাধারণ এক জার সার্ভার। আপনি এটিকে ডিরেক্টরিতে নির্দেশ করেছেন যেখানে আপনার যান্ত্রিক বাক্স রয়েছে এবং এটি যোনিদের জন্য সুসংগত http ইন্টারফেস তৈরি করে। তারপরে আপনি এটিকে কেবল আপনার ভ্যাংগ্রাফাইল থেকে নির্দেশ করুন এবং আপনার কাজ শেষ। আপনার বাক্সগুলি বর্ণনা করে, নতুন সংস্করণ, সরবরাহকারী, ইত্যাদি যুক্ত করার জন্য আপনাকে ম্যানুয়ালি হ্যান্ডেল করতে হবে না এটি আপনার জন্য নিখরচায় হয়ে গেছে। কেবলমাত্র নতুন বাক্স ফাইল যুক্ত করুন এবং অনুরোধ করা হলে বক্সিটারি তাৎক্ষণিকভাবে এটি প্রদান করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.