cp_ 无法统计:没有这样的文件或目录:通过 Ansible 将文件从本地主机复制到 k8s pod 时出错
cp_ cannot stat: no such file or directory: Error copying files from localhost to k8s pod through Ansible
我正在尝试通过 Ansible 将测试文件(例如 HelloWorld.txt)从我的本地机器复制到 Rancher 上的 k8s pod。问题是我得到了一只猫:没有这样的文件或目录。我想我收到此错误是因为我正在使用 k8s_exec 模块来执行 cp 命令。因为我正在使用它,所以我认为他不是在尝试从我的本地机器复制到 pod,而是已经在 pod 中。
这是剧本:
---
- hosts: localhost #group of hosts on host file
connection: local
remote_user: root
vars:
ansible_python_interpreter: '{{ ansible_playbook_python }}'
collections:
- community.kubernetes
tasks:
- name: Test Host Connection
ping:
- name: Get the pods in the specific namespace
k8s_info:
kubeconfig: '/etc/ansible/RCCloudConfig'
kind: Pod
namespace: redmine
register: pod_list
- name: Print pod names
debug:
msg: "pod_list: {{ pod_list | json_query('resources[*].status.podIP') }} "
- set_fact:
pod_names: "{{pod_list|json_query('resources[*].metadata.name')}}"
- name: Copy Opatch zipfile to the Target Oracle_home
k8s_exec:
kubeconfig: '/etc/ansible/RCCloudConfig'
namespace: redmine
pod: "{{ pod_name | mandatory }}" #pod name
command: cp /home/ansible/ansible/HelloWorld.txt /tmp # copy from the current location to tmp
- name: Show HelloWorld
k8s_exec:
kubeconfig: '/etc/ansible/RCCloudConfig'
namespace: redmine
pod: redminetisl-gitlab-69f7485b5d-52b5s #pod name
command: cat /tmp/HelloWorld.txt
Ansible 版本:
ansible 2.9.9
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
是的,您的猜测是正确的,当您 exec
进入容器时,您的命令将在 pod“内部”执行。在这种情况下,您只需复制 pod 中不存在的文件。
检查 kubectl cp 命令。这类似于 docker cp
命令,将文件从主机复制到容器。你可以使用ansible command module
来执行它。
我通过退出容器解决了这个问题,然后将文件cp到容器中。
问题是我没有权限,所以我需要退出容器,然后输入“sudo docker cp {file url} {containerID}:/opt/video” .
我正在尝试通过 Ansible 将测试文件(例如 HelloWorld.txt)从我的本地机器复制到 Rancher 上的 k8s pod。问题是我得到了一只猫:没有这样的文件或目录。我想我收到此错误是因为我正在使用 k8s_exec 模块来执行 cp 命令。因为我正在使用它,所以我认为他不是在尝试从我的本地机器复制到 pod,而是已经在 pod 中。
这是剧本:
---
- hosts: localhost #group of hosts on host file
connection: local
remote_user: root
vars:
ansible_python_interpreter: '{{ ansible_playbook_python }}'
collections:
- community.kubernetes
tasks:
- name: Test Host Connection
ping:
- name: Get the pods in the specific namespace
k8s_info:
kubeconfig: '/etc/ansible/RCCloudConfig'
kind: Pod
namespace: redmine
register: pod_list
- name: Print pod names
debug:
msg: "pod_list: {{ pod_list | json_query('resources[*].status.podIP') }} "
- set_fact:
pod_names: "{{pod_list|json_query('resources[*].metadata.name')}}"
- name: Copy Opatch zipfile to the Target Oracle_home
k8s_exec:
kubeconfig: '/etc/ansible/RCCloudConfig'
namespace: redmine
pod: "{{ pod_name | mandatory }}" #pod name
command: cp /home/ansible/ansible/HelloWorld.txt /tmp # copy from the current location to tmp
- name: Show HelloWorld
k8s_exec:
kubeconfig: '/etc/ansible/RCCloudConfig'
namespace: redmine
pod: redminetisl-gitlab-69f7485b5d-52b5s #pod name
command: cat /tmp/HelloWorld.txt
Ansible 版本:
ansible 2.9.9
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
是的,您的猜测是正确的,当您 exec
进入容器时,您的命令将在 pod“内部”执行。在这种情况下,您只需复制 pod 中不存在的文件。
检查 kubectl cp 命令。这类似于 docker cp
命令,将文件从主机复制到容器。你可以使用ansible command module
来执行它。
我通过退出容器解决了这个问题,然后将文件cp到容器中。 问题是我没有权限,所以我需要退出容器,然后输入“sudo docker cp {file url} {containerID}:/opt/video” .