फ़ाइलग्लोब पैटर्न के साथ मेरे पास नेस्टेड लूप कैसे हो सकता है?


13

मैं Ansible में उपयोगकर्ताओं के एक सेट के लिए अधिकृत SSH कुंजी का एक सेट बनाने की कोशिश कर रहा हूँ। मेरे पास एक usersचर सेट अप है जैसे:

users:
  - { username: root, name: 'root' }
  - { username: user, name: 'User' }

उसी भूमिका में, मेरे पास files/public_keysनिर्देशिका में अधिकृत कुंजी फ़ाइलों का एक सेट है , प्रति अधिकृत कुंजी एक फ़ाइल है:

roles/common/files/public_keys/home
roles/common/files/public_keys/work

मैं प्रत्येक उपयोगकर्ता के लिए प्रत्येक सार्वजनिक कुंजी की प्रतिलिपि बनाना चाहता हूं।

मैंने निम्नलिखित कार्य का उपयोग करने की कोशिश की है:

- name: copy authorized keys
  authorized_key: user={{ item.0.username }} key={{ item.1 }}
  with_nested:
    - users
    - lookup('fileglob', 'public_keys/*')

हालाँकि, item.1शाब्दिक स्ट्रिंग है "lookup('fileglob', 'public_keys/*')", प्रत्येक फ़ाइल पथ के अंतर्गत नहीं है files/public_keys

क्या कोई ऐसा तरीका है जिससे मैं निर्देशिका की सूची प्राप्त कर सकता हूं files/public_keysऔर प्रत्येक उपयोगकर्ता के लिए प्रत्येक सार्वजनिक कुंजी की प्रतिलिपि बना सकता हूं ?

जवाबों:


8

चाल को splitफंक्शन के माध्यम से फाइलग्लोब रिटर्न मान को सूची में बदलना है , ताकि आप मानों पर पुनरावृति कर सकें:

- name: copy authorized keys
  authorized_key: 
    user: "{{ item.0.username }}"
    key: "{{ lookup('file', item.1) }}"
  with_nested:
    - "{{ users }}"
    - "{{ lookup('fileglob', 'public_keys/*').split(',') }}"

नोट करें कि, बिना , {{और }}, के लिए , का उपयोग करने के लिए with_itemsAnsible v2 में पदावनत किया गया था।


इसका उत्तर स्वीकार किया जाना चाहिए
Beyers

0

आपको अपनी कमांड को फिर से लिखना पड़ सकता है, लेकिन फाइलग्लोब पर लूपिंग का प्रावधान है

उदाहरण से:

- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
  with_fileglob:
    - /playbooks/files/fooapp/*

अन्य आशाजनक विकल्प हैं, जो कि वास्तव में SSH कुंजियों द्वारा चित्रित किया गया है, जो सुबूबस पर लूपिंग है


3
मुझे पता है कि आप फ़ाइल ग्लब्स का उपयोग करके लूप कर सकते हैं with_fileglob; मुझे यकीन नहीं है कि नेस्टेड लूप के साथ संयोजन के रूप में इसका उपयोग कैसे करें। सबलेमेंट्स पर लूपिंग काम कर सकता है , लेकिन मैं उम्मीद कर रहा हूं कि मुझे उन कुंजी की पूरी सूची को मैन्युअल रूप से निर्दिष्ट नहीं करना होगा जिन्हें मैं कॉपी करना चाहता हूं, क्योंकि मुझे सूची (उपयोग ) के रूप में इसे प्राप्त करने में सक्षम होना चाहिएwith_fileglob
मियादी

मुझे यकीन नहीं है। अगला सबसे अच्छा सुझाव में पॉप करने के लिए है #ansibleपर irc.freenode.netऔर गुरु वहाँ किसी भी उज्जवल विचार है, तो देखते हैं।
टॉम ओ'कॉनर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.