यहाँ मैं क्या करता हूँ अगर ansible_user
प्लेबुक के 'पहले रन' के लिए अलग है (उदाहरण के लिए यदि आपके पास केवल एक root
उपयोगकर्ता है और आप एक SSH कुंजी के साथ एक नया उपयोगकर्ता सेट करने जा रहे हैं):
- पासवर्ड को इस
ansible_pass
रूप में स्टोर करें जैसे कि आप पासवर्ड लॉगिन का उपयोग कर रहे थे (वॉल्ट का उपयोग करना याद रखें) यह उस उपयोगकर्ता का पासवर्ड होना चाहिए जिसे आप प्लेबुक के 'पहले रन' के लिए उपयोग कर रहे हैं।
- सेट
ansible_user
उपयोगकर्ता क्या आप उन सर्वर पर ठीक से सेट किया है, जब पहली बार चलाने के बाद उपयोग करना चाहते हैं के उपयोगकर्ता नाम के लिए।
ansible_user_first_run
उदाहरण के लिए, प्लेबुक के 'पहले रन' के लिए आप जिस उपयोगकर्ता का उपयोग करने जा रहे हैं, उसका एक चर सेट करें root
।
- सही SSH कुंजी के साथ सर्वर से कनेक्ट करने के लिए, का उपयोग कर
ignore_errors
और करने के लिए एक स्थानीय कमांड का उपयोग करेंchanged_when: False
- यदि वह विफल रहता है,
ansible_user
तो के मूल्य पर अद्यतन करेंansible_user_first_run
यहाँ कोड है:
---
- name: Check if connection is possible
command: ssh -o User={{ ansible_user }} -o ConnectTimeout=10 -o PreferredAuthentications=publickey -o PubkeyAuthentication=yes {{ inventory_hostname }} echo "Worked"
register: result
connection: local
ignore_errors: yes
changed_when: False
- name: If no connection, change user_name
connection: local
set_fact:
ansible_user: "{{ ansible_user_first_run }}"
when: result|failed
नोट: यह सेटिंग के लायक है transport = ssh
क्योंकि paramiko अप्रत्याशित रूप से सर्वर में कुछ कॉन्फ़िगरेशन में प्रवेश करने में विफल हो सकता है (जैसे कि जब सर्वर को पासवर्ड स्वीकार नहीं करने के लिए सेट किया जाता है, और आप पहले एक कुंजी के साथ प्रयास कर रहे हैं फिर एक पासवर्ड ... अजीब!) इसके अलावा ssh परिवहन तेज है, इसलिए यह वैसे भी इसके लायक है।
आगे नोट: यदि आप इस पद्धति का उपयोग कर रहे हैं, तो आपको gather_facts: false
अपनी प्लेबुक परिभाषा फ़ाइल में निर्दिष्ट करने की आवश्यकता है ताकि परीक्षण पासवर्ड प्राप्त करने से पहले सेटअप / तथ्य एकत्रित करने का कार्य स्वचालित रूप से न चले। यदि आपको किसी भी वास्तविक तथ्य की आवश्यकता है, तो आपको setup
सामान्य रूप से ऐसी जगहों पर उपलब्ध किसी भी डेटा को एक्सेस करने से पहले अपनी भूमिका में स्पष्ट रूप से कॉल करना होगा ansible_devices
, आदि। ऐसा करने का एक अच्छा तरीका यह है कि देखने के लिए चेक के setup
साथ कॉल करें। when
इससे पहले कि आप अपनी भूमिका में हैं, तथ्य यह है कि खाली है या नहीं।