क्या local_action
मेजबानों के समूह के खिलाफ प्लेबुक चलाते समय कार्य को केवल एक बार चलाया जाना संभव है ?
यहाँ समस्या है:
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]
और यह समझ में आता है क्योंकि प्रत्येक प्रबंधित होस्ट के लिए प्लेबुक में कोई भी कार्य चलाना पड़ता है।
लेकिन क्योंकि यह एक स्थानीय कार्रवाई है, यह पहली बार कुंजी फ़ाइल बनाने के रूप में चलता है। दूसरी बार फ़ाइल पहले से मौजूद है और ansible में त्रुटि है: के "/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
लेकिन मुझे आश्चर्य है कि क्या कोई अनुशंसित-अनुशंसित समाधान है? आप लोग इसे कैसे हल करेंगे?