Skip to content

Commit

Permalink
sync env in juicefs cluster mode (#3254)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhijian-pro authored Feb 20, 2023
1 parent b435b00 commit 671feed
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 4 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ require (
github.com/mozillazg/go-httpheader v0.2.1 // indirect
github.com/ncw/directio v1.0.5 // indirect
github.com/nxadm/tail v1.4.8 // indirect
github.com/oliverisaac/shellescape v0.0.0-20220131224704-1b6c6b87b668
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pengsrc/go-shared v0.2.1-0.20190131101655-1999055a4a14 // indirect
github.com/philhofer/fwd v1.1.1 // indirect
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,8 @@ github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/oliverisaac/shellescape v0.0.0-20220131224704-1b6c6b87b668 h1:WUilXdVrxYH+fFkmstviAOj1o9CfoW5O/Sd0LWPIVUA=
github.com/oliverisaac/shellescape v0.0.0-20220131224704-1b6c6b87b668/go.mod h1:EDgl+cvbmeOQUMTTH94gjXVtFHr8xDe5BiXhWn7Hf1E=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
Expand Down
29 changes: 25 additions & 4 deletions pkg/sync/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ import (
"sync"
"time"

"github.com/oliverisaac/shellescape"

"github.com/juicedata/juicefs/pkg/object"
)

Expand Down Expand Up @@ -244,7 +246,22 @@ func launchWorker(address string, config *Config, wg *sync.WaitGroup) {
return
}
// launch itself
var args = []string{host, rpath}
var args = []string{host}
// set env
var printEnv []string
for k, v := range config.Env {
args = append(args, fmt.Sprintf("%s=%s", k, v))
if strings.Contains(k, "SECRET") ||
strings.Contains(k, "TOKEN") ||
strings.Contains(k, "PASSWORD") ||
strings.Contains(k, "AZURE_STORAGE_CONNECTION_STRING") ||
strings.Contains(k, "JFS_RSA_PASSPHRASE") {
v = "******"
}
printEnv = append(printEnv, fmt.Sprintf("%s=%s", k, v))
}

args = append(args, rpath)
if strings.HasSuffix(path, "juicefs") {
args = append(args, os.Args[1:]...)
args = append(args, "--manager", address)
Expand All @@ -255,9 +272,13 @@ func launchWorker(address string, config *Config, wg *sync.WaitGroup) {
if !config.Verbose && !config.Quiet {
args = append(args, "-q")
}

logger.Debugf("launch worker command args: [ssh, %s]", strings.Join(args, ", "))
cmd = exec.Command("ssh", args...)
var argsBk = make([]string, len(args))
copy(argsBk, args)
for i, s := range printEnv {
argsBk[i+1] = s
}
logger.Debugf("launch worker command args: [ssh, %s]", strings.Join(shellescape.EscapeArgs(argsBk), ", "))
cmd = exec.Command("ssh", shellescape.EscapeArgs(args)...)
stderr, err := cmd.StderrPipe()
if err != nil {
logger.Errorf("redirect stderr: %s", err)
Expand Down
84 changes: 84 additions & 0 deletions pkg/sync/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
package sync

import (
"os"
"strings"

"github.com/urfave/cli/v2"
)

Expand Down Expand Up @@ -44,6 +47,72 @@ type Config struct {
Quiet bool
CheckAll bool
CheckNew bool
Env map[string]string
}

func envList() []string {
return []string{
"ACCESS_KEY",
"SECRET_KEY",
"SESSION_TOKEN",

"MINIO_ACCESS_KEY",
"MINIO_SECRET_KEY",
"MINIO_REGION",

"META_PASSWORD",
"REDIS_PASSWORD",
"SENTINEL_PASSWORD",
"SENTINEL_PASSWORD_FOR_OBJ",

"AZURE_STORAGE_CONNECTION_STRING",

"BDCLOUD_DEFAULT_REGION",
"BDCLOUD_ACCESS_KEY",
"BDCLOUD_SECRET_KEY",

"COS_SECRETID",
"COS_SECRETKEY",

"EOS_ACCESS_KEY",
"EOS_SECRET_KEY",
"EOS_TOKEN",

"GOOGLE_CLOUD_PROJECT",

"HADOOP_USER_NAME",
"HADOOP_SUPER_USER",
"HADOOP_SUPER_GROUP",
"KRB5_CONFIG",
"KRB5CCNAME",

"AWS_REGION",
"AWS_DEFAULT_REGION",

"HWCLOUD_DEFAULT_REGION",
"HWCLOUD_ACCESS_KEY",
"HWCLOUD_SECRET_KEY",

"ALICLOUD_REGION_ID",
"ALICLOUD_ACCESS_KEY_ID",
"ALICLOUD_ACCESS_KEY_SECRET",
"SECURITY_TOKEN",

"QINIU_DOMAIN",

"SCW_ACCESS_KEY",
"SCW_SECRET_KEY",

"SSH_PRIVATE_KEY_PATH",
"SSH_AUTH_SOCK",

"JFS_RSA_PASSPHRASE",
"PYROSCOPE_AUTH_TOKEN",
"DISPLAY_PROGRESSBAR",
"CGOFUSE_TRACE",
"JUICEFS_DEBUG",
"JUICEFS_LOGLEVEL",
}
}

func NewConfigFromCli(c *cli.Context) *Config {
Expand Down Expand Up @@ -74,10 +143,25 @@ func NewConfigFromCli(c *cli.Context) *Config {
Quiet: c.Bool("quiet"),
CheckAll: c.Bool("check-all"),
CheckNew: c.Bool("check-new"),
Env: make(map[string]string),
}
if cfg.Threads <= 0 {
logger.Warnf("threads should be larger than 0, reset it to 1")
cfg.Threads = 1
}

for _, key := range envList() {
if os.Getenv(key) != "" {
cfg.Env[key] = os.Getenv(key)
}
}
// pass all the variable that contains "JFS"
for _, ekv := range os.Environ() {
key := strings.Split(ekv, "=")[0]
if strings.Contains(key, "JFS") {
cfg.Env[key] = os.Getenv(key)
}
}

return cfg
}

0 comments on commit 671feed

Please sign in to comment.