8421fd9e52
The code that calculated plugin sizes was incorrect; it would show the total size consumed by all plugins, for each plugin, which is clearly busted. We should compute each plugin's size from its own directory.
76 lines
2.5 KiB
Go
76 lines
2.5 KiB
Go
// Copyright 2016-2018, Pulumi Corporation. All rights reserved.
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/pulumi/pulumi/pkg/engine"
|
|
"github.com/pulumi/pulumi/pkg/resource/plugin"
|
|
"github.com/pulumi/pulumi/pkg/util/cmdutil"
|
|
"github.com/pulumi/pulumi/pkg/util/contract"
|
|
"github.com/pulumi/pulumi/pkg/workspace"
|
|
)
|
|
|
|
func newPluginCmd() *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: "plugin",
|
|
Short: "Manage language and resource provider plugins",
|
|
Long: "Manage language and resource provider plugins.\n" +
|
|
"\n" +
|
|
"Pulumi uses dynamically loaded plugins as an extensibility mechanism for\n" +
|
|
"supporting any number of languages and resource providers. These plugins are\n" +
|
|
"distributed out of band and must be installed manually. Attempting to use a\n" +
|
|
"package that provisions resources without the corresponding plugin will fail.\n" +
|
|
"\n" +
|
|
"You may write your own plugins, for example to implement custom languages or\n" +
|
|
"resources, although most people will never need to do this. To understand how to\n" +
|
|
"write and distribute your own plugins, please consult the relevant documentation.\n" +
|
|
"\n" +
|
|
"The plugin family of commands provides a way of explicitly managing plugins.",
|
|
Args: cmdutil.NoArgs,
|
|
}
|
|
|
|
cmd.AddCommand(newPluginInstallCmd())
|
|
cmd.AddCommand(newPluginLsCmd())
|
|
cmd.AddCommand(newPluginRmCmd())
|
|
|
|
return cmd
|
|
}
|
|
|
|
// getProjectPlugins fetches a list of plugins used by this project.
|
|
func getProjectPlugins() ([]workspace.PluginInfo, error) {
|
|
proj, root, err := readProject()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
projinfo := &engine.Projinfo{Proj: proj, Root: root}
|
|
pwd, main, ctx, err := engine.ProjectInfoContext(projinfo, nil, cmdutil.Diag(), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Get the required plugins and then ensure they have metadata populated about them. Because it's possible
|
|
// a plugin required by the project hasn't yet been installed, we will simply skip any errors we encounter.
|
|
var results []workspace.PluginInfo
|
|
plugins, err := ctx.Host.GetRequiredPlugins(plugin.ProgInfo{
|
|
Proj: proj,
|
|
Pwd: pwd,
|
|
Program: main,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, plugin := range plugins {
|
|
if _, path, _ := workspace.GetPluginPath(plugin.Kind, plugin.Name, plugin.Version); path != "" {
|
|
err = plugin.SetFileMetadata(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
contract.IgnoreError(err)
|
|
}
|
|
results = append(results, plugin)
|
|
}
|
|
return results, nil
|
|
}
|