জবাবদিহিতা তথ্য সংগ্রহের সময় ঝুলতে পারে এমন অনেকগুলি কারণ রয়েছে তবে আরও কিছু করার আগে, এই জাতীয় পরিস্থিতিতে আপনার প্রথম পরীক্ষা করা উচিত:
ansible -m ping <hostname>
এই পরীক্ষাটি কেবল হোস্টের সাথে সংযোগ স্থাপন করে এবং ফিরে আসার জন্য যথেষ্ট কোড কার্যকর করে:
<hostname> | SUCCESS => {
"changed": false,
"ping": "pong"
}
যদি এটি কাজ করে তবে আপনি কোনও সেটআপ বা সংযোগের সমস্যাটি বেশ কার্যকরভাবে প্রমাণ করতে পারবেন, কারণ এটি প্রমাণ করে যে আপনি লক্ষ্য হোস্টনাম সমাধান করতে পারেন, একটি সংযোগ খুলতে, প্রমাণীকরণ করতে এবং দূরবর্তী অজগর দোভাষী দিয়ে একটি উত্তরযোগ্য মডিউল চালিয়ে যেতে পারেন।
এখন, এখানে প্লেবুকের শুরুতে যে জিনিসগুলি ভুল হতে পারে তার একটি (অ-পরিসীমাবদ্ধ) তালিকা এখানে রয়েছে:
জবাব দিয়ে দেওয়া আদেশটি একটি ইন্টারেক্টিভ ইনপুটটির জন্য অপেক্ষা করছে
আমি পুরানো উত্তরসূচক সংস্করণগুলিতে এটি ঘটতে পারে তা স্মরণ করতে পারি, যেখানে কোনও কমান্ড একটি ইন্টারেক্টিভ ইনপুট যে কখনই আসবে না তার জন্য অপেক্ষা করবে যেমন একটি সুডো পাসওয়ার্ড (যখন আপনি কোনও -K
স্যুইচ ভুলে গিয়েছিলেন ), বা একটি নতুন এসএস হোস্ট ফিঙ্গারপ্রিন্টের গ্রহণযোগ্যতা (একটি নতুন টার্গেটের জন্য) হোস্ট)।
উত্তরসূরীর আধুনিক সংস্করণগুলি এই উভয় ক্ষেত্রে নিখুঁতভাবে পরিচালনা করে এবং তাত্ক্ষণিকভাবে সাধারণ ব্যবহারের ক্ষেত্রে ত্রুটি উত্থাপন করে, সুতরাং আপনি যদি এসএসএস কল করা বা নিজেকে সুডো করার মতো কাজ না করেন তবে আপনার এই ধরণের সমস্যা থাকা উচিত নয়। এমনকি যদি আপনি এটি করেন তবে এটি সত্য সংগ্রহের পরে হবে।
ডেড এসএস মাস্টার সংযোগ
এখানে প্রদত্ত ডিবাগ লগটিতে কিছু অত্যন্ত আকর্ষণীয় বিকল্পগুলি ssh ক্লায়েন্টকে দেওয়া হয়েছে:
ControlMaster=auto
ControlPersist=60s
ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r
এই বিকল্পগুলি man ssh_config এ নথিভুক্ত করা হয়েছে ।
ডিফল্টরূপে, উত্তরযোগ্য চেষ্টা করবে এবং এর এসএসএস সংযোগ ব্যবহারের বিষয়ে স্মার্ট হবে। প্রদত্ত হোস্টের জন্য, নাটকের প্রতিটি এবং প্রতিটি কাজের জন্য একটি নতুন সংযোগ তৈরির পরিবর্তে এটি একবার খুলবে এবং এটি পুরো প্লেবুকের জন্য এবং এমনকি প্লেবুক জুড়েও খোলা রাখবে।
এটি বেশ ভাল, যেহেতু একটি নতুন সংযোগ স্থাপন করা ইতিমধ্যে বিদ্যমান ব্যবহারের চেয়ে ধীর এবং গণনা-নিবিড়।
অনুশীলনে, প্রতিটি এসএসএস সংযোগটি এখানে সকেটের অস্তিত্বের জন্য পরীক্ষা করবে ~/.ansible/cp/some-host-specific-path
। প্রথম সংযোগ এটি সন্ধান করতে পারে না, তাই এটি সাধারণত সংযোগ করে এবং তারপরে এটি তৈরি করে। পরবর্তী প্রতিটি সংযোগ তারপরে ইতিমধ্যে প্রতিষ্ঠিত সংযোগটি পেরিয়ে যাওয়ার জন্য কেবল এই সকেটটি ব্যবহার করবে।
এমনকি যদি প্রতিষ্ঠিত সংযোগটি শেষ অবধি শেষ হয়ে যায় এবং দীর্ঘকাল ব্যবহার না করার পরে বন্ধ হয়ে যায়, সকেটটিও বন্ধ হয়ে যায় এবং আমরা আবার স্কোয়ারে ফিরে যাই।
এ পর্যন্ত সব ঠিকই.
কখনও কখনও তবে সংযোগটি আসলে মারা যায়, তবে এসএসএস ক্লায়েন্ট এখনও এটি প্রতিষ্ঠিত বিবেচনা করে। এটি সাধারণত ঘটে যখন আপনি আপনার ল্যাপটপ থেকে প্লেবুকটি কার্যকর করেন এবং আপনি আপনার ওয়াইফাই সংযোগ হারাবেন (বা ওয়াইফাই থেকে ইথারনেট ইত্যাদিতে স্যুইচ করুন ...)
এই শেষ উদাহরণটি একটি ভয়াবহ পরিস্থিতি: আপনি একটি ডিফল্ট এসএসএস কনফিগারেশনের সাহায্যে টার্গেট মেশিনে ছুটে যেতে পারেন , তবে আপনার পূর্ববর্তী সংযোগটি ততক্ষণ সক্রিয় হিসাবে বিবেচিত হবে, উত্তরসূরী এমনকি কোনও নতুন প্রতিষ্ঠার চেষ্টা করবে না।
এই মুহুর্তে, আমরা কেবল এই পুরানো সকেট থেকে মুক্তি পেতে চাই এবং এটি করার সহজ উপায় হ'ল এটি সরিয়ে ফেলা:
# Delete all the current sockets (may disrupt currently running playbooks)
rm -r ~/.ansible/cp
# Delete only the affected socket (requires to know which one it is)
rm ~/.ansible/cp/<replace-by-your-socket>
এটি এক-শট ফিক্সের জন্য উপযুক্ত, তবে এটি যদি খুব ঘন ঘন ঘটে তবে আপনাকে দীর্ঘমেয়াদী ফিক্সটি সন্ধান করতে হবে। এখানে কিছু পয়েন্টার রয়েছে যেগুলি এই লক্ষ্যটির দিকে সহায়তা করতে পারে:
- সার্ভার থেকে প্লেবুকগুলি শুরু করুন (আপনার ল্যাপটপের তুলনায় নেটওয়ার্ক সংযোগের উপায়ে আরও স্থিতিশীল)
- সংযোগ ভাগ করে নেওয়ার অক্ষম করতে জবাবদিহি কনফিগারেশন , বা সরাসরি ssh ক্লায়েন্ট কনফিগারেশন ব্যবহার করুন
- একই সংস্থানগুলি ব্যবহার করুন, কিন্তু সময়সীমার সূক্ষ্ম সুরতে, যাতে একটি মাস্টার সংযোগ ক্রাশ প্রকৃতপক্ষে দ্রুত গতি হয়ে যায়
দয়া করে নোট করুন যে লেখার সময় কয়েকটি বিকল্প পরিবর্তিত হয়েছে (উদাহরণস্বরূপ, আমার সর্বশেষ রান আমাকে দিয়েছে ControlPath=/home/toadjaune/.ansible/cp/871b533295
), তবে সাধারণ ধারণাটি এখনও বৈধ।
ফ্যাক্ট জমায়েত আসলে খুব বেশি সময় নেয়
প্রত্যেক খেলার শুরুতে ansible লক্ষ্য সিস্টেমে অনেক তথ্য সংগ্রহ, এবং এটি মধ্যে রাখে ঘটনা । এগুলি এমন ভেরিয়েবল যা আপনি আপনার প্লেবুকে ব্যবহার করতে পারেন, এবং সাধারণত সত্যই সহজে ব্যবহারযোগ্য তবে কখনও কখনও, এই তথ্যটি পাওয়া খুব দীর্ঘ হতে পারে (খারাপ মাউন্ট পয়েন্টস, উচ্চ আই / ও, ডিস্ক সহ উচ্চ ডিস্ক ...)
এটি বলা হচ্ছে, প্লেবুক চালানোর জন্য আপনার কাছে কঠোরভাবে সত্যের প্রয়োজন নেই, এবং প্রায় সবগুলিই নয়, তাই আসুন চেষ্টা করুন এবং আমাদের যা প্রয়োজন তা অক্ষম করুন। এর জন্য বেশ কয়েকটি বিকল্প:
- সেটআপ মডিউলটি সম্পূর্ণ অক্ষম করুন
- এর কয়েকটি নির্দিষ্ট অংশ অন্তর্ভুক্ত করতে সেটআপ মডিউলটির কনফিগারেশন পরিবর্তন করুন ।
ডিবাগিংয়ের উদ্দেশ্যে, কমান্ড-লাইন থেকে সরাসরি সেটআপ মডিউলটি উপস্থাপন করা সত্যই সুবিধাজনক:
ansible -m setup <hostname>
এই শেষ কমান্ডটি আপনার প্লেবুকের পাশাপাশি হ্যাং করা উচিত এবং অবশেষে সময়সীমা (বা সফল) হওয়া উচিত। এখন, আসুন আমরা মডিউলটি আবার কার্যকর করতে পারি, যা করতে পারি তার সমস্ত কিছুই অক্ষম করে:
ansible -m setup -a gather_subset='!all' <hostname>
যদি এটি এখনও স্থায়ী হয় তবে আপনি সর্বদা আপনার নাটকটিতে সম্পূর্ণ মডিউলটি চেষ্টা ও অক্ষম করতে পারেন, তবে সম্ভবত আপনার সমস্যা অন্য কোথাও রয়েছে।
তবে, যদি এটি কার্যকর হয় (এবং দ্রুত) তবে মডিউল ডকুমেন্টেশনটি একবার দেখুন । আপনার দুটি বিকল্প রয়েছে:
- আপনার যা প্রয়োজন নেই তা বাদ দিয়ে উপসেটে তথ্য সংগ্রহকে সীমাবদ্ধ করুন (এর জন্য সম্ভাব্য মানগুলি দেখুন
gather_subset
)
gather_timeout
আরও সময় দেওয়ার অনুমতি দিয়েও আপনার সমস্যা সমাধানে সহায়তা করতে পারে (যদিও এটি একটি সময়সীমা ত্রুটিটি স্থির করতে হবে, হ্যাং নয়)
অন্যান্য ব্যাপার
স্পষ্টতই, অন্য জিনিসগুলি ভুল হতে পারে। ডিবাগিংয়ে সহায়তা করার জন্য কয়েকটি পয়েন্টার:
- উত্তরযোগ্য সর্বোচ্চ ভার্বোসিটি স্তর (
-vvvv
) ব্যবহার করুন , কারণ এটি আপনাকে সম্পাদিত প্রতিটি আদেশ প্রদর্শন করবে command
- ব্যবহার করুন
ping
এবং setup
কম্যান্ড-লাইন থেকে মডিউল সরাসরি উপরের হিসাবে ব্যাখ্যা
- যদি
ansible -m ping
কাজ না করে তবে ম্যানুয়ালি ssh করার চেষ্টা করুন
vagrant ssh
এবং Hang সময় তদন্ত যদি কিছু দরকারী কিনা দেখতেps
এবংnetstat
? এছাড়াও, হ্যাংগুলিতে থাকা প্রথম সন্দেহভাজনদের মধ্যে একটি হ'ল ডিএনএস - পরীক্ষা করুন যে ডিএনএস ভার্চুয়াল মেশিনের ভিতরে থেকে সমাধান করছে কিনা।