আমি ব্যক্তিগতভাবে এই সমস্যার 3 টি সম্ভাব্য সমাধান পেয়েছি যা বিভিন্ন পরিস্থিতিতে ভালভাবে কাজ করে:
বিকল্প 1 - ডিফল্টরূপে ইনস্টল করা ansible_python_interpreter: /usr/bin/python3
হোস্টগুলির জন্য সেট করুনpython3
আমি মনে করি সমস্যাটি সমাধানের জন্য এটি সর্বোত্তম পদ্ধতি যদি আপনার হোস্টগুলি python3
ডিফল্টরূপে ইনস্টল করা আছে কি না সেগুলি দ্বারা দলবদ্ধ করার উপায় রয়েছে । যতদূর আমি সচেতন, python3
সমস্ত উবুন্টু রিলিজ 16.04 এবং ততোধিক সংস্করণে উপলব্ধ।
- যদি আপনার সমস্ত হোস্ট অবশ্যই থাকে
python3
তবে আপনি আপনার group_vars/all.yml
(বা সমমানের) সাথে চলকটি যুক্ত করতে পারেন :
# group_vars/all.yml
ansible_python_interpreter: /usr/bin/python3
- যদি আপনার কিছু হোস্ট না থাকে
python3
এবং ডায়নামিক ইনভেন্টরি (উদাহরণস্বরূপ এডাব্লুএস ট্যাগিং ec2.py
) ব্যবহার করার সময় তাদের ট্যাগ করার কোনও উপায় থাকে তবে আপনি কিছু নির্দিষ্ট হোস্টে ভেরিয়েবলটি প্রয়োগ করতে পারেন:
# group_vars/tag_OS_ubuntu1804.yml
ansible_python_interpreter: /usr/bin/python3
- আপনি যদি স্ট্যাটিক ইনভেন্টরি ব্যবহার করেন এবং হোস্টগুলি তাদের আছে কিনা তার ভিত্তিতে গ্রুপ তৈরি করতে সক্ষম হন তবে
python3
আপনি এই জাতীয় কিছু করতে পারেন:
# inventory/hosts
[python2_hosts]
centos7_server
[python3_hosts]
u1804_server
[python3_hosts:vars]
ansible_python_interpreter=/usr/bin/python3
আমি এই বিকল্পটি সবচেয়ে বেশি পছন্দ করি কারণ এটির জন্য দূরবর্তী হোস্টে কোনও পরিবর্তন প্রয়োজন হয় না এবং কেবল 2 এবং 3 বিকল্পগুলির বিপরীতে কেবলমাত্র পরিবর্তনশীলগুলিতে সামান্য পরিবর্তন করা দরকার, যার জন্য প্রতিটি প্লেবুকের সংযোজন প্রয়োজন।
বিকল্প 2 - পাইথন 2 ব্যবহার করে ইনস্টল করুন raw
এই বিকল্পটির জন্য প্রতিটি প্লেবুকের শীর্ষে একটি প্লে ইনস্টল gather_facts: false
করতে ব্যবহার raw
করা দরকার python
:
- name: install python2 on all instances
hosts: "*"
gather_facts: false
tasks:
- name: run apt-get update and install python
raw: "{{ item }}"
loop:
- sudo apt-get update
- sudo apt-get -y install python
become: true
ignore_errors: true
ignore_errors: true
আপনার যদি নেই এমন হোস্টগুলিতে নাটকটি চালানোর পরিকল্পনা করা হয় তবে এটি প্রয়োজনীয় apt-get
ইনস্টল করা (যেমন, আরএইচইএল-ভিত্তিক কিছুই) প্লেতে ত্রুটিযুক্ত হয়ে উঠবে।
এই সমাধানটি কাজ করে তবে কয়েকটি কারণে আমার তালিকার মধ্যে সর্বনিম্ন:
- শীর্ষে যেতে হবে প্রত্যেকের প্লেবুকের (বিকল্প 1 এর বিপরীতে)
- অনুমান
apt
সিস্টেমে রয়েছে এবং ত্রুটিগুলি উপেক্ষা করে (বিকল্প 3 বিকল্পের বিপরীতে)
apt-get
কমান্ডগুলি ধীর গতির (বিকল্প 3 এর বিপরীতে)
বিকল্প 3 - সিমিলিংক /usr/bin/python -> /usr/bin/python3
ব্যবহার করেraw
আমি অন্য কারও প্রস্তাবিত এই সমাধানটি দেখিনি। এটি আদর্শ নয়, তবে আমি মনে করি এটি অনেক উপায়ে 2 বিকল্পের চেয়ে উচ্চতর। আমার পরামর্শটি হ'ল সিস্টেমে থাকলে এবং না থাকলে raw
সিমিলিঙ্ক করতে শেল কমান্ড চালানোর জন্য ব্যবহার করা হয়:/usr/bin/python -> /usr/bin/python3
python3
python
- name: symlink /usr/bin/python -> /usr/bin/python3
hosts: "*"
gather_facts: false
tasks:
- name: symlink /usr/bin/python -> /usr/bin/python3
raw: |
if [ -f /usr/bin/python3 ] && [ ! -f /usr/bin/python ]; then
ln --symbolic /usr/bin/python3 /usr/bin/python;
fi
become: true
এই সমাধানটি বিকল্প 2 এর সমান যা আমাদের এটি প্রতিটি প্লেবুকের শীর্ষে রাখতে হবে, তবে আমি মনে করি এটি কয়েকটি উপায়ে উচ্চতর:
- সুনির্দিষ্ট ক্ষেত্রে সিমিলিংক তৈরি করে
python3
যা উপস্থিত এবংpython
নেই - এটি ইতিমধ্যে ইনস্টল থাকলে পাইথন 2 কে ওভাররাইড করবে না
- ধরে নেই
apt
নেই ইনস্টল করা আছে
- কোনও বিশেষ ত্রুটি পরিচালনা না করে সমস্ত হোস্টের বিরুদ্ধে চালাতে পারে
- যে কোনও কিছুর সাথে তুলনায় সুপার ফাস্ট
apt-get
আপনি সম্ভবত যদি প্রয়োজন পাইথন 2 এ ইনস্টল/usr/bin/python
এই সমাধানটি কোনও ন্যায্য নয় এবং বিকল্প 2 আরও ভাল।
উপসংহার
- আপনি যদি পারেন তবে সব ক্ষেত্রে বিকল্প 1 ব্যবহার করার পরামর্শ দিচ্ছি ।
- আমি বিকল্প 3 ব্যবহার করার পরামর্শ দিচ্ছি যদি আপনার জায়টি সত্যিই বড় / জটিল হয় এবং আপনার পক্ষে হোস্টগুলি সহজে গ্রুপবদ্ধ করার উপায় নেই
python3
, বিকল্পটি 1 আরও জটিল এবং ত্রুটি-প্রবণ করে তোলে।
- আমি কেবলমাত্র অপশন 2 ওভার বিকল্প 3 এর পরামর্শ দিই যদি আপনার পাইথন 2 ইনস্টল করা থাকে
/usr/bin/python
।
সোর্স