Часть на работе приходится разыскивать серверы, грепать из inventory.ini. Но почему бы Ansible не позаботится о нас. Настраиваем генерацию ~/.ssh/config из inventory.ini:cat ssh-config.yml:
---
- name: Generate ssh client configuration from ansible inventory
hosts: localhost
connection: local
gather_facts: no
vars:
title: "EasyConfig by Ansible"
ssh_config_path: ssh_config.txt
tasks:
- name: ensure config for each host of inventory exist
template: src="ssh_config.j2" dest="{{ ssh_config_path }}"
when: ssh_config_path != ""
cat ssh-config.j2 :
#### {{ title }} Begin ####
{% for host in groups.all | sort() | list %}
{% if host != "localitem" and host != "127.0.0.1" and host != "localhost" %}
Host {{hostvars[host].inventory_hostname}}
{% if hostvars[host].ansible_host is defined and hostvars[host].ansible_host != "" %} HostName {{hostvars[host].ansible_host}}
{% else %} HostName {{hostvars[host].inventory_hostname}}
{% endif %}
{% if hostvars[host].ansible_ssh_port is defined %} Port {{hostvars[host].ansible_ssh_port}}
{% endif %}
{% endif %}
{% endfor %}
# Defaults
Host *
User root
Port 22
#### {{ title }} End ####
Получившийся ssh_config.txt - внимательно осматриваем и добавляем (или нет) к своему ~/.ssh/config.Как профит имеем автокомплит по серверам (можно добавить префикс), не тратим время на grep hostname Passwords_Hosts.txt можем прямо из Ansible управлять процессом.
URL:
Обсуждается: http://www.opennet.dev/tips/info/3130.shtml
обычно автокомплит еще хорошо работает из ~/.ssh/known_hosts, но для этого нужно отключить хеширование имен хостов в~/.ssh/config
HashKnownHosts no
так же, на относительно свежей версии клиента можно попоросить задавать меньше вопросов:
StrictHostKeyChecking accept-new
> StrictHostKeyChecking accept-newСпасибо, добавил себе.
что только люди не делают, только бы не генерить актокомплиты на лету. grepнуть $ANSIBLE_HOME/hosts/* отформатировать и подгрузить в виде алиасов.
1 строка в .bashrc вместо всего текста выше.Но нет, awk это слишком сложно.
Такое приемлемо только на SSD. Да и перемещение этого самого ansible_home всё сломает.
Вы таки знаете, я и на awk такое делал, оно конечно все здорово, классно, но всякие сложные ситуации, типо:
" вот на эти хосты надо через два Jump хоста ", а вот тут надо юзера поправить, а вот тут...
Короч, когда в руках Ансибл, все кажется гвоздями да, по сути, так и естьРаньше выходил из ситуации еще вот так
grep --color ${@} ${REPO_PATH}/00-hosts.ini | grep -vE '(^\[|^;)' | sed 's/ansible_host=//g'
Но это если у тебя 1 ансибл и 1 репа с хостами. просто поиска порой хватает ( когда хостов много, но еще не очень , <100 )p.s. не очень представляю себе, как башом/awk парсить переменные хоста в ансибле (групповые и т д ) да и надо ли ? - ансибл он ведь как раз сильвер-буллет, (ну или булщет, смотр какого вы года рождения)