MCPcopy
hub / github.com/moby/moby / createPlugin

Method createPlugin

daemon/pkg/plugin/manager_linux.go:299–346  ·  view source on GitHub ↗

createPlugin creates a new plugin. take lock before calling.

(name string, configDigest, manifestDigest digest.Digest, blobsums []digest.Digest, rootFSDir string, privileges *plugin.Privileges, opts ...CreateOpt)

Source from the content-addressed store, hash-verified

297
298// createPlugin creates a new plugin. take lock before calling.
299func (pm *Manager) createPlugin(name string, configDigest, manifestDigest digest.Digest, blobsums []digest.Digest, rootFSDir string, privileges *plugin.Privileges, opts ...CreateOpt) (_ *v2.Plugin, retErr error) {
300 if err := pm.config.Store.validateName(name); err != nil { // todo: this check is wrong. remove store
301 return nil, errdefs.InvalidParameter(err)
302 }
303
304 config, err := pm.setupNewPlugin(configDigest, privileges)
305 if err != nil {
306 return nil, err
307 }
308
309 p := &v2.Plugin{
310 PluginObj: plugin.Plugin{
311 Name: name,
312 ID: stringid.GenerateRandomID(),
313 Config: config,
314 },
315 Config: configDigest,
316 Blobsums: blobsums,
317 Manifest: manifestDigest,
318 }
319 p.InitEmptySettings()
320 for _, o := range opts {
321 o(p)
322 }
323
324 pdir := filepath.Join(pm.config.Root, p.PluginObj.ID)
325 if err := os.MkdirAll(pdir, 0o700); err != nil {
326 return nil, errors.Wrapf(err, "failed to mkdir %v", pdir)
327 }
328
329 defer func() {
330 if retErr != nil {
331 _ = os.RemoveAll(pdir)
332 }
333 }()
334
335 if err := os.Rename(rootFSDir, filepath.Join(pdir, rootFSFileName)); err != nil {
336 return nil, errors.Wrap(err, "failed to rename rootfs")
337 }
338
339 if err := pm.save(p); err != nil {
340 return nil, err
341 }
342
343 pm.config.Store.Add(p) // todo: remove
344
345 return p, nil
346}
347
348func recursiveUnmount(target string) error {
349 return mount.RecursiveUnmount(target)

Callers 2

PullMethod · 0.95
CreateFromContextMethod · 0.95

Calls 10

setupNewPluginMethod · 0.95
InitEmptySettingsMethod · 0.95
saveMethod · 0.95
InvalidParameterFunction · 0.92
GenerateRandomIDFunction · 0.92
RemoveAllMethod · 0.80
RenameMethod · 0.80
JoinMethod · 0.65
AddMethod · 0.65
validateNameMethod · 0.45

Tested by

no test coverage detected