উত্তর: হোস্ট দ্বারা একটি টাস্ক হোস্ট কীভাবে চালানো যায়?


15

প্লে-লেভেলে, serial: 1আমাদের পুরো খেলাকে একবারে একটি করে হোস্ট চালানোর অনুমতি দিতে হবে। তবে আমি কোনও কাজেই এটি করার সহজ উপায় খুঁজে পাইনি। এটি বিশেষত প্রাসঙ্গিক, যদি প্রশ্নে কাজটি সঠিক লকিং (যে কারণেই না হয়) সম্পাদন করে না।

একটি সুস্পষ্ট উত্তর হ'ল টাস্কটি তার নিজস্ব নাটকে রাখা। তবে এটি ভূমিকাগুলির সাথে কোনও সহায়তা করে না। ( serial: 1ভূমিকাটি ব্যবহার করে নাটকটি অবতীর্ণ করা আসলেই স্বজ্ঞাত নয়))

উত্তর:


12

আপনি যদি আপনার প্লেবুকের পদক্ষেপগুলি সম্পাদন করতে কোনও সমান্তরালতা না চান তবে কাঁটাচামচ স্তরটি 1 তে সেট করুন:

ansible-playbook --forks=1 ...

আপনি এটিকে আপনার উত্তরসূরী সিএফজি ফাইলটিতে রাখতে পারেন:

[defaults]
forks=1

তবে আপনি যদি এটি স্বতন্ত্র ভিত্তিতে চান তবে উপরের কমান্ড লাইন বিকল্পটি ব্যবহার করুন।

সম্পাদনা করুন:

serial: 1সম্পূর্ণ ভিন্ন কিছু করে: এটি প্রতিটি হোস্টের জন্য প্লেবুক চালানোর মতো, পরবর্তী হোস্টে যাওয়ার আগে সম্পূর্ণ প্লেবুকের সমাপ্তির অপেক্ষায়। forks=1মানে পরের হোস্টে একই টাস্ক চালানোর আগে একটি হোস্টে একটি খেলায় প্রথম টাস্কটি চালানো, সুতরাং পরবর্তী টাস্কটি স্পর্শ করার আগে প্রতিটি হোস্টের জন্য প্রথম টাস্কটি চালানো হবে।

সুতরাং আপনি forks=1কেবল একটি খেলার জন্য চান ; দুর্ভাগ্যক্রমে এটি বর্তমানে সম্ভব নয়।


2
আমি এটি একটি পুরো প্লেবুকে সেট করতে চাইছি না। এটি নন-দানাদারের কাছে অনেক বেশি। serial: 1আসুন আমি এটি কমপক্ষে একটি নাটকে সেট করি। তবে আমি কেবল এটি একটি নাটকের উপ-উপস্থায় সেট করতে চাই (এর সঠিক নামটি যা। কখনও মনে হয়েছিল, এটি "কাজ", তবে উপরের মন্তব্যটি অসম্মতি বলে মনে হয়েছে)।
এলরন্ড

3
serial: 1সম্পূর্ণ ভিন্ন কিছু করে: এটি প্রতিটি হোস্টের জন্য প্লেবুক চালানোর মতো, পরবর্তী হোস্টে যাওয়ার আগে সম্পূর্ণ প্লেবুকের সমাপ্তির অপেক্ষায়। forks=1মানে পরের হোস্টে একই টাস্ক চালানোর আগে একটি হোস্টে একটি খেলায় প্রথম টাস্কটি চালানো , সুতরাং পরবর্তী টাস্কটি স্পর্শ করার আগে প্রতিটি হোস্টের জন্য প্রথম টাস্কটি চালানো হবে। সুতরাং আপনি forks=1কেবল একটি খেলার জন্য চান ; দুর্ভাগ্যক্রমে এটি বর্তমানে সম্ভব নয়।
উর্টেল

ভাল যুক্তি! আপনি কি উত্তর যুক্ত করতে আপত্তি করতে চান?
এলরন্ড

2

এই সমস্যার একটি সমাধান আছে - একটি হোস্টের তালিকা (বা একটি গ্রুপ) পাস করতে পারে with_itemsএবং তারপরে delegate_toএই তালিকাটি ব্যবহার করে। হোস্ট দ্বারা এই পদ্ধতিতে টাস্কটি কার্যকর করা হবে।

উদাহরণ স্বরূপ:

- name: start and enable rabbitmq (run task host by host)
  service:
    name: "rabbitmq-server"
    state: "started"
    enabled: true
  delegate_to: "{{ item }}"
  with_items: "{{ groups['rabbitmq-cluster'] }}"
  run_once: true

যারা run_once: trueসেখানে আছেন ভাবছেন তাদের জন্য এটি চেষ্টা করে দেখুন। আপনি কি পছন্দ করবেন না। (এত বার পুনরায় পুনরায় রান করা হয়েছে)
অ্যালামেনন

1

যদি আপনি এটি কোনও একক মেশিনে চালাচ্ছেন তবে একাধিক হোস্টের জন্য একচেটিয়া লকগুলির সমস্যা দেখা দেয় o সুতরাং সমস্ত হোস্টের জন্য আপনার একে একে চালানো উচিত --forks=1Forএজন্য উত্তরসূচক প্লেবুক কমান্ড কল করার সময় আপনাকে সেট করা দরকার । উদাহরণস্বরূপ: ansible-playbook webserver.yml --forks=1যেখানে webserver.yml হয়েছে app01 এবং app02 ভিতরে আপনার[webserver]


0

আপনি যা চান তা ভেবে দেখুন

রান_অনসেস: সত্য


4
নোপ: "রান_অনসেস: ট্রু" অর্থ হোস্টের তালিকার ঠিক এক হোস্টের জন্য টাস্কটি চালানো। আমি তালিকার প্রতিটি হোস্টের জন্য এটি চালাতে চাই, তবে একের পর এক।
এলারন্ড

0

স্থানীয়ভাবে চালানো যেতে পারে এমন কমান্ডগুলির জন্য, খেলার সমস্ত হোস্টের উপরে পুনরাবৃত্তি করতে একটি লুপ ব্যবহার করুন। কমান্ডটি স্থানীয়ভাবে চালানো যেতে পারে এটি কেবলমাত্র কাজ করে। আপনি কীভাবে সেটআপ করা হয় তা এই পদ্ধতিতে একে একে দূরবর্তী মেশিনে ssh সহ একটি কমান্ড চালাতে পারেন, তবে ক্রমবৃদ্ধি সম্পর্কে কথা বলার সময় এটি মুশকিল হয়ে যায়।

উদাহরণ:

- name: Init New Appliances - Remove the known hosts entry for the server in case it has changed
  run_once: yes
  connection: local
  become: no
  command: "ssh-keygen -R {{ item }}"
  with_items:
  - "{{ inventory_hostname }}"

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