আমি ব্যক্তিগতভাবে এই সমস্যার 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/python3python3 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।
সোর্স