向root用户提供单个任务ansible

时间:2015-10-30 10:25:50

标签: ansible ansible-playbook

我有主机文件

[controller]
1.1.1.1
2.2.2.2
3.3.3.3

我将master设置为group_vars中的1.1.1.1

wsrep_ip=1.1.1.1

现在,我需要将1.1.1.1中的文件复制到我编写过任务的其他人,如下所示

- hosts: all
  sudo: yes
  tasks:
    - name: Sync all configuration files across db nodes
      copy: src=/etc/mysql/debian.cnf dest=/etc/mysql/debian.cnf
      when: "'{{ inventory_hostname }}' != '{{ wsrep_ip }}'"
      with_items: groups['controller']

如何仅针对此任务切换到root用户?有没有办法做到这一点。因为,其他任务是使用sudo运行的:是的,只有这会产生权限问题

fatal: [2.2.2.2] => error while accessing the file /etc/mysql/debian.cnf, error was: [Errno 13] Permission denied: u'/etc/mysql/debian.cnf'
fatal: [3.3.3.3] => error while accessing the file /etc/mysql/debian.cnf, error was: [Errno 13] Permission denied: u'/etc/mysql/debian.cnf'

1 个答案:

答案 0 :(得分:3)

要使一个单独的任务运行,因为sudo将- hosts: all tasks: - name: Sync all configuration files across db nodes copy: src=/etc/mysql/debian.cnf dest=/etc/mysql/debian.cnf when: "'{{ inventory_hostname }}' != '{{ wsrep_ip }}'" with_items: groups['controller'] sudo: yes 放在任务定义中而不是播放中。即。

become

然而,有几个笔记。

  1. sudo是Ansible中become: yes的新版本,因此您也可以使用sudo代替delegate_to http://docs.ansible.com/ansible/become.html

  2. 您可以使用copy关键字简化此任务定义:) http://docs.ansible.com/ansible/playbooks_delegation.html#delegation

  3. 修改

    我只是正确地重新阅读了你的任务,我想我可以在你的逻辑中看到错误。

    sudo: yes模块用于将文件从本地(运行ansible的机器)框复制到当前正在运行任务的框中。当您在复制任务上说delegate_to时,表示尝试将文件以root身份保存在目标框中,但不能以root身份从Ansible框中读取该文件。

    您需要使用wsrep_ip来复制- hosts: all tasks: - name: Sync all configuration files across db nodes copy: src=/etc/mysql/debian.cnf dest=/etc/mysql/debian.cnf delegate_to: "{{ wsrep_ip }}" when: "'{{ inventory_hostname }}' != '{{ wsrep_ip }}'" sudo: yes 框中的文件。

    E.g。 (未经考验的抱歉)

    copy

    这意味着将wsrep_ip操作委托给src框,以便wsrep_ip参数表示9B2D1BB8-25AA-8EE5-2513-7C140B6B1801上的源文件,而不是Ansible控制计算机。