উত্তরসূরীতে সমান্তরালভাবে_প্রেমী লুপগুলি চালানোর কোনও উপায় আছে কি?


12

আমি উত্তরযোগ্য ২.২ চালাচ্ছি, তবে এটি যদি সহায়তা করে তবে আপগ্রেড করতে পারে।

আমি দেখেছি এই এবং সুন্দর উত্তেজিত ছিল, কিন্তু এটা Ansible নথিপত্রের এই (অথবা থাকে) সংস্করণে হবে বলে মনে হচ্ছে না।

আমি যে সমস্যাটি সমাধান করার চেষ্টা করছি তা হ'ল আমার কাছে এমন এক হাজার ব্যবহারকারী আছে যা আমাকে সেন্টোস বাক্সে পরিচালনা করতে হবে।

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

এই এছাড়াও প্রতিশ্রুতি লাগছিল, কিন্তু এটা সময় with_items লুপ প্রতিটি কমান্ড চালানোর জন্য একই পরিমাণ নিয়ে যায় এবং কোনো দ্রুততর যান নি (আমি যথেষ্ঠ অপেক্ষা করতে শেষে পেতে বিরক্ত না)।

এড়িয়ে যাওয়া কাজগুলি এখন দ্রুত (এটি উত্তরীয় ২.০-এর চেয়ে অনেক বেশি দ্রুত), যদি আমি এই কাজটিকে সমান্তরালভাবে কীভাবে তৈরি করতে পারি তা যদি বুঝতে না পারি, আমি মনে করি আমি ফিরে যাব এবং অর্থহীন কার্যগুলি কীভাবে এড়িয়ে যাব এবং যদি সমস্ত কিছু হয় তবে অন্যথায় ব্যর্থ হয়, আমি আমার নিজস্ব মডিউল লিখব। তবে দেখে মনে হচ্ছে আমার জবাবদিহিতে দ্রুত এই সমস্ত করা সম্ভব হবে।


এটি আমি সমান্তরালভাবে চালাতে চাই, host_authorizationsএটি ব্যবহারকারীর নাম এবং অন্যান্য ডেটাগুলির একটি তালিকা।

  - name: Create/modify OS user accounts
    user: name={{ item.username }} group=sshusers shell=/bin/bash home="/home/selinux-modules/{{ item.username }}" state=present expires={{item.expiredate|default(omit)}}
    with_items: "{{ host_authorizations }}"
    tags: full_maintenance

দয়া করে একটি কোড স্নিপেট সরবরাহ করুন। অন্যথায় এটি সাহায্য করা কঠিন।
030

@ 030 এর একটি স্নিপেট রয়েছে, আমার ধারণা এটি প্রসঙ্গে কিছুটা সহায়তা করে। আমি একই সাথে একই হোস্টের সমান্তরালে কাজগুলি (একটি লুপে) চালানোর কোনও উপায় থাকলে ধারণাগতভাবে আমি আরও আগ্রহী। আমি জানি যে আমি অ্যাসিঙ্কের সাথে একাধিক স্বতন্ত্র জিনিস করতে পারি, তবে_সাইটগুলির সাথে তেমন কিছু করতে পারি না।
পিটার টার্নার

সুতরাং মূলত যদি 1000 ব্যবহারকারী তৈরি করতে হয় তবে এটি কেবলমাত্র একজন ব্যবহারকারী তৈরি করার মতো দ্রুত শেষ করা উচিত। আকর্ষণীয়, এলডিএপ জাতীয় কিছু ব্যবহার করছে না কেন?
030

1
গুরুতরভাবে, আপনি ব্যথার পথে চলে যাচ্ছেন, আমি মনে করি না যে কেউ স্থানীয় অ্যাকাউন্ট বেসের সাথে কয়েক ডজনেরও বেশি অ্যাকাউন্ট পরিচালনা করবে, ব্যবহারকারীর সংখ্যা বাড়ার সাথে সাথে আমি সবাইকে কেন্দ্রীভূত অ্যাকাউন্টিং সিস্টেমে চলে যেতে অনুমান করি, যথারীতি কিছু ldap ব্যাকএন্ড (সক্রিয় ডিরেক্টরি হতে পারে) এবং তারপরে এই কেন্দ্রীয় বেসের বৈশিষ্ট্য হিসাবে সমাপ্তির সময় এবং পাবলিক কী সেট করে ssh_ssh_authorisedkeys এর মতো জিনিস ব্যবহার করে ssh সার্ভারকে এই কেন্দ্রীয় বেস থেকে অনুমোদিত কীগুলি পেতে দেয়।
তেনসিবাই

2
আমি এটিকে জবাবদিহি করার পক্ষে একমত নই (ইঙ্গিতটি এটি বাল্ক ব্যবহারকারী তৈরি / পরিচালনা করে না)। আমি এই অবস্থানের সাথে দাঁড়িয়ে আছি যে অ্যাকাউন্টগুলি বড় পরিমাণে স্থানীয় অ্যাকাউন্ট
বেসগুলিতে

উত্তর:


13

@ ওয়েবেকনজা উল্লেখ করেছেন যে asyncমোড দিয়ে এটি সম্ভব is আমি সম্প্রতি এটি নিজে আবিষ্কার করেছি এবং শিখেছি যে আপনি এটি আপনার প্রয়োজনের উপর নির্ভর করে 3 টি বিভিন্ন উপায়ে ব্যবহার করতে পারেন।

  1. ফলাফলগুলি কার্যকর করুন এবং জরিপ করুন, লক্ষ্য করুন poll:5, এটি প্রতি 5 সেকেন্ডে ফলাফলগুলি পোল করবে। আপনি এই পদ্ধতিতে কিছু সময় সাশ্রয় করতে পারেন।

    - name: My long runing task
      some_module_name:
        ip: "{{item.fabric}}"
        username: "{{user}}"
        password: "{{password}}"
        secret: "{{secret}}"
      loop: "{{zoning_list}}"
      register: _alias_vc_0
      async: 60
      poll: 5
    
  2. আগুন এবং ভুলে যাও poll: 0 , এটি খুব দ্রুত বিকল্প কারণ উত্তরীয় এটি কেবলমাত্র সেই কাজগুলি সম্পাদন করছে। নিচে পাশ যে আমরা জানি না টাস্ক অর্থাত ফলাফল ছিল কি changed: True/False। অবশ্যই আপনি প্রতিক্রিয়া সম্পর্কে যত্নশীল যদি এটি একটি খারাপ দিক;)।

    name: My long runing task
    some_module_name:
      ip: "{{item.fabric}}"
      username: "{{user}}"
      password: "{{password}}"
      secret: "{{secret}}"
    loop: "{{zoning_list}}"
    register: _alias_vc_0
    async: 60
    poll: 0
    
  3. অগ্নি এবং ভুলে যানasync_status , টাস্কের বাক্য গঠনটি উদাহরণ 2 এর সমান, যার জন্য এটি অতিরিক্ত টাস্কের প্রয়োজন হবে async_status। এটি আমার প্রিয় কারণ এটি তুলনামূলকভাবে দ্রুত (দ্রুততর সাধারণ লুপিং বা দ্রুত execute and poll) এবং আপনাকে প্রতিক্রিয়া ক্যাপচার করতে দেয় যদিও registerআপনার জন্য নতুনটির সাথে ডিল করতে হবে async_task

    retries: 20 - ব্যর্থ হওয়ার আগে কত প্রচেষ্টা

    delay: 2 - নির্বাচনের মধ্যে কত সেকেন্ড অপেক্ষা করতে হবে।

    - name: My long runing task
      some_module_name:
        ip: "{{item.fabric}}"
        username: "{{user}}"
        password: "{{password}}"
        secret: "{{secret}}"
      loop: "{{zoning_list}}"
      register: _alias_vc_0
      async: 60
      poll: 0
    
    
    - name: Wait for My long running task to finish
      async_status:
        id: "{{ item.ansible_job_id }}"
      register: _jobs_alias_vc_0
      retries: 20
      delay: 2
      until: _jobs_alias_vc_0.finished
      loop: "{{_alias_vc_0.results}}"
    

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

যেহেতু আপনি প্রশ্নটিতে উত্তরযোগ্য ডকুমেন্টেশনের লিঙ্কটি পোস্ট করেছেন আমি এটি করতে যাচ্ছি না।


আপনি পছন্দ করেছেন @ পছন্দসই উদাহরণগুলিতে poll3 টি মান পরিবর্তন করতে পারেন This এটি একটি আশ্চর্যজনক ব্যাখ্যা !! Thnx।
দেবানঞ্জন বসু

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

দুঃখের সাথে একটি চরিত্রের সম্পাদনা অনুমোদিত নয়! :(
দেবাঞ্জন বসু

2
বিকল্প 3 দুর্দান্ত কাজ করে, ধন্যবাদ! যদিও একটি মন্তব্য: কমপক্ষে উত্তরযোগ্য 2.8 হিসাবে, async_statusপ্রয়োজন jid, না id
এডওয়ার্ডটেক

4

আপনার প্রশ্নের উত্তর দিতে: না, এখন পর্যন্ত উত্তরযোগ্য সমান্তরালভাবে লুপগুলি চালাতে পারে না।

আমি newusersপরিবর্তে ব্যবহার করব , যা প্রচুর ব্যবহারকারী তৈরির জন্য তৈরি। এতে সমস্ত ব্যবহারকারীর সাথে একটি ফাইল তৈরি করুন, এটি হোস্টে অনুলিপি করুন newusers /path/to/user/listএবং কোনও কার্যক্রমে চালান command


3

asyncমোড ব্যবহার করে এটি অর্জন করা সম্ভব । এটি নীচে কীভাবে করতে হয় তার জন্য কিছু রেফারেন্স খুঁজুন।

refs:

---

- name: Run tasks in parallel
  hosts: localhost
  connection: local
  gather_facts: no
  tasks:
    - name: Pretend to create instances
      command: "sleep {{ item }}"  # Instead of calling a long running operation at a cloud provider, we just sleep.
      with_items:
        - 6
        - 8
        - 7
      register: _create_instances
      async: 600  # Maximum runtime in seconds. Adjust as needed.
      poll: 0  # Fire and continue (never poll)

    - name: Wait for creation to finish
      async_status:
        jid: "{{ item.ansible_job_id }}"
      register: _jobs
      until: _jobs.finished
      delay: 5  # Check every 5 seconds. Adjust as you like.
      retries: 10  # Retry up to 10 times. Adjust as needed.
      with_items: "{{ _create_instances.results }}"

যদিও এই লিঙ্কগুলি প্রশ্নের উত্তর দিতে পারে যদি তারা ভবিষ্যতের পাঠকদের জন্য আপনার উত্তরে কিছুই বাকী না ভাঙে তবে দয়া করে এটি দেখানোর চেষ্টা করুন যে এটি কীভাবে আপনার নিজের শব্দ / উদাহরণ দিয়ে সমস্যার সমাধান করতে সহায়তা করবে এবং কেবলমাত্র আরও বিস্তারিত তথ্যের জন্য লিঙ্কগুলি ছেড়ে যাবে।
তেনসিবাই

হ্যাঁ, আমি এটিকে উত্তর হিসাবে চিহ্নিত করতে পারি না)) আমি এটি পরীক্ষা করি এবং খ) প্রাসঙ্গিক কোড এখানে রেখে দেওয়া হয়েছে। তবে তবুও আমাকে এই দিক নির্দেশ করার জন্য আপনাকে ধন্যবাদ।
পিটার টার্নার

দুঃখিত, আমি তাড়াতাড়িই ছিলাম :)
webKnjaZ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.