Commit 4d49a730 authored by Muhammad Umair Khan's avatar Muhammad Umair Khan
Browse files

fix(meepctl): use permissive directory creation to allow Kubernetes fsGroup to manage ownership

parent ffc9a544
Loading
Loading
Loading
Loading
+29 −42
Original line number Diff line number Diff line
@@ -153,50 +153,37 @@ func deployRun(cmd *cobra.Command, args []string) {
}

func deployEnsureStorage(cobraCmd *cobra.Command) {

	// Local storage structure
	cmd := exec.Command("mkdir", "-p", deployData.workdir)
	cmd.Args = append(cmd.Args, deployData.workdir+"/user")
	cmd.Args = append(cmd.Args, deployData.workdir+"/user/values")
	cmd.Args = append(cmd.Args, deployData.workdir+"/certs")
	cmd.Args = append(cmd.Args, deployData.workdir+"/couchdb")
	cmd.Args = append(cmd.Args, deployData.workdir+"/docker-registry")
	cmd.Args = append(cmd.Args, deployData.workdir+"/grafana")
	cmd.Args = append(cmd.Args, deployData.workdir+"/influxdb")
	cmd.Args = append(cmd.Args, deployData.workdir+"/tmp")
	cmd.Args = append(cmd.Args, deployData.workdir+"/virt-engine")
	cmd.Args = append(cmd.Args, deployData.workdir+"/virt-engine/user-charts")
	cmd.Args = append(cmd.Args, deployData.workdir+"/omt")
	cmd.Args = append(cmd.Args, deployData.workdir+"/postgis")
	cmd.Args = append(cmd.Args, deployData.workdir+"/prometheus")
	cmd.Args = append(cmd.Args, deployData.workdir+"/prometheus/server")
	cmd.Args = append(cmd.Args, deployData.workdir+"/prometheus/server/prometheus-db")
	cmd.Args = append(cmd.Args, deployData.workdir+"/prometheus/alertmanager")
	cmd.Args = append(cmd.Args, deployData.workdir+"/prometheus/alertmanager/alertmanager-db")
	_, err := utils.ExecuteCmd(cmd, cobraCmd)
	if err != nil {
		err = errors.New("Error creating path [" + deployData.workdir + "]")
		fmt.Println(err)
	}

	// Set ownership of specific platform-level directories to the configured uid and gid.
	// We intentionally exclude application-specific directories (e.g., grafana, couchdb)
	// as they manage their own ownership via Helm chart securityContext (fsGroup/runAsUser).
	uid := utils.RepoCfg.GetString("repo.deployment.permissions.uid")
	gid := utils.RepoCfg.GetString("repo.deployment.permissions.gid")
	if uid != "" && gid != "" {
		platformDirs := []string{
	// Local storage structure paths
	dirs := []string{
		deployData.workdir,
		deployData.workdir + "/user",
			deployData.workdir + "/tmp",
		deployData.workdir + "/user/values",
		deployData.workdir + "/certs",
		deployData.workdir + "/couchdb",
		deployData.workdir + "/docker-registry",
		deployData.workdir + "/grafana",
		deployData.workdir + "/influxdb",
		deployData.workdir + "/tmp",
		deployData.workdir + "/virt-engine",
		}
		for _, dir := range platformDirs {
			chownCmd := exec.Command("chown", "-R", uid+":"+gid, dir)
			_, err = utils.ExecuteCmd(chownCmd, cobraCmd)
		deployData.workdir + "/virt-engine/user-charts",
		deployData.workdir + "/omt",
		deployData.workdir + "/postgis",
		deployData.workdir + "/prometheus",
		deployData.workdir + "/prometheus/server",
		deployData.workdir + "/prometheus/server/prometheus-db",
		deployData.workdir + "/prometheus/alertmanager",
		deployData.workdir + "/prometheus/alertmanager/alertmanager-db",
	}

	// Create directories with 0777 permissions.
	// This is the Kubernetes-native approach: it ensures that regardless of the user 
	// running meepctl (or if run with sudo), the directories are permissive enough 
	// for the Kubernetes kubelet to successfully apply the chart's securityContext.fsGroup 
	// without encountering "permission denied" errors.
	for _, dir := range dirs {
		err := os.MkdirAll(dir, 0777)
		if err != nil {
				fmt.Println("Warning: Error setting ownership for path [" + dir + "]. You may need to run this command with elevated privileges (e.g., sudo).")
			}
			fmt.Println("Error creating path [" + dir + "]:", err)
		}
	}
}