জটিল-আরগস ফর্মটি ব্যবহার করে উত্তরযোগ্যকে ফ্রি-ফর্ম কমান্ডগুলি প্রদান করা


9

আমি প্রোগ্রামক্রমে তৈরি জবাবযুক্ত প্লেবুক ব্যবহার করছি। সাধারণত, যেহেতু প্লেবুকগুলি কেবল YAML, এটি সোজা straight যাইহোক, যখন "সরল" ব্যবহার key=valueফর্ম, playbooks নয় বিশুদ্ধ YAML - তারা একটি এমবেডেড সামগ্রী অন্তর্ভুক্ত shlex-parsable ফর্ম।

এই ফর্মটিতে অস্পষ্টতা এড়াতে ( key=valueসেই আদেশটি কী যুক্তির সাথে যুক্তি বা জবাবদিহি করার পক্ষে যুক্তি?), এবং বিশ্লেষণ ও উত্পন্ন করার জন্য কেবল একটি একক ফর্ম্যাট আছে, আমি নিঃশর্তভাবে উত্তরগুলিতে উদাহরণস্বরূপ প্রদর্শিত জটিল আর্গম প্রক্রিয়াটি ব্যবহার করছি - উদাহরণ সংগ্রহস্থল ।

এটি নিম্নলিখিত ধরণের একটি বাক্য গঠন ব্যবহার করে:

action: module-name
args:
  key1: value1
  key2: value2

... যা ভাল এবং ভাল। যাইহোক, যখন জন্য এই ফর্ম ব্যবহার করার চেষ্টা shellবা commandমডিউল ( যার ডকুমেন্টেশন নামে একটি আর্গুমেন্ট পাস হচ্ছে হিসাবে প্রকৃত কমান্ড বর্ণনা free_form) এই এত ভাল কাজ করে না:

action: shell
args:
  free_form: echo hello_world >/tmp/something
  creates: /tmp/something

যখন আহ্বান করা হয়, এটি নিম্নলিখিতগুলি চালিত করে:

/bin/sh -c " free_form='echo hello_world >/tmp/something'  "

... যা আমি অর্জন করার চেষ্টা করছি তা খুব বেশি নয়।

বিশুদ্ধ ওয়াইএএমএল সিনট্যাক্স ব্যবহার করে "ফ্রি-ফর্ম" কমান্ড গ্রহণ করে উত্তরযোগ্য মডিউলগুলি ব্যবহার করার সঠিক উপায় কী?

উত্তর:


5

সংক্ষিপ্ত উত্তর: ব্যবহার করবেন না command, raw, script, অথবা shellমডিউল। আপনার নিজস্ব মডিউলটি লিখুন যা কমান্ডটিকে "সাধারণ" আর্গুমেন্ট হিসাবে গ্রহণ করে।

দীর্ঘ উত্তর:

বেশিরভাগ ক্ষেত্রে, আপনি এটি করতে পারেন:

- shell: echo hello_world > /tmp/something
  args:
    creates: /tmp/something

যাইহোক, এটি কিছু প্রান্ত ক্ষেত্রে ব্যর্থ:

- shell: echo hello_world > creates=something
  args:
    creates: creates=something  # The file is named "creates=something"

আমি এটি পরিচালনা করার সাধারণ উপায়টি জানি না, তবে একটি ব্যাশ-নির্দিষ্ট সমাধানটি হ'ল:

- shell: echo hello_world > "creates=something"
  args:
    creates: creates=something

এটির নির্গত করার জন্য আমি কোনও আনুষ্ঠানিক ওয়াইএএমএল জেনারেটরের কাছে যেতে পারি এমন কোনও ডেটা স্ট্রাকচার কি আছে - shell: ...? যদি এই কাঠামোটি এমন কিছু হয় যা কেবলমাত্র নির্ভরযোগ্যভাবে হাতে তৈরি করা যায় যা কিছুটা প্রশ্নের পয়েন্টকে পরাস্ত করে।
— চার্লস ডাফি

@ চার্লসডুফি: আমি মনে করি না ...আপনি সাধারণভাবে এই অংশ থেকে পালাতে পারবেন । আপনি তাকান তাহলে library/commands/command, আপনি একটি চমত্কার উদার Regex ম্যাচিং পাবেন creates=, removes=, chdir=, ইত্যাদি। আপনার যদি কোনও গ্যারান্টির দরকার হয় যে কোনও কমান্ড দিয়ে যেতে পারে, আপনাকে নিজের মডিউলটি লিখতে হবে।
— স্নোবল

ফর্সা 'nuff। এটি আমার মনে, একটি উল্লেখযোগ্য ডিজাইনের অপব্যবহার ... তবে, ভাল, এটি হ'ল।
— চার্লস ডাফি

0

এটি এখন উত্তরীয় ডকুমেন্টেশনে সম্বোধন করা হয়েছে ।

# You can also use the 'args' form to provide the options. This command
# will change the working directory to somedir/ and will only run when
# /path/to/database doesn't exist.
- command: /usr/bin/make_database.sh arg1 arg2
  args:
    chdir: somedir/
    creates: /path/to/database

মনে রাখবেন যে 'ফ্রি_ফর্ম' নামে কোনও প্যারামিটার নেই।


উপস্থিতি জোড়গুলি পার্স করা থেকে argsবাধা দেয় , এর কি কোনও অস্তিত্ব থাকতে হবে? (যদি তা হয় তবে এটি অস্পষ্টতাকে পরিষ্কারভাবে সম্বোধন করে; অন্যথায়, এটি এখনও বিদ্যমান বলে মনে হয়)। k=vcommand
— চার্লস ডাফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.