我有主机文件
[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'
答案 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
然而,有几个笔记。
sudo
是Ansible中become: yes
的新版本,因此您也可以使用sudo
代替delegate_to
http://docs.ansible.com/ansible/become.html
您可以使用copy
关键字简化此任务定义:) http://docs.ansible.com/ansible/playbooks_delegation.html#delegation
修改强>
我只是正确地重新阅读了你的任务,我想我可以在你的逻辑中看到错误。
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控制计算机。