k0sproject / k0sproject/k0sctl

File upload does not work with directories with ":" in their names

Open
#669 2 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Go
Stars
582
Forks
113
Avg merge
2d 13h
Merged PRs (30d)
34

Description

Let's say I have a directory structure like this, which I wish to copy to a target host..

```
$ tree gpu-workstation/

gpu-workstation/
├── etc
│   └── k0s
│   ├── certs.d
│   │   └── gpu-workstation:30101
│   │   ├── hosts.toml
│   │   └── ca.pem
│   └── containerd.d
│   └── registry.toml
└── var
└── lib
└── tailscale
└── tailscaled.state
```

Which I then put into `k0sctl.yaml` like this..

```
spec:
hosts:
...
- ssh:
address: 100.92.34.7
user: martin_kou
port: 22
keyPath: null
role: worker
files:
- name: test
src: gpu-workstation
dstDir: /
```

The directory `gpu-workstation:30101` would cause the file upload to always fail with an "invalid path" log entry. e.g.

```
time="24 Mar 24 17:41 PDT" level=info msg="\x1b[32m==> Running phase: Upload files to hosts\x1b[0m"
time="24 Mar 24 17:41 PDT" level=info msg="[ssh] 100.92.34.7:22: uploading registry-config"
time="24 Mar 24 17:41 PDT" level=info msg="[ssh] 100.92.34.7:22: uploading file gpu-workstation/etc/k0s/certs.d/gpu-workstation:30101/hosts.toml => /etc/k0s/certs.d/gpu-workstation:30101/hosts.toml (1 of 4)"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: ensuring directory /etc/k0s/certs.d/gpu-workstation:30101"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: executing `sudo -s -- test -e /etc/k0s/certs.d/gpu-workstation:30101 2> /dev/null`"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: executing `sudo -s -- env -i LC_ALL=C stat -c '%s|%y|%a|%F' -- /etc/k0s/certs.d/gpu-workstation:30101/hosts.toml`"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: remote stat failed: failed to stat /etc/k0s/certs.d/gpu-workstation:30101/hosts.toml: command failed: client exec: ssh session wait: Process exited with status 1"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: executing `stat --help 2>&1`"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: executing `stat -c '%#f %s %.9Y //%n//' -- /etc/k0s/certs.d/gpu-workstation:30101/hosts.toml 2> /dev/null`"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: executing `stat -c '%#f %s %.9Y //%n//' -- /etc/k0s/certs.d/gpu-workstation:30101 2> /dev/null`"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: 0x41ed 4096 1711326694.424793474 ///etc/k0s/certs.d/gpu-workstation:30101//"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: executing `install -m 0644 /dev/null /etc/k0s/certs.d/gpu-workstation:30101/hosts.toml`"
time="24 Mar 24 17:41 PDT" level=info msg="\x1b[31m* Running clean-up for phase: Acquire exclusive host lock\x1b[0m"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.114.163.115:22: stopped lock cycle, removing file"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: stopped lock cycle, removing file"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.92.34.7:22: executing `sudo -s -- rm -f -- /run/lock/k0sctl 2> /dev/null`"
time="24 Mar 24 17:41 PDT" level=debug msg="[ssh] 100.114.163.115:22: executing `sudo -s -- rm -f -- /run/lock/k0sctl 2> /dev/null`"
time="24 Mar 24 17:41 PDT" level=info msg="\x1b[31m==> Apply failed\x1b[0m"
time="24 Mar 24 17:41 PDT" level=fatal msg="apply failed - log file saved to /home/martin_kou/.cache/k0sctl/k0sctl.log: failed on 1 hosts:\n - [ssh] 100.92.34.7:22: invalid path: open remote file
/etc/k0s/certs.d/gpu-workstation:30101/hosts.toml for writing:
open /etc/k0s/certs.d/gpu-workstation:30101/hosts.toml:
command failed: client exec: ssh session wait: Process exited with status 1"
```

If I remove any directory with ":" from the source files, then the upload would succeed. Unfortunately, in this particular case I actually need the "gpu-workstation:30101" to be named in that particular way.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.