Pass ttrpc address to shim via env

Because of the way go handles flags, passing a flag that is not defined
will cause an error. In our case, if we kept this as a flag, then
third-party shims would break when they see this new flag.  To fix this,
I moved this new configuration option to an env var.  We should use env
vars from here on out to avoid breaking shim compat.

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby 2019-08-22 18:48:51 +00:00
parent 1be6ee5396
commit 6cf031e1e4
4 changed files with 13 additions and 8 deletions

View File

@ -119,7 +119,6 @@ func newCommand(ctx context.Context, id, containerdBinary, containerdAddress, co
"-namespace", ns, "-namespace", ns,
"-id", id, "-id", id,
"-address", containerdAddress, "-address", containerdAddress,
"-ttrpc-address", containerdTTRPCAddress,
} }
cmd := exec.Command(self, args...) cmd := exec.Command(self, args...)
cmd.Dir = cwd cmd.Dir = cwd

View File

@ -135,7 +135,6 @@ func newCommand(ctx context.Context, id, containerdBinary, containerdAddress, co
"-namespace", ns, "-namespace", ns,
"-id", id, "-id", id,
"-address", containerdAddress, "-address", containerdAddress,
"-ttrpc-address", containerdTTRPCAddress,
} }
cmd := exec.Command(self, args...) cmd := exec.Command(self, args...)
cmd.Dir = cwd cmd.Dir = cwd

View File

@ -89,11 +89,14 @@ var (
socketFlag string socketFlag string
bundlePath string bundlePath string
addressFlag string addressFlag string
ttrpcAddressFlag string
containerdBinaryFlag string containerdBinaryFlag string
action string action string
) )
const (
ttrpcAddressEnv = "TTRPC_ADDRESS"
)
func parseFlags() { func parseFlags() {
flag.BoolVar(&debugFlag, "debug", false, "enable debug output in logs") flag.BoolVar(&debugFlag, "debug", false, "enable debug output in logs")
flag.StringVar(&namespaceFlag, "namespace", "", "namespace that owns the shim") flag.StringVar(&namespaceFlag, "namespace", "", "namespace that owns the shim")
@ -102,7 +105,6 @@ func parseFlags() {
flag.StringVar(&bundlePath, "bundle", "", "path to the bundle if not workdir") flag.StringVar(&bundlePath, "bundle", "", "path to the bundle if not workdir")
flag.StringVar(&addressFlag, "address", "", "grpc address back to main containerd") flag.StringVar(&addressFlag, "address", "", "grpc address back to main containerd")
flag.StringVar(&ttrpcAddressFlag, "ttrpc-address", "", "ttrpc address back to main containerd")
flag.StringVar(&containerdBinaryFlag, "publish-binary", "containerd", "path to publish binary (used for publishing events)") flag.StringVar(&containerdBinaryFlag, "publish-binary", "containerd", "path to publish binary (used for publishing events)")
flag.Parse() flag.Parse()
@ -165,7 +167,9 @@ func run(id string, initFunc Init, config Config) error {
} }
} }
publisher, err := newPublisher(ttrpcAddressFlag) ttrpcAddress := os.Getenv(ttrpcAddressEnv)
publisher, err := newPublisher(ttrpcAddress)
if err != nil { if err != nil {
return err return err
} }
@ -204,7 +208,7 @@ func run(id string, initFunc Init, config Config) error {
} }
return nil return nil
case "start": case "start":
address, err := service.StartShim(ctx, idFlag, containerdBinaryFlag, addressFlag, ttrpcAddressFlag) address, err := service.StartShim(ctx, idFlag, containerdBinaryFlag, addressFlag, ttrpcAddress)
if err != nil { if err != nil {
return err return err
} }

View File

@ -50,7 +50,6 @@ func Command(ctx context.Context, runtime, containerdAddress, containerdTTRPCAdd
args := []string{ args := []string{
"-namespace", ns, "-namespace", ns,
"-address", containerdAddress, "-address", containerdAddress,
"-ttrpc-address", containerdTTRPCAddress,
"-publish-binary", self, "-publish-binary", self,
} }
args = append(args, cmdArgs...) args = append(args, cmdArgs...)
@ -96,7 +95,11 @@ func Command(ctx context.Context, runtime, containerdAddress, containerdTTRPCAdd
cmd := exec.Command(cmdPath, args...) cmd := exec.Command(cmdPath, args...)
cmd.Dir = path cmd.Dir = path
cmd.Env = append(os.Environ(), "GOMAXPROCS=2") cmd.Env = append(
os.Environ(),
"GOMAXPROCS=2",
fmt.Sprintf("%s=%s", ttrpcAddressEnv, containerdTTRPCAddress),
)
cmd.SysProcAttr = getSysProcAttr() cmd.SysProcAttr = getSysProcAttr()
if opts != nil { if opts != nil {
d, err := proto.Marshal(opts) d, err := proto.Marshal(opts)