Моя общая цель - перезапустить pulseaudio для конкретного пользователя через ansible (поэтому, если у вас есть идея, как это сделать, я открыт, чтобы услышать это :))
Я хочу выполнить следующую команду как пользователь myuser
, и в соответствии с pulseaudio это не должно выполняться как sudo / root.
$([[ $(pulseaudio -k) -eq 0 ]] || exit 0; sleep 5; [[ $(pulseaudio -D --exit-idle-time=-1) -eq 0 ]] || exit 0)
это хорошо работает, если я проверил его на одной машине. Он убивает pulseaudio, если он работает, и затем запускает его снова, и не выходит из строя, если pulseaudio уже был остановлен.
Попытка 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
, чтобы ansible мог его использовать?
Попытка 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]:
Если я попробовал первое предложение Калума Халпина, pulseaudio получает старт, но как sudo, что не то, чего я хочу, мне нужно, чтобы pulseaudio стартовал к 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