调用”argocd login”失败,显示”本地配置:当前上下文未设置”。

huangapple go评论87阅读模式
英文:

Calling "argocd login" fails with "Local config: current-context unset"

问题

我们的一个客户在运行我们的命令行二进制文件时遇到了一个奇怪的错误。我将错误缩小到了我们调用argocd login时出现的问题,但不知何故,它失败并显示以下错误信息:

Local config: current-context unset

通过深入研究 argo-cd 源代码,我怀疑问题归结为使用 os.ReadFile 时传入了 "",但在客户的机器上却没有返回 ENOENT。我进行了以下简单检查:

package main

import (
	"fmt"
	"os"
)

func main() {
	_, err := os.ReadFile("")
	if err != nil {
		fmt.Printf("err: %v\n", err)
		if os.IsNotExist(err) {
			fmt.Println("err is NotExist")
		} else {
			fmt.Println("err is *not* NotExist")
		}
	} else {
		fmt.Println("no error at all")
	}
}

在我测试的每个 Linux 发行版上,我得到的结果是 err is NotExist。但我怀疑问题可能是由客户所运行的特定环境引起的。目前我所知道的是,他们通过 EC2 登录到某个内部的 Docker 容器,然后以 root 用户身份运行该命令。

这里是否有人能给我一些建议,告诉我可以查找什么,以及可能导致这个调用返回 ENOENT 的原因?

英文:

one of our clients is encountering a strange bug when running our cli binary. i narrowed down the error to a call we are making for argocd login, which for some reason fails with

Local config: current-context unset

from digging deeper into argo-cd source code, i suspect it all boils down to a call for os.ReadFile with "", which does not return ENOENT on their machine. i have made this simple check:

package main

import (
	"fmt"
	"os"
)

func main() {
	_, err := os.ReadFile("")
	if err != nil {
		fmt.Printf("err: %v\n", err)
		if os.IsNotExist(err) {
			fmt.Println("err is NotExist")
		} else {
			fmt.Println("err is *not* NotExist")
		}
	} else {
		fmt.Println("no error at all")
	}
}

on every linux distro i tested it on, i am getting err is NotExist. but i suspect the issue might be caused by the specific env the customers are running in. all i know at the moment is that they shell into EC2, and then into some in-house docker container, and run the command as root user.

does anyone here have any tip on what i can look for, and what might cause this call to not return ENOENT?

答案1

得分: 1

os.ReadFile直接将文件名传递给open(2)系统调用。如果os.ReadFile("")没有返回ENOENT,那就意味着:

  • 内核使用了非标准的文件系统实现(例如,通过Fuse自定义的文件系统),或者
  • 通过系统调用钩子强制内核返回了不同的结果(例如,EBPF)。
英文:

os.ReadFile passes the filename directly to the open(2) system call. If os.ReadFile("") is not returning ENOENT, that implies:

  • a non-standard file system implementation from the kernel (eg, something custom via Fuse), or
  • a syscall hook forcing a different result from the kernel (eg, EBPF)

答案2

得分: 0

在GCP Cloud Build中遇到了相同的问题,通过在ArgoCD步骤之前删除一些步骤来解决了。🧑‍💻

英文:

has same issue in gcp cloudbuild, fixed by removing some steps before argocd step 🧙🏼‍♂️

huangapple
  • 本文由 发表于 2023年1月23日 20:02:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/75209211.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定