Kemungkinan with_items tidak mencetak seluruh item?


16

Saya secara otomatis mengamankan kunci SSL seperti ini:

- 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

Sekarang, untuk setiap item, ada pesan log besar dengan seluruh konten item:

ok: [127.0.0.1] => (item = {u'uid ': 0, u'woth': False, u'mtime ': 1454939377.264, u'inode': 400377, u'isgid ': False, u' ukuran ': 3243, u'roth': Salah, u'isuid ': Salah, u'isreg': Benar, u'gid ': 0, u'ischr': Salah, u'wusr ': Benar, u'xoth ': Salah, u'rusr': Benar, u'nlink ': 1, u'issock': Salah, u'rgrp ': Salah, u'path': u '/ etc / ssl / foo.key', u 'xusr': False, u'atime ': 1454939377.264, u'isdir': False, u'ctime ': 1454939657.116, u'isblk': False, u'xgrp ': False, u'dev': 65025, u ' wgrp ': False, u'isfifo': ​​False, u'mode ': u'0600', u'islnk ': False})

Ini sangat tidak dapat dibaca, karena saya hanya ingin tahu jalur item yang sedang diproses (dan mungkin diubah). Dengan sejumlah besar kunci, ini keluar begitu cepat.

Bagaimana saya bisa mengubah permainan ini dengan cara yang hanya item.pathdicetak untuk setiap item?

Saya sudah mencoba no_log: True, tetapi ini benar-benar menghilangkan output.


Mungkin Anda bisa menulis set [Jinja Filter] (docs.ansible.com/ansible/playbooks_filters.html) set no_log: truedan kembalikan nilai item.pathdengan modul debug
Henrik Pingel

Jawaban:



5

Metode 1

Menggunakan

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

Ini akan mengembalikan daftar jalur:

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

Seluruh tugas Anda akan menjadi:

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

Berhati-hatilah karena Anda hanya dapat memilih satu atribut, itu tidak mungkin digunakan attribute=['path', 'mode'] atau serupa.

Metode 2

Saya berpikir untuk menggunakan ekstrak untuk dapat mengambil beberapa kunci (karena kadang-kadang perlu memiliki kunci kedua untuk suatu whenkondisi), tetapi tidak berhasil melakukannya, karena saya perlu memetakan daftar dicts, lalu memetakan daftar kunci dict tertentu, yang tampaknya tidak mungkin, karena peta hanya menerima nama fungsi tetapi bukan definisi fungsi / fungsi dirantai. Saya akan berterima kasih atas saran di sini!

Ide bagus dari komentar (Terima kasih, Uditha Desilva !):

- 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 

Metode 3

Atau, filter khusus seperti ini dapat digunakan (itulah yang saya lakukan sebelum saya ketahui 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
Mengenai metode 2 Anda, tampaknya layak untuk menggunakan "with_together", bahkan jika itu tidak super efisien (sayangnya komentar tidak dapat menggunakan tag kode sehingga ini akan terlihat aneh): - nama: File kunci ssl aman: path = {{item [0]}} mode = 600 pemilik = {{item [1]}} with_together: - secure_ssl_keys_result.files | peta (atribut = 'path') | daftar - secure_ssl_keys_result.files | peta (atribut = 'uid' ) | daftar
Uditha Desilva

1

Kamu tidak bisa Ini semua atau tidak sama sekali (via no_log: True)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.