LINUX.ORG.RU
решено ФорумAdmin

Ansible - длинный выхлоп

 


0

3

Привет админам! Такая проблемка - плэйбук ансибла раскидывает ssh ключи админов по хостам

---
- name: Добавление SSH ключей админов
  ansible.builtin.shell: if grep "{{ item }}" < /root/.ssh/authorized_keys; then exit 2; else echo "{{ item }}" >> /root/.ssh/authorized_keys; fi
  args:
    executable: /bin/bash
  register: item_changed
  failed_when: item_changed.rc == 1
  changed_when: item_changed.rc == 0
  with_items: "{{ ssh_id_admins }}"

при этом в stdout выводит каждый ключ (а это несколько строк бинарного вида) при обращении к каждому хосту. получается оооочень много ненужного текста. Можно как-то подавить вывод содержимого всех ключей на экран, чтобы отображался только результат задачи?

РЕШЕНИЕ

Всем спасибо, было много полезных советов, но решение все же выглядит так: надо заменить строку

  with_items: "{{ ssh_id_admins }}"

на следующий фрагмент:

  loop: "{{ ssh_id_admins|flatten(levels=1) }}"
    loop_control:
      index_var: id
      label: "{{ id }}"

и тогда на выхлоп летит только индекс элемента, а не все содержимое ключа.



Последнее исправление: bigov (всего исправлений: 2)

Зачем это делать через shell, если можно через template и шаблон с for’ом? Так у тебя башскрипт получается в ненужной ansible обёртке и теряешь идемпотентность.

Demacr ★★
()
Последнее исправление: Demacr (всего исправлений: 1)
- hosts: localhost
  become: yes
  vars:
    ssh_id_admins:
      - 1
      - 2
      - 3
  tasks:
  - name: render authorized_keys
    copy:
      dest: /root/.ssh/authorized_keys
      content: |
        {% for key in ssh_id_admins %}
        {{  key }}
        {% endfor %}
DevilNeko
()
Ответ на: комментарий от DevilNeko

Спасибо, интересное решение, НО в Вашем варианте остаются только ключи из списка, а те которые уже были ранее в /root/.ssh/authorized_keys пропадут. Мой вариант проверяет наличие и добавляет только если текущего ключа нет.

Можете предложить решение без удаления/дублирования существующих?

bigov
() автор топика
Последнее исправление: bigov (всего исправлений: 1)
Ответ на: комментарий от Demacr

А template c шаблоном могут проверить наличие строки на удаленном хосте, чтобы не дублировать ее?

bigov
() автор топика
Ответ на: комментарий от bigov

Да, но в том порядке в каком он заполнит его с помощью for. Там выше был пример от DevilNiko. Делает тоже самое, только короче.

Demacr ★★
()

Добавь к grep опцию -q, и все.

bigbit ★★★★★
()
Ответ на: комментарий от bigbit

Угу (уже чуть позже заметил жонглирование return code’ами), зато --diff тебе ничего интересного не покажет.

Demacr ★★
()
Последнее исправление: Demacr (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.