Как переключить пользователя на задачу или набор задач?
повторяющаяся тема, которая находится в моих ansible playbooks, заключается в том, что я часто должен выполнять команду с привилегиями sudo (sudo: yes
), потому что я хотел бы сделать это для определенного пользователя. В идеале я бы предпочел использовать sudo для переключения на этого пользователя и выполнения команд в обычном режиме. Потому что тогда мне не придется выполнять свои обычные команды post, такие как каталоги chowning. Вот отрывок из одного из моих учебников:
- name: checkout repo
git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
sudo: yes
- name: change perms
file: dest={{ dst }} state=directory mode=0755 owner=some_user
sudo: yes
В идеале я мог бы запускать команды или наборы команд как разные пользователь, даже если для этого требуется sudo, чтобы подать в суд на этого пользователя.
4 ответа:
С Ansible 1.9 или более поздней версии
Ansible использует
become
,become_user
иbecome_method
директивы для достижения эскалации привилегий. Вы можете применить их ко всей пьесе или учебнику, установить их в прилагаемом учебнике или установить их для конкретной задачи.- name: checkout repo git: repo=https://github.com/some/repo.git version=master dest={{ dst }} become: yes become_user: some_user
можно использовать
become_with
чтобы указать, как достигается эскалация привилегий, значение по умолчаниюsudo
.директива действует для области блока, в котором она используется (примеры).
посмотреть хосты и пользователи для некоторых дополнительных примеров и Стать (Повышение Привилегий) для получения более подробной документации.
в дополнение к задаче-scoped
become
иbecome_user
директивы, Ansible 1.9 добавлены некоторые новые переменные и параметры командной строки, чтобы установить эти значения на время игры в отсутствие явных директив:
- Командная строка варианты за сумму, эквивалентную
become
/become_user
директивы.- подключение конкретных переменных, который может быть установлен на хост или группа.
по состоянию на Ansible 2.0.2.0, чем старше
sudo
/sudo_user
синтаксис, описанный ниже, все еще работает, но уведомление об устаревании гласит: "Эта функция будет удалена в будущем выпуске."
предыдущий синтаксис, устаревший по состоянию на Ansible 1.9 и запланированный для удаления:
- name: checkout repo git: repo=https://github.com/some/repo.git version=master dest={{ dst }} sudo: yes sudo_user: some_user
в Ansible > 1.4 вы можете фактически указать удаленного пользователя на уровне задачи, который должен позволить вам войти в систему как этот пользователь и выполнить эту команду, не прибегая к sudo. Если вы не можете войти в систему как этот пользователь, то решение sudo_user тоже будет работать.
--- - hosts: webservers remote_user: root tasks: - name: test connection ping: remote_user: yourname
см.http://docs.ansible.com/playbooks_intro.html#hosts-and-users
В Анзибль 2.X, вы можете использовать
block
для группы задачи:- block: - name: checkout repo git: repo: https://github.com/some/repo.git version: master dest: "{{ dst }}" - name: change perms file: dest: "{{ dst }}" state: directory mode: 0755 owner: some_user become: yes become_user: some user
решение заключается в использовании
include
заявлениеremote_user
var (опишите там:http://docs.ansible.com/playbooks_roles.html) но это должно быть сделано на playbook, а не на уровне задач.