Відповідь with_items не друкує весь елемент?


16

Я автоматично закріплюю такі SSL ключі:

- 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

Тепер для кожного елемента існує величезне повідомлення журналу з усім вмістом елемента:

ok: [127.0.0.1] => (item = {u'uid ': 0, u'woth': False, u'mtime ': 1454939377.264, u'inode': 400377, u'isgid ': False, u' розмір ': 3243, u'roth': False, u'isuid ': False, u'isreg': Правда, u'gid ': 0, u'ischr': False, u'wusr ': Правда, u'xoth ': False, u'rusr': Правда, 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})

Це неймовірно нечитабельно, тому що я хочу лише знати шлях предмета, який обробляється (і, можливо, змінюється). З великою кількістю клавіш це швидко виходить з рук.

Як я можу змінити цю п’єсу таким чином, що item.pathдля кожного елемента друкується лише те , що видається?

Я вже пробував no_log: True, але це, безумовно, повністю виводить результат.


Можливо, ви можете написати набір [Jinja Filter] (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умови), але не встиг це зробити, тому що мені потрібно було б зіставити список диктовок, а потім картографувати список клавіш певного диктату, який не здається можливим, оскільки карта приймає лише ім'я функції, але не визначення функції / ланцюгові функції. Буду вдячний за пропозицію тут!

Чудова ідея з коментарів (Спасибі, Удіта Десільва !):

- 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_together", навіть якщо він не надто ефективний (на жаль, коментарі не можуть використовувати теги коду, тому це буде виглядати дивно): - name: Захищений файл ssl-ключів: path = {{item [0]}} режим = 600 власник = {{предмет [1]}} з_ разом: - secure_ssl_keys_result.files | map (attribute = 'path') | список - secure_ssl_keys_result.files | map (attribute = 'uid' ) | список
Uditha Desilva

1

Ви не можете. Це або все, або нічого (через no_log: True)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.