diff --git a/firecracker-control/local.go b/firecracker-control/local.go index 9cb5647f8..c9cd6120b 100644 --- a/firecracker-control/local.go +++ b/firecracker-control/local.go @@ -96,17 +96,45 @@ func newLocal(ic *plugin.InitContext) (*local, error) { func (s *local) CreateVM(requestCtx context.Context, req *proto.CreateVMRequest) (*proto.CreateVMResponse, error) { var err error - id := req.GetVMID() - if err := identifiers.Validate(id); err != nil { + // Create shim + _, err = s.CreateShim(requestCtx, req.GetVMID()) + if err != nil { + return nil, err + } + + client, err := s.shimFirecrackerClient(requestCtx, req.GetVMID()) + if err != nil { + err = errors.Wrap(err, "failed to create firecracker shim client") s.logger.WithError(err).Error() return nil, err } + defer client.Close() + + resp, err := client.CreateVM(requestCtx, req) + if err != nil { + s.logger.WithError(err).Error("shim CreateVM returned error") + return nil, err + } + + return resp, nil +} + +func (s *local) CreateShim(requestCtx context.Context, id string) (codes.Code, error) { + var err error + + // Validate VM id + if err := identifiers.Validate(id); err != nil { + s.logger.WithError(err).Error() + return codes.Unknown, err + } + + // Validate namespace ns, err := namespaces.NamespaceRequired(requestCtx) if err != nil { err = errors.Wrap(err, "error retrieving namespace of request") s.logger.WithError(err).Error() - return nil, err + return codes.Unknown, err } s.logger.Debugf("using namespace: %s", ns) @@ -118,36 +146,36 @@ func (s *local) CreateVM(requestCtx context.Context, req *proto.CreateVMRequest) if err != nil { err = errors.Wrap(err, "failed to obtain shim socket address") s.logger.WithError(err).Error() - return nil, err + return codes.Unknown, err } shimSocket, err := shim.NewSocket(shimSocketAddress) if shim.SocketEaddrinuse(err) { - return nil, status.Errorf(codes.AlreadyExists, "VM with ID %q already exists (socket: %q)", id, shimSocketAddress) + return codes.AlreadyExists, status.Errorf(codes.AlreadyExists, "VM with ID %q already exists (socket: %q)", id, shimSocketAddress) } else if err != nil { err = errors.Wrapf(err, "failed to open shim socket at address %q", shimSocketAddress) s.logger.WithError(err).Error() - return nil, err + return codes.Unknown, err } // If we're here, there is no pre-existing shim for this VMID, so we spawn a new one if err := os.Mkdir(s.config.ShimBaseDir, 0700); err != nil && !os.IsExist(err) { s.logger.WithError(err).Error() - return nil, errors.Wrapf(err, "failed to make shim base directory: %s", s.config.ShimBaseDir) + return codes.Unknown, errors.Wrapf(err, "failed to make shim base directory: %s", s.config.ShimBaseDir) } shimDir, err := vm.ShimDir(s.config.ShimBaseDir, ns, id) if err != nil { err = errors.Wrapf(err, "failed to build shim path") s.logger.WithError(err).Error() - return nil, err + return codes.Unknown, err } err = shimDir.Mkdir() if err != nil { err = errors.Wrapf(err, "failed to create VM dir %q", shimDir.RootPath()) s.logger.WithError(err).Error() - return nil, err + return codes.Unknown, err } defer func() { @@ -167,19 +195,19 @@ func (s *local) CreateVM(requestCtx context.Context, req *proto.CreateVMRequest) if err != nil { err = errors.Wrap(err, "failed to obtain shim socket address") s.logger.WithError(err).Error() - return nil, err + return codes.Unknown, err } fcSocket, err := shim.NewSocket(fcSocketAddress) if err != nil { err = errors.Wrapf(err, "failed to open fccontrol socket at address %q", fcSocketAddress) s.logger.WithError(err).Error() - return nil, err + return codes.Unknown, err } cmd, err := s.newShim(ns, id, s.containerdAddress, shimSocket, fcSocket) if err != nil { - return nil, err + return codes.Unknown, err } defer func() { @@ -188,26 +216,12 @@ func (s *local) CreateVM(requestCtx context.Context, req *proto.CreateVMRequest) } }() - client, err := s.shimFirecrackerClient(requestCtx, id) - if err != nil { - err = errors.Wrap(err, "failed to create firecracker shim client") - s.logger.WithError(err).Error() - return nil, err - } - - defer client.Close() - - resp, err := client.CreateVM(requestCtx, req) - if err != nil { - s.logger.WithError(err).Error("shim CreateVM returned error") - return nil, err - } - s.addShim(shimSocketAddress, cmd) - return resp, nil + return codes.OK, nil } + func (s *local) addShim(address string, cmd *exec.Cmd) { s.processesMu.Lock() defer s.processesMu.Unlock() @@ -617,6 +631,16 @@ func (s *local) CreateSnapshot(ctx context.Context, req *proto.CreateSnapshotReq // LoadSnapshot Loads a snapshot of a VM func (s *local) LoadSnapshot(ctx context.Context, req *proto.LoadSnapshotRequest) (*proto.LoadResponse, error) { + var err error + + // Create shim if not exists yet for non-offloaded snapshots + if ! req.Offloaded { + code, err := s.CreateShim(ctx, req.GetVMID()) + if err != nil && code != codes.AlreadyExists { + return nil, err + } + } + client, err := s.shimFirecrackerClient(ctx, req.VMID) if err != nil { return nil, err @@ -651,4 +675,4 @@ func (s *local) Offload(ctx context.Context, req *proto.OffloadRequest) (*empty. } return resp, nil -} +} \ No newline at end of file diff --git a/go.mod b/go.mod index b6701ff71..0bbc465a9 100644 --- a/go.mod +++ b/go.mod @@ -45,6 +45,8 @@ require ( ) replace ( + github.com/containerd/containerd => github.com/ease-lab/containerd v1.5.5-ids + // Pin gPRC-related dependencies as like containerd v1.5.x. github.com/gogo/googleapis => github.com/gogo/googleapis v1.3.2 github.com/golang/protobuf => github.com/golang/protobuf v1.3.5 diff --git a/go.sum b/go.sum index 312c9bf41..9b8ec1c61 100644 --- a/go.sum +++ b/go.sum @@ -22,9 +22,7 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= @@ -37,26 +35,15 @@ github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBp github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.5.0 h1:Elr9Wn+sGKPlkaBvwu4mTrxtmOp3F3yV9qhaHbXGjwU= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= -github.com/Microsoft/hcsshim v0.8.23 h1:47MSwtKGXet80aIn+7h4YI6fwPmwIghAnsx2aOUrG2M= -github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= -github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= -github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= +github.com/Microsoft/hcsshim v0.8.18 h1:cYnKADiM1869gvBpos3YCteeT6sZLB48lB5dmMMs8Tg= +github.com/Microsoft/hcsshim v0.8.18/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -64,7 +51,6 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/StackExchange/wmi v0.0.0-20181212234831-e0a55b97c705 h1:UUppSQnhf4Yc6xGxSkoQpPhb7RVzuv5Nb1mwJ5VId9s= github.com/StackExchange/wmi v0.0.0-20181212234831-e0a55b97c705/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= @@ -80,131 +66,61 @@ github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:l github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY= github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/awslabs/tc-redirect-tap v0.0.0-20200708224642-a0300978797d h1:AZYARHUEwaWIITYIuBxUoastJ1t+aHom/6ZwEhfZzwo= github.com/awslabs/tc-redirect-tap v0.0.0-20200708224642-a0300978797d/go.mod h1:kQGbgU5sye2xV5J0ruPiscqz3Cj30VtoWRrhBeIo7dM= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bits-and-blooms/bitset v1.2.1 h1:M+/hrU9xlMp7t4TyTDQW97d3tRPVuKFC6zBEK16QnXY= github.com/bits-and-blooms/bitset v1.2.1/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.6.2 h1:iHsfF/t4aW4heW2YKfeHrVPGdtYTL4C4KocpM8KTSnI= github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= -github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= -github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= -github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.0.1 h1:iJnMvco9XGvKUvNQkv88bE4uJXxRQH18efbKo9w5vHQ= github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= github.com/containerd/console v1.0.2 h1:Pi6D+aZXM+oUw1czuKgH5IJ+y0jhYcwBJfx5/Ghn9dE= github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= -github.com/containerd/containerd v1.5.8 h1:NmkCC1/QxyZFBny8JogwLpOy2f+VEbO/f6bV2Mqtwuw= -github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= github.com/containerd/continuity v0.2.0 h1:j/9Wnn+hrEWjLvHuIxUU1YI5JjEjVlT2AA68cse9rwY= github.com/containerd/continuity v0.2.0/go.mod h1:wCYX+dRqZdImhGucXOqTQn05AhX6EUDaGEMUzTFFpLg= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20191213151349-ff969a566b00/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU= github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= github.com/containerd/go-cni v1.0.2 h1:YbJAhpTevL2v6u8JC1NhCYRwf+3Vzxcc5vGnYoJ7VeE= github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= github.com/containerd/go-runc v1.0.0 h1:oU+lLv1ULm5taqgV/CJivypVODI4SUz1znWjv3nNYS0= github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= -github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= -github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= -github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= -github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= -github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= -github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= -github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= @@ -214,8 +130,6 @@ github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHV github.com/containernetworking/plugins v0.9.0/go.mod h1:dbWv4dI0QrBGuVgj+TuVQ6wJRZVOhrCQj91YyC92sxg= github.com/containernetworking/plugins v0.9.1 h1:FD1tADPls2EEi3flPc2OegIY1M9pUa9r2Quag7HMLV8= github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= -github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= -github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -224,11 +138,9 @@ github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmeka github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -247,28 +159,21 @@ github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjI github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= -github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/ease-lab/containerd v1.5.5-ids h1:lxkfLF1hzXEC1q+BNHNi4W9aja0xHp3rg+EOe+04YgU= +github.com/ease-lab/containerd v1.5.5-ids/go.mod h1:oSTh0QpT1w6jYcGmbiSbxv9OSQYaa88mPyWIuU79zyo= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= @@ -284,8 +189,6 @@ github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= @@ -293,7 +196,6 @@ github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -399,10 +301,8 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c h1:RBUpb2b14UnmRHNd2uHz20ZHLDK+SW5Us/vWF5IHRaY= github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e h1:BWhy2j3IXJhjCbC68FptL43tDKIq8FladmaTs3Xs7Z8= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -412,8 +312,6 @@ github.com/gogo/googleapis v1.3.2 h1:kX1es4djPJrsDhY7aZKJy7aZasdcB5oSOEphMjSB53c github.com/gogo/googleapis v1.3.2/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -441,7 +339,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -465,9 +362,6 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -478,10 +372,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= @@ -491,15 +383,10 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -511,7 +398,6 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= @@ -520,7 +406,6 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= @@ -549,7 +434,6 @@ github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -567,10 +451,8 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg= github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/mountinfo v0.4.1 h1:1O+1cHA1aujwEwwVMa2Xm2l+gIpUHyd3+D+d7LZh1kM= github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= @@ -585,7 +467,6 @@ github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8m github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= @@ -595,7 +476,6 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= @@ -606,33 +486,18 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= +github.com/opencontainers/runc v1.0.1/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= github.com/opencontainers/runc v1.0.2 h1:opHZMaswlyxz1OuGpBE53Dwe4/xF7EZTY0A2L/FpCOg= github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20210910115017-0d6cc581aeea h1:WmF5mV2OwWlHap/Ol8Z+iLZVlvLJrG7PzO/j8vwSLz8= github.com/opencontainers/runtime-spec v1.0.3-0.20210910115017-0d6cc581aeea/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opencontainers/selinux v1.8.5 h1:OkT6bMHOQ1JQQO4ihjQ49sj0+wciDcjziSVTRn8VeTA= github.com/opencontainers/selinux v1.8.5/go.mod h1:HTvjPFoGMbpQsG886e3lQwnsRWtE4TC1OF3OUvG9FAo= @@ -645,41 +510,34 @@ github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNC github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= @@ -701,7 +559,6 @@ github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+D github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -712,8 +569,6 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic github.com/sirupsen/logrus v1.8.0/go.mod h1:4GuYW9TZmE769R5STWrRakJc4UqQ3+QQ95fyz7ENv1A= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/sparrc/go-ping v0.0.0-20190613174326-4e5b6552494c h1:gqEdF4VwBu3lTKGHS9rXE9x1/pEaSwCXRLOZRF6qtlw= @@ -732,19 +587,15 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= -github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= @@ -754,7 +605,6 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= @@ -768,22 +618,14 @@ github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmF github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae h1:4hwBBUfQCFe3Cym0ZtKyq7L16eZUtYKs+BaHDN6mAns= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= @@ -802,7 +644,6 @@ go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -812,12 +653,10 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -865,13 +704,11 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -880,7 +717,6 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -900,7 +736,6 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= @@ -919,25 +754,19 @@ golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -956,9 +785,7 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -967,7 +794,6 @@ golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -997,7 +823,6 @@ golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1037,7 +862,6 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1052,7 +876,6 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63 h1:YzfoEYWbODU5Fbt37+h7X16BWQbad7Q4S6gclTKFXM8= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= @@ -1064,7 +887,6 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= @@ -1077,7 +899,6 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -1105,35 +926,20 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= -k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= diff --git a/proto/events.pb.go b/proto/events.pb.go index 95486da1f..a191bfd61 100644 --- a/proto/events.pb.go +++ b/proto/events.pb.go @@ -21,7 +21,7 @@ var _ = math.Inf const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type VMStart struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -59,7 +59,7 @@ func (m *VMStart) GetVMID() string { } type VMStop struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -104,11 +104,11 @@ func init() { func init() { proto.RegisterFile("events.proto", fileDescriptor_8f22242cb04491f9) } var fileDescriptor_8f22242cb04491f9 = []byte{ - // 84 bytes of a gzipped FileDescriptorProto + // 81 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x49, 0x2d, 0x4b, 0xcd, 0x2b, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x57, 0x92, 0xe5, 0x62, 0x0f, 0xf3, 0x0d, 0x2e, 0x49, 0x2c, 0x2a, 0x11, 0x12, 0xe2, 0x62, 0x09, 0xf3, 0xf5, 0x74, 0x91, 0x60, 0x54, 0x60, 0xd4, - 0xe0, 0x0c, 0x62, 0x29, 0xf3, 0xf5, 0x74, 0x51, 0x92, 0xe1, 0x62, 0x03, 0x49, 0xe7, 0x17, 0x60, - 0x93, 0x4d, 0x62, 0x03, 0x9b, 0x61, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x8a, 0x85, 0x02, - 0x53, 0x00, 0x00, 0x00, + 0xe0, 0x0c, 0x02, 0xb3, 0x95, 0x64, 0xb8, 0xd8, 0x40, 0xd2, 0xf9, 0x05, 0xd8, 0x64, 0x93, 0xd8, + 0xc0, 0x66, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x83, 0xd8, 0x3c, 0x53, 0x00, 0x00, + 0x00, } diff --git a/proto/firecracker.pb.go b/proto/firecracker.pb.go index 935ea59ba..839d4f21a 100644 --- a/proto/firecracker.pb.go +++ b/proto/firecracker.pb.go @@ -52,28 +52,30 @@ func (DriveExposePolicy) EnumDescriptor() ([]byte, []int) { // CreateVMRequest specifies creation parameters for a new FC instance type CreateVMRequest struct { // VM identifier to assign - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` // Specifies the machine configuration for the VM - MachineCfg *FirecrackerMachineConfiguration `protobuf:"bytes,2,opt,name=MachineCfg,json=machineCfg,proto3" json:"MachineCfg,omitempty"` + MachineCfg *FirecrackerMachineConfiguration `protobuf:"bytes,2,opt,name=MachineCfg,proto3" json:"MachineCfg,omitempty"` // Specifies the file path where the kernel image is located - KernelImagePath string `protobuf:"bytes,3,opt,name=KernelImagePath,json=kernelImagePath,proto3" json:"KernelImagePath,omitempty"` + KernelImagePath string `protobuf:"bytes,3,opt,name=KernelImagePath,proto3" json:"KernelImagePath,omitempty"` // Specifies the commandline arguments that should be passed to the kernel - KernelArgs string `protobuf:"bytes,4,opt,name=KernelArgs,json=kernelArgs,proto3" json:"KernelArgs,omitempty"` + KernelArgs string `protobuf:"bytes,4,opt,name=KernelArgs,proto3" json:"KernelArgs,omitempty"` // Specifies drive containing the rootfs of the VM - RootDrive *FirecrackerRootDrive `protobuf:"bytes,5,opt,name=RootDrive,json=rootDrive,proto3" json:"RootDrive,omitempty"` + RootDrive *FirecrackerRootDrive `protobuf:"bytes,5,opt,name=RootDrive,proto3" json:"RootDrive,omitempty"` // Specifies additional drives whose contents will be mounted inside the VM on boot. - DriveMounts []*FirecrackerDriveMount `protobuf:"bytes,6,rep,name=DriveMounts,json=driveMounts,proto3" json:"DriveMounts,omitempty"` + DriveMounts []*FirecrackerDriveMount `protobuf:"bytes,6,rep,name=DriveMounts,proto3" json:"DriveMounts,omitempty"` // Specifies the networking configuration for a VM - NetworkInterfaces []*FirecrackerNetworkInterface `protobuf:"bytes,7,rep,name=NetworkInterfaces,json=networkInterfaces,proto3" json:"NetworkInterfaces,omitempty"` + NetworkInterfaces []*FirecrackerNetworkInterface `protobuf:"bytes,7,rep,name=NetworkInterfaces,proto3" json:"NetworkInterfaces,omitempty"` // The number of dummy drives to reserve in advance before running FC instance. - ContainerCount int32 `protobuf:"varint,8,opt,name=ContainerCount,json=containerCount,proto3" json:"ContainerCount,omitempty"` + ContainerCount int32 `protobuf:"varint,8,opt,name=ContainerCount,proto3" json:"ContainerCount,omitempty"` // Whether the VM should exit after all tasks running in it have been deleted. - ExitAfterAllTasksDeleted bool `protobuf:"varint,9,opt,name=ExitAfterAllTasksDeleted,json=exitAfterAllTasksDeleted,proto3" json:"ExitAfterAllTasksDeleted,omitempty"` - JailerConfig *JailerConfig `protobuf:"bytes,10,opt,name=JailerConfig,json=jailerConfig,proto3" json:"JailerConfig,omitempty"` - TimeoutSeconds uint32 `protobuf:"varint,11,opt,name=TimeoutSeconds,json=timeoutSeconds,proto3" json:"TimeoutSeconds,omitempty"` - LogFifoPath string `protobuf:"bytes,12,opt,name=LogFifoPath,json=logFifoPath,proto3" json:"LogFifoPath,omitempty"` - MetricsFifoPath string `protobuf:"bytes,13,opt,name=MetricsFifoPath,json=metricsFifoPath,proto3" json:"MetricsFifoPath,omitempty"` - BalloonDevice *FirecrackerBalloonDevice `protobuf:"bytes,14,opt,name=BalloonDevice,json=balloonDevice,proto3" json:"BalloonDevice,omitempty"` + ExitAfterAllTasksDeleted bool `protobuf:"varint,9,opt,name=ExitAfterAllTasksDeleted,proto3" json:"ExitAfterAllTasksDeleted,omitempty"` + JailerConfig *JailerConfig `protobuf:"bytes,10,opt,name=JailerConfig,proto3" json:"JailerConfig,omitempty"` + TimeoutSeconds uint32 `protobuf:"varint,11,opt,name=TimeoutSeconds,proto3" json:"TimeoutSeconds,omitempty"` + LogFifoPath string `protobuf:"bytes,12,opt,name=LogFifoPath,proto3" json:"LogFifoPath,omitempty"` + MetricsFifoPath string `protobuf:"bytes,13,opt,name=MetricsFifoPath,proto3" json:"MetricsFifoPath,omitempty"` + BalloonDevice *FirecrackerBalloonDevice `protobuf:"bytes,14,opt,name=BalloonDevice,proto3" json:"BalloonDevice,omitempty"` + NetworkNamespace string `protobuf:"bytes,15,opt,name=NetworkNamespace,proto3" json:"NetworkNamespace,omitempty"` + OffloadEnabled bool `protobuf:"varint,16,opt,name=OffloadEnabled,proto3" json:"OffloadEnabled,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -201,14 +203,28 @@ func (m *CreateVMRequest) GetBalloonDevice() *FirecrackerBalloonDevice { return nil } +func (m *CreateVMRequest) GetNetworkNamespace() string { + if m != nil { + return m.NetworkNamespace + } + return "" +} + +func (m *CreateVMRequest) GetOffloadEnabled() bool { + if m != nil { + return m.OffloadEnabled + } + return false +} + type CreateVMResponse struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` - SocketPath string `protobuf:"bytes,2,opt,name=SocketPath,json=socketPath,proto3" json:"SocketPath,omitempty"` - LogFifoPath string `protobuf:"bytes,3,opt,name=LogFifoPath,json=logFifoPath,proto3" json:"LogFifoPath,omitempty"` - MetricsFifoPath string `protobuf:"bytes,4,opt,name=MetricsFifoPath,json=metricsFifoPath,proto3" json:"MetricsFifoPath,omitempty"` - CgroupPath string `protobuf:"bytes,5,opt,name=CgroupPath,json=cgroupPath,proto3" json:"CgroupPath,omitempty"` - UPFSockPath string `protobuf:"bytes,6,opt,name=UPFSockPath,json=uPFSockPath,proto3" json:"UPFSockPath,omitempty"` - FirecrackerPID string `protobuf:"bytes,7,opt,name=FirecrackerPID,json=firecrackerPID,proto3" json:"FirecrackerPID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` + SocketPath string `protobuf:"bytes,2,opt,name=SocketPath,proto3" json:"SocketPath,omitempty"` + LogFifoPath string `protobuf:"bytes,3,opt,name=LogFifoPath,proto3" json:"LogFifoPath,omitempty"` + MetricsFifoPath string `protobuf:"bytes,4,opt,name=MetricsFifoPath,proto3" json:"MetricsFifoPath,omitempty"` + CgroupPath string `protobuf:"bytes,5,opt,name=CgroupPath,proto3" json:"CgroupPath,omitempty"` + UPFSockPath string `protobuf:"bytes,6,opt,name=UPFSockPath,proto3" json:"UPFSockPath,omitempty"` + FirecrackerPID string `protobuf:"bytes,7,opt,name=FirecrackerPID,proto3" json:"FirecrackerPID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -288,7 +304,7 @@ func (m *CreateVMResponse) GetFirecrackerPID() string { } type PauseVMRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -326,7 +342,7 @@ func (m *PauseVMRequest) GetVMID() string { } type ResumeVMRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -364,8 +380,8 @@ func (m *ResumeVMRequest) GetVMID() string { } type StopVMRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` - TimeoutSeconds uint32 `protobuf:"varint,2,opt,name=TimeoutSeconds,json=timeoutSeconds,proto3" json:"TimeoutSeconds,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` + TimeoutSeconds uint32 `protobuf:"varint,2,opt,name=TimeoutSeconds,proto3" json:"TimeoutSeconds,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -410,7 +426,7 @@ func (m *StopVMRequest) GetTimeoutSeconds() uint32 { } type GetVMInfoRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -448,11 +464,11 @@ func (m *GetVMInfoRequest) GetVMID() string { } type GetVMInfoResponse struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` - SocketPath string `protobuf:"bytes,2,opt,name=SocketPath,json=socketPath,proto3" json:"SocketPath,omitempty"` - LogFifoPath string `protobuf:"bytes,3,opt,name=LogFifoPath,json=logFifoPath,proto3" json:"LogFifoPath,omitempty"` - MetricsFifoPath string `protobuf:"bytes,4,opt,name=MetricsFifoPath,json=metricsFifoPath,proto3" json:"MetricsFifoPath,omitempty"` - CgroupPath string `protobuf:"bytes,5,opt,name=CgroupPath,json=cgroupPath,proto3" json:"CgroupPath,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` + SocketPath string `protobuf:"bytes,2,opt,name=SocketPath,proto3" json:"SocketPath,omitempty"` + LogFifoPath string `protobuf:"bytes,3,opt,name=LogFifoPath,proto3" json:"LogFifoPath,omitempty"` + MetricsFifoPath string `protobuf:"bytes,4,opt,name=MetricsFifoPath,proto3" json:"MetricsFifoPath,omitempty"` + CgroupPath string `protobuf:"bytes,5,opt,name=CgroupPath,proto3" json:"CgroupPath,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -518,8 +534,8 @@ func (m *GetVMInfoResponse) GetCgroupPath() string { } type SetVMMetadataRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` - Metadata string `protobuf:"bytes,2,opt,name=Metadata,json=metadata,proto3" json:"Metadata,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` + Metadata string `protobuf:"bytes,2,opt,name=Metadata,proto3" json:"Metadata,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -564,8 +580,8 @@ func (m *SetVMMetadataRequest) GetMetadata() string { } type UpdateVMMetadataRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` - Metadata string `protobuf:"bytes,2,opt,name=Metadata,json=metadata,proto3" json:"Metadata,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` + Metadata string `protobuf:"bytes,2,opt,name=Metadata,proto3" json:"Metadata,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -610,7 +626,7 @@ func (m *UpdateVMMetadataRequest) GetMetadata() string { } type GetVMMetadataRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -648,7 +664,7 @@ func (m *GetVMMetadataRequest) GetVMID() string { } type GetVMMetadataResponse struct { - Metadata string `protobuf:"bytes,1,opt,name=Metadata,json=metadata,proto3" json:"Metadata,omitempty"` + Metadata string `protobuf:"bytes,1,opt,name=Metadata,proto3" json:"Metadata,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -686,9 +702,10 @@ func (m *GetVMMetadataResponse) GetMetadata() string { } type CreateSnapshotRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` - SnapshotFilePath string `protobuf:"bytes,2,opt,name=SnapshotFilePath,json=snapshotFilePath,proto3" json:"SnapshotFilePath,omitempty"` - MemFilePath string `protobuf:"bytes,3,opt,name=MemFilePath,json=memFilePath,proto3" json:"MemFilePath,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` + SnapshotFilePath string `protobuf:"bytes,2,opt,name=SnapshotFilePath,proto3" json:"SnapshotFilePath,omitempty"` + MemFilePath string `protobuf:"bytes,3,opt,name=MemFilePath,proto3" json:"MemFilePath,omitempty"` + SnapshotType string `protobuf:"bytes,4,opt,name=SnapshotType,proto3" json:"SnapshotType,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -739,11 +756,21 @@ func (m *CreateSnapshotRequest) GetMemFilePath() string { return "" } +func (m *CreateSnapshotRequest) GetSnapshotType() string { + if m != nil { + return m.SnapshotType + } + return "" +} + type LoadSnapshotRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` - SnapshotFilePath string `protobuf:"bytes,2,opt,name=SnapshotFilePath,json=snapshotFilePath,proto3" json:"SnapshotFilePath,omitempty"` - MemFilePath string `protobuf:"bytes,3,opt,name=MemFilePath,json=memFilePath,proto3" json:"MemFilePath,omitempty"` - EnableUserPF bool `protobuf:"varint,4,opt,name=EnableUserPF,json=enableUserPF,proto3" json:"EnableUserPF,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` + SnapshotFilePath string `protobuf:"bytes,2,opt,name=SnapshotFilePath,proto3" json:"SnapshotFilePath,omitempty"` + MemFilePath string `protobuf:"bytes,3,opt,name=MemFilePath,proto3" json:"MemFilePath,omitempty"` + EnableUserPF bool `protobuf:"varint,4,opt,name=EnableUserPF,proto3" json:"EnableUserPF,omitempty"` + NetworkNamespace string `protobuf:"bytes,5,opt,name=NetworkNamespace,proto3" json:"NetworkNamespace,omitempty"` + NewSnapshotPath string `protobuf:"bytes,6,opt,name=NewSnapshotPath,proto3" json:"NewSnapshotPath,omitempty"` + Offloaded bool `protobuf:"varint,7,opt,name=Offloaded,proto3" json:"Offloaded,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -801,8 +828,29 @@ func (m *LoadSnapshotRequest) GetEnableUserPF() bool { return false } +func (m *LoadSnapshotRequest) GetNetworkNamespace() string { + if m != nil { + return m.NetworkNamespace + } + return "" +} + +func (m *LoadSnapshotRequest) GetNewSnapshotPath() string { + if m != nil { + return m.NewSnapshotPath + } + return "" +} + +func (m *LoadSnapshotRequest) GetOffloaded() bool { + if m != nil { + return m.Offloaded + } + return false +} + type LoadResponse struct { - FirecrackerPID string `protobuf:"bytes,1,opt,name=FirecrackerPID,json=firecrackerPID,proto3" json:"FirecrackerPID,omitempty"` + FirecrackerPID string `protobuf:"bytes,1,opt,name=FirecrackerPID,proto3" json:"FirecrackerPID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -840,7 +888,7 @@ func (m *LoadResponse) GetFirecrackerPID() string { } type OffloadRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -878,7 +926,7 @@ func (m *OffloadRequest) GetVMID() string { } type JailerConfig struct { - NetNS string `protobuf:"bytes,1,opt,name=NetNS,json=netNS,proto3" json:"NetNS,omitempty"` + NetNS string `protobuf:"bytes,1,opt,name=NetNS,proto3" json:"NetNS,omitempty"` // List of the physical numbers of the CPUs on which processes in that // cpuset are allowed to execute. See List Format below for a description // of the format of cpus. @@ -889,7 +937,7 @@ type JailerConfig struct { // // This is formatted as specified in the cpuset man page under "List Format" // http://man7.org/linux/man-pages/man7/cpuset.7.html - CPUs string `protobuf:"bytes,2,opt,name=CPUs,json=cPUs,proto3" json:"CPUs,omitempty"` + CPUs string `protobuf:"bytes,2,opt,name=CPUs,proto3" json:"CPUs,omitempty"` // List of memory nodes on which processes in this cpuset are allowed to // allocate memory. See List Format below for a description of the format // of mems. @@ -897,17 +945,17 @@ type JailerConfig struct { // // This is formatted as specified in the cpuset man page under "List Format" // http://man7.org/linux/man-pages/man7/cpuset.7.html - Mems string `protobuf:"bytes,3,opt,name=Mems,json=mems,proto3" json:"Mems,omitempty"` - UID uint32 `protobuf:"varint,4,opt,name=UID,json=uID,proto3" json:"UID,omitempty"` - GID uint32 `protobuf:"varint,5,opt,name=GID,json=gID,proto3" json:"GID,omitempty"` + Mems string `protobuf:"bytes,3,opt,name=Mems,proto3" json:"Mems,omitempty"` + UID uint32 `protobuf:"varint,4,opt,name=UID,proto3" json:"UID,omitempty"` + GID uint32 `protobuf:"varint,5,opt,name=GID,proto3" json:"GID,omitempty"` // CgroupPath is used to dictate where the cgroup should be located // relative to the cgroup directory which is // /sys/fs/cgroup/cpu// // if no value was provided, then /firecracker-containerd will be used as // the default value - CgroupPath string `protobuf:"bytes,6,opt,name=CgroupPath,json=cgroupPath,proto3" json:"CgroupPath,omitempty"` + CgroupPath string `protobuf:"bytes,6,opt,name=CgroupPath,proto3" json:"CgroupPath,omitempty"` // DriveExposePolicy is used to configure the method to expose drive files. - DriveExposePolicy DriveExposePolicy `protobuf:"varint,7,opt,name=DriveExposePolicy,json=driveExposePolicy,proto3,enum=DriveExposePolicy" json:"DriveExposePolicy,omitempty"` + DriveExposePolicy DriveExposePolicy `protobuf:"varint,7,opt,name=DriveExposePolicy,proto3,enum=DriveExposePolicy" json:"DriveExposePolicy,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -987,8 +1035,8 @@ func (m *JailerConfig) GetDriveExposePolicy() DriveExposePolicy { } type UpdateBalloonRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` - AmountMib int64 `protobuf:"varint,2,opt,name=AmountMib,json=amountMib,proto3" json:"AmountMib,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` + AmountMib int64 `protobuf:"varint,2,opt,name=AmountMib,proto3" json:"AmountMib,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1033,7 +1081,7 @@ func (m *UpdateBalloonRequest) GetAmountMib() int64 { } type GetBalloonConfigRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1071,7 +1119,7 @@ func (m *GetBalloonConfigRequest) GetVMID() string { } type GetBalloonConfigResponse struct { - BalloonConfig *FirecrackerBalloonDevice `protobuf:"bytes,1,opt,name=BalloonConfig,json=balloonConfig,proto3" json:"BalloonConfig,omitempty"` + BalloonConfig *FirecrackerBalloonDevice `protobuf:"bytes,1,opt,name=BalloonConfig,proto3" json:"BalloonConfig,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1109,7 +1157,7 @@ func (m *GetBalloonConfigResponse) GetBalloonConfig() *FirecrackerBalloonDevice } type GetBalloonStatsRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1148,34 +1196,34 @@ func (m *GetBalloonStatsRequest) GetVMID() string { type GetBalloonStatsResponse struct { // Actual amount of memory (in MiB) the device is holding. - ActualMib int64 `protobuf:"varint,1,opt,name=ActualMib,json=actualMib,proto3" json:"ActualMib,omitempty"` + ActualMib int64 `protobuf:"varint,1,opt,name=ActualMib,proto3" json:"ActualMib,omitempty"` // Actual number of pages the device is holding. - ActualPages int64 `protobuf:"varint,2,opt,name=ActualPages,json=actualPages,proto3" json:"ActualPages,omitempty"` + ActualPages int64 `protobuf:"varint,2,opt,name=ActualPages,proto3" json:"ActualPages,omitempty"` // An estimate of how much memory is available (in bytes) for starting new applications, without pushing the system to swap. - AvailableMemory int64 `protobuf:"varint,3,opt,name=AvailableMemory,json=availableMemory,proto3" json:"AvailableMemory,omitempty"` + AvailableMemory int64 `protobuf:"varint,3,opt,name=AvailableMemory,proto3" json:"AvailableMemory,omitempty"` // The amount of memory, in bytes, that can be quickly reclaimed without additional I/O. // Typically these pages are used for caching files from disk. - DiskCaches int64 `protobuf:"varint,4,opt,name=DiskCaches,json=diskCaches,proto3" json:"DiskCaches,omitempty"` + DiskCaches int64 `protobuf:"varint,4,opt,name=DiskCaches,proto3" json:"DiskCaches,omitempty"` // The amount of memory not being used for any purpose (in bytes). - FreeMemory int64 `protobuf:"varint,5,opt,name=FreeMemory,json=freeMemory,proto3" json:"FreeMemory,omitempty"` + FreeMemory int64 `protobuf:"varint,5,opt,name=FreeMemory,proto3" json:"FreeMemory,omitempty"` // The number of successful hugetlb page allocations in the guest. - HugetlbAllocations int64 `protobuf:"varint,6,opt,name=HugetlbAllocations,json=hugetlbAllocations,proto3" json:"HugetlbAllocations,omitempty"` + HugetlbAllocations int64 `protobuf:"varint,6,opt,name=HugetlbAllocations,proto3" json:"HugetlbAllocations,omitempty"` // The number of failed hugetlb page allocations in the guest. - HugetlbFailures int64 `protobuf:"varint,7,opt,name=HugetlbFailures,json=hugetlbFailures,proto3" json:"HugetlbFailures,omitempty"` + HugetlbFailures int64 `protobuf:"varint,7,opt,name=HugetlbFailures,proto3" json:"HugetlbFailures,omitempty"` // The number of major page faults that have occurred. - MajorFaults int64 `protobuf:"varint,8,opt,name=MajorFaults,json=majorFaults,proto3" json:"MajorFaults,omitempty"` + MajorFaults int64 `protobuf:"varint,8,opt,name=MajorFaults,proto3" json:"MajorFaults,omitempty"` // The number of minor page faults that have occurred. - MinorFaults int64 `protobuf:"varint,9,opt,name=MinorFaults,json=minorFaults,proto3" json:"MinorFaults,omitempty"` + MinorFaults int64 `protobuf:"varint,9,opt,name=MinorFaults,proto3" json:"MinorFaults,omitempty"` // The amount of memory that has been swapped in (in bytes). - SwapIn int64 `protobuf:"varint,10,opt,name=SwapIn,json=swapIn,proto3" json:"SwapIn,omitempty"` + SwapIn int64 `protobuf:"varint,10,opt,name=SwapIn,proto3" json:"SwapIn,omitempty"` // The amount of memory that has been swapped out to disk (in bytes). - SwapOut int64 `protobuf:"varint,11,opt,name=SwapOut,json=swapOut,proto3" json:"SwapOut,omitempty"` + SwapOut int64 `protobuf:"varint,11,opt,name=SwapOut,proto3" json:"SwapOut,omitempty"` // Target amount of memory (in MiB) the device aims to hold. - TargetMib int64 `protobuf:"varint,12,opt,name=TargetMib,json=targetMib,proto3" json:"TargetMib,omitempty"` + TargetMib int64 `protobuf:"varint,12,opt,name=TargetMib,proto3" json:"TargetMib,omitempty"` // Target number of pages the device aims to hold. - TargetPages int64 `protobuf:"varint,13,opt,name=TargetPages,json=targetPages,proto3" json:"TargetPages,omitempty"` + TargetPages int64 `protobuf:"varint,13,opt,name=TargetPages,proto3" json:"TargetPages,omitempty"` // The total amount of memory available (in bytes). - TotalMemory int64 `protobuf:"varint,14,opt,name=TotalMemory,json=totalMemory,proto3" json:"TotalMemory,omitempty"` + TotalMemory int64 `protobuf:"varint,14,opt,name=TotalMemory,proto3" json:"TotalMemory,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1304,8 +1352,8 @@ func (m *GetBalloonStatsResponse) GetTotalMemory() int64 { } type UpdateBalloonStatsRequest struct { - VMID string `protobuf:"bytes,1,opt,name=VMID,json=vMID,proto3" json:"VMID,omitempty"` - StatsPollingIntervals int64 `protobuf:"varint,2,opt,name=StatsPollingIntervals,json=statsPollingIntervals,proto3" json:"StatsPollingIntervals,omitempty"` + VMID string `protobuf:"bytes,1,opt,name=VMID,proto3" json:"VMID,omitempty"` + StatsPollingIntervals int64 `protobuf:"varint,2,opt,name=StatsPollingIntervals,proto3" json:"StatsPollingIntervals,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1378,77 +1426,78 @@ func init() { func init() { proto.RegisterFile("firecracker.proto", fileDescriptor_a73317e9fb8da571) } var fileDescriptor_a73317e9fb8da571 = []byte{ - // 1150 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0xdd, 0x8e, 0xda, 0x46, - 0x1b, 0xfe, 0x1c, 0xc3, 0xee, 0xf2, 0xf2, 0xb3, 0xec, 0x7c, 0xbb, 0x89, 0x13, 0x45, 0x11, 0xb2, - 0xda, 0x14, 0x45, 0xed, 0x4a, 0x4d, 0xaa, 0xaa, 0xea, 0x49, 0x43, 0x20, 0x6c, 0x9c, 0xc4, 0x1b, - 0x34, 0x84, 0x48, 0x6d, 0x8f, 0x66, 0xcd, 0x0b, 0x38, 0xd8, 0x1e, 0xea, 0x19, 0x6f, 0xb2, 0xd7, - 0xd2, 0xcb, 0xe8, 0x49, 0xaf, 0xa3, 0xf7, 0xd2, 0xb3, 0x1e, 0x54, 0x33, 0x36, 0xd8, 0xc0, 0x86, - 0x44, 0xaa, 0x54, 0xa9, 0x47, 0x78, 0x9e, 0xf7, 0x99, 0x79, 0xff, 0x9e, 0xf9, 0x01, 0x8e, 0x26, - 0x7e, 0x8c, 0x5e, 0xcc, 0xbc, 0x39, 0xc6, 0xa7, 0x8b, 0x98, 0x4b, 0x7e, 0xa7, 0x2a, 0xaf, 0x16, - 0x28, 0xd2, 0x81, 0xfd, 0x7b, 0x19, 0x0e, 0xbb, 0x31, 0x32, 0x89, 0x6f, 0x5c, 0x8a, 0xbf, 0x24, - 0x28, 0x24, 0x21, 0x50, 0x7a, 0xe3, 0x3a, 0x3d, 0xcb, 0x68, 0x19, 0xed, 0x0a, 0x2d, 0x5d, 0xba, - 0x4e, 0x8f, 0x3c, 0x06, 0x70, 0x99, 0x37, 0xf3, 0x23, 0xec, 0x4e, 0xa6, 0xd6, 0x8d, 0x96, 0xd1, - 0xae, 0x3e, 0x6c, 0x9d, 0xf6, 0xf3, 0xc5, 0x97, 0x56, 0x1e, 0x4d, 0xfc, 0x69, 0x12, 0x33, 0xe9, - 0xf3, 0x88, 0x42, 0xb8, 0x9a, 0x43, 0xda, 0x70, 0xf8, 0x02, 0xe3, 0x08, 0x03, 0x27, 0x64, 0x53, - 0x1c, 0x30, 0x39, 0xb3, 0x4c, 0xed, 0xe0, 0x70, 0xbe, 0x0e, 0x93, 0x7b, 0x00, 0x29, 0xb3, 0x13, - 0x4f, 0x85, 0x55, 0xd2, 0x24, 0x98, 0xaf, 0x10, 0xf2, 0x08, 0x2a, 0x94, 0x73, 0xd9, 0x8b, 0xfd, - 0x4b, 0xb4, 0xca, 0x3a, 0x94, 0x93, 0x62, 0x28, 0x2b, 0x23, 0xad, 0xc4, 0xcb, 0x4f, 0xf2, 0x1d, - 0x54, 0xf5, 0x87, 0xcb, 0x93, 0x48, 0x0a, 0x6b, 0xaf, 0x65, 0xb6, 0xab, 0x0f, 0x6f, 0x16, 0xa7, - 0xe5, 0x66, 0x5a, 0x1d, 0xe7, 0x54, 0xf2, 0x1c, 0x8e, 0xce, 0x51, 0xbe, 0xe3, 0xf1, 0xdc, 0x89, - 0x24, 0xc6, 0x13, 0xe6, 0xa1, 0xb0, 0xf6, 0xf5, 0xfc, 0xbb, 0xc5, 0xf9, 0x9b, 0x24, 0x7a, 0x14, - 0x6d, 0x4e, 0x23, 0xf7, 0xa1, 0xd1, 0xe5, 0x91, 0x64, 0x7e, 0x84, 0x71, 0x57, 0x2d, 0x6f, 0x1d, - 0xb4, 0x8c, 0x76, 0x99, 0x36, 0xbc, 0x35, 0x94, 0x7c, 0x0f, 0xd6, 0xd3, 0xf7, 0xbe, 0xec, 0x4c, - 0x24, 0xc6, 0x9d, 0x20, 0x78, 0xcd, 0xc4, 0x5c, 0xf4, 0x30, 0x40, 0x89, 0x63, 0xab, 0xd2, 0x32, - 0xda, 0x07, 0xd4, 0xc2, 0x0f, 0xd8, 0xc9, 0xd7, 0x50, 0x7b, 0xce, 0xfc, 0x40, 0x2d, 0xa5, 0x7a, - 0x61, 0x81, 0xae, 0x50, 0xfd, 0xb4, 0x08, 0xd2, 0xda, 0xdb, 0xc2, 0x48, 0x85, 0xf5, 0xda, 0x0f, - 0x91, 0x27, 0x72, 0x88, 0x1e, 0x8f, 0xc6, 0xc2, 0xaa, 0xb6, 0x8c, 0x76, 0x9d, 0x36, 0xe4, 0x1a, - 0x4a, 0x5a, 0x50, 0x7d, 0xc9, 0xa7, 0x7d, 0x7f, 0xc2, 0x75, 0xff, 0x6a, 0xba, 0x35, 0xd5, 0x20, - 0x87, 0x54, 0x97, 0x5d, 0x94, 0xb1, 0xef, 0x89, 0x15, 0xab, 0x9e, 0x76, 0x39, 0x5c, 0x87, 0xc9, - 0x0f, 0x50, 0x7f, 0xc2, 0x82, 0x80, 0xf3, 0xa8, 0x87, 0x97, 0xbe, 0x87, 0x56, 0x43, 0xc7, 0x79, - 0xbb, 0x58, 0xd2, 0x35, 0x02, 0xad, 0x5f, 0x14, 0x87, 0xf6, 0x5f, 0x06, 0x34, 0x73, 0xe9, 0x8a, - 0x05, 0x8f, 0x04, 0x5e, 0xab, 0xdd, 0x7b, 0x00, 0x43, 0xee, 0xcd, 0x51, 0xea, 0x70, 0x6e, 0xa4, - 0x7a, 0x12, 0x2b, 0x64, 0x33, 0x2b, 0xf3, 0x93, 0xb2, 0x2a, 0x5d, 0x9f, 0xd5, 0x3d, 0x80, 0xee, - 0x34, 0xe6, 0xc9, 0x42, 0x93, 0xca, 0xa9, 0x2f, 0x6f, 0x85, 0x28, 0x5f, 0xa3, 0x41, 0x5f, 0x85, - 0xa3, 0x09, 0x7b, 0xa9, 0xaf, 0x24, 0x87, 0x54, 0x2f, 0x0a, 0x15, 0x18, 0x38, 0x3d, 0x6b, 0x5f, - 0x93, 0x1a, 0x93, 0x35, 0xd4, 0xfe, 0x0c, 0x1a, 0x03, 0x96, 0x88, 0xdd, 0xfb, 0xd6, 0xfe, 0x1c, - 0x0e, 0x29, 0x8a, 0x24, 0xfc, 0x08, 0xed, 0x05, 0xd4, 0x87, 0x92, 0x2f, 0x76, 0x9f, 0x01, 0xdb, - 0x2a, 0xb9, 0x71, 0x9d, 0x4a, 0xec, 0xfb, 0xd0, 0x3c, 0x43, 0xf9, 0xc6, 0x75, 0xa2, 0x09, 0xdf, - 0xe5, 0xf4, 0x37, 0x03, 0x8e, 0x0a, 0xc4, 0xff, 0x46, 0x07, 0xed, 0x3e, 0x1c, 0x0f, 0x55, 0xd0, - 0x2e, 0x4a, 0x36, 0x66, 0x92, 0xed, 0xaa, 0xd8, 0x1d, 0x38, 0x58, 0xd2, 0xb2, 0xa8, 0x0f, 0xc2, - 0x6c, 0x6c, 0x3b, 0x70, 0x6b, 0xb4, 0x18, 0x6b, 0xf5, 0xfe, 0xd3, 0xa5, 0x1e, 0xc0, 0xf1, 0xd9, - 0x27, 0x86, 0x64, 0x3f, 0x82, 0x93, 0x0d, 0x6e, 0x56, 0xf7, 0xa2, 0x03, 0x63, 0xc3, 0xc1, 0x15, - 0x9c, 0xa4, 0x3b, 0x6d, 0x18, 0xb1, 0x85, 0x98, 0x71, 0xb9, 0x2b, 0xd2, 0x07, 0xd0, 0x5c, 0xd2, - 0xfa, 0x7e, 0x80, 0x85, 0x96, 0x35, 0xc5, 0x06, 0xae, 0x1a, 0xe7, 0x62, 0xb8, 0xa2, 0x65, 0x8d, - 0x0b, 0x73, 0xc8, 0xfe, 0xd5, 0x80, 0xff, 0xbf, 0xe4, 0x6c, 0xfc, 0xaf, 0x7b, 0x26, 0x36, 0xd4, - 0x9e, 0x46, 0xec, 0x22, 0xc0, 0x91, 0xc0, 0x78, 0xd0, 0xd7, 0x7a, 0x39, 0xa0, 0x35, 0x2c, 0x60, - 0xf6, 0xb7, 0x50, 0x53, 0xc1, 0xad, 0x8a, 0xb8, 0xbd, 0x79, 0x8d, 0x0f, 0x6d, 0xde, 0x57, 0x93, - 0x49, 0xa0, 0xa7, 0x7e, 0xb8, 0x57, 0x7f, 0x18, 0xeb, 0x47, 0x39, 0x39, 0x86, 0xf2, 0x39, 0xca, - 0xf3, 0x61, 0xc6, 0x2a, 0x47, 0x6a, 0xa0, 0xa6, 0x76, 0x07, 0x23, 0x91, 0xa5, 0x5a, 0xf2, 0x06, - 0x23, 0xa1, 0x30, 0x17, 0x43, 0x91, 0xe5, 0x55, 0x0a, 0x31, 0x14, 0xa4, 0x09, 0xe6, 0xc8, 0xe9, - 0xe9, 0x3c, 0xea, 0xd4, 0x4c, 0x9c, 0x9e, 0x42, 0xce, 0x9c, 0x9e, 0x16, 0x79, 0x9d, 0x9a, 0xd3, - 0x74, 0xa7, 0x15, 0xd4, 0xbf, 0xb7, 0x75, 0x7e, 0x3d, 0x86, 0x23, 0x7d, 0x4f, 0x3e, 0x7d, 0xbf, - 0xe0, 0x02, 0x07, 0x3c, 0xf0, 0xbd, 0x2b, 0x7d, 0x40, 0x35, 0x1e, 0x92, 0xd3, 0x2d, 0x0b, 0x3d, - 0x1a, 0x6f, 0x42, 0xf6, 0x33, 0x38, 0x4e, 0x75, 0x9f, 0x1d, 0xee, 0xbb, 0x1a, 0x7a, 0x17, 0x2a, - 0x9d, 0x50, 0x5d, 0x88, 0xae, 0x7f, 0xa1, 0xd3, 0x33, 0x69, 0x85, 0x2d, 0x01, 0xfb, 0x2b, 0xb8, - 0x75, 0x86, 0x32, 0x5b, 0x26, 0xbb, 0xd7, 0x76, 0x54, 0xf3, 0x67, 0xb0, 0xb6, 0xe9, 0x59, 0xdf, - 0xf2, 0xcb, 0x28, 0xbb, 0x34, 0x8d, 0x4f, 0xbd, 0x8c, 0x52, 0xbe, 0xfd, 0x25, 0xdc, 0xcc, 0x17, - 0x1f, 0x4a, 0x26, 0xc5, 0xae, 0x50, 0xfe, 0x34, 0x8b, 0xa1, 0x67, 0xf4, 0x2c, 0x14, 0x95, 0xb3, - 0x27, 0x13, 0x16, 0xa8, 0x9c, 0x8d, 0x2c, 0xe7, 0x25, 0xa0, 0x64, 0x9b, 0x5a, 0x07, 0x6c, 0x8a, - 0x22, 0xab, 0x49, 0x95, 0xe5, 0x90, 0x3a, 0xe9, 0x3a, 0x97, 0xcc, 0x0f, 0x94, 0x4a, 0x5d, 0x0c, - 0x79, 0x7c, 0xa5, 0x45, 0x60, 0xd2, 0x43, 0xb6, 0x0e, 0xab, 0x5e, 0xf7, 0x7c, 0x31, 0xef, 0x32, - 0x6f, 0x86, 0xe9, 0x3b, 0xcb, 0xa4, 0x30, 0x5e, 0x21, 0xca, 0xde, 0x8f, 0x71, 0xb9, 0x48, 0x39, - 0xb5, 0x4f, 0x56, 0x08, 0x39, 0x05, 0xf2, 0x2c, 0x99, 0xa2, 0x0c, 0x2e, 0x3a, 0x41, 0xc0, 0x3d, - 0xfd, 0xe4, 0x13, 0x5a, 0x33, 0x26, 0x25, 0xb3, 0x2d, 0x8b, 0x8a, 0x2c, 0xe3, 0xf7, 0x99, 0x1f, - 0x24, 0xb1, 0x7e, 0x46, 0xe9, 0xc8, 0x66, 0xeb, 0xb0, 0xde, 0x9c, 0xec, 0x2d, 0x8f, 0xfb, 0x2c, - 0x09, 0xa4, 0xd0, 0x6f, 0x24, 0x93, 0x56, 0xc3, 0x1c, 0xd2, 0x0c, 0x3f, 0x5a, 0x31, 0x2a, 0x19, - 0x23, 0x87, 0xc8, 0x4d, 0xd8, 0x1b, 0xbe, 0x63, 0x0b, 0x27, 0xd2, 0x0f, 0x20, 0x93, 0xee, 0x09, - 0x3d, 0x22, 0x16, 0xec, 0x2b, 0xfc, 0x55, 0x22, 0xf5, 0x23, 0xc7, 0xa4, 0xfb, 0x22, 0x1d, 0xaa, - 0xca, 0xbf, 0x66, 0xf1, 0x14, 0xb5, 0xda, 0x6a, 0x69, 0xe5, 0xe5, 0x12, 0x50, 0x1e, 0x53, 0x6b, - 0x5a, 0xf9, 0x7a, 0xea, 0x51, 0xe6, 0x90, 0x66, 0x70, 0xc9, 0x82, 0xac, 0x60, 0x8d, 0x8c, 0x91, - 0x43, 0x36, 0xc2, 0xed, 0x35, 0xed, 0x7f, 0x4c, 0x28, 0xe4, 0x1b, 0x38, 0xd1, 0x9c, 0x01, 0x0f, - 0x02, 0x3f, 0x9a, 0xea, 0x97, 0xe4, 0x25, 0x0b, 0x96, 0x8d, 0x3f, 0x11, 0xd7, 0x19, 0x1f, 0x7c, - 0x71, 0xcd, 0x26, 0x25, 0x07, 0x50, 0xea, 0xbe, 0x1a, 0xfc, 0xd8, 0xfc, 0x9f, 0xfa, 0x7a, 0xe2, - 0x9c, 0xf7, 0x9a, 0xc6, 0x93, 0xfd, 0x9f, 0xca, 0xfa, 0x6f, 0xc0, 0xc5, 0x9e, 0xfe, 0x79, 0xf4, - 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x48, 0x23, 0x18, 0xaf, 0x2f, 0x0c, 0x00, 0x00, + // 1162 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0xd1, 0x6e, 0x1a, 0x47, + 0x17, 0xfe, 0xd7, 0x6b, 0x30, 0x1c, 0x8c, 0x8d, 0xe7, 0xb7, 0x93, 0x4d, 0x14, 0x45, 0x68, 0xd5, + 0xa6, 0xc8, 0x6a, 0x2d, 0x35, 0xa9, 0xaa, 0xaa, 0x37, 0x0d, 0x81, 0xe0, 0x90, 0x04, 0x82, 0x06, + 0x3b, 0x52, 0xdb, 0xab, 0xf1, 0x72, 0xc0, 0x5b, 0x2f, 0x3b, 0x74, 0x67, 0xd6, 0x89, 0xdf, 0xa1, + 0x52, 0x9f, 0xa0, 0x4f, 0xd1, 0x37, 0xe9, 0xbb, 0xf4, 0xae, 0x17, 0xd5, 0xcc, 0x0e, 0xec, 0xb2, + 0x10, 0x62, 0xa9, 0x17, 0x55, 0xaf, 0x98, 0xf9, 0xe6, 0x9b, 0x39, 0x67, 0xbe, 0x73, 0xe6, 0xec, + 0x01, 0x0e, 0xc6, 0x7e, 0x84, 0x5e, 0xc4, 0xbc, 0x2b, 0x8c, 0x4e, 0x66, 0x11, 0x97, 0xfc, 0x7e, + 0x45, 0xde, 0xcc, 0x50, 0x24, 0x13, 0xf7, 0x97, 0x22, 0xec, 0xb7, 0x22, 0x64, 0x12, 0xdf, 0xf6, + 0x28, 0xfe, 0x1c, 0xa3, 0x90, 0x84, 0xc0, 0xf6, 0xdb, 0x5e, 0xb7, 0xed, 0x58, 0x75, 0xab, 0x51, + 0xa6, 0x7a, 0x4c, 0x9e, 0x02, 0xf4, 0x98, 0x77, 0xe9, 0x87, 0xd8, 0x1a, 0x4f, 0x9c, 0xad, 0xba, + 0xd5, 0xa8, 0x3c, 0xae, 0x9f, 0x74, 0xd2, 0xc3, 0xe7, 0xab, 0x3c, 0x1c, 0xfb, 0x93, 0x38, 0x62, + 0xd2, 0xe7, 0x21, 0xcd, 0xec, 0x21, 0x0d, 0xd8, 0x7f, 0x85, 0x51, 0x88, 0x41, 0x77, 0xca, 0x26, + 0x38, 0x60, 0xf2, 0xd2, 0xb1, 0xb5, 0x81, 0x3c, 0x4c, 0x1e, 0x02, 0x24, 0x50, 0x33, 0x9a, 0x08, + 0x67, 0x5b, 0x93, 0x32, 0x08, 0x79, 0x02, 0x65, 0xca, 0xb9, 0x6c, 0x47, 0xfe, 0x35, 0x3a, 0x05, + 0xed, 0xca, 0x51, 0xd6, 0x95, 0xc5, 0x22, 0x4d, 0x79, 0xe4, 0x1b, 0xa8, 0xe8, 0x41, 0x8f, 0xc7, + 0xa1, 0x14, 0x4e, 0xb1, 0x6e, 0x37, 0x2a, 0x8f, 0xef, 0x64, 0xb7, 0xa5, 0xcb, 0x34, 0x4b, 0x25, + 0x2f, 0xe1, 0xa0, 0x8f, 0xf2, 0x1d, 0x8f, 0xae, 0xba, 0xa1, 0xc4, 0x68, 0xcc, 0x3c, 0x14, 0xce, + 0x8e, 0xde, 0xff, 0x20, 0xbb, 0x3f, 0x4f, 0xa2, 0xab, 0xdb, 0xc8, 0x23, 0xd8, 0x6b, 0xf1, 0x50, + 0x32, 0x3f, 0xc4, 0xa8, 0xa5, 0x8e, 0x77, 0x4a, 0x75, 0xab, 0x51, 0xa0, 0x39, 0x94, 0x7c, 0x0b, + 0xce, 0xf3, 0xf7, 0xbe, 0x6c, 0x8e, 0x25, 0x46, 0xcd, 0x20, 0x38, 0x63, 0xe2, 0x4a, 0xb4, 0x31, + 0x40, 0x89, 0x23, 0xa7, 0x5c, 0xb7, 0x1a, 0x25, 0xfa, 0xc1, 0x75, 0xf2, 0x25, 0xec, 0xbe, 0x64, + 0x7e, 0xa0, 0x8e, 0x52, 0xb1, 0x70, 0x40, 0x2b, 0x54, 0x3d, 0xc9, 0x82, 0x74, 0x89, 0xa2, 0xdc, + 0x3a, 0xf3, 0xa7, 0xc8, 0x63, 0x39, 0x44, 0x8f, 0x87, 0x23, 0xe1, 0x54, 0xea, 0x56, 0xa3, 0x4a, + 0x73, 0x28, 0xa9, 0x43, 0xe5, 0x35, 0x9f, 0x74, 0xfc, 0x31, 0xd7, 0xf1, 0xdb, 0xd5, 0xa1, 0xc9, + 0x42, 0x2a, 0xca, 0x3d, 0x94, 0x91, 0xef, 0x89, 0x05, 0xab, 0x9a, 0x44, 0x39, 0x07, 0x93, 0xef, + 0xa0, 0xfa, 0x8c, 0x05, 0x01, 0xe7, 0x61, 0x1b, 0xaf, 0x7d, 0x0f, 0x9d, 0x3d, 0xed, 0xe7, 0xbd, + 0xac, 0xa4, 0x4b, 0x04, 0xba, 0xcc, 0x27, 0xc7, 0x50, 0x33, 0x02, 0xf7, 0xd9, 0x14, 0xc5, 0x8c, + 0x79, 0xe8, 0xec, 0x6b, 0x5b, 0x2b, 0xb8, 0xba, 0xe0, 0x9b, 0xf1, 0x38, 0xe0, 0x6c, 0xf4, 0x3c, + 0x64, 0x17, 0x01, 0x8e, 0x9c, 0x9a, 0x56, 0x31, 0x87, 0xba, 0x7f, 0x59, 0x50, 0x4b, 0x9f, 0x83, + 0x98, 0xf1, 0x50, 0xe0, 0xda, 0xf7, 0xf0, 0x10, 0x60, 0xc8, 0xbd, 0x2b, 0x94, 0xfa, 0x8a, 0x5b, + 0x49, 0x8e, 0xa6, 0x48, 0x5e, 0x29, 0xfb, 0x56, 0x4a, 0x6d, 0xaf, 0x57, 0xea, 0x21, 0x40, 0x6b, + 0x12, 0xf1, 0x78, 0xa6, 0x49, 0x85, 0xc4, 0x56, 0x8a, 0x28, 0x5b, 0xe7, 0x83, 0x8e, 0x32, 0xae, + 0x09, 0xc5, 0xc4, 0x56, 0x06, 0x52, 0xd7, 0xcf, 0xa8, 0x3a, 0xe8, 0xb6, 0x9d, 0x1d, 0x4d, 0xca, + 0xa1, 0xee, 0x27, 0xb0, 0x37, 0x60, 0xb1, 0xd8, 0x5c, 0x0b, 0xdc, 0x4f, 0x61, 0x9f, 0xa2, 0x88, + 0xa7, 0x1f, 0xa1, 0xbd, 0x82, 0xea, 0x50, 0xf2, 0xd9, 0xe6, 0xba, 0xb2, 0x9a, 0x79, 0x5b, 0xeb, + 0x32, 0xcf, 0x7d, 0x04, 0xb5, 0x53, 0x94, 0x6f, 0x7b, 0xdd, 0x70, 0xcc, 0x37, 0x19, 0xfd, 0xdd, + 0x82, 0x83, 0x0c, 0xf1, 0xbf, 0x11, 0x41, 0xb7, 0x03, 0x87, 0x43, 0xe5, 0x74, 0x0f, 0x25, 0x1b, + 0x31, 0xc9, 0x36, 0x29, 0x76, 0x1f, 0x4a, 0x73, 0x9a, 0xf1, 0x7a, 0x31, 0x77, 0xbb, 0x70, 0xf7, + 0x7c, 0x36, 0xd2, 0xd9, 0xfb, 0x4f, 0x8f, 0x3a, 0x86, 0xc3, 0xd3, 0x5b, 0xba, 0xe4, 0x3e, 0x81, + 0xa3, 0x1c, 0xd7, 0xe8, 0x9e, 0x35, 0x60, 0xe5, 0x0c, 0xfc, 0x66, 0xc1, 0x51, 0xf2, 0xd4, 0x86, + 0x21, 0x9b, 0x89, 0x4b, 0x2e, 0x37, 0xb9, 0x7a, 0x0c, 0xb5, 0x39, 0xad, 0xe3, 0x07, 0x98, 0x89, + 0xd9, 0x0a, 0xae, 0x22, 0xd7, 0xc3, 0xe9, 0x82, 0x66, 0x22, 0x97, 0x81, 0x88, 0x0b, 0xbb, 0xf3, + 0x5d, 0x67, 0x37, 0x33, 0x34, 0x61, 0x5b, 0xc2, 0xdc, 0x5f, 0xb7, 0xe0, 0xff, 0xaf, 0x39, 0x1b, + 0xfd, 0x2b, 0xde, 0x25, 0xf5, 0xe8, 0x5c, 0x60, 0x34, 0xe8, 0x68, 0xef, 0x4a, 0x74, 0x09, 0x5b, + 0x5b, 0xfc, 0x0a, 0x1f, 0x28, 0x7e, 0x0d, 0xd8, 0xef, 0xe3, 0xbb, 0xb9, 0x23, 0x99, 0x1a, 0x91, + 0x87, 0xc9, 0x03, 0x28, 0x9b, 0x82, 0x88, 0x23, 0x5d, 0x22, 0x4a, 0x34, 0x05, 0xdc, 0xaf, 0x61, + 0x57, 0x09, 0xb2, 0x88, 0xee, 0x6a, 0x55, 0xb1, 0x3e, 0x54, 0x55, 0xcc, 0x21, 0x9b, 0x92, 0xe8, + 0x0f, 0x6b, 0xf9, 0xbb, 0x45, 0x0e, 0xa1, 0xd0, 0x47, 0xd9, 0x1f, 0x1a, 0x56, 0x32, 0x51, 0x5b, + 0x5b, 0x83, 0x73, 0x61, 0xe4, 0xd5, 0x63, 0x85, 0xf5, 0x70, 0x2a, 0x8c, 0x96, 0x7a, 0x4c, 0x6a, + 0x60, 0x9f, 0x77, 0xdb, 0x5a, 0xbb, 0x2a, 0x55, 0x43, 0x85, 0x9c, 0x76, 0xdb, 0x5a, 0xa5, 0x2a, + 0x55, 0xc3, 0xdc, 0xb3, 0x2c, 0xae, 0x14, 0xd6, 0xa7, 0x70, 0xa0, 0x1b, 0x81, 0xe7, 0xef, 0x67, + 0x5c, 0xe0, 0x80, 0x07, 0xbe, 0x77, 0xa3, 0x65, 0xd9, 0x7b, 0x4c, 0x4e, 0x56, 0x56, 0xe8, 0x2a, + 0xd9, 0x7d, 0x01, 0x87, 0xc9, 0x83, 0x34, 0x9f, 0xae, 0x4d, 0x49, 0xf4, 0x00, 0xca, 0xcd, 0xa9, + 0xfa, 0xfa, 0xf7, 0xfc, 0x0b, 0x7d, 0x3d, 0x9b, 0xa6, 0x80, 0xfb, 0x05, 0xdc, 0x3d, 0x45, 0x69, + 0x8e, 0x31, 0x1f, 0xf1, 0x0d, 0x6a, 0xfe, 0x08, 0xce, 0x2a, 0xdd, 0xc4, 0x2d, 0xfd, 0xf2, 0x9a, + 0x0e, 0xc1, 0xba, 0xed, 0x97, 0x37, 0xe1, 0xbb, 0x9f, 0xc3, 0x9d, 0xf4, 0xf0, 0xa1, 0x64, 0x52, + 0x6c, 0x72, 0xe5, 0x4f, 0x3b, 0xeb, 0xba, 0xa1, 0x1b, 0x57, 0xd4, 0x9d, 0x3d, 0x19, 0xb3, 0x40, + 0xdd, 0xd9, 0x32, 0x77, 0x9e, 0x03, 0xea, 0xa9, 0x24, 0x93, 0x01, 0x9b, 0xa0, 0x30, 0x9a, 0x64, + 0x21, 0x95, 0xda, 0xcd, 0x6b, 0xe6, 0x07, 0xea, 0x65, 0xf4, 0x70, 0xca, 0xa3, 0x1b, 0x9d, 0x04, + 0x36, 0xcd, 0xc3, 0x2a, 0xd6, 0x6d, 0x5f, 0x5c, 0xb5, 0x98, 0x77, 0x89, 0x49, 0x53, 0x69, 0xd3, + 0x0c, 0xa2, 0xd6, 0x3b, 0x11, 0xce, 0x0f, 0x29, 0x24, 0xeb, 0x29, 0x42, 0x4e, 0x80, 0xbc, 0x88, + 0x27, 0x28, 0x83, 0x8b, 0x66, 0x10, 0x70, 0x4f, 0xf7, 0xb7, 0x42, 0xe7, 0x8c, 0x4d, 0xd7, 0xac, + 0x28, 0xcf, 0x0c, 0xda, 0x61, 0x7e, 0x10, 0x47, 0xba, 0x67, 0xd4, 0x9e, 0xe5, 0x60, 0x5d, 0x10, + 0xd8, 0x4f, 0x3c, 0xea, 0xb0, 0x38, 0x90, 0x42, 0x37, 0x84, 0x36, 0xcd, 0x42, 0x9a, 0xe1, 0x87, + 0x0b, 0x46, 0xd9, 0x30, 0x52, 0x88, 0xdc, 0x81, 0xe2, 0xf0, 0x1d, 0x9b, 0x75, 0x43, 0xdd, 0xed, + 0xd9, 0xd4, 0xcc, 0x88, 0x03, 0x3b, 0x6a, 0xf4, 0x26, 0x96, 0xba, 0xa3, 0xb3, 0xe9, 0x7c, 0xaa, + 0x94, 0x3f, 0x63, 0xd1, 0x04, 0x75, 0xb6, 0xed, 0x26, 0xca, 0x2f, 0x00, 0x65, 0x31, 0x99, 0x24, + 0xca, 0x57, 0x13, 0x8b, 0x19, 0x48, 0x33, 0xb8, 0x64, 0x81, 0x11, 0x6c, 0xcf, 0x30, 0x52, 0xc8, + 0x45, 0xb8, 0xb7, 0x94, 0xfb, 0x1f, 0x4b, 0x14, 0xf2, 0x15, 0x1c, 0x69, 0xce, 0x80, 0x07, 0x81, + 0x1f, 0x4e, 0x74, 0xdb, 0x7c, 0xcd, 0x82, 0x79, 0xe0, 0xd7, 0x2f, 0x1e, 0x7f, 0xb6, 0xe6, 0x91, + 0x92, 0x12, 0x6c, 0xb7, 0xde, 0x0c, 0xbe, 0xaf, 0xfd, 0x4f, 0x8d, 0x9e, 0x75, 0xfb, 0xed, 0x9a, + 0xf5, 0x6c, 0xe7, 0x87, 0x82, 0xfe, 0xcf, 0x73, 0x51, 0xd4, 0x3f, 0x4f, 0xfe, 0x0e, 0x00, 0x00, + 0xff, 0xff, 0x18, 0x5c, 0x8d, 0x4a, 0x1c, 0x0d, 0x00, 0x00, } diff --git a/proto/firecracker.proto b/proto/firecracker.proto index e2304d35c..c82a46853 100644 --- a/proto/firecracker.proto +++ b/proto/firecracker.proto @@ -41,6 +41,9 @@ message CreateVMRequest { string MetricsFifoPath = 13; FirecrackerBalloonDevice BalloonDevice = 14; + + string NetworkNamespace = 15; + bool OffloadEnabled = 16; } message CreateVMResponse { @@ -109,6 +112,7 @@ message CreateSnapshotRequest { string VMID = 1; string SnapshotFilePath = 2; string MemFilePath = 3; + string SnapshotType = 4; } message LoadSnapshotRequest { @@ -116,6 +120,9 @@ message LoadSnapshotRequest { string SnapshotFilePath = 2; string MemFilePath = 3; bool EnableUserPF = 4; + string NetworkNamespace = 5; + string NewSnapshotPath = 6; + bool Offloaded = 7; } message LoadResponse { diff --git a/proto/types.pb.go b/proto/types.pb.go index 5d0068f24..f1263e153 100644 --- a/proto/types.pb.go +++ b/proto/types.pb.go @@ -23,11 +23,11 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Message to store bundle/config.json bytes type ExtraData struct { - JsonSpec []byte `protobuf:"bytes,1,opt,name=JsonSpec,json=jsonSpec,proto3" json:"JsonSpec,omitempty"` - RuncOptions *types.Any `protobuf:"bytes,2,opt,name=RuncOptions,json=runcOptions,proto3" json:"RuncOptions,omitempty"` - StdinPort uint32 `protobuf:"varint,3,opt,name=StdinPort,json=stdinPort,proto3" json:"StdinPort,omitempty"` - StdoutPort uint32 `protobuf:"varint,4,opt,name=StdoutPort,json=stdoutPort,proto3" json:"StdoutPort,omitempty"` - StderrPort uint32 `protobuf:"varint,5,opt,name=StderrPort,json=stderrPort,proto3" json:"StderrPort,omitempty"` + JsonSpec []byte `protobuf:"bytes,1,opt,name=JsonSpec,proto3" json:"JsonSpec,omitempty"` + RuncOptions *types.Any `protobuf:"bytes,2,opt,name=RuncOptions,proto3" json:"RuncOptions,omitempty"` + StdinPort uint32 `protobuf:"varint,3,opt,name=StdinPort,proto3" json:"StdinPort,omitempty"` + StdoutPort uint32 `protobuf:"varint,4,opt,name=StdoutPort,proto3" json:"StdoutPort,omitempty"` + StderrPort uint32 `protobuf:"varint,5,opt,name=StderrPort,proto3" json:"StderrPort,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -94,15 +94,15 @@ func (m *ExtraData) GetStderrPort() uint32 { // Message to specify network config for a Firecracker VM type FirecrackerNetworkInterface struct { - AllowMMDS bool `protobuf:"varint,1,opt,name=AllowMMDS,json=allowMMDS,proto3" json:"AllowMMDS,omitempty"` - InRateLimiter *FirecrackerRateLimiter `protobuf:"bytes,2,opt,name=InRateLimiter,json=inRateLimiter,proto3" json:"InRateLimiter,omitempty"` - OutRateLimiter *FirecrackerRateLimiter `protobuf:"bytes,3,opt,name=OutRateLimiter,json=outRateLimiter,proto3" json:"OutRateLimiter,omitempty"` + AllowMMDS bool `protobuf:"varint,1,opt,name=AllowMMDS,proto3" json:"AllowMMDS,omitempty"` + InRateLimiter *FirecrackerRateLimiter `protobuf:"bytes,2,opt,name=InRateLimiter,proto3" json:"InRateLimiter,omitempty"` + OutRateLimiter *FirecrackerRateLimiter `protobuf:"bytes,3,opt,name=OutRateLimiter,proto3" json:"OutRateLimiter,omitempty"` // CNIConfiguration specifies CNI configuration that will be used to generate // a network interface for a Firecracker VM. - CNIConfig *CNIConfiguration `protobuf:"bytes,4,opt,name=CNIConfig,json=cNIConfig,proto3" json:"CNIConfig,omitempty"` + CNIConfig *CNIConfiguration `protobuf:"bytes,4,opt,name=CNIConfig,proto3" json:"CNIConfig,omitempty"` // StaticNetworkConfiguration specifies static configuration parameters for a // Firecracker VM's network interface - StaticConfig *StaticNetworkConfiguration `protobuf:"bytes,5,opt,name=StaticConfig,json=staticConfig,proto3" json:"StaticConfig,omitempty"` + StaticConfig *StaticNetworkConfiguration `protobuf:"bytes,5,opt,name=StaticConfig,proto3" json:"StaticConfig,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -173,23 +173,23 @@ type CNIConfiguration struct { // NetworkName is the name of a CNI network (as found in CNI // configuration files) that will be used to generate the // network interface. - NetworkName string `protobuf:"bytes,1,opt,name=NetworkName,json=networkName,proto3" json:"NetworkName,omitempty"` + NetworkName string `protobuf:"bytes,1,opt,name=NetworkName,proto3" json:"NetworkName,omitempty"` // InterfaceName corresponds to the CNI_IFNAME parameter that will be // provided to CNI plugins during invocation. - InterfaceName string `protobuf:"bytes,2,opt,name=InterfaceName,json=interfaceName,proto3" json:"InterfaceName,omitempty"` + InterfaceName string `protobuf:"bytes,2,opt,name=InterfaceName,proto3" json:"InterfaceName,omitempty"` // BinPath is a list of directories that will be searched when // looking for CNI plugin binaries. Defaults to just "/opt/cni/bin" - BinPath []string `protobuf:"bytes,3,rep,name=BinPath,json=binPath,proto3" json:"BinPath,omitempty"` + BinPath []string `protobuf:"bytes,3,rep,name=BinPath,proto3" json:"BinPath,omitempty"` // ConfDir is the directory in which CNI configuration will be sought. // If not specified, will default to "/etc/cni/conf.d". - ConfDir string `protobuf:"bytes,4,opt,name=ConfDir,json=confDir,proto3" json:"ConfDir,omitempty"` + ConfDir string `protobuf:"bytes,4,opt,name=ConfDir,proto3" json:"ConfDir,omitempty"` // CacheDir is the directory in which CNI results will be temporarily // cached by the runtime. If not specified, it will default to // "/var/lib/cni" - CacheDir string `protobuf:"bytes,5,opt,name=CacheDir,json=cacheDir,proto3" json:"CacheDir,omitempty"` + CacheDir string `protobuf:"bytes,5,opt,name=CacheDir,proto3" json:"CacheDir,omitempty"` // Args corresponds to the CNI_ARGS parameter that will be provided to // CNI plugins on invocation. - Args []*CNIConfiguration_CNIArg `protobuf:"bytes,6,rep,name=Args,json=args,proto3" json:"Args,omitempty"` + Args []*CNIConfiguration_CNIArg `protobuf:"bytes,6,rep,name=Args,proto3" json:"Args,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -262,8 +262,8 @@ func (m *CNIConfiguration) GetArgs() []*CNIConfiguration_CNIArg { } type CNIConfiguration_CNIArg struct { - Key string `protobuf:"bytes,1,opt,name=Key,json=key,proto3" json:"Key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=Value,json=value,proto3" json:"Value,omitempty"` + Key string `protobuf:"bytes,1,opt,name=Key,proto3" json:"Key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=Value,proto3" json:"Value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -310,12 +310,12 @@ func (m *CNIConfiguration_CNIArg) GetValue() string { // Message to specify static configuration parameters for a // Firecracker VM's network interface type StaticNetworkConfiguration struct { - MacAddress string `protobuf:"bytes,1,opt,name=MacAddress,json=macAddress,proto3" json:"MacAddress,omitempty"` - HostDevName string `protobuf:"bytes,2,opt,name=HostDevName,json=hostDevName,proto3" json:"HostDevName,omitempty"` + MacAddress string `protobuf:"bytes,1,opt,name=MacAddress,proto3" json:"MacAddress,omitempty"` + HostDevName string `protobuf:"bytes,2,opt,name=HostDevName,proto3" json:"HostDevName,omitempty"` // IPConfig optionally provides static IP configuration that will be configured // on the VM's internal networking interface. If not specified, no IP // configuration will be applied to the VM's internal nic automatically. - IPConfig *IPConfiguration `protobuf:"bytes,3,opt,name=IPConfig,json=iPConfig,proto3" json:"IPConfig,omitempty"` + IPConfig *IPConfiguration `protobuf:"bytes,3,opt,name=IPConfig,proto3" json:"IPConfig,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -372,15 +372,15 @@ type IPConfiguration struct { // PrimaryAddr specifies, in CIDR notation, the primary address // and subnet that a network interface will be assigned inside // the VM. - PrimaryAddr string `protobuf:"bytes,1,opt,name=PrimaryAddr,json=primaryAddr,proto3" json:"PrimaryAddr,omitempty"` + PrimaryAddr string `protobuf:"bytes,1,opt,name=PrimaryAddr,proto3" json:"PrimaryAddr,omitempty"` // GatewayAddr specifies the default gateway that a network interface // should use inside the VM. - GatewayAddr string `protobuf:"bytes,3,opt,name=GatewayAddr,json=gatewayAddr,proto3" json:"GatewayAddr,omitempty"` + GatewayAddr string `protobuf:"bytes,3,opt,name=GatewayAddr,proto3" json:"GatewayAddr,omitempty"` // Nameservers is a list of nameservers that the VM will be configured // to use internally. Currently only up to 2 nameservers can be specified // (any more in the list will be ignored) and configuration is provided // to the VM via /proc/net/pnp. - Nameservers []string `protobuf:"bytes,4,rep,name=Nameservers,json=nameservers,proto3" json:"Nameservers,omitempty"` + Nameservers []string `protobuf:"bytes,4,rep,name=Nameservers,proto3" json:"Nameservers,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -433,13 +433,14 @@ func (m *IPConfiguration) GetNameservers() []string { // Message to set the machine config for a Firecracker VM type FirecrackerMachineConfiguration struct { - CPUTemplate string `protobuf:"bytes,1,opt,name=CPUTemplate,json=cPUTemplate,proto3" json:"CPUTemplate,omitempty"` - HtEnabled bool `protobuf:"varint,2,opt,name=HtEnabled,json=htEnabled,proto3" json:"HtEnabled,omitempty"` + CPUTemplate string `protobuf:"bytes,1,opt,name=CPUTemplate,proto3" json:"CPUTemplate,omitempty"` + HtEnabled bool `protobuf:"varint,2,opt,name=HtEnabled,proto3" json:"HtEnabled,omitempty"` // Specifies the memory size of VM // This lets us create a Firecracker VM of up to 4096 TiB, which // for a microVM should be large enough - MemSizeMib uint32 `protobuf:"varint,3,opt,name=MemSizeMib,json=memSizeMib,proto3" json:"MemSizeMib,omitempty"` - VcpuCount uint32 `protobuf:"varint,4,opt,name=VcpuCount,json=vcpuCount,proto3" json:"VcpuCount,omitempty"` + MemSizeMib uint32 `protobuf:"varint,3,opt,name=MemSizeMib,proto3" json:"MemSizeMib,omitempty"` + VcpuCount uint32 `protobuf:"varint,4,opt,name=VcpuCount,proto3" json:"VcpuCount,omitempty"` + TrackDirtyPages bool `protobuf:"varint,5,opt,name=TrackDirtyPages,proto3" json:"TrackDirtyPages,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -497,22 +498,29 @@ func (m *FirecrackerMachineConfiguration) GetVcpuCount() uint32 { return 0 } +func (m *FirecrackerMachineConfiguration) GetTrackDirtyPages() bool { + if m != nil { + return m.TrackDirtyPages + } + return false +} + // Message to specify the block device config for a Firecracker VM type FirecrackerRootDrive struct { // (Required) HostPath is the path on the host to the filesystem image or device // that will supply the rootfs of the VM. - HostPath string `protobuf:"bytes,1,opt,name=HostPath,json=hostPath,proto3" json:"HostPath,omitempty"` + HostPath string `protobuf:"bytes,1,opt,name=HostPath,proto3" json:"HostPath,omitempty"` // (Optional) If the HostPath points to a drive or image with multiple // partitions, Partuuid specifies which partition will be used to boot // the VM - Partuuid string `protobuf:"bytes,2,opt,name=Partuuid,json=partuuid,proto3" json:"Partuuid,omitempty"` + Partuuid string `protobuf:"bytes,2,opt,name=Partuuid,proto3" json:"Partuuid,omitempty"` // (Optional) If set to true, IsWritable results in the VM Guest's rootfs // being mounted as read-write. Defaults to false, in which case the // rootfs is mounted as read-only. - IsWritable bool `protobuf:"varint,3,opt,name=IsWritable,json=isWritable,proto3" json:"IsWritable,omitempty"` + IsWritable bool `protobuf:"varint,3,opt,name=IsWritable,proto3" json:"IsWritable,omitempty"` // (Optional) RateLimiter configuration that will be applied to the // backing-drive for the VM's rootfs - RateLimiter *FirecrackerRateLimiter `protobuf:"bytes,4,opt,name=RateLimiter,json=rateLimiter,proto3" json:"RateLimiter,omitempty"` + RateLimiter *FirecrackerRateLimiter `protobuf:"bytes,4,opt,name=RateLimiter,proto3" json:"RateLimiter,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -573,25 +581,25 @@ func (m *FirecrackerRootDrive) GetRateLimiter() *FirecrackerRateLimiter { type FirecrackerDriveMount struct { // (Required) HostPath is the path on the host to the filesystem image or device // that will be mounted inside the VM. - HostPath string `protobuf:"bytes,1,opt,name=HostPath,json=hostPath,proto3" json:"HostPath,omitempty"` + HostPath string `protobuf:"bytes,1,opt,name=HostPath,proto3" json:"HostPath,omitempty"` // (Required) VMPath is the path inside the VM guest at which the filesystem // image or device will be mounted. - VMPath string `protobuf:"bytes,2,opt,name=VMPath,json=vMPath,proto3" json:"VMPath,omitempty"` + VMPath string `protobuf:"bytes,2,opt,name=VMPath,proto3" json:"VMPath,omitempty"` // (Required) FilesystemType is the filesystem type (i.e. ext4, xfs, etc.), as // used when mounting the filesystem image inside the VM. The VM guest kernel // is expected to have support for this filesystem. - FilesystemType string `protobuf:"bytes,3,opt,name=FilesystemType,json=filesystemType,proto3" json:"FilesystemType,omitempty"` + FilesystemType string `protobuf:"bytes,3,opt,name=FilesystemType,proto3" json:"FilesystemType,omitempty"` // (Optional) Options are fstab-style options that the mount will be performed // within the VM (i.e. ["rw", "noatime"]). Defaults to none if not specified. - Options []string `protobuf:"bytes,4,rep,name=Options,json=options,proto3" json:"Options,omitempty"` + Options []string `protobuf:"bytes,4,rep,name=Options,proto3" json:"Options,omitempty"` // (Optional) RateLimiter configuration that will be applied to the // backing-drive for the VM's rootfs - RateLimiter *FirecrackerRateLimiter `protobuf:"bytes,5,opt,name=RateLimiter,json=rateLimiter,proto3" json:"RateLimiter,omitempty"` + RateLimiter *FirecrackerRateLimiter `protobuf:"bytes,5,opt,name=RateLimiter,proto3" json:"RateLimiter,omitempty"` // (Optional) If set to true, IsWritable results in the backing file for the // drive being opened as read-write by the Firecracker VMM on the host, allowing // writes to the image from within the guest. Defaults to false, in which case // the block device in the VM will be read-only. - IsWritable bool `protobuf:"varint,6,opt,name=IsWritable,json=isWritable,proto3" json:"IsWritable,omitempty"` + IsWritable bool `protobuf:"varint,6,opt,name=IsWritable,proto3" json:"IsWritable,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -665,8 +673,8 @@ func (m *FirecrackerDriveMount) GetIsWritable() bool { // Message to specify an IO rate limiter with bytes/s and ops/s limits type FirecrackerRateLimiter struct { - Bandwidth *FirecrackerTokenBucket `protobuf:"bytes,1,opt,name=Bandwidth,json=bandwidth,proto3" json:"Bandwidth,omitempty"` - Ops *FirecrackerTokenBucket `protobuf:"bytes,2,opt,name=Ops,json=ops,proto3" json:"Ops,omitempty"` + Bandwidth *FirecrackerTokenBucket `protobuf:"bytes,1,opt,name=Bandwidth,proto3" json:"Bandwidth,omitempty"` + Ops *FirecrackerTokenBucket `protobuf:"bytes,2,opt,name=Ops,proto3" json:"Ops,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -712,9 +720,9 @@ func (m *FirecrackerRateLimiter) GetOps() *FirecrackerTokenBucket { // Message to specify a token buicket used to rate limit disk and network IO for a Firecracker VM type FirecrackerTokenBucket struct { - OneTimeBurst int64 `protobuf:"varint,1,opt,name=OneTimeBurst,json=oneTimeBurst,proto3" json:"OneTimeBurst,omitempty"` - RefillTime int64 `protobuf:"varint,2,opt,name=RefillTime,json=refillTime,proto3" json:"RefillTime,omitempty"` - Capacity int64 `protobuf:"varint,3,opt,name=Capacity,json=capacity,proto3" json:"Capacity,omitempty"` + OneTimeBurst int64 `protobuf:"varint,1,opt,name=OneTimeBurst,proto3" json:"OneTimeBurst,omitempty"` + RefillTime int64 `protobuf:"varint,2,opt,name=RefillTime,proto3" json:"RefillTime,omitempty"` + Capacity int64 `protobuf:"varint,3,opt,name=Capacity,proto3" json:"Capacity,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -766,9 +774,9 @@ func (m *FirecrackerTokenBucket) GetCapacity() int64 { } type FirecrackerBalloonDevice struct { - AmountMib int64 `protobuf:"varint,1,opt,name=AmountMib,json=amountMib,proto3" json:"AmountMib,omitempty"` - DeflateOnOom bool `protobuf:"varint,2,opt,name=DeflateOnOom,json=deflateOnOom,proto3" json:"DeflateOnOom,omitempty"` - StatsPollingIntervals int64 `protobuf:"varint,3,opt,name=StatsPollingIntervals,json=statsPollingIntervals,proto3" json:"StatsPollingIntervals,omitempty"` + AmountMib int64 `protobuf:"varint,1,opt,name=AmountMib,proto3" json:"AmountMib,omitempty"` + DeflateOnOom bool `protobuf:"varint,2,opt,name=DeflateOnOom,proto3" json:"DeflateOnOom,omitempty"` + StatsPollingIntervals int64 `protobuf:"varint,3,opt,name=StatsPollingIntervals,proto3" json:"StatsPollingIntervals,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -837,65 +845,62 @@ func init() { func init() { proto.RegisterFile("types.proto", fileDescriptor_d938547f84707355) } var fileDescriptor_d938547f84707355 = []byte{ - // 947 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdd, 0x6e, 0xe3, 0x44, - 0x14, 0x96, 0xeb, 0x26, 0xb5, 0x8f, 0xd3, 0x52, 0x46, 0xed, 0x12, 0xba, 0x08, 0x22, 0x0b, 0xa1, - 0x22, 0xad, 0x52, 0x54, 0x7e, 0x24, 0x2e, 0xd0, 0xaa, 0x69, 0x76, 0xd9, 0x00, 0x69, 0x22, 0xa7, - 0x14, 0x89, 0xbb, 0x89, 0x33, 0x49, 0x86, 0xd8, 0x33, 0xd6, 0xcc, 0x38, 0xd9, 0xec, 0x23, 0x20, - 0xae, 0x78, 0x01, 0xae, 0xb9, 0xe0, 0x11, 0x78, 0x1f, 0x1e, 0x03, 0xcd, 0x78, 0x9c, 0xb8, 0xd9, - 0x52, 0x71, 0x65, 0x9d, 0xef, 0x3b, 0x67, 0xce, 0xff, 0x31, 0x04, 0x6a, 0x9d, 0x11, 0xd9, 0xce, - 0x04, 0x57, 0xfc, 0xec, 0xfd, 0x19, 0xe7, 0xb3, 0x84, 0x5c, 0x18, 0x69, 0x9c, 0x4f, 0x2f, 0x30, - 0x5b, 0x17, 0x54, 0xf8, 0xb7, 0x03, 0xfe, 0x8b, 0xd7, 0x4a, 0xe0, 0x2e, 0x56, 0x18, 0x9d, 0x81, - 0xf7, 0x9d, 0xe4, 0x6c, 0x94, 0x91, 0xb8, 0xe9, 0xb4, 0x9c, 0xf3, 0x46, 0xe4, 0xfd, 0x62, 0x65, - 0xf4, 0x15, 0x04, 0x51, 0xce, 0xe2, 0x41, 0xa6, 0x28, 0x67, 0xb2, 0xb9, 0xd7, 0x72, 0xce, 0x83, - 0xcb, 0x93, 0x76, 0xf1, 0x74, 0xbb, 0x7c, 0xba, 0x7d, 0xc5, 0xd6, 0x51, 0x20, 0xb6, 0x8a, 0xe8, - 0x03, 0xf0, 0x47, 0x6a, 0x42, 0xd9, 0x90, 0x0b, 0xd5, 0x74, 0x5b, 0xce, 0xf9, 0x61, 0xe4, 0xcb, - 0x12, 0x40, 0x1f, 0x02, 0x8c, 0xd4, 0x84, 0xe7, 0xca, 0xd0, 0xfb, 0x86, 0x06, 0xb9, 0x41, 0x2c, - 0x4f, 0x84, 0x30, 0x7c, 0x6d, 0xc3, 0x5b, 0x24, 0xfc, 0x6b, 0x0f, 0x9e, 0xbe, 0xa4, 0x82, 0xc4, - 0x02, 0xc7, 0x0b, 0x22, 0x6e, 0x88, 0x5a, 0x71, 0xb1, 0xe8, 0x31, 0x45, 0xc4, 0x14, 0xc7, 0x44, - 0x7b, 0xbf, 0x4a, 0x12, 0xbe, 0xea, 0xf7, 0xbb, 0x23, 0x93, 0x92, 0x17, 0xf9, 0xb8, 0x04, 0xd0, - 0x37, 0x70, 0xd8, 0x63, 0x11, 0x56, 0xe4, 0x07, 0x9a, 0x52, 0x45, 0x84, 0xcd, 0xea, 0xbd, 0x76, - 0xe5, 0xc9, 0x0a, 0x1d, 0x1d, 0xd2, 0xaa, 0x36, 0x7a, 0x0e, 0x47, 0x83, 0x5c, 0x55, 0xed, 0xdd, - 0xc7, 0xed, 0x8f, 0xf8, 0x3d, 0x75, 0x74, 0x01, 0xfe, 0xf5, 0x4d, 0xef, 0x9a, 0xb3, 0x29, 0x9d, - 0x99, 0xe4, 0x83, 0xcb, 0x77, 0xdb, 0x1b, 0x24, 0x17, 0x58, 0x97, 0x30, 0xf2, 0xe3, 0x12, 0x41, - 0xcf, 0xa1, 0x31, 0x52, 0x58, 0xd1, 0xd8, 0xda, 0xd4, 0x8c, 0xcd, 0xd3, 0x76, 0x01, 0xda, 0xec, - 0xef, 0x5b, 0x37, 0x64, 0xc5, 0x20, 0xfc, 0x75, 0x0f, 0x8e, 0x77, 0x1d, 0xa0, 0x16, 0x04, 0xd6, - 0xf4, 0x06, 0xa7, 0xc4, 0x94, 0xc9, 0x8f, 0x02, 0xb6, 0x85, 0xd0, 0xc7, 0xba, 0x50, 0xb6, 0xa6, - 0x46, 0x67, 0xcf, 0xe8, 0x1c, 0xd2, 0x2a, 0x88, 0x9a, 0x70, 0xd0, 0xa1, 0x6c, 0x88, 0xd5, 0xbc, - 0xe9, 0xb6, 0xdc, 0x73, 0x3f, 0x3a, 0x18, 0x17, 0xa2, 0x66, 0xb4, 0xcb, 0x2e, 0x15, 0x26, 0x4d, - 0x3f, 0x3a, 0x88, 0x0b, 0x51, 0x8f, 0xdc, 0x35, 0x8e, 0xe7, 0x44, 0x53, 0x35, 0x43, 0x79, 0xb1, - 0x95, 0xd1, 0x33, 0xd8, 0xbf, 0x12, 0x33, 0xd9, 0xac, 0xb7, 0xdc, 0xf3, 0xe0, 0xb2, 0xf9, 0x56, - 0x65, 0x34, 0x70, 0x25, 0x66, 0xd1, 0x3e, 0x16, 0x33, 0x79, 0xf6, 0x19, 0xd4, 0x0b, 0x19, 0x1d, - 0x83, 0xfb, 0x3d, 0x59, 0xdb, 0x3c, 0xdc, 0x05, 0x59, 0xa3, 0x13, 0xa8, 0xdd, 0xe1, 0x24, 0x2f, - 0xe3, 0xae, 0x2d, 0xb5, 0x10, 0xfe, 0xe6, 0xc0, 0xd9, 0x7f, 0x57, 0x4e, 0xcf, 0x5e, 0x1f, 0xc7, - 0x57, 0x93, 0x89, 0x20, 0x52, 0xda, 0xd7, 0x20, 0xdd, 0x20, 0xba, 0x6c, 0xaf, 0xb8, 0x54, 0x5d, - 0xb2, 0xac, 0x94, 0x24, 0x98, 0x6f, 0x21, 0xf4, 0x0c, 0xbc, 0xde, 0xd0, 0xb6, 0xaa, 0x18, 0x8d, - 0xe3, 0x76, 0x09, 0x94, 0xfd, 0xf1, 0xa8, 0x05, 0xc2, 0x15, 0xbc, 0xb3, 0x43, 0x6a, 0x17, 0x43, - 0x41, 0x53, 0x2c, 0xd6, 0xda, 0x69, 0xd9, 0x99, 0x6c, 0x0b, 0x69, 0x8d, 0x6f, 0xb1, 0x22, 0x2b, - 0x5c, 0x68, 0xb8, 0x85, 0xc6, 0x6c, 0x0b, 0x99, 0xee, 0xe2, 0x94, 0x48, 0x22, 0x96, 0x44, 0xc8, - 0xe6, 0xbe, 0xe9, 0x4c, 0xc0, 0xb6, 0x50, 0xf8, 0x87, 0x03, 0x1f, 0x55, 0x26, 0xb6, 0x8f, 0xe3, - 0x39, 0x65, 0xe4, 0xad, 0x48, 0xae, 0x87, 0x3f, 0xde, 0x92, 0x34, 0x4b, 0xb0, 0xda, 0xcc, 0x48, - 0xbc, 0x85, 0xf4, 0xaa, 0xbd, 0x52, 0x2f, 0x18, 0x1e, 0x27, 0x64, 0x62, 0x8a, 0xe1, 0x45, 0xfe, - 0xbc, 0x04, 0x4c, 0x31, 0x49, 0x3a, 0xa2, 0x6f, 0x48, 0x9f, 0x8e, 0xed, 0x1d, 0x80, 0x74, 0x83, - 0x68, 0xeb, 0xbb, 0x38, 0xcb, 0xaf, 0x79, 0xce, 0xca, 0x3b, 0xe0, 0x2f, 0x4b, 0x20, 0xfc, 0xd3, - 0x81, 0x93, 0xea, 0x4e, 0x71, 0xae, 0xba, 0x82, 0x2e, 0x89, 0x1e, 0x1f, 0xdd, 0x03, 0x33, 0x73, - 0x45, 0x4c, 0xde, 0xdc, 0xca, 0x9a, 0x1b, 0x62, 0xa1, 0xf2, 0x9c, 0x4e, 0x6c, 0x73, 0xbc, 0xcc, - 0xca, 0x3a, 0x9c, 0x9e, 0xfc, 0x49, 0x50, 0xa5, 0xa3, 0x33, 0xe1, 0x78, 0x11, 0xd0, 0x0d, 0x82, - 0xbe, 0x86, 0xa0, 0xba, 0xd7, 0xfb, 0x8f, 0xef, 0x75, 0x20, 0xb6, 0x42, 0xf8, 0x8f, 0x03, 0xa7, - 0x15, 0x3d, 0x13, 0x67, 0x5f, 0x67, 0xf1, 0x68, 0xb0, 0x4f, 0xa0, 0x7e, 0xd7, 0x37, 0x4c, 0x11, - 0x6a, 0x7d, 0x69, 0x24, 0xf4, 0x09, 0x1c, 0xbd, 0xa4, 0x09, 0x91, 0x6b, 0xa9, 0x48, 0x7a, 0xbb, - 0xce, 0x88, 0x6d, 0xf1, 0xd1, 0xf4, 0x1e, 0xaa, 0x37, 0xac, 0x3c, 0xcd, 0x45, 0x87, 0x0f, 0xb8, - 0x3d, 0xc0, 0x3b, 0xa9, 0xd4, 0xfe, 0x7f, 0x2a, 0x3b, 0x55, 0xaa, 0xef, 0x56, 0x29, 0x7c, 0x03, - 0x4f, 0x1e, 0x7e, 0x06, 0x7d, 0x09, 0x7e, 0x07, 0xb3, 0xc9, 0x8a, 0x4e, 0x6c, 0xae, 0x3b, 0x2e, - 0x6f, 0xf9, 0x82, 0xb0, 0x4e, 0x1e, 0x2f, 0x88, 0x8a, 0xfc, 0x71, 0xa9, 0x89, 0x3e, 0x05, 0x77, - 0x90, 0xc9, 0x87, 0xce, 0x70, 0xd5, 0xc0, 0xe5, 0x99, 0x0c, 0x5f, 0xdf, 0xf3, 0x5d, 0xa1, 0x51, - 0x08, 0x8d, 0x01, 0x23, 0xb7, 0x34, 0x25, 0x9d, 0x5c, 0x48, 0x65, 0xdc, 0xbb, 0x51, 0x83, 0x57, - 0x30, 0x9d, 0x59, 0x44, 0xa6, 0x34, 0x49, 0x34, 0x64, 0xfc, 0xb9, 0x11, 0x88, 0x0d, 0x52, 0x9c, - 0xa5, 0x0c, 0xc7, 0x54, 0xad, 0x4d, 0xc1, 0x5d, 0x7d, 0x96, 0x0a, 0x39, 0xfc, 0xdd, 0x81, 0x66, - 0xc5, 0x75, 0x47, 0xff, 0x4f, 0x38, 0xeb, 0x92, 0x25, 0xb5, 0x3f, 0x9c, 0x54, 0x77, 0x5b, 0x8f, - 0x79, 0xe1, 0xd9, 0xc7, 0x25, 0xa0, 0x43, 0xeb, 0x92, 0xa9, 0x5e, 0x97, 0x01, 0x1b, 0xf0, 0xd4, - 0xae, 0x49, 0x63, 0x52, 0xc1, 0xd0, 0x17, 0x70, 0xaa, 0x8f, 0x92, 0x1c, 0xf2, 0x24, 0xa1, 0x6c, - 0x66, 0xee, 0xee, 0x12, 0x27, 0xd2, 0xc6, 0x71, 0x2a, 0x1f, 0x22, 0x3b, 0x07, 0x3f, 0xd7, 0x8a, - 0x7f, 0x70, 0xdd, 0x7c, 0x3e, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x38, 0xea, 0xdd, 0x02, - 0x08, 0x00, 0x00, + // 908 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdd, 0x6e, 0x23, 0x35, + 0x14, 0xd6, 0x74, 0x9a, 0x6e, 0xe2, 0x74, 0x77, 0x8b, 0xd5, 0x5d, 0x42, 0x17, 0x41, 0x34, 0x42, + 0x28, 0x48, 0xab, 0x14, 0x95, 0x1f, 0x89, 0x0b, 0xb4, 0xca, 0xcf, 0x2e, 0x1b, 0x20, 0x4d, 0xe4, + 0x84, 0x22, 0x71, 0xe7, 0x4e, 0x4e, 0x52, 0xab, 0x33, 0x76, 0xe4, 0xf1, 0x24, 0x3b, 0xfb, 0x08, + 0x88, 0x2b, 0xde, 0x82, 0x0b, 0x1e, 0x81, 0x07, 0xe0, 0x4d, 0x78, 0x0c, 0x64, 0x8f, 0x67, 0xe2, + 0xcc, 0x96, 0x8a, 0xab, 0xe4, 0x7c, 0xdf, 0x77, 0x7c, 0x7e, 0x7c, 0x7c, 0x06, 0x35, 0x55, 0xb6, + 0x86, 0xa4, 0xbb, 0x96, 0x42, 0x89, 0xb3, 0x0f, 0x56, 0x42, 0xac, 0x22, 0x38, 0x37, 0xd6, 0x75, + 0xba, 0x3c, 0xa7, 0x3c, 0xcb, 0xa9, 0xe0, 0x2f, 0x0f, 0x35, 0x5e, 0xbe, 0x51, 0x92, 0x0e, 0xa9, + 0xa2, 0xf8, 0x0c, 0xd5, 0xbf, 0x4f, 0x04, 0x9f, 0xad, 0x21, 0x6c, 0x79, 0x6d, 0xaf, 0x73, 0x4c, + 0x4a, 0x1b, 0x7f, 0x8d, 0x9a, 0x24, 0xe5, 0xe1, 0x64, 0xad, 0x98, 0xe0, 0x49, 0xeb, 0xa0, 0xed, + 0x75, 0x9a, 0x17, 0xa7, 0xdd, 0xfc, 0xe8, 0x6e, 0x71, 0x74, 0xb7, 0xc7, 0x33, 0xe2, 0x0a, 0xf1, + 0x87, 0xa8, 0x31, 0x53, 0x0b, 0xc6, 0xa7, 0x42, 0xaa, 0x96, 0xdf, 0xf6, 0x3a, 0x0f, 0xc9, 0x0e, + 0xc0, 0x1f, 0x21, 0x34, 0x53, 0x0b, 0x91, 0x2a, 0x43, 0x1f, 0x1a, 0xda, 0x41, 0x2c, 0x0f, 0x52, + 0x1a, 0xbe, 0x56, 0xf2, 0x16, 0x09, 0xfe, 0x3c, 0x40, 0xcf, 0x5e, 0x31, 0x09, 0xa1, 0xa4, 0xe1, + 0x2d, 0xc8, 0x4b, 0x50, 0x5b, 0x21, 0x6f, 0x47, 0x5c, 0x81, 0x5c, 0xd2, 0x10, 0x74, 0xf4, 0x5e, + 0x14, 0x89, 0xed, 0x78, 0x3c, 0x9c, 0x99, 0x92, 0xea, 0x64, 0x07, 0xe0, 0x6f, 0xd1, 0xc3, 0x11, + 0x27, 0x54, 0xc1, 0x8f, 0x2c, 0x66, 0x0a, 0xa4, 0xad, 0xea, 0xfd, 0xae, 0x73, 0xa4, 0x43, 0x93, + 0x7d, 0x35, 0x7e, 0x81, 0x1e, 0x4d, 0x52, 0xe5, 0xfa, 0xfb, 0xf7, 0xfb, 0x57, 0xe4, 0xf8, 0x1c, + 0x35, 0x06, 0x97, 0xa3, 0x81, 0xe0, 0x4b, 0xb6, 0x32, 0xc5, 0x37, 0x2f, 0xde, 0xeb, 0x96, 0x48, + 0x2a, 0xa9, 0x6e, 0x21, 0xd9, 0x69, 0xf0, 0x0b, 0x74, 0x3c, 0x53, 0x54, 0xb1, 0xd0, 0xfa, 0xd4, + 0x8c, 0xcf, 0xb3, 0x6e, 0x0e, 0xda, 0xea, 0xf7, 0xbd, 0xf7, 0x1c, 0x82, 0x5f, 0x0f, 0xd0, 0x49, + 0x35, 0x00, 0x6e, 0xa3, 0xa6, 0x75, 0xbd, 0xa4, 0x31, 0x98, 0x36, 0x35, 0x88, 0x0b, 0xe1, 0x4f, + 0x74, 0xa3, 0x6c, 0x4f, 0x8d, 0xe6, 0xc0, 0x68, 0xf6, 0x41, 0xdc, 0x42, 0x0f, 0xfa, 0x8c, 0x4f, + 0xa9, 0xba, 0x69, 0xf9, 0x6d, 0xbf, 0xd3, 0x20, 0x85, 0xa9, 0x19, 0x1d, 0x72, 0xc8, 0xa4, 0x29, + 0xb3, 0x41, 0x0a, 0x53, 0x8f, 0xdc, 0x80, 0x86, 0x37, 0xa0, 0xa9, 0x9a, 0xa1, 0x4a, 0x1b, 0x3f, + 0x47, 0x87, 0x3d, 0xb9, 0x4a, 0x5a, 0x47, 0x6d, 0xbf, 0xd3, 0xbc, 0x68, 0xbd, 0xd3, 0x19, 0x0d, + 0xf4, 0xe4, 0x8a, 0x18, 0xd5, 0xd9, 0xe7, 0xe8, 0x28, 0xb7, 0xf1, 0x09, 0xf2, 0x7f, 0x80, 0xcc, + 0xd6, 0xa1, 0xff, 0xe2, 0x53, 0x54, 0xbb, 0xa2, 0x51, 0x5a, 0xe4, 0x9d, 0x1b, 0xc1, 0x6f, 0x1e, + 0x3a, 0xfb, 0xef, 0xce, 0xe9, 0xd9, 0x1b, 0xd3, 0xb0, 0xb7, 0x58, 0x48, 0x48, 0x12, 0x7b, 0x9a, + 0x83, 0xe8, 0xb6, 0xbd, 0x16, 0x89, 0x1a, 0xc2, 0xc6, 0x69, 0x89, 0x0b, 0xe1, 0xe7, 0xa8, 0x3e, + 0x9a, 0xda, 0xab, 0xca, 0x47, 0xe3, 0xa4, 0x5b, 0x00, 0xc5, 0xfd, 0x94, 0x8a, 0x60, 0x8b, 0x1e, + 0x57, 0x48, 0x1d, 0x62, 0x2a, 0x59, 0x4c, 0x65, 0xa6, 0x83, 0x16, 0x37, 0xe3, 0x40, 0x5a, 0xf1, + 0x1d, 0x55, 0xb0, 0xa5, 0xb9, 0xc2, 0xcf, 0x15, 0x0e, 0x64, 0x6e, 0x97, 0xc6, 0x90, 0x80, 0xdc, + 0x80, 0x4c, 0x5a, 0x87, 0xe6, 0x66, 0x5c, 0x28, 0xf8, 0xdb, 0x43, 0x1f, 0x3b, 0x13, 0x3b, 0xa6, + 0xe1, 0x0d, 0xe3, 0xf0, 0x4e, 0x26, 0x83, 0xe9, 0x4f, 0x73, 0x88, 0xd7, 0x11, 0x55, 0xe5, 0x8c, + 0x38, 0x90, 0x7e, 0x6a, 0xaf, 0xd5, 0x4b, 0x4e, 0xaf, 0x23, 0x58, 0x98, 0x66, 0xd4, 0xc9, 0x0e, + 0x30, 0xcd, 0x84, 0x78, 0xc6, 0xde, 0xc2, 0x98, 0x5d, 0xdb, 0x3d, 0xe0, 0x20, 0xda, 0xfb, 0x2a, + 0x5c, 0xa7, 0x03, 0x91, 0xf2, 0x62, 0x0f, 0xec, 0x00, 0xdc, 0x41, 0x8f, 0xe7, 0x3a, 0xb9, 0x21, + 0x93, 0x2a, 0x9b, 0xd2, 0x15, 0x24, 0x66, 0x58, 0xea, 0xa4, 0x0a, 0x07, 0x7f, 0x78, 0xe8, 0xd4, + 0x7d, 0x7d, 0x42, 0xa8, 0xa1, 0x64, 0x1b, 0xd0, 0x83, 0xa6, 0xaf, 0xc6, 0x4c, 0x67, 0x9e, 0x7d, + 0x69, 0x6b, 0x6e, 0x4a, 0xa5, 0x4a, 0x53, 0xb6, 0xb0, 0xd7, 0x58, 0xda, 0x3a, 0xf1, 0x51, 0xf2, + 0xb3, 0x64, 0x4a, 0xd7, 0x61, 0x12, 0xaf, 0x13, 0x07, 0xc1, 0xdf, 0xa0, 0xa6, 0xbb, 0x01, 0x0e, + 0xef, 0xdf, 0x00, 0xae, 0x36, 0xf8, 0xc7, 0x43, 0x4f, 0x1c, 0x9d, 0xc9, 0x73, 0x6c, 0xea, 0xbd, + 0x2f, 0xd9, 0xa7, 0xe8, 0xe8, 0x6a, 0x6c, 0x98, 0x3c, 0x55, 0x6b, 0xe1, 0x4f, 0xd1, 0xa3, 0x57, + 0x2c, 0x82, 0x24, 0x4b, 0x14, 0xc4, 0xf3, 0x6c, 0x0d, 0x76, 0x18, 0x2a, 0xa8, 0x7e, 0x8b, 0xc5, + 0x12, 0xcf, 0x67, 0xa1, 0x30, 0xab, 0xa5, 0xd4, 0xfe, 0x7f, 0x29, 0x95, 0x2e, 0x1d, 0x55, 0xbb, + 0x14, 0xbc, 0x45, 0x4f, 0xef, 0x3e, 0x06, 0x7f, 0x85, 0x1a, 0x7d, 0xca, 0x17, 0x5b, 0xb6, 0xb0, + 0xb5, 0x56, 0x42, 0xce, 0xc5, 0x2d, 0xf0, 0x7e, 0x1a, 0xde, 0x82, 0x22, 0x3b, 0x25, 0xfe, 0x0c, + 0xf9, 0x93, 0x75, 0x72, 0xd7, 0xc2, 0x76, 0x1d, 0xb4, 0x26, 0x78, 0xb3, 0x17, 0xdb, 0xa1, 0x71, + 0x80, 0x8e, 0x27, 0x1c, 0xe6, 0x2c, 0x86, 0x7e, 0x2a, 0x13, 0x65, 0xc2, 0xfb, 0x64, 0x0f, 0xd3, + 0x95, 0x11, 0x58, 0xb2, 0x28, 0xd2, 0x90, 0x89, 0xe7, 0x13, 0x07, 0xc9, 0x17, 0xd8, 0x9a, 0x86, + 0x4c, 0x65, 0xa6, 0xe1, 0x3e, 0x29, 0xed, 0xe0, 0x77, 0x0f, 0xb5, 0x9c, 0xd0, 0x7d, 0x1a, 0x45, + 0x42, 0xf0, 0x21, 0x6c, 0x98, 0xfd, 0x34, 0xc5, 0xfa, 0xb6, 0xf5, 0x83, 0xc8, 0x23, 0xef, 0x00, + 0x9d, 0xda, 0x10, 0x96, 0xfa, 0x61, 0x4d, 0xf8, 0x44, 0xc4, 0xf6, 0x41, 0xed, 0x61, 0xf8, 0x4b, + 0xf4, 0x44, 0xaf, 0xaf, 0x64, 0x2a, 0xa2, 0x88, 0xf1, 0x95, 0x59, 0xc6, 0x1b, 0x1a, 0x25, 0x36, + 0x8f, 0xbb, 0xc9, 0xfe, 0x83, 0x5f, 0x6a, 0xf9, 0xd7, 0xfa, 0xc8, 0xfc, 0x7c, 0xf1, 0x6f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xe1, 0x74, 0x7a, 0x84, 0x2c, 0x08, 0x00, 0x00, } diff --git a/proto/types.proto b/proto/types.proto index 2f420eeba..21697bc88 100644 --- a/proto/types.proto +++ b/proto/types.proto @@ -103,6 +103,8 @@ message FirecrackerMachineConfiguration { // for a microVM should be large enough uint32 MemSizeMib = 3; uint32 VcpuCount = 4; // Specifies the number of vCPUs for the VM + bool TrackDirtyPages = 5; // Specified if dirty-page-tracking should be enabled. + } // Message to specify the block device config for a Firecracker VM diff --git a/runtime/helpers.go b/runtime/helpers.go index 84a43f8f3..45840e461 100644 --- a/runtime/helpers.go +++ b/runtime/helpers.go @@ -14,6 +14,7 @@ package main import ( + "github.com/containernetworking/plugins/pkg/ns" "net" "time" @@ -55,6 +56,7 @@ func machineConfigurationFromProto(cfg *config.Config, req *proto.FirecrackerMac config.MemSizeMib = firecracker.Int64(int64(size)) } + config.TrackDirtyPages = req.TrackDirtyPages config.HtEnabled = firecracker.Bool(req.HtEnabled) return config @@ -118,6 +120,44 @@ func networkConfigFromProto(nwIface *proto.FirecrackerNetworkInterface, vmID str return result, nil } +// netNSFromProto returns the name and handle of the network namespace set, if any in the protobuf +// message. +func netNSFromProto(request *proto.CreateVMRequest) (string, ns.NetNS) { + if request.NetworkNamespace == "" { + return "", nil + } + + if request != nil { + netNS, err := ns.GetNS(request.NetworkNamespace) + if err != nil { + return "", nil + } + + return request.NetworkNamespace, netNS + } + + return "", nil +} + +// netNSFromProto returns the name and handle of the network namespace set, if any in the protobuf +// message. +func netNSFromSnapRequest(request *proto.LoadSnapshotRequest) (string, ns.NetNS) { + if request.NetworkNamespace == "" { + return "", nil + } + + if request != nil { + netNS, err := ns.GetNS(request.NetworkNamespace) + if err != nil { + return "", nil + } + + return request.NetworkNamespace, netNS + } + + return "", nil +} + // rateLimiterFromProto creates a firecracker RateLimiter object from the // protobuf message. func rateLimiterFromProto(rl *proto.FirecrackerRateLimiter) *models.RateLimiter { diff --git a/runtime/service.go b/runtime/service.go index 39801788d..3af7e8fbf 100644 --- a/runtime/service.go +++ b/runtime/service.go @@ -18,6 +18,7 @@ import ( "context" "encoding/json" "fmt" + "io/ioutil" "math" "net" "net/http" @@ -46,6 +47,7 @@ import ( taskAPI "github.com/containerd/containerd/runtime/v2/task" "github.com/containerd/fifo" "github.com/containerd/ttrpc" + "github.com/containernetworking/plugins/pkg/ns" "github.com/firecracker-microvm/firecracker-go-sdk" "github.com/firecracker-microvm/firecracker-go-sdk/client/models" "github.com/gofrs/uuid" @@ -111,6 +113,7 @@ type loadSnapReq struct { MemFilePath string `json:"mem_file_path"` SendSockAddr string `json:"sock_file_path"` EnableUserPageFaults bool `json:"enable_user_page_faults"` + NewSnapshotPath string `json:"new_snapshot_path"` } // implements shimapi @@ -173,6 +176,11 @@ type service struct { httpControlClient *http.Client firecrackerPid int taskDrivePathOnHost string + + snapLoaded bool + offloadEnabled bool + networkNamespace string + netNS ns.NetNS } func shimOpts(shimCtx context.Context) (*shim.Opts, error) { @@ -268,11 +276,15 @@ func (s *service) startEventForwarders(remotePublisher shim.Publisher) { go func() { <-s.vmReady + if !s.offloadEnabled && s.snapLoaded { + return + } + // Once the VM is ready, also start forwarding events from it to our exchange attachCh := eventbridge.Attach(ctx, s.eventBridgeClient, s.eventExchange) err := <-attachCh - if err != nil && err != context.Canceled { + if err != nil && err != context.Canceled && !strings.Contains(err.Error(), "context canceled") { s.logger.WithError(err).Error("error while forwarding events from VM agent") } @@ -486,6 +498,8 @@ func (s *service) CreateVM(requestCtx context.Context, request *proto.CreateVMRe resp proto.CreateVMResponse ) + s.offloadEnabled = request.OffloadEnabled + s.vmStartOnce.Do(func() { err = s.createVM(ctxWithTimeout, request) createRan = true @@ -510,10 +524,10 @@ func (s *service) CreateVM(requestCtx context.Context, request *proto.CreateVMRe s.logger.WithError(err).Error("failed to publish start VM event") } - // Commented out because its execution cancels the shim, and - // it would get executed on Offload if we leave it, killing the shim, - // and making snapshots impossible. - //go s.monitorVMExit() + // Cancels the shim + if ! s.offloadEnabled { + go s.monitorVMExit() + } // let all the other methods know that the VM is ready for tasks close(s.vmReady) @@ -620,7 +634,8 @@ func (s *service) createVM(requestCtx context.Context, request *proto.CreateVMRe return errors.Wrapf(err, "failed to create new machine instance") } - if err = s.machine.Start(s.shimCtx); err != nil { + s.networkNamespace, s.netNS = netNSFromProto(request) + if err = s.netNSStartVM(s.shimCtx); err != nil { return errors.Wrapf(err, "failed to start the VM") } @@ -657,6 +672,21 @@ func (s *service) createVM(requestCtx context.Context, request *proto.CreateVMRe return nil } +// netNSStartVM starts the firecracker process with the network namespace +// specified in the VM config. If the namespace is not specified, the process +// is started in the default network namespace. +func (s *service) netNSStartVM(ctx context.Context) error { + if s.networkNamespace == "" { + // Start without namespace + return s.machine.Start(ctx) + } + + return s.netNS.Do(func(_ ns.NetNS) error { + // Start the firecracker process in the target network namespace. + return s.machine.Start(ctx) + }) +} + func (s *service) mountDrives(requestCtx context.Context) error { for _, stubDrive := range s.driveMountStubs { err := stubDrive.PatchAndMount(requestCtx, s.machine, s.driveMountClient) @@ -680,7 +710,8 @@ func (s *service) StopVM(requestCtx context.Context, request *proto.StopVMReques timeout = time.Duration(request.TimeoutSeconds) * time.Second } - info, err := s.machine.DescribeInstanceInfo(requestCtx) + // TODO: this addition from fccd v0.25 causes crashes when stopping snapshotted vm + /*info, err := s.machine.DescribeInstanceInfo(requestCtx) if err != nil { return nil, errors.Wrapf(err, "failed to get instance info %v", info) } @@ -692,19 +723,58 @@ func (s *service) StopVM(requestCtx context.Context, request *proto.StopVMReques return nil, errors.Wrap(err, "failed to stop VM in paused State") } return &empty.Empty{}, nil - } + }*/ err = s.waitVMReady() if err != nil { return nil, err } - if err = s.shutdown(requestCtx, timeout, &taskAPI.ShutdownRequest{Now: true}); err != nil { + if ! s.snapLoaded { + err = s.shutdown(requestCtx, timeout, &taskAPI.ShutdownRequest{Now: true}) + } else { + err = s.shutdownSnapLoadedVm() + } + + if err != nil { return nil, err } + return &empty.Empty{}, nil } +// shutdownSnapLoadedVm shuts down a vm that has been loaded from a snapshot +func (s *service) shutdownSnapLoadedVm() error { + // Kill firecracker process and its child processes + if err := syscall.Kill(-s.firecrackerPid, 9); err != nil { + s.logger.WithError(err).Error("Failed to kill firecracker process") + return err + } + + // Delete firecracker socket + if err := os.RemoveAll(s.shimDir.FirecrackerSockPath()); err != nil { + s.logger.WithError(err).Error("Failed to delete firecracker socket") + return err + } + + // Delete firecracker vsock + if err := os.RemoveAll(s.shimDir.FirecrackerVSockPath()); err != nil { + s.logger.WithError(err).Error("Failed to delete firecracker vsock") + return err + } + + // Delete firecracker upf sock + if err := os.RemoveAll(s.shimDir.FirecrackerUPFSockPath()); err != nil { + s.logger.WithError(err).Error("Failed to delete firecracker UPF socket") + return err + } + + if err := s.cleanup(); err != nil { + s.logger.WithError(err).Error("failed to clean up the VM") + } + return nil +} + // GetVMInfo returns metadata for the VM being managed by this shim. If the VM has not been created yet, this // method will wait for up to a hardcoded timeout for it to exist, returning an error if the timeout is reached. func (s *service) GetVMInfo(requestCtx context.Context, request *proto.GetVMInfoRequest) (*proto.GetVMInfoResponse, error) { @@ -1725,7 +1795,6 @@ func (s *service) cleanup() error { // monitorVMExit watches the VM and cleanup resources when it terminates. // Comment out because unused -/* func (s *service) monitorVMExit() { // Block until the VM exits if err := s.machine.Wait(s.shimCtx); err != nil && err != context.Canceled { @@ -1736,13 +1805,12 @@ func (s *service) monitorVMExit() { s.logger.WithError(err).Error("failed to clean up the VM") } } -*/ func (s *service) createHTTPControlClient() { u := &httpunix.Transport{ - DialTimeout: 100 * time.Millisecond, - RequestTimeout: 10 * time.Second, - ResponseHeaderTimeout: 10 * time.Second, + DialTimeout: 500 * time.Millisecond, + RequestTimeout: 15 * time.Second, + ResponseHeaderTimeout: 15 * time.Second, } u.RegisterLocation("firecracker", s.shimDir.FirecrackerSockPath()) @@ -1802,7 +1870,7 @@ func formPauseReq() (*http.Request, error) { return req, nil } -func formLoadSnapReq(snapshotPath, memPath, sendSockAddr string, isUpf bool) (*http.Request, error) { +func formLoadSnapReq(snapshotPath, memPath, sendSockAddr string, isUpf bool, newSnapshotPath string) (*http.Request, error) { var req *http.Request data := loadSnapReq{ @@ -1810,6 +1878,7 @@ func formLoadSnapReq(snapshotPath, memPath, sendSockAddr string, isUpf bool) (*h MemFilePath: memPath, SendSockAddr: sendSockAddr, EnableUserPageFaults: isUpf, + NewSnapshotPath: newSnapshotPath, } json, err := json.Marshal(data) @@ -1829,11 +1898,11 @@ func formLoadSnapReq(snapshotPath, memPath, sendSockAddr string, isUpf bool) (*h return req, nil } -func formCreateSnapReq(snapshotPath, memPath string) (*http.Request, error) { +func formCreateSnapReq(snapshotPath, memPath, snapshotType string) (*http.Request, error) { var req *http.Request data := map[string]string{ - "snapshot_type": "Full", + "snapshot_type": snapshotType, "snapshot_path": snapshotPath, "mem_file_path": memPath, } @@ -1854,7 +1923,7 @@ func formCreateSnapReq(snapshotPath, memPath string) (*http.Request, error) { return req, nil } -func (s *service) startFirecrackerProcess() error { +func (s *service) startFirecrackerProcess(offload bool) error { firecPath, err := exec.LookPath("firecracker") if err != nil { logrus.WithError(err).Error("failed to look up firecracker binary") @@ -1880,9 +1949,21 @@ func (s *service) startFirecrackerProcess() error { "--show-log-origin", } - firecrackerCmd := exec.Command(firecPath, args...) + var firecrackerCmd *exec.Cmd + + if s.networkNamespace == "" { + firecrackerCmd = exec.Command(firecPath, args...) + } else { + cmdArgs := append([]string{"nsenter", fmt.Sprintf("--net=%s", s.networkNamespace), firecPath}, args...) + firecrackerCmd = exec.Command("sudo", cmdArgs...) + } firecrackerCmd.Dir = s.shimDir.RootPath() + // Make sure all child processes get killed + if ! offload { + firecrackerCmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} + } + if err := firecrackerCmd.Start(); err != nil { logrus.WithError(err).Error("Failed to start firecracker process") } @@ -1932,17 +2013,35 @@ func (s *service) PauseVM(ctx context.Context, req *proto.PauseVMRequest) (*empt return nil, err } - resp, err := s.httpControlClient.Do(pauseReq) + if s.networkNamespace == "" { + err = s.SendPauseVmRequest(pauseReq) + } else { + err = s.netNS.Do(func(_ ns.NetNS) error { + return s.SendPauseVmRequest(pauseReq) + }) + } + if err != nil { - s.logger.WithError(err).Error("Failed to send pause VM request") + s.logger.WithError(err).Error("Pause VM failed") return nil, err } + + return &empty.Empty{}, nil +} + +// SendPauseVmRequest sends a pause http request to the firecracker process +func (s *service) SendPauseVmRequest(pauseReq *http.Request) error { + resp, err := s.httpControlClient.Do(pauseReq) + + if err != nil { + return errors.Wrapf(err, "Failed to send pause VM request") + } + if !strings.Contains(resp.Status, "204") { - s.logger.WithError(err).Error("Failed to pause VM") - return nil, errors.New("Failed to pause VM") + return errors.New(fmt.Sprintf("Failed to pause VM, status %s", resp.Status)) } - return &empty.Empty{}, nil + return nil } // ResumeVM Resumes a VM @@ -1953,28 +2052,57 @@ func (s *service) ResumeVM(ctx context.Context, req *proto.ResumeVMRequest) (*em return nil, err } - resp, err := s.httpControlClient.Do(resumeReq) + if s.networkNamespace == "" { + err = s.SendResumeVmRequest(resumeReq) + } else { + err = s.netNS.Do(func(_ ns.NetNS) error { + return s.SendResumeVmRequest(resumeReq) + }) + } + if err != nil { - s.logger.WithError(err).Error("Failed to send resume VM request") + s.logger.WithError(err).Error("Resume VM failed") return nil, err } + + return &empty.Empty{}, nil +} + +// SendResumeVmRequest sends a resume http request to the firecracker process +func (s *service) SendResumeVmRequest(resumeReq *http.Request) error { + resp, err := s.httpControlClient.Do(resumeReq) + + if err != nil { + return errors.Wrapf(err, "Failed to send resume VM request") + } + if !strings.Contains(resp.Status, "204") { - s.logger.WithError(err).Error("Failed to resume VM") - return nil, errors.New("Failed to resume VM") + return errors.New(fmt.Sprintf("Failed to resume VM, status %s", resp.Status)) } - return &empty.Empty{}, nil + + return nil } // LoadSnapshot Loads a VM from a snapshot func (s *service) LoadSnapshot(ctx context.Context, req *proto.LoadSnapshotRequest) (*proto.LoadResponse, error) { - if err := s.startFirecrackerProcess(); err != nil { + s.networkNamespace, s.netNS = netNSFromSnapRequest(req) + s.snapLoaded = true + + if err := s.startFirecrackerProcess(req.Offloaded); err != nil { s.logger.WithError(err).Error("startFirecrackerProcess returned an error") return nil, err } - if err := s.dialFirecrackerSocket(); err != nil { - s.logger.WithError(err).Error("Failed to wait for firecracker socket") + if s.networkNamespace != "" { + if err := s.netNS.Do(func(_ ns.NetNS) error { return s.dialFirecrackerSocket() }); err != nil { + s.logger.WithError(err).Error("Failed to wait for firecracker socket") + } + } else { + if err := s.dialFirecrackerSocket(); err != nil { + s.logger.WithError(err).Error("Failed to wait for firecracker socket") + } } + s.createHTTPControlClient() sendSockAddr := s.shimDir.FirecrackerUPFSockPath() @@ -1982,50 +2110,91 @@ func (s *service) LoadSnapshot(ctx context.Context, req *proto.LoadSnapshotReque sendSockAddr = "dummy" } - loadSnapReq, err := formLoadSnapReq(req.SnapshotFilePath, req.MemFilePath, sendSockAddr, req.EnableUserPF) + loadSnapReq, err := formLoadSnapReq(req.SnapshotFilePath, req.MemFilePath, sendSockAddr, req.EnableUserPF, req.NewSnapshotPath) if err != nil { s.logger.WithError(err).Error("Failed to create load snapshot request") return nil, err } - resp, err := s.httpControlClient.Do(loadSnapReq) + if s.networkNamespace == "" { + err = s.SendLoadSnapRequest(loadSnapReq) + } else { + err = s.netNS.Do(func(_ ns.NetNS) error { + return s.SendLoadSnapRequest(loadSnapReq) + }) + } + if err != nil { - s.logger.WithError(err).Error("Failed to send load snapshot request") + s.logger.WithError(err).Error("Load snapshot failed") return nil, err } - if !strings.Contains(resp.Status, "204") { - s.logger.WithError(err).Error("Failed to load VM from snapshot") - s.logger.WithError(err).Errorf("Status of request: %s", resp.Status) - return nil, errors.New("Failed to load VM from snapshot") + + if ! req.Offloaded { + close(s.vmReady) } return &proto.LoadResponse{FirecrackerPID: strconv.Itoa(s.firecrackerPid)}, nil } +// SendLoadSnapRequest sends a load snapshot http request to the firecracker process +func (s *service) SendLoadSnapRequest(loadSnapReq *http.Request) error { + resp, err := s.httpControlClient.Do(loadSnapReq) + + if err != nil { + return errors.Wrapf(err, "Failed to send make load snapshot request") + } + + if !strings.Contains(resp.Status, "204") { + respStr, _ := ioutil.ReadAll(resp.Body) + return errors.New(fmt.Sprintf("Failed to load VM from snapshot: status %s, %s", resp.Status, respStr)) + } + + return nil +} + // CreateSnapshot Creates a snapshot of a VM func (s *service) CreateSnapshot(ctx context.Context, req *proto.CreateSnapshotRequest) (*empty.Empty, error) { - createSnapReq, err := formCreateSnapReq(req.SnapshotFilePath, req.MemFilePath) + createSnapReq, err := formCreateSnapReq(req.SnapshotFilePath, req.MemFilePath, req.SnapshotType) if err != nil { s.logger.WithError(err).Error("Failed to create make snapshot request") return nil, err } - resp, err := s.httpControlClient.Do(createSnapReq) + if s.networkNamespace == "" { + err = s.SendCreateSnapRequest(createSnapReq) + } else { + err = s.netNS.Do(func(_ ns.NetNS) error { + return s.SendCreateSnapRequest(createSnapReq) + }) + } + if err != nil { - s.logger.WithError(err).Error("Failed to send make snapshot request") + s.logger.WithError(err).Error("Create snapshot failed") return nil, err } + + return &empty.Empty{}, nil +} + +// SendCreateSnapRequest sends a create snapshot http request to the firecracker process +func (s *service) SendCreateSnapRequest(createSnapReq *http.Request) error { + resp, err := s.httpControlClient.Do(createSnapReq) + + if err != nil { + return errors.Wrapf(err, "Failed to send make snapshot request") + } + if !strings.Contains(resp.Status, "204") { - s.logger.WithError(err).Error("Failed to make snapshot of VM") - return nil, errors.New("Failed to make snapshot of VM") + return errors.New(fmt.Sprintf("Failed to make snapshot of VM, status %s", resp.Status)) } - return &empty.Empty{}, nil + return nil } // Offload Shuts down a VM and deletes the corresponding firecracker socket -// and vsock. All of the other resources will persist +// and vsock. All of the other resources will persist. func (s *service) Offload(ctx context.Context, req *proto.OffloadRequest) (*empty.Empty, error) { + if err := syscall.Kill(s.firecrackerPid, 9); err != nil { s.logger.WithError(err).Error("Failed to kill firecracker process") return nil, err