Ansible with_items öğenin tamamını yazdırmıyor mu?


16

Otomatik olarak şu şekilde SSL anahtarlarını güven altına alıyorum:

- 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

Şimdi, her öğe için, öğenin tüm içeriğini içeren büyük bir günlük mesajı var:

ok: [127.0.0.1] => (item = {u'uid ': 0, u'woth': Yanlış, u'mtime ': 1454939377.264, u'inode': 400377, u'isgid ': Yanlış, u' size ': 3243, u'roth': False, u'isuid ': False, u'isreg': Doğru, u'gid ': 0, u'ischr': Yanlış, u'wusr ': Doğru, u'xoth ': False, u'rusr': True, u'nlink ': 1, u'issock': False, u'rgrp ': False, 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})

Bu yalnızca okunamayan (ve belki de değiştirilen) öğenin yolunu bilmek istediğimden inanılmaz derecede okunamıyor. Çok sayıda anahtarla, bu çok hızlı bir şekilde kontrolden çıkar.

Bu oynatmayı, item.pathher öğe için yalnızca basılı olacak şekilde nasıl değiştirebilirim ?

Zaten denedim no_log: True, ama bu elbette çıktıyı tamamen atlıyor.


Belki bir [Jinja Filter] (docs.ansible.com/ansible/playbooks_filters.html) kümesi yazabilir no_log: trueve hata ayıklama modülüitem.path ile değerini döndürebilirsiniz
Henrik Pingel

Yanıtlar:



5

Yöntem 1

kullanım

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

Bir yol listesi döndürür:

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

Tüm göreviniz:

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

Sadece tek bir özellik seçebileceğinize dikkat edin, kullanmak attribute=['path', 'mode']veya benzeri bir şey mümkün değildir .

Yöntem 2

Birden fazla anahtar alabilmek için özü kullanmayı düşündüm (çünkü bazen bir whendurum için ikinci bir anahtar olması gerekir ), ancak dikte listesini eşleştirmem gerektiğinden, bunu yapamadım harita yalnızca bir işlev adını kabul ettiği gibi bir işlev tanımını / zincirleme işlevlerini kabul etmediğinden, belirli diktenin üzerindeki tuşların listesi. Burada bir öneri için minnettar olurum!

Yorumlardan harika bir fikir (Teşekkürler, 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 

Yöntem 3

Alternatif olarak, bunun gibi özel bir filtre kullanılabilir (bunu öğrenmeden önce yaptığım şey 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
Yöntem 2 ile ilgili olarak, süper verimli olmasa bile "with_together" kullanmak uygun görünmektedir (ne yazık ki yorumlar kod etiketlerini kullanamaz, bu yüzden bu garip görünecektir): - name: Secure ssl keys file: path = {{item [0]}} mod = 600 sahip = {{item [1]}} with_together: - secure_ssl_keys_result.files | map (attribute = 'path') | list - secure_ssl_keys_result.files | harita (attribute = 'yol') ) | list
Uditha Desilva

1

Yapamazsın. O hep ya hiç (ya üzerinden var no_log: True)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.