সর্বদা উত্তরযোগ্য হ্যান্ডলার মৃত্যুদন্ড কার্যকর করুন


33

আমি আমার ডেভলপমেন্ট সার্ভারের বিধানের জন্য উত্তরীয় ব্যবহার করছি।

আমি চাই এটি সর্বদা আমার জন্য কিছু পরিষেবা শুরু করুক। আমার এই উদ্দেশ্যে হ্যান্ডলার রয়েছে তবে শর্ত ছাড়াই হ্যান্ডলার মৃত্যুদন্ড কার্যকর করার সর্বোত্তম উপায় কোনটি, যেমন এটি সর্বদা কার্যকর হয়?

এটার মতো কিছু:

tasks:
    - name: Trigger handler
      run_handler: name=nginx-restart

6
আপনি যদি কোনও টাস্ক সবসময় চালাতে চান তবে আপনার এটি হ্যান্ডলারের পরিবর্তে একটি কাজ করা উচিত।
জর্দান

@ জর্ডান - কখনও কখনও আপনি এমন একটি হ্যান্ডলার রাখতে চাইতে পারেন যা শর্তসাপেক্ষে এই নির্দিষ্টটি ব্যতীত বেশিরভাগ পরিস্থিতিতে সঞ্চারিত হয়।
রৌপ্যমূল্য

উত্তর:


61

যদি আপনার একেবারে হ্যান্ডলারটি প্রতিবারই ট্রিগার করতে হয় তবে এখানে দুটি বিকল্প রয়েছে:

1) একটি নুপ শেল কমান্ড চালান যা সর্বদা পরিবর্তিত হিসাবে প্রতিবেদন করবে

-  name: trigger nginx-restart
   command: /bin/true
   notify: nginx-restart

2) পরিবর্তিত_ যখন: হ্যান্ডলারকে ট্রিগার করতে ডিবাগ ব্যবহার করুন

-  debug: msg="trigger nginx-restart"
   notify: nginx-restart
   changed_when: true

এর এছাড়াও নোট বিকল্প 1 এবং চেক করুন মোড: আপনি ব্যবহার করতে চান করতে পারেন check_mode: noযদি Ansible সংস্করণ 2.2 বা উচ্চতর বা ব্যবহার always_run: yesযে এর চেয়ে পূর্ববর্তী সংস্করণে যাতে কাজের চেক মোডে উপর এড়ানো না হয়ে যায় ব্যবহার করে। আমার ম্যানুয়াল টেস্টিং থেকে দেখে মনে হচ্ছে হ্যান্ডলারগুলি চেক মোডে থেকে যায় তবে দয়া করে আপনার কেস আলাদা হতে পারে তাই সাবধান হন।


7
আজকাল, আপনি `--force-হ্যান্ডলার হ্যান্ডেলার চালাতে পারেন এমনকি যদি একটি টাস্ক fails`
কনিকে

5
হ্যাঁ যা এটি সমস্ত হ্যান্ডলারদের চালাতে বাধ্য করবে
জারভ

পরিবর্তিত স্থিতি সম্পর্কিত এই পোস্টটি আমি দরকারী বলে মনে করি, যা আমাকে এখানে নিয়ে যায়। serverfault.com/a/799282/173002 । TY।
sonjz

ধন্যবাদ, আমি changed_whenএকটি কার্যবিধির পরিবর্তে একটি হ্যান্ডলার হিসাবে একটি নন-আদর্শবান কাজ [যা কিছু ক্ষেত্রে একাধিকবার আহ্বান করা যেতে পারে] বাস্তবায়নের জন্য এতে বিকল্প 2 এবং এর সাথে আরও যুক্তিযুক্ত ব্যবহার করেছি ।
সাম্মিচ

17

জবাব হ্যান্ডলারদের বাধ্য করার জন্য বিভিন্ন বিকল্প সরবরাহ করে:

1) সর্বদা সমস্ত হ্যান্ডলারদের বাধ্য করতে, ansible-playbook playbook.yml --force-handlersএখানে নথিবদ্ধ হিসাবে চালান : https://github.com/ansible/ansible/issues/4777

2) কোনও প্লেবুকের মধ্যে নির্দিষ্ট পয়েন্টে অবহিত হওয়া হ্যান্ডলারগুলিকে বাধ্য করার জন্য, আপনি একটি মেটা টাস্ক https://docs.ansible.com/playbooks_intro.html ব্যবহার করতে পারেন :

tasks: 
  - shell: some tasks go here
  - meta: flush_handlers
  - shell: some other tasks

3) তবে এটির মতো মনে হচ্ছে আপনি অন্য কোনও কাজের ফলাফল নির্বিশেষে কোনও পরিষেবা চালু বা পুনরায় চালু করা নিশ্চিত করতে চান। সেক্ষেত্রে কোনও হ্যান্ডলার ব্যবহার করবেন না, এমন একটি নতুন টাস্ক ব্যবহার করুন যা উত্তরযোগ্যটির serviceমডিউলটিকে কল করে : http://docs.ansible.com/service_module.html

tasks: 
  - name: ensure ntp is running
    service: name=ntp state=started enabled=yes

  - name: always reload nginx
    service: name=nginx state=reloaded

  - name: always restart MySQL
    service: name=mysql state=restarted

1
(3) এর সাথে সমস্যাটি হ'ল কারওর কাছে বেশ কয়েকটি টাস্ক থাকতে পারে যা হ্যান্ডলারকে অবহিত করে এবং আমি হ্যান্ডলারটি বেশ কয়েকবার চালিত (পরিষেবা পুনরায় চালু করা) চাই না।
জোনাথন হার্টলি

একাধিক টাস্ক একই হ্যান্ডলারকে অবহিত করতে পারে এবং হ্যান্ডলারটি কেবল একবার কার্যকর করা হবে। হ্যান্ডলারের পুরো বিষয়টি এটি।
জেফ উইডম্যান 19

আরে জেফ এই উত্তরটি হ্যান্ডলারগুলি ব্যবহার না করে, সমস্ত কার্য কেবলমাত্র টাস্ক ব্যবহার করে নির্দিষ্ট করে দেওয়া।
জোনাথন হার্টলি

দুঃখিত, আমি আশঙ্কা করছি যে সমাধানের জন্য আপনি যে ব্যবহারের সমাধান করার চেষ্টা করছেন তা আমি এখনও বুঝতে পারি না ... আপনি যা করতে চাইছেন তার উদাহরণ দিয়ে একটি নতুন প্রশ্ন খুলতে পারে? আপনি যদি এটির একটি লিঙ্কের সাথে একটি মন্তব্য যুক্ত করেন তবে আমি তার উত্তর দেওয়ার চেষ্টা করব।
জেফ উইডম্যান

আমার নতুন প্রশ্ন দরকার নেই ওকিউ জিজ্ঞাসা করেছিল, "আমি কীভাবে হ্যান্ডলার সর্বদা চলতে পারি তা নিশ্চিত করতে পারি", এবং এই উত্তর, অংশ 3, "পরিবর্তে কাজগুলি ব্যবহার করুন" বলে পরামর্শ দিয়েছে, এবং আমার মন্তব্যটি উল্লেখ করেছে "আপনার কাজটি তখন কিছু পরিস্থিতিতে কয়েকবার চলতে পারে।"
জোনাথন হার্টলি

6

কোনও পরিষেবা পুনরায় চালু করা একটি জিনিস; এটি চলমান নিশ্চিত করা অন্য এক। আপনি যদি ansibleনিশ্চিত হতে চান যে nginxচলছে কিনা , আপনি এটি করুন:

tasks:
  - name: Ensure nginx is running
    service: name=nginx state=started
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.