Ansible复制文件问题

时间:2019-08-05 14:26:51

标签: ansible vagrant

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

我的Vagrantfile使用ansible_local预配置程序来运行一些ansible剧本,以使用kubeadm预配置K8s集群。

几个月前,当我运行它时,一切都运行良好,但现在不再工作了。不确定为什么它停止工作,但是当我尝试将kube配置复制到无业游民的用户主目录时,主节点的ansible剧本失败。

失败的ansible任务如下:

- name: Copy kubeconfig for vagrant user
  copy:
     src: /etc/kubernetes/admin.conf
     dest: /home/vagrant/.kube/
     owner: vagrant
     group: vagrant

这会导致以下错误:fatal: [master1]: FAILED! => {"msg": "an error occurred while trying to read the file '/etc/kubernetes/admin.conf': [Errno 13] Permission denied: '/etc/kubernetes/admin.conf'"}

src文件确实存在。如果我在失败后通过ssh进入VM,则可以使用sudo cp /etc/kubernetes/admin.conf /home/vagrant/复制文件,但是上述失败会导致无业游民的供应失败/停止。

仅供参考,我在游戏和任务级别尝试了一些组合操作,例如become: trueremote_user: root,例如

---
- hosts: all
  become: true
  tasks:
  ...

...但无济于事。

admin.conf上的权限如下:

vagrant@master1:/etc/kubernetes$ ls -al admin.conf
-rw------- 1 root root 5453 Aug  5 14:07 admin.conf

完整的master-playbook.yml可以找到here

我如何复制文件?

1 个答案:

答案 0 :(得分:0)

引用copy

  

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

由于运行Ansible Playbook的用户无法在控制器(本地路径)上读取文件,因此播放失败

permission denied: '/etc/kubernetes/admin.conf'

使用 remote_src:是

  

remote_src如果是,它将进入src的远程/目标计算机

- name: Copy kubeconfig for vagrant user
  copy:
     remote_src: yes
     src: /etc/kubernetes/admin.conf
     dest: /home/vagrant/.kube/
     owner: vagrant
     group: vagrant

根据评论,这似乎是您想要做的

  

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

如果允许VM上的 remote_user 进行 sudo su 且正确设置escalation,则此方法应该起作用

- hosts: all
  become: yes
  become_user: root
  become_method: sudo

仅允许* remote_user“ sudo cp是不够的。请参阅Can’t limit escalation to certain commands

  

特权升级权限必须是常规的。 Ansible并不总是使用特定的命令来做某事,而是从临时文件名运行模块(代码),该文件名每次都会更改。如果您使用“ / sbin / service”或“ / bin / chmod”作为允许的命令,则此操作将失败...