Ansible невозможно создать папку на локальном хосте с другим пользователем - PullRequest
2 голосов
/ 03 мая 2020

Я выполняю ansible playbook с appuser, тогда как я sh создаю папку с пользователем webuser на локальном хосте.

s sh ключи настроены для webuser на моем локальном хосте , Поэтому после входа в систему с помощью appuser я могу просто ssh webuser@localhost переключить пользователя на webuser.

Примечание: у меня нет привилегий sudo, поэтому я не могу sudo переключиться на веб-пользователя из appuser.

Ниже приведен мой playbook, который запускается с пользовательским appuser, но ему нужно создать папку 04May2020 на локальном хосте, используя webuser

- name: "Play 1"

  hosts: localhost
  remote_user: "webuser"
  vars:
    ansible_ssh_extra_args: -o StrictHostKeyChecking=no
    ansible_ssh_private_key_file: /app/misc_automation/ssh_keys_id_rsa

  tasks:
   - name: create folder for today's print
     file:
       path: "/webWeb/htdocs/print/04May2020"
       state: directory
     remote_user: webuser

Однако, вывод показывает, что папка создается с помощью appuser вместо webuser. Смотрите вывод, показывающий s sh связь с appuser вместо webuser.

ansible-playbook /app/Ansible/playbook/print_oracle/print.yml -i /app/Ansible/playbook/print_oracle/allhosts.hosts -vvv

TASK [create folder for today] ***********************************
task path: /app/Ansible/playbook/print_oracle/print.yml:33
Using module file /usr/lib/python2.7/site-packages/ansible/modules/files/file.py
Pipelining is enabled.
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: appuser
<127.0.0.1> EXEC /bin/sh -c '/usr/bin/python2 && sleep 0'

Можете ли вы предложить, если это возможно без sudo?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Объединение всех моих комментариев во всеобъемлющий ответ.

<127.0.0.1> ESTABLI SH МЕСТНОЕ СОЕДИНЕНИЕ ДЛЯ ПОЛЬЗОВАТЕЛЯ: appuser

Это указывает на то, что вы подключаетесь к localhost через подключаемый модуль local , либо потому, что вы явно повторно объявили хост как таковой, либо потому, что вы используете неявный localhost . Из обсуждений вы попадаете во вторую ситуацию.

При использовании подключаемого модуля local, как указано в приведенной выше документации, remote_user игнорируется. Попытка изменить пользователя не имеет никакого эффекта, как вы можете видеть в следующем тестовом прогоне (идентификаторы пользователя (u) изменены):

# Check we are locally running as user1
$ id -a
uid=xxxx(user1) gid=yyy(group1) groups=yyy(group1)
# Running the same command through ansible returns the same result
$ ansible localhost -a 'id -a'
localhost | CHANGED | rc=0 >>
uid=xxxx(user1) gid=yyy(group1) groups=yyy(group1)
# Trying to change the remote user has no effect
$ ansible localhost -u whatever -a 'id -a'
localhost | CHANGED | rc=0 >>
uid=xxxx(user1) gid=yyy(group1) groups=yyy(group1)

Без изменения вашей книги и / или инвентаря, единственное решение - запустить playbook как пользователь, которому необходимо создать каталог.

Так как у вас есть s sh, другое решение - объявить новый хост, который вы будете использовать только для этой цели, который будет нацелен на локальный IP через с sh. (Примечание: вы можете явно объявить localhost как это, но тогда все соединения будут go через s sh, что может быть не тем, что вы хотите сделать).

Где-то наверху вашего инвентаря, добавьте строку:

localssh ansible_host=127.0.0.1

И в вашей игровой книге измените

hosts: localssh

Теперь подключение к вашей локальной машине будет go через s sh и remote_user будет быть послушным правильно.

1 голос
/ 04 мая 2020

Один из способов, который вы можете попробовать, это установить ansible_connection в localhost. Для этого в каталоге, из которого вы запускаете команды ansible, создайте каталог host_vars. В этом подкаталоге создайте файл с именем localhost, содержащий строку ansible_connection: smart

...