Ans_ with_items पूरे आइटम को प्रिंट नहीं करता है?


16

मैं इस तरह से एसएसएल कुंजी को स्वचालित रूप से सुरक्षित कर रहा हूं:

- name: Find ssl keys
  find: paths="/etc/ssl/" patterns="*.key" recurse=yes
  register: secure_ssl_keys_result

- name: Secure ssl keys
  file: path={{ item.path }} user=root group=root mode=600
  with_items: secure_ssl_keys_result.files

अब, प्रत्येक आइटम के लिए, आइटम की संपूर्ण सामग्री के साथ एक विशाल लॉग संदेश है:

ओके: [127.0.0.1.1] => (आइटम = {u'uid ': 0, u'woth': गलत, u'mtime ': 1454939377.264, u'inode': 400377, uisgid ': गलत, यू' आकार ': 3243, u'roth': गलत, u'isuid ': गलत, u'isreg': सत्य, u'gid ': 0, u'ischr': गलत, u'wusr ': सत्य, u'xoth ': गलत, u'rusr': सच्चा, u'nlink ': 1, u'issock': गलत, u'rgrp ': गलत, u'path': u '/ etc / ssl /' foo.key ', u 'xusr': गलत, u'atime ': 1454939377.264, u'isdir': गलत, u'ctime ': 1454939657.116, u'isblk': गलत, u'xgrp ': गलत, यू'देव': 65025, u ' wgrp ': गलत, u'isfifo': ​​गलत, u'mode ': u'0600', u'islnk ': गलत})

यह अविश्वसनीय रूप से अपठनीय है, क्योंकि मैं केवल उस आइटम का पथ जानना चाहता हूं जिसे संसाधित किया जा रहा है (और शायद बदल गया है)। कुंजियों की एक बड़ी संख्या के साथ, यह वास्तव में जल्दी हाथ से निकल जाता है।

मैं इस नाटक को कैसे बदल सकता हूं जिसमें केवल item.pathप्रत्येक आइटम के लिए प्रिंट किया जा रहा है?

मैंने पहले ही प्रयास किया है no_log: True, लेकिन यह पूरी तरह से पाठ्यक्रम के उत्पादन को छोड़ देता है।


हो सकता है कि आप एक [जिंजा फ़िल्टर] (docs.ansible.com/ansible/playbooks_filters.html) सेट कर सकते हैं no_log: trueऔर डिबग मॉड्यूल के item.pathसाथ मूल्य लौटा सकते हैं
हेनरिक पिंगल

जवाबों:



5

विधि 1

उपयोग

secure_ssl_keys_result.files|map(attribute='path')|list

यह रास्तों की सूची लौटाएगा:

['/etc/ssl../', '/etc/ssl/.../']

आपका पूरा कार्य बन जाएगा:

- name: Secure ssl keys
  file: path={{ item }} user=root group=root mode=600
  with_items: secure_ssl_keys_result.files|map(attribute='path')|list

खबरदार कि आप केवल एक ही विशेषता का चयन कर सकते हैं, इसका उपयोग करना attribute=['path', 'mode']या समान करना संभव नहीं है ।

विधि 2

मैंने कई कुंजियों को लाने में सक्षम होने के लिए अर्क का उपयोग करने के बारे में सोचा (क्योंकि कभी-कभी किसी whenस्थिति के लिए दूसरी कुंजी रखना आवश्यक होता है ), लेकिन इसे करने का प्रबंधन नहीं किया, क्योंकि मुझे dicts की सूची को मैप करने की आवश्यकता होगी, फिर मैप करें विशिष्ट तानाशाही पर कुंजियों की सूची, जो संभव नहीं लगता है, क्योंकि मानचित्र केवल एक फ़ंक्शन नाम को स्वीकार करता है, लेकिन फ़ंक्शन परिभाषा / जंजीर कार्यों को नहीं। मैं यहाँ एक सुझाव के लिए आभारी रहूँगा!

टिप्पणियों से एक महान विचार (धन्यवाद, उदित देसिलवा !):

- name: Secure ssl keys file: path={{ item.0 }} mode=600 owner={{ item.1 }}
  with_together: 
  - secure_ssl_keys_result.files|map(attribute='path')|list 
  - secure_ssl_keys_result.files|map(attribute='uid')|list 

विधि 3

वैकल्पिक रूप से, इस तरह के एक कस्टम फ़िल्टर का उपयोग किया जा सकता है (यह वही है जो मैंने करने से पहले पता लगाया था map):

from ansible import errors
import re

def cleandict(items, keepkeys):
    try:
        newitems = []
        if not isinstance(items, list):
          items = [items]
        if not isinstance(keepkeys, list):
          keepkeys = [keepkeys]
        for dictionary in items:
          newdictionary = {}
          for keepkey in keepkeys:
            newdictionary[keepkey] = dictionary.get(keepkey)
          newitems.append(newdictionary)  
        return newitems
    except Exception, e:
        raise errors.AnsibleFilterError('split plugin error: %s' % str(e) )
        #raise errors.AnsibleFilterError('split plugin error: %s, string=%s' % str(e),str(items) )

class FilterModule(object):
    ''' A filter to split a string into a list. '''
    def filters(self):
        return {
            'cleandict' : cleandict
        }

ansible.cfg:

filter_plugins = ~/.ansible/plugins/filter_plugins/:/usr/share/ansible_plugins/filter_plugins

1
आपकी विधि 2 के बारे में, यह "with_t Total" का उपयोग करने के लिए व्यवहार्य प्रतीत होगा, भले ही यह सुपर-कुशल न हो (दुर्भाग्य से टिप्पणी कोड टैग का उपयोग नहीं कर सकते हैं इसलिए यह अजीब लगेगा): - नाम: सुरक्षित ssl कुंजियाँ फ़ाइल: path = {{आइटम [0]}} मोड = 600 के मालिक = {{आइटम [1]}} with_t Total: - safe_ssl_keys_result.files | map (विशेषता = 'पथ') | सूची - safe_ssl_keys_result.files। map (विशेषता = 'uid) ) | सूची
उदिता देसीलवा

1

आप नहीं कर सकते। यह सब या कुछ भी नहीं है (के माध्यम से no_log: True)

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