Ansible 复制文件时出现问题

Ansible 复制文件时出现问题,ansible,vagrant,Ansible,Vagrant,我正在尝试使用Vagrant(v2.1.2)和VirtualBox(v5.2.20)提供本地kubernetes集群 我的Vagrantfile使用ansible_local provisioner运行一些ansible剧本,以使用kubeadm提供K8s集群 几个月前,当我运行它的时候,一切都运行得很好,但现在已经不工作了。不知道它为什么停止工作,但是当我试图将kube配置复制到vagrant users home dir时,主节点的ansible playbook失败了 失败的ansible

我正在尝试使用Vagrant(v2.1.2)和VirtualBox(v5.2.20)提供本地kubernetes集群

我的Vagrantfile使用ansible_local provisioner运行一些ansible剧本,以使用kubeadm提供K8s集群

几个月前,当我运行它的时候,一切都运行得很好,但现在已经不工作了。不知道它为什么停止工作,但是当我试图将kube配置复制到vagrant users home dir时,主节点的ansible playbook失败了

失败的ansible任务如下所示:

- name: Copy kubeconfig for vagrant user
  copy:
     src: /etc/kubernetes/admin.conf
     dest: /home/vagrant/.kube/
     owner: vagrant
     group: vagrant
vagrant@master1:/etc/kubernetes$ ls -al admin.conf
-rw------- 1 root root 5453 Aug  5 14:07 admin.conf
这导致以下错误:
fatal:[master1]:失败!=>{“msg”:“尝试读取文件'/etc/kubernetes/admin.conf'时出错:[Errno 13]权限被拒绝:'/etc/kubernetes/admin.conf'}

src文件确实存在。如果我在失败后ssh到VM中,我可以使用
sudo cp/etc/kubernetes/admin.conf/home/vagrant/
复制该文件,但上述失败会导致vagrant配置失败/停止

仅供参考,我在游戏和任务级别尝试了一些组合,例如
been:true
remote\u user:root
,例如

---
- hosts: all
  become: true
  tasks:
  ...
。。。但是没有用

admin.conf上的权限如下:

- name: Copy kubeconfig for vagrant user
  copy:
     src: /etc/kubernetes/admin.conf
     dest: /home/vagrant/.kube/
     owner: vagrant
     group: vagrant
vagrant@master1:/etc/kubernetes$ ls -al admin.conf
-rw------- 1 root root 5453 Aug  5 14:07 admin.conf
可以找到完整的master-playbook.yml

如何让ansible复制文件?

引用

要复制到远程服务器的文件的src本地路径

播放失败,因为运行ansible playbook的用户无法读取控制器上的文件(本地路径)

使用远程\u src:是

远程\u src如果是,它将转到远程/目标计算机以获取src

从评论来看,这似乎是你想要做的

src文件确实存在。如果我在失败后ssh到VM中,我可以使用sudo cp/etc/kubernetes/admin.conf/home/vagrant/复制该文件

如果虚拟机上的远程_用户被允许使用sudo su,并且设置正确,这应该可以工作

- hosts: all
  become: yes
  become_user: root
  become_method: sudo
仅允许*远程用户“
sudo cp
是不够的。请参阅

权限提升权限必须是通用的。Ansible并不总是使用特定的命令来执行某些操作,而是从一个每次都会更改的临时文件名运行模块(代码)。如果您使用“/sbin/service”或“/bin/chmod”作为允许的命令,这将失败


通常情况下,复制模块会查看本地主机上的文件,除非您将remote_src标志指定为一个选项,此时它会查看远程主机上的目录。因此,您是否使用root priv运行playbook?如果没有,则您有一个本地用户帐户试图读取一个仅允许root使用的文件。看到了吗由于您可以使用mode选项更改远程主机上文件的priv,因此可以尝试在本地向该文件上的其他用户打开读取权限。