Моя общая цель - перезапустить pulseaudio для конкретного пользователя через ansible (поэтому, если у вас есть лучшее представление, как это сделать, я готов это услышать :))
Я хочу запустить следующую команду от имени пользователя myuser
, и, согласно pulseaudio, это не следует делать от имени sudo/root.
$([[ $(pulseaudio -k) -eq 0 ]] || exit 0; sleep 5; [[ $(pulseaudio -D --exit-idle-time=-1) -eq 0 ]] || exit 0)
это хорошо работает, если я протестирую его на одной машине. Он убивает пульсаудио, если он запущен, а затем запускает его снова, и он не дает сбоя, если пульсаудио уже был остановлен.
Попытка 1 [Ожидание тайм-аута пароля]:
Моя независимая задача (как часть роли) выглядит так:
- name: restart pulse audio
shell: '$([[ $(pulseaudio -k) -eq 0 ]] || exit 0; sleep 5; [[ $(pulseaudio -D --exit-idle-time=-1) -eq 0 ]] || exit 0)'
args:
executable: /bin/bash
become: true
become_method: sudo
become_flags: "su - {{ ansible_user }} -c"
Но если я запускаю это, я получаю ошибку FAILED! => {"msg": "Timeout (12s) waiting for privilege escalation prompt: "}
Если я войду на эту машину как root и введу sudo su - myuser
, я получу подсказку myuser
, как я и ожидал.
Итак, как я могу указать пароль для myuser
, чтобы его можно было использовать?
Попытка 2 [Неверный пароль su]:
доступная задача:
- name: restart pulse audio
shell: '$([[ $(pulseaudio -k) -eq 0 ]] || exit 0; sleep 5; [[ $(pulseaudio -D --exit-idle-time=-1) -eq 0 ]] || exit 0)'
args:
executable: /bin/bash
become: true
become_method: su
become_user: myuser
Я также пытался использовать become_user
вместо become_flags
, но безуспешно. Затем я получил ошибку: FAILED! => {"msg": "Incorrect su password"}
Попытка 3 [команда get выполняется как sudo]:
Если бы я попробовал первое предложение Калума Халпина, пульсаудио запускается, но, поскольку sudo, это не то, что я хочу, мне нужно, чтобы пульсаудио запускалось myuser
.
доступная задача:
- name: restart pulse audio
shell: '$([[ $(pulseaudio -k) -eq 0 ]] || exit 0; sleep 5; [[ $(pulseaudio -D --exit-idle-time=-1) -eq 0 ]] || exit 0)'
args:
executable: /bin/bash
become: true
become_method: sudo
become_user: myuser
Я получаю следующий вывод:
{"changed": true,
"cmd": "$([[ $(pulseaudio -k) -eq 0 ]] || exit 0; sleep 5; [[ $(pulseaudio -D --exit-idle-time=-1) -eq 0 ]] || exit 0)",
"delta": "0:00:05.110839", "end": "2019-06-23 11:11:43.686776", "rc": 0, "start": "2019-06-23 11:11:38.575937",
"stderr": "E: [pulseaudio] main.c: Failed to kill daemon: No such file or directory\nW: [pulseaudio] main.c: This program is not intended to be run as root (unless --system is specified).",
"stderr_lines": ["E: [pulseaudio] main.c: Failed to kill daemon: No such file or directory", "W: [pulseaudio] main.c: This program is not intended to be run as root (unless --system is specified)."],
"stdout": "", "stdout_lines": []}
Попытка 2.1 и 3.1 [с использованием remote_user: myuser
]
Я попытался установить remote_user
в myuser
в palybook, но все результаты остались прежними.
Моя конфигурация/окружение:
Мои переменные become
настроены так:
ansible_connection: ssh
ansible_user: myuser
ansible_ssh_pass: 1234
ansible_become: yes
ansible_become_user: root
ansible_become_pass: 1234
Плейбук выглядит так:
- hosts: myhost
connection: local
become: ansible_become
become_user: ansible_become_user
roles:
- role: pulse-audio-config
ansible_become_user
: root` из вашей конфигурации; это может быть переопределение настроек задачи. docs.ansible.com/ansible/latest/user_guide/ - person Calum Halpin   schedule 23.06.2019ansible_become_user
для конкретной задачи в конце концов сработала. - person ahorn42   schedule 24.06.2019