Ansible Become сообщает об успехе, но команда не выполняется из-за отсутствия привилегий - PullRequest
0 голосов
/ 05 ноября 2019

Я запускаю простую книгу игр, чтобы проверить настройку K8, первый шаг - отключить своп, для успеха которого требуется повышение прав. Я установил ansible в одном контейнере Dobu Ubuntu, пытаясь запустить воспроизведение в другом контейнере Centos, оба на моем локальном компьютере с Windows.

Моя книга воспроизведения

---
- hosts: local
  become: yes
  become_method: sudo
  roles:
    - kubernetes

Ошибка выполнения задачи

---
- name: turn off swap
  shell: |
    swapoff -a

Результирующий вывод перерезан в соответствующую часть

ok: [centosbox]
<172.66.2.66> SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=config -o ConnectTimeout=10 -o ControlPath=/home/config/.ansible/cp/ansible-ssh-%h-%p-%r -tt 172.66.2.66 '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-hvrarwhvnbwtveklbinfwigmrapurugb; LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /home/config/.ansible/tmp/ansible-tmp-1572951151.19-42546213906525/command; rm -rf "/home/config/.ansible/tmp/ansible-tmp-1572951151.19-42546213906525/" > /dev/null 2>&1'"'"'"'"'"'"'"'"''"'"''

fatal: [centosbox]: FAILED! => {"changed": true, "cmd": "swapoff -a", "delta": "0:00:00.119504", "end": "2019-11-05 10:52:31.431316", "failed": true, "invocation": {"module_args": {"_raw_params": "swapoff -a", 
"_uses_shell": true, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 1, "start": "2019-11-05 10:52:31.311812", "stderr": "swapoff: Not superuser.", "stdout": "", "stdout_lines": [], "warnings": []}

Вывод swapoff: не суперпользователь. - это именно то, что вы ожидаете, выполнив команду от имени пользователя без прав доступа. ,Пользователь настроен на использование sudo без пароля на целевой машине, а его пользователь запускает книгу воспроизведения.

[local]
centosbox ansible_host=172.66.2.66 ansible_user=config

Я попытался изменить настройку, добавив слова «стать» на разных уровнях, и все это привело к той же ошибке. Я также попытался запустить команду swapoff, используя разные методы в playbook, те же результаты. Любые предложения с благодарностью.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Нашел проблему и решение в этой статье - https://forums.docker.com/t/docker-swap-space/3908 Я добавил privileged: true в мой файл compose, и он наконец заработал. Спасибо всем, кто помог привести меня к этому ответу.

0 голосов
/ 05 ноября 2019

Мое первое предположение заключается в том, что пользовательский 'config', который вы используете для SSH из вашего контейнера ubuntu в целевой контейнер, не имеет одинаковый UID в обоих контейнерах.

Поскольку пространство uid / gid совместно используется контейнерами и их хост-системой, вы хотите убедиться, что при использовании пользователя 'config' из вашего контейнера ubuntu он транслируется тому же пользователю в контейнере назначения. Это можно сделать, обеспечив одинаковый UID этих пользователей при создании образа Docker, например, в вашем файле Docker:

RUN useradd -r -u 1001 -g config config 

Хорошее чтение: https://medium.com/@mccode/understanding-how-uid-and-gid-work-in-docker-containers-c37a01d01cf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...