{"record":{"id":"91a787b8e415817c","repo":"pulumi/pulumi","slug":"install-q-w","errorCode":null,"errorMessage":"install %q: %w","messagePattern":"install %q: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/cmd/pulumi/convert/io.go","lineNumber":54,"sourceCode":"\tpluginSpec, err := workspace.NewPluginDescriptor(ctx.Request(), name, apitype.ConverterPlugin, nil, \"\", nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not load converter plugin: %w\", err)\n\t}\n\n\t// Try and load the converter plugin for this\n\tconverter, err := plugin.NewConverter(ctx, pluginSpec.Name, pluginSpec.Version)\n\tif err != nil {\n\t\t// If NewConverter returns a MissingError, we can try and install the plugin if it was missing and try again,\n\t\t// unless auto plugin installs are turned off.\n\t\t_, ok := errors.AsType[*workspace.MissingError](err)\n\t\tif !ok || env.DisableAutomaticPluginAcquisition.Value() {\n\t\t\t// Not a MissingError, return the original error.\n\t\t\treturn nil, fmt.Errorf(\"load %q: %w\", name, err)\n\t\t}\n\n\t\t_, err = pkgWorkspace.InstallPlugin(ctx.Base(), pluginSpec, log, schema.NewLoaderServerFromContext)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"install %q: %w\", name, err)\n\t\t}\n\n\t\tconverter, err = plugin.NewConverter(ctx, pluginSpec.Name, pluginSpec.Version)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"load %q: %w\", name, err)\n\t\t}\n\t}\n\treturn converter, nil\n}\n","sourceCodeStart":36,"sourceCodeEnd":64,"githubUrl":"https://github.com/pulumi/pulumi/blob/793f7b2e160db4321fb7fb6b0607461e01cb251e/pkg/cmd/pulumi/convert/io.go#L36-L64","documentation":"In `LoadConverterPlugin` (pkg/cmd/pulumi/convert/io.go:54), when `plugin.NewConverter` reports a `*workspace.MissingError` and auto plugin acquisition is enabled, the CLI calls `pkgWorkspace.InstallPlugin` to fetch the converter. This error wraps any failure of that install — download failure, no matching version in the registry, checksum mismatch, or network issues.","triggerScenarios":"Converter plugin not installed locally and `InstallPlugin` fails: no network/proxy blocks downloads.pulumi.com, requested version doesn't exist, disk full in ~/.pulumi/plugins, or download verification failure.","commonSituations":"Air-gapped or proxied CI environments; requesting a nonexistent plugin version; full home partition preventing plugin extraction; corporate TLS interception breaking downloads.","solutions":["Check network access to the plugin registry (PULUMI_GET_WILY / downloads.pulumi.com) and proxy env (HTTPS_PROXY)","Pre-install the plugin: `pulumi plugin install converter <name> <version>` and confirm the version exists with `pulumi plugin ls --help` / registry","Free disk space in ~/.pulumi/plugins (prune old plugins: `pulumi plugin rm --all --yes` for unused)","If behind a corporate proxy, configure the proxy or mirror the plugin manually into ~/.pulumi/plugins","Retry — transient registry/network errors are common in CI"],"exampleFix":"// before: proxied CI\npulumi convert --from terraform --out ./proj  # install \"terraform\": download failed\n// after\ncurl -I https://api.github.com  # verify egress, set proxy\nexport HTTPS_PROXY=http://proxy.corp:8080\npulumi plugin install converter terraform && pulumi convert --from terraform --out ./proj","handlingStrategy":"retry","validationCode":"pulumi plugin install converter terraform 2>&1 || { echo \"pre-flight install failed; check network/proxy\"; exit 1; }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pre-install plugins in your CI image so convert never downloads at run time","Configure HTTPS_PROXY and verify egress to Pulumi's plugin registry","Keep ~/.pulumi on a volume with free space","Pin known-good plugin versions"],"tags":["pulumi","convert","plugin","network","install"],"backgroundTag":"plugin-install-failed","analyzedSha":"793f7b2e160db4321fb7fb6b0607461e01cb251e","analyzedAt":"2026-08-31T09:36:43.099Z","schemaVersion":2},"datasetVersion":"2026-09-01T08:17:40.651Z"}