উত্তর সহ_আইটেমগুলি পুরো আইটেমটি মুদ্রণ করে না?


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] => (আইটেম = {u'uid ': 0, u'woth': মিথ্যা, u'mtime ': 1454939377.264, u'inode': 400377, u'isgid ': মিথ্যা, তুমি' আকার ': 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', আপনি 'xusr': মিথ্যা, u'atime ': 1454939377.264, u'isdir': মিথ্যা, u'ctime ': 1454939657.116, u'isblk': মিথ্যা, u'xgrp ': মিথ্যা, u'dev': 65025, u ' wgrp ': মিথ্যা, u'isfifo': ​​মিথ্যা, u'mode ': u'0600', u'islnk ': মিথ্যা})

এটি অবিশ্বাস্যভাবে অপঠনযোগ্য, কারণ আমি কেবল প্রক্রিয়াধীন আইটেমটির পথ জানতে চাই (এবং সম্ভবত পরিবর্তিত)। একটি বিশাল সংখ্যক কী সহ, এটি সত্যিই দ্রুত হাতছাড়া হয়ে যায়।

আমি কীভাবে এই নাটকটিকে এমনভাবে পরিবর্তন করতে পারি যে item.pathপ্রতিটি আইটেমের জন্য কেবলমাত্র মুদ্রণ করা হচ্ছে?

আমি ইতিমধ্যে চেষ্টা করেছি no_log: True, তবে এটি অবশ্যই আউটপুটটিকে বাদ দেয়।


হতে পারে আপনি একটি [জিনজা ফিল্টার] লিখতে পারবেন (ডকস.সানসিল.স্যাবস.স.স.স. / প্লেবুকস_ফিল্টার্স html) সেট করে no_log: trueএবং ডিবাগ মডিউলেরitem.path সাথে মানটি ফেরত দিতে পারেন
হেনরিক পিঙ্গেল

উত্তর:


25

উত্তরযোগ্য ২.২ এর loop_control.labelজন্য রয়েছে ।

- name: Secure ssl keys
  file: path={{ item.path }} user=root group=root mode=600
  with_items: secure_ssl_keys_result.files
  loop_control:
    label: "{{ 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 সম্পর্কে, এটি "দক্ষতার সাথে" ব্যবহার করা কার্যকর মনে হবে, যদিও এটি সুপার-দক্ষ না হয় (দুর্ভাগ্যক্রমে মন্তব্যগুলি কোড ট্যাগ ব্যবহার করতে পারে না যাতে এটি বিজোড় দেখায়): - নাম: নিরাপদ এসএসএল কী ফাইল: পথ = {{আইটেম [0]}} মোড = 600 মালিক = {{আইটেম [1]}} সহ একসাথে: - সুরক্ষিত_এসএল_কিজ_সেল্ট.ফায়ালস | মানচিত্র (বৈশিষ্ট্য = 'পাথ') | তালিকা - সুরক্ষিত_এসএল_কিজ_সিলট.ফায়ালস | মানচিত্র (বৈশিষ্ট্য = 'উআইডি') ) | তালিকা
উদিতা দেশিলভা

1

আপনি পারবেন না। এটি হয় সমস্ত বা কিছুই নয় (মাধ্যমে no_log: True)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.