 194b6e4f06
			
		
	
	194b6e4f06
	
	
	
		
			
			This makes it possible to enable shim debug by adding the following to
`config.toml`:
    [plugins.linux]
    shim_debug = true
I moved the debug setting from the `client.Config struct` to an argument to
`client.WithStart` since this is the only place it would be used.
Signed-off-by: Ian Campbell <ian.campbell@docker.com>
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // +build linux
 | |
| 
 | |
| package linux
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"context"
 | |
| 	"io"
 | |
| 	"os"
 | |
| 	"path/filepath"
 | |
| 
 | |
| 	client "github.com/containerd/containerd/linux/shim"
 | |
| )
 | |
| 
 | |
| func loadBundle(path, namespace string) *bundle {
 | |
| 	return &bundle{
 | |
| 		path:      path,
 | |
| 		namespace: namespace,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // newBundle creates a new bundle on disk at the provided path for the given id
 | |
| func newBundle(path, namespace, id string, spec []byte) (b *bundle, err error) {
 | |
| 	if err := os.MkdirAll(path, 0700); err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	path = filepath.Join(path, id)
 | |
| 	defer func() {
 | |
| 		if err != nil {
 | |
| 			os.RemoveAll(path)
 | |
| 		}
 | |
| 	}()
 | |
| 	if err := os.Mkdir(path, 0700); err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	if err := os.Mkdir(filepath.Join(path, "rootfs"), 0700); err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	f, err := os.Create(filepath.Join(path, configFilename))
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	defer f.Close()
 | |
| 	_, err = io.Copy(f, bytes.NewReader(spec))
 | |
| 	return &bundle{
 | |
| 		id:        id,
 | |
| 		path:      path,
 | |
| 		namespace: namespace,
 | |
| 	}, err
 | |
| }
 | |
| 
 | |
| type bundle struct {
 | |
| 	id        string
 | |
| 	path      string
 | |
| 	namespace string
 | |
| }
 | |
| 
 | |
| // NewShim connects to the shim managing the bundle and tasks
 | |
| func (b *bundle) NewShim(ctx context.Context, binary, grpcAddress string, remote, debug bool) (*client.Client, error) {
 | |
| 	opt := client.WithStart(binary, grpcAddress, debug)
 | |
| 	if !remote {
 | |
| 		opt = client.WithLocal
 | |
| 	}
 | |
| 	return client.New(ctx, client.Config{
 | |
| 		Address:   b.shimAddress(),
 | |
| 		Path:      b.path,
 | |
| 		Namespace: b.namespace,
 | |
| 	}, opt)
 | |
| }
 | |
| 
 | |
| // Connect reconnects to an existing shim
 | |
| func (b *bundle) Connect(ctx context.Context, remote bool) (*client.Client, error) {
 | |
| 	opt := client.WithConnect
 | |
| 	if !remote {
 | |
| 		opt = client.WithLocal
 | |
| 	}
 | |
| 	return client.New(ctx, client.Config{
 | |
| 		Address:   b.shimAddress(),
 | |
| 		Path:      b.path,
 | |
| 		Namespace: b.namespace,
 | |
| 	}, opt)
 | |
| }
 | |
| 
 | |
| // Delete deletes the bundle from disk
 | |
| func (b *bundle) Delete() error {
 | |
| 	return os.RemoveAll(b.path)
 | |
| }
 | |
| 
 | |
| func (b *bundle) shimAddress() string {
 | |
| 	return filepath.Join(string(filepath.Separator), "containerd-shim", b.namespace, b.id, "shim.sock")
 | |
| 
 | |
| }
 |