কোনও উত্তরযোগ্য ভূমিকার ক্ষেত্রে খেলাপি এবং যুদ্ধের মধ্যে পার্থক্য কী?


151

একটি নতুন উত্তরযোগ্য ভূমিকা তৈরি করার সময়, টেমপ্লেট খালি ফাইল সহ একটি varsএবং defaultsডিরেক্টরি উভয় তৈরি করে main.yml। আমার ভূমিকা সংজ্ঞায়িত করার সময়, আমি এর যে কোনও একটিতে পরিবর্তনশীল সংজ্ঞা রাখতে পারি এবং সেগুলি আমার কার্যগুলিতে উপলব্ধ হবে।

সংজ্ঞা স্থাপনের মধ্যে পার্থক্য কী defaultsএবং vars? কি ভিতরে প্রবেশ করা উচিত defaults, এবং কি মধ্যে প্রবেশ করা উচিত vars? একই ডেটার জন্য উভয় ব্যবহার করা কি বোধগম্য?

আমি জানি যে দুজনের মধ্যে অগ্রাধিকার / অগ্রাধিকারের মধ্যে পার্থক্য রয়েছে তবে আমি বুঝতে চাই যে কোথায় যাওয়া উচিত।

আসুন আমরা বলি যে আমার ভূমিকা লক্ষ্য সিস্টেমে ডিরেক্টরিগুলির একটি তালিকা তৈরি করবে। আমি তৈরি করতে ডিফল্ট ডিরেক্টরিগুলির একটি তালিকা সরবরাহ করতে চাই, তবে ভূমিকাটি ব্যবহার করার সময় ব্যবহারকারীকে সেগুলি ওভাররাইড করার অনুমতি দিতে চাই।

এটি দেখতে কেমন লাগে তা এখানে:

---
- directories:
  - foo
  - bar
  - baz

আমি এটিকে হয় defaults/main.ymlবা এর মধ্যে vars/main.ymlরাখতে পারতাম, মৃত্যুদন্ড কার্যকর করার দৃষ্টিকোণ থেকে এটি কোনও পার্থক্য করতে পারে না - তবে কোথায় যাওয়া উচিত?

উত্তর:


113

পরিবর্তনশীল অগ্রাধিকার সম্পর্কিত উত্তরীয় ডকুমেন্টেশন এই চমৎকারটি সংক্ষিপ্তসার করে:

যদি একই নামের একাধিক ভেরিয়েবলগুলি বিভিন্ন স্থানে সংজ্ঞায়িত করা হয় তবে তারা একটি নির্দিষ্ট ক্রমে জিতে যায়, যা হ'ল:

  • অতিরিক্ত ভার্স (কমান্ড লাইনে থাকা) সর্বদা জয়ী হয়
  • তারপরে আসে সংযোগের ভেরিয়েবলগুলি ইনভেন্টরিতে সংজ্ঞায়িত হয় (উত্তরযোগ্য_এসএইচ_উজার, ইত্যাদি)
  • তারপরে আসে "সর্বাধিক সবকিছু" (কমান্ড লাইন স্যুইচ, প্লে-এর খেলাগুলি, অন্তর্ভুক্ত ওয়ার্স, রোল ওয়ার্স ইত্যাদি)
  • তারপরে ইনভেন্টরিতে সংজ্ঞায়িত বাকী ভেরিয়েবল আসে
  • তারপরে আসে একটি সিস্টেম সম্পর্কে তথ্য আবিষ্কার করা
  • তারপরে "রোল ডিফল্ট", যা সর্বাধিক "ডিফল্ট" এবং সবকিছুতে অগ্রাধিকার হারায় lose

সুতরাং ধরুন আপনার একটি "টমক্যাট" ভূমিকা রয়েছে যা আপনি টমক্যাটটি ওয়েব হোস্টের একগুচ্ছ ইনস্টল করতে ব্যবহার করেন তবে আপনার কয়েকটি হোস্টে টমক্যাটের বিভিন্ন সংস্করণ প্রয়োজন, অন্যান্য ক্ষেত্রে বিভিন্ন ব্যবহারকারী হিসাবে চালানো প্রয়োজন, ইত্যাদি defaults/main.ymlফাইলটি দেখতে পারে এটার মতো কিছু:

tomcat_version: 7.0.56
tomcat_user: tomcat

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

সম্পাদনা করুন: নোট করুন যে উপরের তালিকাটি উত্তরযোগ্য 1.x এর জন্য is উত্তরীয় 2.x এ তালিকাটি প্রসারিত করা হয়েছে। বরাবরের মতো, উত্তরযোগ্য ডকুমেন্টেশন 2.x এর জন্য পরিবর্তনশীল অগ্রাধিকারের বিশদ বিবরণ সরবরাহ করে।


4
ধন্যবাদ, এটি একটি দুর্দান্ত পৃষ্ঠা - এটি আমি খুঁজছিলাম। আমি কী রাখব defaultsএবং varsআরও নীচে কী রাখব সে সম্পর্কে আরও অনেক বিশদে চলেছি।
নিউক্লিংলার

42
এটি গুরুত্ব দেওয়ার মতো: রোল ওয়ারগুলির একটি অ-উচ্চতর প্রাধান্য রয়েছে । আমার অভিজ্ঞতায় তারা খেলাগুলির তুলনায় বেশি, যা সত্যিই বিরক্তিকর।
tedder42

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

41

সংজ্ঞায়িত রোল ভেরিয়েবলগুলির varএকটি খুব উচ্চতর অগ্রাধিকার রয়েছে - এগুলি কেবলমাত্র নির্দিষ্ট টাস্কে বা কোনও ব্লকে কমান্ড লাইনে পাস করে ওভাররাইট করা যেতে পারে। সুতরাং, আপনার প্রায় সমস্ত ভেরিয়েবলের মধ্যে সংজ্ঞা দেওয়া উচিত defaults

" পরিবর্তনশীল অগ্রাধিকার - কোথায় আপনার ভূমিকা রাখুন " নিবন্ধে লেখক কী লাগাতে হবে তার একটি উদাহরণ দিয়েছেন vars: সিস্টেম-নির্দিষ্ট ধ্রুবকগুলি যা খুব বেশি পরিবর্তন হয় না। আপনি থাকতে পারে, ফলে vars/debian.ymlএবং vars/centos.ymlএকই পরিবর্তনশীল নামের কিন্তু বিভিন্ন মান এবং তাদের শর্তসাপেক্ষে অন্তর্ভুক্ত।


3

এই প্রোগ্রামটিতে এটা অকার্যকর এবং যুক্তিসম্মত নয় যে Ansible স্থানে কনফিগারেশনের উপর যেমন উচ্চ অগ্রাধিকার Vars এর ভূমিকা । মধ্যে কনফিগারেশন vars/main.ymlএবং defaults/main.ymlকম এবং সম্ভবত একই অগ্রাধিকার হওয়া উচিত।

এমন ধরণের জীবনের বাস্তব উদাহরণ রয়েছে যেখানে আমরা এই জাতীয় আচরণ করতে চাই?

এমন উদাহরণ রয়েছে যা আমরা চাই না।

এখানে তৈরি করার বিষয়টি হ'ল সেই কনফিগারেশনটি defaults/main.yml গতিশীল হতে পারে না। ক্যান কনফিগারেশন vars/main.yml। সুতরাং উদাহরণস্বরূপ আপনি জিরলিংগুই.পোস্টগ্রেসকিএল- তে বর্ণিত হিসাবে নির্দিষ্ট ওএস এবং সংস্করণটির জন্য গতিসম্পন্ন কনফিগারেশন অন্তর্ভুক্ত করতে পারেন

কিন্তু কারণ প্রাধান্য পরিচয় করিয়ে দিতে এত অদ্ভুত অদ্ভুত এবং Ansible geerlingguy চাহিদা মধ্যে অকার্যকর হয় ছদ্ম ভেরিয়েবল হিসেবে দেখা যেতে পারে variables.yml

- name: Define postgresql_packages.
  set_fact:
    postgresql_packages: "{{ __postgresql_packages | list }}"
  when: postgresql_packages is not defined

এটি একটি কংক্রিট বাস্তব জীবনের উদাহরণ যা প্রমাণ করে যে নজিরটি অবৈধ।

এখানে আরেকটি বিষয় উল্লেখযোগ্য হ'ল আমরা চাই যে ভূমিকাটি কনফিগারযোগ্য হোক। ভূমিকাগুলি বাহ্যিক হতে পারে, অন্য কারও দ্বারা পরিচালিত হতে পারে। সাধারণ নিয়ম হিসাবে আপনি ভূমিকাগুলিতে কনফিগারেশনকে উচ্চ অগ্রাধিকার দিতে চান না।


এটি একটি মন্তব্য হওয়া উচিত, উত্তর নয়।
ntwrkguru

3

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


-4

ভেরিয়েবল এবং ডিফল্ট হাতের মুঠোয় চলে। এখানে একটি উদাহরণ

-name: install package
 yum: name=xyz{{package_version}} state=present

আপনার ডিফল্ট ফাইলে আপনার এমন কিছু হবে:

package_version: 123

জবাবদিহি করবে কী, এটি এর মূল্য গ্রহণ করবে package_versionএবং এটি প্যাকেজের নামের পাশে রাখবে যাতে এটি কোথাও পড়বে:

-name: install package
 yum: name=xyz123 state=present

এইভাবে এটি ইনস্টল করবে xyz123এবং না xyz123.4বা যা জাই এর দুর্দান্ত ভাণ্ডারে রয়েছে।

শেষ পর্যন্ত এটি করবে yum install -y xyz123

সুতরাং মূলত পূর্বনির্ধারিত মানগুলি উপস্থিত থাকে, আপনি যদি ভেরিয়েবলগুলির জন্য নির্দিষ্ট মান নির্ধারণ না করেন তবে স্থানটি খালি থাকতে পারে না।


ডাউনভোটেড কারণ এটি প্রশ্নের সমাধান করে না। স্পষ্টতই defaultsব্যবহৃত হয় যখন কোনও varsসংজ্ঞায়িত না হয় তবে উত্তরটি ব্যাখ্যা করে না যে আপনি কেন একটি মানকে অন্য বা অন্য হিসাবে সংজ্ঞায়িত করবেন, যা ওপি বলেছিল। নীচের ব্যাখ্যার সাথে তুলনা করুন।
টমাস হিরশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.