Невозможно запустить сервис Docker с помощью Ansible on Vagrant box - PullRequest
0 голосов
/ 08 июня 2018
---
- hosts: vagrant
  remote_user: root
  become_method: sudo
  tasks:
        - name: Start service docker, if not running
          service:
               name: docker
               state: started

ОШИБКА: фатально: [192.168.1.16]: СБОЙ!=> {"change": false, "msg": "Невозможно запустить docker службы: не удалось запустить docker.service: требуется интерактивная аутентификация. \ nПодробнее смотрите системные журналы и 'systemctl status docker.service'. \ n"}

Я хочу запустить Docker, используя Ansible для другого хоста (Vagrant).Я мог бы пинговать с Ansible двум хозяевам.Но он не будет работать с хостом Vagrant.

Есть идеи, как это исправить?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Основная причина

Настройка remote_user в playbook (remote_user: root в вопросе) игнорируется при использовании Ansible Provider в Vagrant с настройками по умолчанию.

Объяснение

Существует важное различие между "обычными" переменными и переменными соединения в Ansible в отношении приоритета:

Другая важная вещь, которую следует учитывать (для всех версий), - это то, что переменные соединенияпереопределить конфигурацию, командную строку и параметры / директивы, относящиеся к игре / роли / задаче.Например:

ansible -u lola myhost

Это все равно будет подключено как ramon, потому что ansible_ssh_user настроен на ramon в инвентаре для myhost.Для игр / задач это также верно для remote_user:

- hosts: myhost
  tasks:
   - command: i'll connect as ramon still
     remote_user: lola

Это сделано для того, чтобы специфичные для хоста настройки могли переопределять общие настройки.

Поскольку вы используете Vagrant, он создает файл инвентаризации в каталоге .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory и по умолчанию (зависит также от заданий коробки) указывает ansible_user='vagrant' внутри, что означает, что remote_user: root переопределяетсяпо умолчанию.

Это также упоминается в Vagrant docs :

force_remote_user (логическое значение) - требуется Vagrant для установки ansible_ssh_userустановка в сгенерированном инвентаре или в качестве дополнительной переменной при использовании статического инвентаря. Все параметры Ansible remote_user будут затем переопределены значением config.ssh.username настроек Vagrant SSH.

Если для этой опции установлено значение false Vagrant установит VagrantИмя пользователя SSH в качестве удаленного пользователя Ansible по умолчанию, но параметры remote_user ваших игр или заданий Ansible будут по-прежнему учитываться и, следовательно, переопределять конфигурацию Vagrant.

Значение по умолчанию true.

Решения

Вы можете:

  • изменить свою игру, добавив become: true либо ко всей игре, либо к одной задаче;

  • установите force_remote_user в false в Vagrantfile;

  • установите config.ssh.username в root в Vagrantfile.

Первый путь предпочтительнее.

0 голосов
/ 08 июня 2018

Требуется интерактивная аутентификация. Похоже, пользователю, выполняющему команду sudo , удаленно требуется пароль для действия sudo, и, поскольку нет терминала для его предоставления, происходит сбой.

Попробуйте использовать удаленного пользователя, имеющего право на запуск команды sudo без необходимости аутентификации.

Вы также можете использовать «ansible_sudo_pass», чтобы указать пароль для удаленного предоставления.

...