• создаемфайл конфигурации vagrant для 64-битного образа виртуальной машины с ubuntu trusty tahr
vagrant init ubuntu/trusty64
  • загружаем её
vagrant up
  • зайдем по ssh на нашу машину
vagrant ssh
  • вывести детали ssh-подключения
vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/user/playbooks/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  • в Vagrant 1.7 изменился порядок работы с приватными ssh ключами. Начиная с этой версии Vagrant генерирует новый приватный ключ для каждой машины

  • убедимся что можем начать новый ssh сеанс

ssh vagrant@127.0.0.1 -p 2222 -i /home/user/playbooks/.vagrant/machines/default/virtualbox/private_key
  • Передать информацию о серверах в Ansible можно в файле реестра

  • Каждому серверу должно быть присвоено имя для идентификации в Ansible

  • С этой целью можно использовать имя хоста или выбрать другой псевдоним

  • С именем также должны определяться дополнительные параметры подключения

  • Присвоим серверу псевдоним testserver

  • Файл hosts будет служить реестром

  • проверить способность ansible подключиться к серверу, используем утилиту ansible

  • попросим ansible установить соединение с сервером testserver, указанным в файле hosts и вызвать модуль ping:

ansible testserver -i hosts -m ping
testserver | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
  • если ansible сообщит об ошибке, добавьте команду флаг -vvv, чтобы получить больше информации об ошибке

  • ansible.cfg(по умолчанию хранится в /etc/ansible/hosts) - в нем определяются:

    • местоположение файла реестра(inventory/hosts) - при использовании Vagrant
    • имя пользователя SSH(remote_user)
    • приватный ключ(private_key_file)
  • В нашем примере конфигурации проверка SSH-ключей хоста отключена

  • Это удобно при работе с Vagrant, в противном случае необходимо вносить изменения в файл ~/.ssh/known_hosts каждый раз, когда удаляется имеющийся или создается новый Vagrant-сервер.

  • Однако отключение проверки ключей несет определенные риски

  • С настройками по умолчанию отпадает необходимость указывать имя пользователя и файл с ключами SSH в файле hosts.

  • Можно запустить ansible без аргумента -i hostname

ansible testserver -m ping
  • получил ошибку:
testserver | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: no such identity: /home/user/playbooks/home/user/playbooks/.vagrant/machines/default/virtualbox/private_key: No such file or directory\r\nvagrant@127.0.0.1: Permission denied (publickey,password).",
    "unreachable": true
}
  • нужно поменять путь в файле ansible.cfg
/home/user/playbooks/home/user/playbooks/.vagrant/machines/default/virtualbox/private_key:
  • на
.vagrant/machines/default/virtualbox/private_key:
  • проверить вермя работы сервера с момента последнего запуска с помощью модуля command
  • при запуске модуля необходимо указать аргумент -a с запускаемой командой
ansible testserver -m command -a uptime
testserver | CHANGED | rc=0 >>
 09:31:47 up 15:33,  1 user,  load average: 0.00, 0.01, 0.05
  • модуль command настолько часто используется, что сделан модулем по умолчанию,
  • то есть его имя можно опустить в команде
ansible testserver -a uptime
  • если команда в аргументе -a содержит пробелы, ее необходимо заключить в кавычки,
  • чтобы командная оболочка передала всю строку как единый аргумент. Например:
  • извлечение нескольких строк последних строк из журнала /var/log/dmseg
ansible testserver -a "tail /var/log/dmesg"
testserver | CHANGED | rc=0 >>
[    6.250928] type=1400 audit(1659943007.223:6): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=937 comm="apparmor_parser"
[    6.250934] type=1400 audit(1659943007.223:7): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/lib/connman/scripts/dhclient-script" pid=937 comm="apparmor_parser"
[    6.258340] type=1400 audit(1659943007.231:8): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/sbin/tcpdump" pid=940 comm="apparmor_parser"
[    6.298822] vboxvideo: Unknown symbol drm_open (err 0)
[    6.298829] vboxvideo: Unknown symbol drm_poll (err 0)
[    6.298835] vboxvideo: Unknown symbol drm_pci_init (err 0)
[    6.298842] vboxvideo: Unknown symbol drm_ioctl (err 0)
[    6.298848] vboxvideo: Unknown symbol drm_mmap (err 0)
[    6.298853] vboxvideo: Unknown symbol drm_pci_exit (err 0)
[    6.298859] vboxvideo: Unknown symbol drm_release (err 0)
  • Чтобы выполнить команду с привелегиями root,
  • нужно передать параметр -b. В этом случае Ansible выполнит команду от лица пользователя root
  • Например для доступа к /var/log/syslog требуются привелегии root:
ansible testserver -b -a "tail /var/log/syslog"
testserver | CHANGED | rc=0 >>
Aug  9 09:34:17 vagrant-ubuntu-trusty-64 puppet-agent[1114]: Could not request certificate: getaddrinfo: Name or service not known
Aug  9 09:36:17 vagrant-ubuntu-trusty-64 puppet-agent[1114]: Could not request certificate: getaddrinfo: Name or service not known
Aug  9 09:37:29 vagrant-ubuntu-trusty-64 ansible-command: Invoked with creates=None executable=None _uses_shell=False strip_empty_ends=True _raw_params=uptime removes=None argv=None warn=True chdir=None stdin_add_newline=True stdin=None
Aug  9 09:38:17 vagrant-ubuntu-trusty-64 puppet-agent[1114]: Could not request certificate: getaddrinfo: Name or service not known
Aug  9 09:40:17 vagrant-ubuntu-trusty-64 puppet-agent[1114]: Could not request certificate: getaddrinfo: Name or service not known
Aug  9 09:41:26 vagrant-ubuntu-trusty-64 ansible-command: Invoked with creates=None executable=None _uses_shell=False strip_empty_ends=True _raw_params=tail /var/log/dmesg removes=None argv=None warn=True chdir=None stdin_add_newline=True stdin=None
Aug  9 09:42:17 vagrant-ubuntu-trusty-64 puppet-agent[1114]: Could not request certificate: getaddrinfo: Name or service not known
Aug  9 09:44:17 vagrant-ubuntu-trusty-64 puppet-agent[1114]: Could not request certificate: getaddrinfo: Name or service not known
Aug  9 09:50:17 vagrant-ubuntu-trusty-64 puppet-agent[1114]: message repeated 3 times: [ Could not request certificate: getaddrinfo: Name or service not known]
Aug  9 09:50:45 vagrant-ubuntu-trusty-64 ansible-command: Invoked with creates=None executable=None _uses_shell=False strip_empty_ends=True _raw_params=tail /var/log/syslog removes=None argv=None warn=True chdir=None stdin_add_newline=True stdin=None
  • как видно Ansible