এটা করতে বাধ্য করা সম্ভব local_action
হোস্ট একটি দলের বিরুদ্ধে playbook চলাকালীন শুধুমাত্র একবার কাজ করা হচ্ছে?
এখানে সমস্যা হল:
hosts:
- macbooks
- localhost
tasks:
#...<some_remote_tasks>...#
- local_action: command
ssh-keygen -o -a 100 -t ed25519 -f {{ ssh_key }} -q -N ''
become: yes
ফলাফল:
fatal: [laptop -> localhost]: FAILED! => {"changed": true, "cmd": ["ssh-keygen", "-o", "-a", "100", "-t", "ed25519", "-f", "/etc/ssh/id_ed25519-HostCA", "-q", "-N", "", "-C", "SSH Host Certificate Authority for cypherpunk.synology.me"], "delta": "0:00:00.014818", "end": "2018-06-01 17:02:41.599111", "msg": "non-zero return code", "rc": 1, "start": "2018-06-01 17:02:41.584293", "stderr": "", "stderr_lines": [], "stdout": "/etc/ssh/id_ed25519-HostCA already exists.\nOverwrite (y/n)? ", "stdout_lines": ["/etc/ssh/id_ed25519-HostCA already exists.", "Overwrite (y/n)? "]}
changed: [localhost -> localhost]
এবং এটি জ্ঞান করে কারণ প্রতিটি পরিচালিত হোস্টের জন্য একটি প্লেবুকের কোনও কাজ চালানো উচিত।
কিন্তু এটি একটি স্থানীয় পদক্ষেপ কারণ, এটি মূল ফাইল তৈরি করার প্রত্যাশিত হিসাবে প্রথমবার চালায়। দ্বিতীয়বার ফাইলটি ইতিমধ্যে বিদ্যমান এবং উত্তরযোগ্য একটি ত্রুটি পেয়েছে: "/etc/ssh/id_ed25519-HostCA already exists. Overwrite (y/n)?"
সঙ্গে return code 1
। তাই সত্যিই এটি শুধুমাত্র একবার চালানো আবশ্যক (অন্তত এই অবস্থায়)।
আমি ভালো কিছু করতে পারে:
- local_action: shell >
[[ ! -f {{ ssh_key }} ]] && \
ssh-keygen -o -a 100 -t ed25519 -f {{ ssh_key }} -q -N ''; \
exit 0
become: yes
কিন্তু আশ্চর্যের প্রস্তাবিত সমাধান থাকলে আমি ভাবছি? আপনি কিভাবে এই সমাধান হবে?