ansible: होस्ट के एक समूह (कई प्रबंधित होस्ट) के खिलाफ प्लेबुक चलाने के दौरान केवल एक बार ही स्थानीयकरण को निष्पादित करें


4

क्या 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

लेकिन मुझे आश्चर्य है कि क्या कोई अनुशंसित-अनुशंसित समाधान है? आप लोग इसे कैसे हल करेंगे?

जवाबों:


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.