একই আইটেমের তালিকা সহ একাধিক উত্তরযোগ্য কার্য সম্পাদন করুন


13

আমি সাইটের তালিকার জন্য অ্যাপাচি কনফিগার করতে একটি উত্তরদায়ক প্লেবুক ব্যবহার করছি। প্লেবুকটি প্রতিটি সাইটের জন্য ভার্চুয়াল হোস্ট কনফিগারেশন টেম্পলেটটিকে অনুলিপি করতে হবে এবং তারপরে প্রতিটি সাইট সক্ষম করে a2ensite:

- name: Install apache site conf
  template: src=apache-sites-{{item}}-conf.j2 dest=/etc/apache2/sites-available/{{item}}.conf mode=0644
  with_items:
  - sitea
  - siteb
  - sitec
  - sited
- name: Enable site apache conf
  command: a2ensite {{item}}
  args:
    creates: /etc/apache2/sites-enabled/{{item}}.conf
  with_items:
  - sitea
  - siteb
  - sitec
  - sited

আমি প্রতিটি কাজের জন্য একই তালিকার পুনরাবৃত্তি করা পছন্দ করি না। একই আইটেমের তালিকা সহ উভয় কাজ সম্পাদন করতে আমি প্লেবুকটি কীভাবে কনফিগার করব?

উত্তর:


15

পৃথক কার্য ফাইল করুন make_site.yml:

---
- name: Install apache site conf
  template:
    src: apache-sites-{{ site }}-conf.j2
    dest: /etc/apache2/sites-available/{{ site }}.conf
    mode: 0644

- name: Enable site apache conf
  command: a2ensite {{ site }}
  args:
    creates: /etc/apache2/sites-enabled/{{ site }}.conf

এবং আপনার প্লেবুকে:

- include_tasks: make_site.yml
  with_items:
    - sitea
    - siteb
    - sitec
    - sited
  loop_control:
    loop_var: site

আমি আলাদা ফাইল তৈরি না করেই সমাধানের আশা করছিলাম। একটি মত কিছু loopএকটি উপর blockব্লক। এটি অনুরোধ করা হয়েছে বলে মনে হচ্ছে, তবে উত্তর জিএইচ ইস্যু 13262 এর মাধ্যমে প্রত্যাখাত হয়েছে । :-(
gertvdijk

2

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

জিনিসগুলিকে কিছুটা সহজ করার জন্য আমি টেমপ্লেটগুলির জন্য একটি ডিরেক্টরি তৈরি করেছি:

  • roles/webserver/templates/apache-sites/sitea.conf.j2
  • roles/webserver/templates/apache-sites/siteb.conf.j2
  • roles/webserver/templates/apache-sites/sitec.conf.j2
  • roles/webserver/templates/apache-sites/sited.conf.j2

তারপরে roles/webserver/tasks/main.ymlআমি ফাইলগুলির সেই তালিকা এবং কিছু নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারি:

---
- block:
  - name: Install apache site conf
    template: src={{item}} dest=/etc/apache2/sites-available/{{item|regex_replace(".*/","")|regex_replace("\.j2$","")}} mode=0644
    with_fileglob:
    - "roles/webserver/templates/apache-sites/*"
  - name: Enable site apache conf
    command: a2ensite {{item|regex_replace(".*/","")|regex_replace("\.conf\.j2$","")}}
    args:
      creates: /etc/apache2/sites-enabled/{{item|regex_replace(".*/","")|regex_replace("\.j2$","")}}
    with_fileglob:
    - "roles/webserver/templates/apache-sites/*"
  become: yes

এই প্রযুক্তিটি এমনকি অন্যান্য অ্যাপ্লিকেশনগুলির জন্য একটি তালিকা তৈরি করতে খালি ডামি ফাইলগুলির সাথে ব্যবহৃত হতে পারে।


1

কনস্ট্যান্টিন একটি ভাল উত্তর দিয়েছেন; এখানে এটি একটি অতিরিক্ত গন্ধ আছে।

আমি তালিকাগুলি সাধারণত ভেরিয়েবল হিসাবে সংজ্ঞায়িত করব এবং একই ভেরিয়েবলের উপরে দুটি পৃথক লুপ লিখব:

┌─[jamesph@geror] - [~/temp] - [Sat Jan 13, 10:06]
└─[$]> cat loops-1.yml
- hosts: localhost
  gather_facts: no
  vars:
    menu:
      - Egg and Spam
      - Spam, bacon, sausage and Spam
      - Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam
  tasks:
    - debug:
        msg: "We have {{ item }}"
      with_items: "{{ menu }}"
    - debug:
        msg: "I love {{ item }}!"
      with_items: "{{ menu }}"
┌─[jamesph@geror] - [~/temp] - [Sat Jan 13, 10:06]
└─[$]> ansible-playbook loops-1.yml
 [WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

 [WARNING]: No inventory was parsed, only implicit localhost is available

 [WARNING]: Could not match supplied host pattern, ignoring: all

 [WARNING]: provided hosts list is empty, only localhost is available


PLAY [localhost] **********************************************************************************************************************

TASK [debug] **************************************************************************************************************************
ok: [localhost] => (item=Egg and Spam) => {
    "changed": false,
    "item": "Egg and Spam",
    "msg": "We have Egg and Spam"
}
ok: [localhost] => (item=Spam, bacon, sausage and Spam) => {
    "changed": false,
    "item": "Spam, bacon, sausage and Spam",
    "msg": "We have Spam, bacon, sausage and Spam"
}
ok: [localhost] => (item=Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam) => {
    "changed": false,
    "item": "Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam",
    "msg": "We have Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam"
}

TASK [debug] **************************************************************************************************************************
ok: [localhost] => (item=Egg and Spam) => {
    "changed": false,
    "item": "Egg and Spam",
    "msg": "I love Egg and Spam!"
}
ok: [localhost] => (item=Spam, bacon, sausage and Spam) => {
    "changed": false,
    "item": "Spam, bacon, sausage and Spam",
    "msg": "I love Spam, bacon, sausage and Spam!"
}
ok: [localhost] => (item=Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam) => {
    "changed": false,
    "item": "Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam",
    "msg": "I love Spam, Spam, Spam, Spam, Spam, Spam, baked beans, Spam, Spam, Spam and Spam!"
}

PLAY RECAP ****************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0

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

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