উত্তরযোগ্য প্লেবুক বনাম ভূমিকা


99

উত্তরযোগ্য ডক্স অনুসারে একটি প্লেবুক হ'ল:

... ইতিমধ্যে বিদ্যমান কোনও পৃথকীকরণের জন্য একটি সত্যই সাধারণ কনফিগারেশন পরিচালনা এবং মাল্টি-মেশিন স্থাপন সিস্টেমের ভিত্তি এবং জটিল অ্যাপ্লিকেশন মোতায়েনের জন্য এটি খুব উপযুক্ত well

এবং আবারও সেই একই ডক্স অনুসারে একটি ভূমিকা হ'ল :

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

তবে এগুলি এবং তাদের বিভিন্ন ব্যবহারের মামলার মধ্যে পার্থক্যটি আমার কাছে তাত্ক্ষণিকভাবে সুস্পষ্ট নয়। উদাহরণস্বরূপ, আমি যদি আমার /etc/ansible/hostsফাইলটি দেখতে দেখতে কনফিগার করি তবে :

[databases]
mydb01.example.org
mydb02.example.org

[mail_servers]
mymail01.example.org
mymail_dr.example.org

... তাহলে এই " [databases]" "এন্ট্রি ... কোন ভূমিকা ? বা কোথাও কোনও প্লেবুক ওয়াইএএমএল ফাইলের নাম? অথবা অন্য কিছু?!?

যদি কেউ আমাকে এইগুলির মধ্যে পার্থক্যগুলি ব্যাখ্যা করতে পারে তবে আমার উত্তরযোগ্য সম্পর্কে আমার বোঝার পরিমাণটি বাড়িয়ে তুলবে!

  • প্লেবুক বনাম ভূমিকা বনাম [databases]এবং অনুরূপ এন্ট্রিগুলিতে/etc/ansible/hosts
  • ওয়াইএএমএল ফাইলগুলির মধ্যে যদি প্লেবুকগুলি সংজ্ঞায়িত করা হয়, তবে ভূমিকাগুলি কোথায় সংজ্ঞায়িত হয়?
  • সরাইয়া থেকে ansible.cfgপ্রাপ্তিসাধ্য Playbooks / ভূমিকা সঙ্গে Ansible সার্ভারে জীবন যাপন, কিভাবে আমি যুক্ত করব / কনফিগার Ansible? উদাহরণস্বরূপ, আমি যখন চালনা করি তখন ansible-playbook someplaybook.yamlকীভাবে উত্তরযোগ্য জানতে পারে যে সেই প্লেবুকটি কোথায় পাবেন?

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

tasksস্টাফ কর playbooksকার্য পরিচালনা এবং চালু করতে। rolesকোনও নির্দিষ্ট ক্রিয়াকলাপ সম্পাদন করে এমন কার্যাদি, হ্যান্ডলার ইত্যাদির গুচ্ছগুলি সংগঠিত করুন। কিছু playbookচালু করতে role(গুলি) প্রয়োজন। আপনি কি rolesএবং একটি সংগ্রহ কল করবেন playbooks? উদাহরণস্বরূপ এমনটি বলুন যা আপনার সাইটের সমস্ত হোস্টের কনফিগারেশন পরিচালনা করে?
fbicknel

উত্তর:


114

প্লেবুক বনাম ভূমিকা বনাম [ডাটাবেসগুলি] এবং / etc / উত্তরযোগ্য / হোস্টগুলিতে অনুরূপ এন্ট্রি

[databases]একদল হোস্টের একক নাম। এটি আপনাকে একক নাম দিয়ে একাধিক হোস্ট রেফারেন্স করতে দেয়।

ভূমিকা হ'ল একটি নির্দিষ্ট ভূমিকার জন্য পরিবেশন করতে হোস্টকে কনফিগার করতে কাজের একটি অতিরিক্ত সেট এবং অতিরিক্ত ফাইল ।

প্লেবুক হোস্ট এবং ভূমিকাগুলির মধ্যে একটি ম্যাপিং।

ডকুমেন্টেশন থেকে উদাহরণ উদাহরণ প্রকল্প বর্ণনা করে। এতে দুটি জিনিস রয়েছে:

  • প্লেবুক। site.yml, webservers.yml, fooservers.ymlPlaybooks হয়।
  • ভূমিকা: roles/common/এবং এর roles/webservers/সংজ্ঞা commonএবং webserversসেই অনুযায়ী ভূমিকা থাকে ।

প্লেবুকের ভিতরে ( webservers.yml) আপনার মতো কিছু রয়েছে:

---
- hosts: webservers <- this group of hosts defined in /etc/ansible/hosts, databases and mail_servers in example from your question
  roles: <- this is list of roles to assign to these hosts
     - common
     - webservers

ওয়াইএএমএল ফাইলগুলির মধ্যে যদি প্লেবুকগুলি সংজ্ঞায়িত করা হয়, তবে ভূমিকাগুলি কোথায় সংজ্ঞায়িত হয়?

তারা roles/*ডিরেক্টরি ভিতরে সংজ্ঞায়িত করা হয় । ভূমিকাগুলি বেশিরভাগই YAML ফাইলগুলি ব্যবহার করে সংজ্ঞায়িত করা হয় তবে এতে কোনও প্রকারের ( files/, templates/) সংস্থান থাকতে পারে । ডকুমেন্টেশন অনুসারে ভূমিকা সংজ্ঞাটি এইভাবে কাঠামোগত করা হয়:

  • যদি ভূমিকা / এক্স / টাস্ক / মেইন.আইএমএল উপস্থিত থাকে তবে এতে তালিকাভুক্ত কাজগুলি প্লেটিতে যুক্ত করা হবে
  • যদি ভূমিকা / এক্স / হ্যান্ডলার / প্রধান.আইএমএল উপস্থিত থাকে তবে এতে তালিকাবদ্ধ হ্যান্ডলারগুলি নাটকটিতে যুক্ত করা হবে
  • যদি ভূমিকা / এক্স / ভার্স / মেইন.আইএমএল উপস্থিত থাকে তবে এতে তালিকাভুক্ত ভেরিয়েবলগুলি প্লেতে যুক্ত করা হবে
  • যদি ভূমিকা / এক্স / মেটা / মেইন.আইএমএল উপস্থিত থাকে তবে এতে তালিকাভুক্ত যে কোনও ভূমিকা নির্ভরতাগুলি ভূমিকার তালিকায় যুক্ত হবে (১.৩ এবং পরবর্তী)
  • যে কোনও অনুলিপি কাজগুলি ফাইলগুলিকে ভূমিকা / x / ফাইলগুলিতে / তুলনামূলকভাবে বা একেবারে পথ না দিয়ে রেফারেন্স করতে পারে
  • যে কোনও স্ক্রিপ্ট টাস্কগুলি তুলনামূলকভাবে বা একেবারে পথ ছাড়াই ভূমিকা / এক্স / ফাইলগুলিতে স্ক্রিপ্টগুলি উল্লেখ করতে পারে
  • যে কোনও টেম্পলেট কাজগুলি ফাইলগুলিকে ভূমিকা / x / টেমপ্লেটগুলিতে / তুলনামূলকভাবে বা একেবারে পথ ছাড়াই রেফারেন্স করতে পারে
  • যে কোনও অন্তর্ভুক্ত কাজগুলি ফাইলগুলিকে ভূমিকা / এক্স / টাস্কে / তুলনামূলকভাবে বা একেবারে পথ ছাড়াই রেফারেন্স করতে পারে

সর্বাধিক গুরুত্বপূর্ণ ফাইলটি হ'ল roles/x/tasks/main.ymlএখানে আপনি কার্যগুলি সংজ্ঞায়িত করেন, যা কার্যকর করা হবে, যখন ভূমিকাটি কার্যকর করা হবে।

উত্তরীয় সার্ভারে থাকা উত্তরযোগ্য সিএফজি ছাড়াও কীভাবে উপলব্ধ প্লেবুকগুলি / রোলগুলি সহ আমি উত্তরকে যুক্ত / কনফিগার করব? উদাহরণস্বরূপ, আমি যখন উত্তরযোগ্য-প্লেবুক someplaybook.yaml চালনা করি, তখন কীভাবে উত্তরযোগ্য সেই প্লেবুকটি খুঁজে পাবে?

$ ansible-playbook someplaybook.yaml

বর্তমান ডিরেক্টরিতে কোনও প্লেবুক সন্ধান করবে।

$ ansible-playbook somedir/somedir/someplaybook.yaml

somedir/somedir/ডিরেক্টরি ভিতরে প্লেবুক সন্ধান করবে ।

আপনার প্রকল্পটি সার্ভারে সমস্ত প্লেবুক এবং ভূমিকা সহ রাখার দায়িত্ব আপনার। উত্তরদাতার সাথে এর কোন যোগসূত্র নেই।


ধন্যবাদ @ ইয়ারোস্লাভ অ্যাডমিন (+1) - একটি দ্রুত অনুসরণের প্রশ্ন: আপনি বর্ণনা করেছেন যে ডিরেক্টরিগুলির মধ্যে ভূমিকাগুলি সংজ্ঞায়িত করা হয় , তবে আসলে কী ভূমিকাটি সেট করে? অন্য কথায়, webservers.ymlপ্লেবুক [webservers]হোস্টগুলিকে মানচিত্রের commonএবং webserversভূমিকার জন্য মানচিত্র করে । তবে commonভূমিকায় ঠিক কী অন্তর্ভুক্ত রয়েছে ? ডিরেক্টরিতে এটি সংজ্ঞায়িত করার কোনও উপায় নেই, সুতরাং সেই "রোল ডিরেক্টরিগুলি" এর ভিতরে সাধারণত ওয়াইএএমএল ফাইল থাকে? আবার ধন্যবাদ!
বুদ্ধিমান করুন

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

36

প্লেবুক বনাম ভূমিকা বনাম [ডাটাবেসগুলি] এবং / etc / উত্তরযোগ্য / হোস্টগুলিতে অনুরূপ এন্ট্রি

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

একজন প্লেবুক সংজ্ঞায়িত কি ঘটছে তা যেখানে । এটি সেই জায়গা যেখানে আপনি হোস্টগুলি সংজ্ঞায়িত করেন (হোস্টগ্রুপগুলি, নীচে দেখুন) এবং সেই হোস্টগুলিতে প্রয়োগ করা হবে এমন ভূমিকা।

[databases]এবং আপনার ইনভেন্টরির অন্যান্য প্রবেশিকাগুলি হল হোস্টগ্রুপ ps হোস্টগ্রুপগুলি হোস্টের একটি সেট সংজ্ঞায়িত করে একটি প্লে চলবে।

একটি নাটক একটি প্লেবুকের ভিতরে টাস্ক বা ভূমিকা (বা উভয়) এর সেট of বেশিরভাগ ক্ষেত্রে (এবং উদাহরণস্বরূপ) একটি প্লেবুকটিতে কেবল একটি একক নাটক থাকবে। তবে আপনি নিজের পছন্দ মতো অনেকগুলি পেতে পারেন। তার অর্থ আপনার কাছে একটি প্লেবুক থাকতে পারে যা postfixহোস্টগ্রুপের mail_serversভূমিকা mysqlএবং হোস্টগ্রুপের ভূমিকাটি পরিচালনা করবে databases:

- hosts: mail_servers
  roles:
    - postfix

- hosts: databases
  roles:
    - mysql

ওয়াইএএমএল ফাইলগুলির মধ্যে যদি প্লেবুকগুলি সংজ্ঞায়িত করা হয়, তবে ভূমিকাগুলি কোথায় সংজ্ঞায়িত হয়?

জবাব অনুসারে YAML- তে সমস্ত কিছুই সংজ্ঞায়িত করা হয় যা ভূমিকা এবং প্লেবুকের জন্য গণনা করে।

উত্তরীয় সার্ভারে থাকা উত্তরযোগ্য সিএফজি ছাড়াও কীভাবে উপলব্ধ প্লেবুকগুলি / রোলগুলি সহ আমি উত্তরকে যুক্ত / কনফিগার করব? উদাহরণস্বরূপ, আমি যখন উত্তরযোগ্য-প্লেবুক someplaybook.yaml চালনা করি, তখন কীভাবে উত্তরযোগ্য সেই প্লেবুকটি খুঁজে পাবে?

এএআইএআইএইকে চালনার সময় আপনাকে প্লেবুকের পথ সরবরাহ করতে হবে ansible-playbook। সুতরাং আপনার বর্তমান ডিরেক্টরি হতে ansible-playbook someplaybook.yamlআশা করি someplaybook.yaml। তবে আপনি পুরো পথটি সরবরাহ করতে পারেন:ansible-playbook /path/to/someplaybook.yaml


13

এটি একটি পরিভাষা / শব্দার্থক প্রশ্ন। এটি বেসিক সংজ্ঞা থাকলেও এটি সাপেক্ষিক হতে পারে।

আমার মতামতটি নিম্নরূপ:

যে কোনও কনফিগারেশন পরিচালনা / স্থাপনার সিস্টেমের রয়েছে:

  1. source data - লক্ষ্য হোস্টের কনফিগারেশন তৈরি করতে ব্যবহৃত ডেটা
  2. target data - লক্ষ্য হোস্টগুলি সনাক্ত করতে ব্যবহৃত ডেটা
  3. config changes- source dataভিত্তিক টার্গেট হোস্টের সাথে আমরা প্রয়োগ করি এমন বিধি / ক্রয়ের তালিকা / ক্রিয়াকলাপtarget data

উত্তরীয় পদে:

  1. source data- আমরা যে বিভিন্ন জায়গায় ডেটা রাখতে পারি - হ'ল group_vars, playbookভার্স, roleভার্স ইত্যাদি, এই জায়গাগুলি প্রাধান্যকে প্রভাবিত করে (যদি একই নামের একটি ভেরিয়েবলটি বিভিন্ন স্থানে পুনরায় সংজ্ঞায়িত করা হয় তবে এর মান কত হবে তার খুব নির্দিষ্ট নিয়ম রয়েছে কার্যকর ansible/ চলাকালীন চলকansible-playbook
  2. target data - ইনভেন্টরি (এবং, জায়ের ভিতরে জায় / হোস্টগ্রুপ ভেরিয়েবলগুলি সংজ্ঞায়িত করাও সম্ভব!)
  3. config changes - জবাবদিহির কাছে এর 4 টি বিমূর্ততা রয়েছে:
    1. টাস্ক - একক কর্ম
    2. কার্য তালিকা - ক্রিয়া তালিকা
    3. ভূমিকা - ক্রিয়াগুলির তালিকা (বা তালিকার তালিকা) একই 'বিষয়' দ্বারা গোষ্ঠীভুক্ত, সাধারণত সমস্ত লক্ষ্যগুলি একই হোস্ট / হোস্টগ্রুপে কাজ করে
    4. প্লেবুক - নাটকের তালিকা, প্রতিটি পৃথক পৃথক হোস্টগ্রুপে পরিচালিত, বেশ কয়েকটি roleএস / taskএস / টাস্কলিস্ট প্রয়োগ করে (এবং বিশেষ কার্যগুলি যেমন handlers)

'সফ্টওয়্যার' দিক থেকে - ভূমিকাটি পুনরায় ব্যবহার করার পক্ষে যথেষ্ট জেনারেল হওয়া উচিত ।

এছাড়াও কয়েকটি (বরং বড়) সংস্থাগুলিতে, 'ভূমিকা' গোষ্ঠী A দ্বারা চালিত হয়, যখন গ্রুপ বি দ্বারা রক্ষণাবেক্ষণ প্লেবুকগুলিতে ব্যবহৃত হয় while

সারসংক্ষেপ

উপরের সমস্তগুলি অনুরূপ কনফিগারেশনগুলিকে গোষ্ঠীকরণের অনুমতি দেয় - এ role। সম্পর্কিত সাবসিস্টেম / উপাদানগুলিকে এক করে গ্রুপ করা playbook। এছাড়াও, মূল্য উল্লেখ একটি প্লেবুক 1 YAML আইটেম (সহ hosts:এবং করুন অথবা tasks, pre_tasks, post_tasks, roles) একটি বলা হয়play

এখন আপনার প্রশ্নের জন্য:

হ্যাঁ, এটি প্রথমে বিভ্রান্তিকর।

আপনি সাধারণত আপনার source dataনিজের ভূমিকাটির শব্দার্থকগুলির সাথে সংযুক্ত হন, সুতরাং আপনি যখন দেখবেন যে setup_dbকোনও ভূমিকা কোনও সম্পর্কিত হোস্টগ্রুপের উপর প্রয়োগ করা হয়েছে (উদাহরণস্বরূপ db_hosts) তবে একটি playবেশ কয়েকটি হোস্টগ্রুপের একটি ইউনিয়ন জুড়ে চলছে। এটি কেবল কনভেনশন বনাম নমনীয়তার বিষয়।

পুনশ্চ

এটি বিভ্রান্তিতে যুক্ত হয়েছে, বা স্পষ্ট হয়েছে কিনা আমাকে আবার লিখুন। ধন্যবাদ


2

সহজভাবে করা:

একটি প্লেবুক মূল প্রোগ্রামের মতো, এটি কাজ শেষ করার সম্পূর্ণ নির্দেশাবলী অন্তর্ভুক্ত করে। তবে বড় প্রকল্পগুলির জন্য এটিতে প্রতিটি বিবরণ যুক্ত করা বাঞ্ছনীয় নয়। সুতরাং আপনার ভূমিকা দরকার।

একটি ভূমিকা একটি subroutine এবং সাধারণত একটি লক্ষ্য অর্জন করে, যেমন একটি ডাটাবেস সার্ভার সেটআপ। আপনি এটি roles/ডিরেক্টরিতে রাখতে পারেন , বা ইউআরআই সরবরাহ করে তৃতীয় পক্ষের ভূমিকাগুলি ডাউনলোড করতে পারেন rolesfile.ymlএবং উত্তরযোগ্য-গ্যালাক্সিগুলি আপনার জন্য ডাউনলোড করতে চাইতে পারেন।

[database]একটি হোস্ট দলের সংজ্ঞায়িত জায় ফাইল যে তালিকা হোস্ট যে অন্তর্গত databaseগ্রুপ। আপনি এরকম কিছু নির্দিষ্ট করে ওয়েব সার্ভারের একটি গ্রুপ নির্দিষ্ট করতে পারেন

[web]
web1.example.com
web2.example.com

গ্রুপ webবা databaseতারপরে প্লেবুক বা ভূমিকাতে হোস্টগুলি প্রয়োগ করার জন্য নির্দিষ্ট করতে ব্যবহার করতে পারেন।

গ্রুপগুলি ansibleঅ্যাড-হক কমান্ড চালাতে কমান্ডেও ব্যবহার করা যেতে পারে ।


1

এছাড়াও মনে রাখবেন যে কোনও মেটা ফাইল ব্যবহৃত হয় যা বিভিন্ন ভূমিকার উপর প্রভাব ফেলবে intended

প্লেবুক উদাহরণ: ডুয়াল_রোল-প্লেবুক.আইএমএল

- name: Some Action for two roles
  hosts: localhost

  vars_files:
    - roles/dual_role/meta/main.yml

  roles:
    - dual_role/container-1
    - dual_role/container-2

ভূমিকা ফোল্ডার এবং ফাইলগুলির স্কিমটি এর মতো দেখাবে:

dual_role-playbook.yml
  -- roles
     -- dual_role
        -- meta/main.yml
        -- container-1
           -- tasks/main.yml
           -- templates/template.j2
        -- container-2
           -- tasks/main.yml
           -- templates/template.j2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.