diff --git a/pkg/codegen/go/gen.go b/pkg/codegen/go/gen.go index 070dd4733..860724320 100644 --- a/pkg/codegen/go/gen.go +++ b/pkg/codegen/go/gen.go @@ -3110,8 +3110,10 @@ func generatePackageContextMap(tool string, pkg *schema.Package, goInfo GoPackag pkg.functions = append(pkg.functions, f) name := tokenToName(f.Token) - originalName := name - if pkg.names.Has(name) { + + if pkg.names.Has(name) || + pkg.names.Has(name+"Args") || + pkg.names.Has(name+"Result") { switch { case strings.HasPrefix(name, "New"): name = "Create" + name[3:] @@ -3124,15 +3126,9 @@ func generatePackageContextMap(tool string, pkg *schema.Package, goInfo GoPackag if f.Inputs != nil { pkg.names.Add(name + "Args") - if originalName != name { - pkg.renamed[originalName+"Args"] = name + "Args" - } } if f.Outputs != nil { pkg.names.Add(name + "Result") - if originalName != name { - pkg.renamed[originalName+"Result"] = name + "Result" - } } } diff --git a/pkg/codegen/internal/test/sdk_driver.go b/pkg/codegen/internal/test/sdk_driver.go index f7565cf7a..41d13f372 100644 --- a/pkg/codegen/internal/test/sdk_driver.go +++ b/pkg/codegen/internal/test/sdk_driver.go @@ -203,6 +203,11 @@ var sdkTests = []sdkTest{ Skip: codegen.NewStringSet("python/test", "nodejs/test"), SkipCompileCheck: codegen.NewStringSet(dotnet), }, + { + Directory: "regress-8403", + Description: "Regress pulumi/pulumi#8403", + SkipCompileCheck: codegen.NewStringSet(dotnet, python, nodejs), + }, } var genSDKOnly bool diff --git a/pkg/codegen/internal/test/testdata/regress-8403/docs/_index.md b/pkg/codegen/internal/test/testdata/regress-8403/docs/_index.md new file mode 100644 index 000000000..20654b6c9 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/docs/_index.md @@ -0,0 +1,33 @@ +--- +title: "MongoDB Atlas" +title_tag: "mongodbatlas.MongoDB Atlas" +meta_desc: "" +layout: api +no_edit_this_page: true +--- + + + + + + +

Resources

+ + +

Functions

+ + +

Package Details

+
+
Repository
+
+
License
+
+
Version
+
0.0.1
+
+ diff --git a/pkg/codegen/internal/test/testdata/regress-8403/docs/codegen-manifest.json b/pkg/codegen/internal/test/testdata/regress-8403/docs/codegen-manifest.json new file mode 100644 index 000000000..c13600d68 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/docs/codegen-manifest.json @@ -0,0 +1,7 @@ +{ + "emittedFiles": [ + "_index.md", + "getcustomdbroles/_index.md", + "provider/_index.md" + ] +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/docs/getcustomdbroles/_index.md b/pkg/codegen/internal/test/testdata/regress-8403/docs/getcustomdbroles/_index.md new file mode 100644 index 000000000..35e4d113a --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/docs/getcustomdbroles/_index.md @@ -0,0 +1,144 @@ + +--- +title: "getCustomDbRoles" +title_tag: "mongodbatlas.getCustomDbRoles" +meta_desc: "Documentation for the mongodbatlas.getCustomDbRoles function with examples, input properties, output properties, and supporting types." +layout: api +no_edit_this_page: true +--- + + + + + + + + + +## Using getCustomDbRoles {#using} + +{{< chooser language "typescript,python,go,csharp" / >}} + + +{{% choosable language nodejs %}} +
function getCustomDbRoles(args: GetCustomDbRolesArgs, opts?: InvokeOptions): Promise<GetCustomDbRolesResult>
+{{% /choosable %}} + + +{{% choosable language python %}} +
def get_custom_db_roles(opts: Optional[InvokeOptions] = None) -> GetCustomDbRolesResult
+{{% /choosable %}} + + +{{% choosable language go %}} +
func LookupCustomDbRoles(ctx *Context, args *LookupCustomDbRolesArgs, opts ...InvokeOption) (*LookupCustomDbRolesResult, error)
+ +> Note: This function is named `LookupCustomDbRoles` in the Go SDK. + +{{% /choosable %}} + + +{{% choosable language csharp %}} +
public static class GetCustomDbRoles 
+{
+    public static Task<GetCustomDbRolesResult> InvokeAsync(GetCustomDbRolesArgs args, InvokeOptions? opts = null)
+}
+{{% /choosable %}} + + + +The following arguments are supported: + + +{{% choosable language csharp %}} +
+{{% /choosable %}} + +{{% choosable language go %}} +
+{{% /choosable %}} + +{{% choosable language nodejs %}} +
+{{% /choosable %}} + +{{% choosable language python %}} +
+{{% /choosable %}} + + + + +## getCustomDbRoles Result {#result} + +The following output properties are available: + + + +{{% choosable language csharp %}} +
+ +Result + + + GetCustomDbRolesResult +
+
{{% md %}}{{% /md %}}
+{{% /choosable %}} + +{{% choosable language go %}} +
+ +Result + + + GetCustomDbRolesResult +
+
{{% md %}}{{% /md %}}
+{{% /choosable %}} + +{{% choosable language nodejs %}} +
+ +result + + + GetCustomDbRolesResult +
+
{{% md %}}{{% /md %}}
+{{% /choosable %}} + +{{% choosable language python %}} +
+ +result + + + GetCustomDbRolesResult +
+
{{% md %}}{{% /md %}}
+{{% /choosable %}} + + + + + +

Package Details

+
+
Repository
+
+
License
+
+
+ diff --git a/pkg/codegen/internal/test/testdata/regress-8403/docs/provider/_index.md b/pkg/codegen/internal/test/testdata/regress-8403/docs/provider/_index.md new file mode 100644 index 000000000..e2a59d305 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/docs/provider/_index.md @@ -0,0 +1,241 @@ + +--- +title: "Provider" +title_tag: "mongodbatlas.Provider" +meta_desc: "Documentation for the mongodbatlas.Provider resource with examples, input properties, output properties, lookup functions, and supporting types." +layout: api +no_edit_this_page: true +--- + + + + + + + + + +## Create a Provider Resource {#create} +{{< chooser language "typescript,python,go,csharp" / >}} + + +{{% choosable language nodejs %}} +
new Provider(name: string, args?: ProviderArgs, opts?: CustomResourceOptions);
+{{% /choosable %}} + +{{% choosable language python %}} +
@overload
+def Provider(resource_name: str,
+             opts: Optional[ResourceOptions] = None)
+@overload
+def Provider(resource_name: str,
+             args: Optional[ProviderArgs] = None,
+             opts: Optional[ResourceOptions] = None)
+{{% /choosable %}} + +{{% choosable language go %}} +
func NewProvider(ctx *Context, name string, args *ProviderArgs, opts ...ResourceOption) (*Provider, error)
+{{% /choosable %}} + +{{% choosable language csharp %}} +
public Provider(string name, ProviderArgs? args = null, CustomResourceOptions? opts = null)
+{{% /choosable %}} + +{{% choosable language nodejs %}} + +
+ name + + string +
+
The unique name of the resource.
+ args + + ProviderArgs +
+
The arguments to resource properties.
+ opts + + CustomResourceOptions +
+
Bag of options to control resource's behavior.
+ +{{% /choosable %}} + +{{% choosable language python %}} + +
+ resource_name + + str +
+
The unique name of the resource.
+ args + + ProviderArgs +
+
The arguments to resource properties.
+ opts + + ResourceOptions +
+
Bag of options to control resource's behavior.
+ +{{% /choosable %}} + +{{% choosable language go %}} + +
+ ctx + + Context +
+
Context object for the current deployment.
+ name + + string +
+
The unique name of the resource.
+ args + + ProviderArgs +
+
The arguments to resource properties.
+ opts + + ResourceOption +
+
Bag of options to control resource's behavior.
+ +{{% /choosable %}} + +{{% choosable language csharp %}} + +
+ name + + string +
+
The unique name of the resource.
+ args + + ProviderArgs +
+
The arguments to resource properties.
+ opts + + CustomResourceOptions +
+
Bag of options to control resource's behavior.
+ +{{% /choosable %}} + +## Provider Resource Properties {#properties} + +To learn more about resource properties and how to use them, see [Inputs and Outputs]({{< relref "/docs/intro/concepts/inputs-outputs" >}}) in the Architecture and Concepts docs. + +### Inputs + +The Provider resource accepts the following [input]({{< relref "/docs/intro/concepts/inputs-outputs" >}}) properties: + + + +{{% choosable language csharp %}} +
+{{% /choosable %}} + +{{% choosable language go %}} +
+{{% /choosable %}} + +{{% choosable language nodejs %}} +
+{{% /choosable %}} + +{{% choosable language python %}} +
+{{% /choosable %}} + + +### Outputs + +All [input](#inputs) properties are implicitly available as output properties. Additionally, the Provider resource produces the following output properties: + + + +{{% choosable language csharp %}} +
+ +Id + + + string +
+
{{% md %}}The provider-assigned unique ID for this managed resource.{{% /md %}}
+{{% /choosable %}} + +{{% choosable language go %}} +
+ +Id + + + string +
+
{{% md %}}The provider-assigned unique ID for this managed resource.{{% /md %}}
+{{% /choosable %}} + +{{% choosable language nodejs %}} +
+ +id + + + string +
+
{{% md %}}The provider-assigned unique ID for this managed resource.{{% /md %}}
+{{% /choosable %}} + +{{% choosable language python %}} +
+ +id + + + str +
+
{{% md %}}The provider-assigned unique ID for this managed resource.{{% /md %}}
+{{% /choosable %}} + + + + + + + + +

Package Details

+
+
Repository
+
+
License
+
+
+ diff --git a/pkg/codegen/internal/test/testdata/regress-8403/dotnet/GetCustomDbRoles.cs b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/GetCustomDbRoles.cs new file mode 100644 index 000000000..d42e1685a --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/GetCustomDbRoles.cs @@ -0,0 +1,38 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Mongodbatlas +{ + public static class GetCustomDbRoles + { + public static Task InvokeAsync(GetCustomDbRolesArgs? args = null, InvokeOptions? options = null) + => Pulumi.Deployment.Instance.InvokeAsync("mongodbatlas::getCustomDbRoles", args ?? new GetCustomDbRolesArgs(), options.WithVersion()); + } + + + public sealed class GetCustomDbRolesArgs : Pulumi.InvokeArgs + { + public GetCustomDbRolesArgs() + { + } + } + + + [OutputType] + public sealed class GetCustomDbRolesResult + { + public readonly Outputs.GetCustomDbRolesResult? Result; + + [OutputConstructor] + private GetCustomDbRolesResult(Outputs.GetCustomDbRolesResult? result) + { + Result = result; + } + } +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Outputs/GetCustomDbRolesResult.cs b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Outputs/GetCustomDbRolesResult.cs new file mode 100644 index 000000000..ed3b6968e --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Outputs/GetCustomDbRolesResult.cs @@ -0,0 +1,21 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Mongodbatlas.Outputs +{ + + [OutputType] + public sealed class GetCustomDbRolesResult + { + [OutputConstructor] + private GetCustomDbRolesResult() + { + } + } +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Provider.cs b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Provider.cs new file mode 100644 index 000000000..66b45e6f0 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Provider.cs @@ -0,0 +1,46 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Mongodbatlas +{ + [MongodbatlasResourceType("pulumi:providers:mongodbatlas")] + public partial class Provider : Pulumi.ProviderResource + { + /// + /// Create a Provider resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Provider(string name, ProviderArgs? args = null, CustomResourceOptions? options = null) + : base("mongodbatlas", name, args ?? new ProviderArgs(), MakeResourceOptions(options, "")) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + } + + public sealed class ProviderArgs : Pulumi.ResourceArgs + { + public ProviderArgs() + { + } + } +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Pulumi.Mongodbatlas.csproj b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Pulumi.Mongodbatlas.csproj new file mode 100644 index 000000000..d669bb92b --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Pulumi.Mongodbatlas.csproj @@ -0,0 +1,55 @@ + + + + true + Pulumi Corp. + Pulumi Corp. + + + + + logo.png + + netcoreapp3.1 + enable + false + + + + true + 1701;1702;1591 + + + + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + true + true + + + + true + + + + + + + + + + + + + + + + + + + + True + + + + + diff --git a/pkg/codegen/internal/test/testdata/regress-8403/dotnet/README.md b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Utilities.cs b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Utilities.cs new file mode 100644 index 000000000..0b6195bb0 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/Utilities.cs @@ -0,0 +1,87 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.IO; +using System.Reflection; +using Pulumi; + +namespace Pulumi.Mongodbatlas +{ + static class Utilities + { + public static string? GetEnv(params string[] names) + { + foreach (var n in names) + { + var value = Environment.GetEnvironmentVariable(n); + if (value != null) + { + return value; + } + } + return null; + } + + static string[] trueValues = { "1", "t", "T", "true", "TRUE", "True" }; + static string[] falseValues = { "0", "f", "F", "false", "FALSE", "False" }; + public static bool? GetEnvBoolean(params string[] names) + { + var s = GetEnv(names); + if (s != null) + { + if (Array.IndexOf(trueValues, s) != -1) + { + return true; + } + if (Array.IndexOf(falseValues, s) != -1) + { + return false; + } + } + return null; + } + + public static int? GetEnvInt32(params string[] names) => int.TryParse(GetEnv(names), out int v) ? (int?)v : null; + + public static double? GetEnvDouble(params string[] names) => double.TryParse(GetEnv(names), out double v) ? (double?)v : null; + + public static InvokeOptions WithVersion(this InvokeOptions? options) + { + if (options?.Version != null) + { + return options; + } + return new InvokeOptions + { + Parent = options?.Parent, + Provider = options?.Provider, + Version = Version, + }; + } + + private readonly static string version; + public static string Version => version; + + static Utilities() + { + var assembly = typeof(Utilities).GetTypeInfo().Assembly; + using var stream = assembly.GetManifestResourceStream("Pulumi.Mongodbatlas.version.txt"); + using var reader = new StreamReader(stream ?? throw new NotSupportedException("Missing embedded version.txt file")); + version = reader.ReadToEnd().Trim(); + var parts = version.Split("\n"); + if (parts.Length == 2) + { + // The first part is the provider name. + version = parts[1].Trim(); + } + } + } + + internal sealed class MongodbatlasResourceTypeAttribute : Pulumi.ResourceTypeAttribute + { + public MongodbatlasResourceTypeAttribute(string type) : base(type, Utilities.Version) + { + } + } +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/dotnet/codegen-manifest.json b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/codegen-manifest.json new file mode 100644 index 000000000..2dd33e210 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/codegen-manifest.json @@ -0,0 +1,11 @@ +{ + "emittedFiles": [ + "GetCustomDbRoles.cs", + "Outputs/GetCustomDbRolesResult.cs", + "Provider.cs", + "Pulumi.Mongodbatlas.csproj", + "README.md", + "Utilities.cs", + "logo.png" + ] +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/dotnet/logo.png b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/logo.png new file mode 100644 index 000000000..181f421e9 Binary files /dev/null and b/pkg/codegen/internal/test/testdata/regress-8403/dotnet/logo.png differ diff --git a/pkg/codegen/internal/test/testdata/regress-8403/go/codegen-manifest.json b/pkg/codegen/internal/test/testdata/regress-8403/go/codegen-manifest.json new file mode 100644 index 000000000..ec4a1afa9 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/go/codegen-manifest.json @@ -0,0 +1,10 @@ +{ + "emittedFiles": [ + "mongodbatlas/doc.go", + "mongodbatlas/getCustomDbRoles.go", + "mongodbatlas/init.go", + "mongodbatlas/provider.go", + "mongodbatlas/pulumiTypes.go", + "mongodbatlas/pulumiUtilities.go" + ] +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/doc.go b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/doc.go new file mode 100644 index 000000000..a4850eeba --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/doc.go @@ -0,0 +1,3 @@ +// Package mongodbatlas exports types, functions, subpackages for provisioning mongodbatlas resources. +// +package mongodbatlas diff --git a/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/getCustomDbRoles.go b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/getCustomDbRoles.go new file mode 100644 index 000000000..53f641738 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/getCustomDbRoles.go @@ -0,0 +1,24 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package mongodbatlas + +import ( + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +func LookupCustomDbRoles(ctx *pulumi.Context, args *LookupCustomDbRolesArgs, opts ...pulumi.InvokeOption) (*LookupCustomDbRolesResult, error) { + var rv LookupCustomDbRolesResult + err := ctx.Invoke("mongodbatlas::getCustomDbRoles", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +type LookupCustomDbRolesArgs struct { +} + +type LookupCustomDbRolesResult struct { + Result *GetCustomDbRolesResult `pulumi:"result"` +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/init.go b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/init.go new file mode 100644 index 000000000..e5010e4e7 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/init.go @@ -0,0 +1,40 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package mongodbatlas + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type pkg struct { + version semver.Version +} + +func (p *pkg) Version() semver.Version { + return p.version +} + +func (p *pkg) ConstructProvider(ctx *pulumi.Context, name, typ, urn string) (pulumi.ProviderResource, error) { + if typ != "pulumi:providers:mongodbatlas" { + return nil, fmt.Errorf("unknown provider type: %s", typ) + } + + r := &Provider{} + err := ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return r, err +} + +func init() { + version, err := PkgVersion() + if err != nil { + fmt.Printf("failed to determine package version. defaulting to v1: %v\n", err) + } + pulumi.RegisterResourcePackage( + "mongodbatlas", + &pkg{version}, + ) +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/provider.go b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/provider.go new file mode 100644 index 000000000..4046d4a06 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/provider.go @@ -0,0 +1,79 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package mongodbatlas + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type Provider struct { + pulumi.ProviderResourceState +} + +// NewProvider registers a new resource with the given unique name, arguments, and options. +func NewProvider(ctx *pulumi.Context, + name string, args *ProviderArgs, opts ...pulumi.ResourceOption) (*Provider, error) { + if args == nil { + args = &ProviderArgs{} + } + + var resource Provider + err := ctx.RegisterResource("pulumi:providers:mongodbatlas", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +type providerArgs struct { +} + +// The set of arguments for constructing a Provider resource. +type ProviderArgs struct { +} + +func (ProviderArgs) ElementType() reflect.Type { + return reflect.TypeOf((*providerArgs)(nil)).Elem() +} + +type ProviderInput interface { + pulumi.Input + + ToProviderOutput() ProviderOutput + ToProviderOutputWithContext(ctx context.Context) ProviderOutput +} + +func (*Provider) ElementType() reflect.Type { + return reflect.TypeOf((**Provider)(nil)).Elem() +} + +func (i *Provider) ToProviderOutput() ProviderOutput { + return i.ToProviderOutputWithContext(context.Background()) +} + +func (i *Provider) ToProviderOutputWithContext(ctx context.Context) ProviderOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProviderOutput) +} + +type ProviderOutput struct{ *pulumi.OutputState } + +func (ProviderOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Provider)(nil)).Elem() +} + +func (o ProviderOutput) ToProviderOutput() ProviderOutput { + return o +} + +func (o ProviderOutput) ToProviderOutputWithContext(ctx context.Context) ProviderOutput { + return o +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ProviderInput)(nil)).Elem(), &Provider{}) + pulumi.RegisterOutputType(ProviderOutput{}) +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/pulumiTypes.go b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/pulumiTypes.go new file mode 100644 index 000000000..9b326e180 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/pulumiTypes.go @@ -0,0 +1,136 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package mongodbatlas + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type GetCustomDbRolesResult struct { +} + +// GetCustomDbRolesResultInput is an input type that accepts GetCustomDbRolesResultArgs and GetCustomDbRolesResultOutput values. +// You can construct a concrete instance of `GetCustomDbRolesResultInput` via: +// +// GetCustomDbRolesResultArgs{...} +type GetCustomDbRolesResultInput interface { + pulumi.Input + + ToGetCustomDbRolesResultOutput() GetCustomDbRolesResultOutput + ToGetCustomDbRolesResultOutputWithContext(context.Context) GetCustomDbRolesResultOutput +} + +type GetCustomDbRolesResultArgs struct { +} + +func (GetCustomDbRolesResultArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetCustomDbRolesResult)(nil)).Elem() +} + +func (i GetCustomDbRolesResultArgs) ToGetCustomDbRolesResultOutput() GetCustomDbRolesResultOutput { + return i.ToGetCustomDbRolesResultOutputWithContext(context.Background()) +} + +func (i GetCustomDbRolesResultArgs) ToGetCustomDbRolesResultOutputWithContext(ctx context.Context) GetCustomDbRolesResultOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetCustomDbRolesResultOutput) +} + +func (i GetCustomDbRolesResultArgs) ToGetCustomDbRolesResultPtrOutput() GetCustomDbRolesResultPtrOutput { + return i.ToGetCustomDbRolesResultPtrOutputWithContext(context.Background()) +} + +func (i GetCustomDbRolesResultArgs) ToGetCustomDbRolesResultPtrOutputWithContext(ctx context.Context) GetCustomDbRolesResultPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetCustomDbRolesResultOutput).ToGetCustomDbRolesResultPtrOutputWithContext(ctx) +} + +// GetCustomDbRolesResultPtrInput is an input type that accepts GetCustomDbRolesResultArgs, GetCustomDbRolesResultPtr and GetCustomDbRolesResultPtrOutput values. +// You can construct a concrete instance of `GetCustomDbRolesResultPtrInput` via: +// +// GetCustomDbRolesResultArgs{...} +// +// or: +// +// nil +type GetCustomDbRolesResultPtrInput interface { + pulumi.Input + + ToGetCustomDbRolesResultPtrOutput() GetCustomDbRolesResultPtrOutput + ToGetCustomDbRolesResultPtrOutputWithContext(context.Context) GetCustomDbRolesResultPtrOutput +} + +type getCustomDbRolesResultPtrType GetCustomDbRolesResultArgs + +func GetCustomDbRolesResultPtr(v *GetCustomDbRolesResultArgs) GetCustomDbRolesResultPtrInput { + return (*getCustomDbRolesResultPtrType)(v) +} + +func (*getCustomDbRolesResultPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**GetCustomDbRolesResult)(nil)).Elem() +} + +func (i *getCustomDbRolesResultPtrType) ToGetCustomDbRolesResultPtrOutput() GetCustomDbRolesResultPtrOutput { + return i.ToGetCustomDbRolesResultPtrOutputWithContext(context.Background()) +} + +func (i *getCustomDbRolesResultPtrType) ToGetCustomDbRolesResultPtrOutputWithContext(ctx context.Context) GetCustomDbRolesResultPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetCustomDbRolesResultPtrOutput) +} + +type GetCustomDbRolesResultOutput struct{ *pulumi.OutputState } + +func (GetCustomDbRolesResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetCustomDbRolesResult)(nil)).Elem() +} + +func (o GetCustomDbRolesResultOutput) ToGetCustomDbRolesResultOutput() GetCustomDbRolesResultOutput { + return o +} + +func (o GetCustomDbRolesResultOutput) ToGetCustomDbRolesResultOutputWithContext(ctx context.Context) GetCustomDbRolesResultOutput { + return o +} + +func (o GetCustomDbRolesResultOutput) ToGetCustomDbRolesResultPtrOutput() GetCustomDbRolesResultPtrOutput { + return o.ToGetCustomDbRolesResultPtrOutputWithContext(context.Background()) +} + +func (o GetCustomDbRolesResultOutput) ToGetCustomDbRolesResultPtrOutputWithContext(ctx context.Context) GetCustomDbRolesResultPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v GetCustomDbRolesResult) *GetCustomDbRolesResult { + return &v + }).(GetCustomDbRolesResultPtrOutput) +} + +type GetCustomDbRolesResultPtrOutput struct{ *pulumi.OutputState } + +func (GetCustomDbRolesResultPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**GetCustomDbRolesResult)(nil)).Elem() +} + +func (o GetCustomDbRolesResultPtrOutput) ToGetCustomDbRolesResultPtrOutput() GetCustomDbRolesResultPtrOutput { + return o +} + +func (o GetCustomDbRolesResultPtrOutput) ToGetCustomDbRolesResultPtrOutputWithContext(ctx context.Context) GetCustomDbRolesResultPtrOutput { + return o +} + +func (o GetCustomDbRolesResultPtrOutput) Elem() GetCustomDbRolesResultOutput { + return o.ApplyT(func(v *GetCustomDbRolesResult) GetCustomDbRolesResult { + if v != nil { + return *v + } + var ret GetCustomDbRolesResult + return ret + }).(GetCustomDbRolesResultOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*GetCustomDbRolesResultInput)(nil)).Elem(), GetCustomDbRolesResultArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetCustomDbRolesResultPtrInput)(nil)).Elem(), GetCustomDbRolesResultArgs{}) + pulumi.RegisterOutputType(GetCustomDbRolesResultOutput{}) + pulumi.RegisterOutputType(GetCustomDbRolesResultPtrOutput{}) +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/pulumiUtilities.go b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/pulumiUtilities.go new file mode 100644 index 000000000..7b9037e1f --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/go/mongodbatlas/pulumiUtilities.go @@ -0,0 +1,85 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package mongodbatlas + +import ( + "fmt" + "os" + "reflect" + "regexp" + "strconv" + "strings" + + "github.com/blang/semver" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type envParser func(v string) interface{} + +func parseEnvBool(v string) interface{} { + b, err := strconv.ParseBool(v) + if err != nil { + return nil + } + return b +} + +func parseEnvInt(v string) interface{} { + i, err := strconv.ParseInt(v, 0, 0) + if err != nil { + return nil + } + return int(i) +} + +func parseEnvFloat(v string) interface{} { + f, err := strconv.ParseFloat(v, 64) + if err != nil { + return nil + } + return f +} + +func parseEnvStringArray(v string) interface{} { + var result pulumi.StringArray + for _, item := range strings.Split(v, ";") { + result = append(result, pulumi.String(item)) + } + return result +} + +func getEnvOrDefault(def interface{}, parser envParser, vars ...string) interface{} { + for _, v := range vars { + if value := os.Getenv(v); value != "" { + if parser != nil { + return parser(value) + } + return value + } + } + return def +} + +// PkgVersion uses reflection to determine the version of the current package. +func PkgVersion() (semver.Version, error) { + type sentinal struct{} + pkgPath := reflect.TypeOf(sentinal{}).PkgPath() + re := regexp.MustCompile("^.*/pulumi-mongodbatlas/sdk(/v\\d+)?") + if match := re.FindStringSubmatch(pkgPath); match != nil { + vStr := match[1] + if len(vStr) == 0 { // If the version capture group was empty, default to v1. + return semver.Version{Major: 1}, nil + } + return semver.MustParse(fmt.Sprintf("%s.0.0", vStr[2:])), nil + } + return semver.Version{}, fmt.Errorf("failed to determine the package version from %s", pkgPath) +} + +// isZero is a null safe check for if a value is it's types zero value. +func isZero(v interface{}) bool { + if v == nil { + return true + } + return reflect.ValueOf(v).IsZero() +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/README.md b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/codegen-manifest.json b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/codegen-manifest.json new file mode 100644 index 000000000..a768b3fa3 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/codegen-manifest.json @@ -0,0 +1,14 @@ +{ + "emittedFiles": [ + "README.md", + "getCustomDbRoles.ts", + "index.ts", + "package.json", + "provider.ts", + "tsconfig.json", + "types/index.ts", + "types/input.ts", + "types/output.ts", + "utilities.ts" + ] +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/getCustomDbRoles.ts b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/getCustomDbRoles.ts new file mode 100644 index 000000000..6682bc619 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/getCustomDbRoles.ts @@ -0,0 +1,26 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import { input as inputs, output as outputs } from "./types"; +import * as utilities from "./utilities"; + +export function getCustomDbRoles(args?: GetCustomDbRolesArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + if (!opts) { + opts = {} + } + + if (!opts.version) { + opts.version = utilities.getVersion(); + } + return pulumi.runtime.invoke("mongodbatlas::getCustomDbRoles", { + }, opts); +} + +export interface GetCustomDbRolesArgs { +} + +export interface GetCustomDbRolesResult { + readonly result?: outputs.GetCustomDbRolesResult; +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/index.ts b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/index.ts new file mode 100644 index 000000000..a432a34d4 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/index.ts @@ -0,0 +1,28 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +// Export members: +export * from "./getCustomDbRoles"; +export * from "./provider"; + +// Export sub-modules: +import * as types from "./types"; + +export { + types, +}; + +import { Provider } from "./provider"; + +pulumi.runtime.registerResourcePackage("mongodbatlas", { + version: utilities.getVersion(), + constructProvider: (name: string, type: string, urn: string): pulumi.ProviderResource => { + if (type !== "pulumi:providers:mongodbatlas") { + throw new Error(`unknown provider type ${type}`); + } + return new Provider(name, undefined, { urn }); + }, +}); diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/package.json b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/package.json new file mode 100644 index 000000000..8f2382825 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/package.json @@ -0,0 +1,16 @@ +{ + "name": "@pulumi/mongodbatlas", + "version": "${VERSION}", + "scripts": { + "build": "tsc" + }, + "devDependencies": { + "typescript": "^4.3.5" + }, + "peerDependencies": { + "@pulumi/pulumi": "latest" + }, + "pulumi": { + "resource": true + } +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/provider.ts b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/provider.ts new file mode 100644 index 000000000..a0ea81713 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/provider.ts @@ -0,0 +1,46 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +export class Provider extends pulumi.ProviderResource { + /** @internal */ + public static readonly __pulumiType = 'mongodbatlas'; + + /** + * Returns true if the given object is an instance of Provider. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Provider { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Provider.__pulumiType; + } + + + /** + * Create a Provider resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args?: ProviderArgs, opts?: pulumi.ResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + { + } + if (!opts.version) { + opts = pulumi.mergeOptions(opts, { version: utilities.getVersion()}); + } + super(Provider.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * The set of arguments for constructing a Provider resource. + */ +export interface ProviderArgs { +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/tsconfig.json b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/tsconfig.json new file mode 100644 index 000000000..45ff3f07a --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "outDir": "bin", + "target": "es2016", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "sourceMap": true, + "stripInternal": true, + "experimentalDecorators": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "strict": true + }, + "files": [ + "getCustomDbRoles.ts", + "index.ts", + "provider.ts", + "types/index.ts", + "types/input.ts", + "types/output.ts", + "utilities.ts" + ] +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/types/index.ts b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/types/index.ts new file mode 100644 index 000000000..aec972eb2 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/types/index.ts @@ -0,0 +1,11 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +// Export sub-modules: +import * as input from "./input"; +import * as output from "./output"; + +export { + input, + output, +}; diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/types/input.ts b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/types/input.ts new file mode 100644 index 000000000..f074e49de --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/types/input.ts @@ -0,0 +1,6 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import { input as inputs, output as outputs } from "../types"; + diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/types/output.ts b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/types/output.ts new file mode 100644 index 000000000..a3e22c910 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/types/output.ts @@ -0,0 +1,9 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import { input as inputs, output as outputs } from "../types"; + +export interface GetCustomDbRolesResult { +} + diff --git a/pkg/codegen/internal/test/testdata/regress-8403/nodejs/utilities.ts b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/utilities.ts new file mode 100644 index 000000000..f26ed073c --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/nodejs/utilities.ts @@ -0,0 +1,49 @@ +// *** WARNING: this file was generated by test. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + + +export function getEnv(...vars: string[]): string | undefined { + for (const v of vars) { + const value = process.env[v]; + if (value) { + return value; + } + } + return undefined; +} + +export function getEnvBoolean(...vars: string[]): boolean | undefined { + const s = getEnv(...vars); + if (s !== undefined) { + // NOTE: these values are taken from https://golang.org/src/strconv/atob.go?s=351:391#L1, which is what + // Terraform uses internally when parsing boolean values. + if (["1", "t", "T", "true", "TRUE", "True"].find(v => v === s) !== undefined) { + return true; + } + if (["0", "f", "F", "false", "FALSE", "False"].find(v => v === s) !== undefined) { + return false; + } + } + return undefined; +} + +export function getEnvNumber(...vars: string[]): number | undefined { + const s = getEnv(...vars); + if (s !== undefined) { + const f = parseFloat(s); + if (!isNaN(f)) { + return f; + } + } + return undefined; +} + +export function getVersion(): string { + let version = require('./package.json').version; + // Node allows for the version to be prefixed by a "v", while semver doesn't. + // If there is a v, strip it off. + if (version.indexOf('v') === 0) { + version = version.slice(1); + } + return version; +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/python/codegen-manifest.json b/pkg/codegen/internal/test/testdata/regress-8403/python/codegen-manifest.json new file mode 100644 index 000000000..1fefdee1c --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/python/codegen-manifest.json @@ -0,0 +1,12 @@ +{ + "emittedFiles": [ + "pulumi_mongodbatlas/README.md", + "pulumi_mongodbatlas/__init__.py", + "pulumi_mongodbatlas/_utilities.py", + "pulumi_mongodbatlas/get_custom_db_roles.py", + "pulumi_mongodbatlas/outputs.py", + "pulumi_mongodbatlas/provider.py", + "pulumi_mongodbatlas/py.typed", + "setup.py" + ] +} diff --git a/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/README.md b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/__init__.py b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/__init__.py new file mode 100644 index 000000000..2d41b500e --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/__init__.py @@ -0,0 +1,25 @@ +# coding=utf-8 +# *** WARNING: this file was generated by test. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +from . import _utilities +import typing +# Export this package's modules as members: +from .get_custom_db_roles import * +from .provider import * +from . import outputs +_utilities.register( + resource_modules=""" +[] +""", + resource_packages=""" +[ + { + "pkg": "mongodbatlas", + "token": "pulumi:providers:mongodbatlas", + "fqn": "pulumi_mongodbatlas", + "class": "Provider" + } +] +""" +) diff --git a/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/_utilities.py b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/_utilities.py new file mode 100644 index 000000000..01e27adcb --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/_utilities.py @@ -0,0 +1,236 @@ +# coding=utf-8 +# *** WARNING: this file was generated by test. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + + +import importlib.util +import inspect +import json +import os +import pkg_resources +import sys +import typing + +import pulumi +import pulumi.runtime + +from semver import VersionInfo as SemverVersion +from parver import Version as PEP440Version + + +def get_env(*args): + for v in args: + value = os.getenv(v) + if value is not None: + return value + return None + + +def get_env_bool(*args): + str = get_env(*args) + if str is not None: + # NOTE: these values are taken from https://golang.org/src/strconv/atob.go?s=351:391#L1, which is what + # Terraform uses internally when parsing boolean values. + if str in ["1", "t", "T", "true", "TRUE", "True"]: + return True + if str in ["0", "f", "F", "false", "FALSE", "False"]: + return False + return None + + +def get_env_int(*args): + str = get_env(*args) + if str is not None: + try: + return int(str) + except: + return None + return None + + +def get_env_float(*args): + str = get_env(*args) + if str is not None: + try: + return float(str) + except: + return None + return None + + +def _get_semver_version(): + # __name__ is set to the fully-qualified name of the current module, In our case, it will be + # ._utilities. is the module we want to query the version for. + root_package, *rest = __name__.split('.') + + # pkg_resources uses setuptools to inspect the set of installed packages. We use it here to ask + # for the currently installed version of the root package (i.e. us) and get its version. + + # Unfortunately, PEP440 and semver differ slightly in incompatible ways. The Pulumi engine expects + # to receive a valid semver string when receiving requests from the language host, so it's our + # responsibility as the library to convert our own PEP440 version into a valid semver string. + + pep440_version_string = pkg_resources.require(root_package)[0].version + pep440_version = PEP440Version.parse(pep440_version_string) + (major, minor, patch) = pep440_version.release + prerelease = None + if pep440_version.pre_tag == 'a': + prerelease = f"alpha.{pep440_version.pre}" + elif pep440_version.pre_tag == 'b': + prerelease = f"beta.{pep440_version.pre}" + elif pep440_version.pre_tag == 'rc': + prerelease = f"rc.{pep440_version.pre}" + elif pep440_version.dev is not None: + prerelease = f"dev.{pep440_version.dev}" + + # The only significant difference between PEP440 and semver as it pertains to us is that PEP440 has explicit support + # for dev builds, while semver encodes them as "prerelease" versions. In order to bridge between the two, we convert + # our dev build version into a prerelease tag. This matches what all of our other packages do when constructing + # their own semver string. + return SemverVersion(major=major, minor=minor, patch=patch, prerelease=prerelease) + + +# Determine the version once and cache the value, which measurably improves program performance. +_version = _get_semver_version() +_version_str = str(_version) + + +def get_version(): + return _version_str + + +def get_resource_args_opts(resource_args_type, resource_options_type, *args, **kwargs): + """ + Return the resource args and options given the *args and **kwargs of a resource's + __init__ method. + """ + + resource_args, opts = None, None + + # If the first item is the resource args type, save it and remove it from the args list. + if args and isinstance(args[0], resource_args_type): + resource_args, args = args[0], args[1:] + + # Now look at the first item in the args list again. + # If the first item is the resource options class, save it. + if args and isinstance(args[0], resource_options_type): + opts = args[0] + + # If resource_args is None, see if "args" is in kwargs, and, if so, if it's typed as the + # the resource args type. + if resource_args is None: + a = kwargs.get("args") + if isinstance(a, resource_args_type): + resource_args = a + + # If opts is None, look it up in kwargs. + if opts is None: + opts = kwargs.get("opts") + + return resource_args, opts + + +# Temporary: just use pulumi._utils.lazy_import once everyone upgrades. +def lazy_import(fullname): + + import pulumi._utils as u + f = getattr(u, 'lazy_import', None) + if f is None: + f = _lazy_import_temp + + return f(fullname) + + +# Copied from pulumi._utils.lazy_import, see comments there. +def _lazy_import_temp(fullname): + m = sys.modules.get(fullname, None) + if m is not None: + return m + + spec = importlib.util.find_spec(fullname) + + m = sys.modules.get(fullname, None) + if m is not None: + return m + + loader = importlib.util.LazyLoader(spec.loader) + spec.loader = loader + module = importlib.util.module_from_spec(spec) + + m = sys.modules.get(fullname, None) + if m is not None: + return m + + sys.modules[fullname] = module + loader.exec_module(module) + return module + + +class Package(pulumi.runtime.ResourcePackage): + def __init__(self, pkg_info): + super().__init__() + self.pkg_info = pkg_info + + def version(self): + return _version + + def construct_provider(self, name: str, typ: str, urn: str) -> pulumi.ProviderResource: + if typ != self.pkg_info['token']: + raise Exception(f"unknown provider type {typ}") + Provider = getattr(lazy_import(self.pkg_info['fqn']), self.pkg_info['class']) + return Provider(name, pulumi.ResourceOptions(urn=urn)) + + +class Module(pulumi.runtime.ResourceModule): + def __init__(self, mod_info): + super().__init__() + self.mod_info = mod_info + + def version(self): + return _version + + def construct(self, name: str, typ: str, urn: str) -> pulumi.Resource: + class_name = self.mod_info['classes'].get(typ, None) + + if class_name is None: + raise Exception(f"unknown resource type {typ}") + + TheClass = getattr(lazy_import(self.mod_info['fqn']), class_name) + return TheClass(name, pulumi.ResourceOptions(urn=urn)) + + +def register(resource_modules, resource_packages): + resource_modules = json.loads(resource_modules) + resource_packages = json.loads(resource_packages) + + for pkg_info in resource_packages: + pulumi.runtime.register_resource_package(pkg_info['pkg'], Package(pkg_info)) + + for mod_info in resource_modules: + pulumi.runtime.register_resource_module( + mod_info['pkg'], + mod_info['mod'], + Module(mod_info)) + + +_F = typing.TypeVar('_F', bound=typing.Callable[..., typing.Any]) + + +def lift_output_func(func: typing.Any) -> typing.Callable[[_F], _F]: + """Decorator internally used on {fn}_output lifted function versions + to implement them automatically from the un-lifted function.""" + + func_sig = inspect.signature(func) + + def lifted_func(*args, opts=None, **kwargs): + bound_args = func_sig.bind(*args, **kwargs) + # Convert tuple to list, see pulumi/pulumi#8172 + args_list = list(bound_args.args) + return pulumi.Output.from_input({ + 'args': args_list, + 'kwargs': bound_args.kwargs + }).apply(lambda resolved_args: func(*resolved_args['args'], + opts=opts, + **resolved_args['kwargs'])) + + return (lambda _: lifted_func) diff --git a/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/get_custom_db_roles.py b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/get_custom_db_roles.py new file mode 100644 index 000000000..796f91e34 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/get_custom_db_roles.py @@ -0,0 +1,52 @@ +# coding=utf-8 +# *** WARNING: this file was generated by test. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities +from . import outputs + +__all__ = [ + 'GetCustomDbRolesResult', + 'AwaitableGetCustomDbRolesResult', + 'get_custom_db_roles', +] + +@pulumi.output_type +class GetCustomDbRolesResult: + def __init__(__self__, result=None): + if result and not isinstance(result, dict): + raise TypeError("Expected argument 'result' to be a dict") + pulumi.set(__self__, "result", result) + + @property + @pulumi.getter + def result(self) -> Optional['outputs.GetCustomDbRolesResult']: + return pulumi.get(self, "result") + + +class AwaitableGetCustomDbRolesResult(GetCustomDbRolesResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetCustomDbRolesResult( + result=self.result) + + +def get_custom_db_roles(opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetCustomDbRolesResult: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + if opts is None: + opts = pulumi.InvokeOptions() + if opts.version is None: + opts.version = _utilities.get_version() + __ret__ = pulumi.runtime.invoke('mongodbatlas::getCustomDbRoles', __args__, opts=opts, typ=GetCustomDbRolesResult).value + + return AwaitableGetCustomDbRolesResult( + result=__ret__.result) diff --git a/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/outputs.py b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/outputs.py new file mode 100644 index 000000000..ce2347e03 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/outputs.py @@ -0,0 +1,20 @@ +# coding=utf-8 +# *** WARNING: this file was generated by test. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = [ + 'GetCustomDbRolesResult', +] + +@pulumi.output_type +class GetCustomDbRolesResult(dict): + def __init__(__self__): + pass + + diff --git a/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/provider.py b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/provider.py new file mode 100644 index 000000000..4eaaa3d6e --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/provider.py @@ -0,0 +1,73 @@ +# coding=utf-8 +# *** WARNING: this file was generated by test. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = ['ProviderArgs', 'Provider'] + +@pulumi.input_type +class ProviderArgs: + def __init__(__self__): + """ + The set of arguments for constructing a Provider resource. + """ + pass + + +class Provider(pulumi.ProviderResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + __props__=None): + """ + Create a Mongodbatlas resource with the given unique name, props, and options. + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: Optional[ProviderArgs] = None, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Mongodbatlas resource with the given unique name, props, and options. + :param str resource_name: The name of the resource. + :param ProviderArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(ProviderArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + __props__=None): + if opts is None: + opts = pulumi.ResourceOptions() + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.version is None: + opts.version = _utilities.get_version() + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = ProviderArgs.__new__(ProviderArgs) + + super(Provider, __self__).__init__( + 'mongodbatlas', + resource_name, + __props__, + opts) + diff --git a/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/py.typed b/pkg/codegen/internal/test/testdata/regress-8403/python/pulumi_mongodbatlas/py.typed new file mode 100644 index 000000000..e69de29bb diff --git a/pkg/codegen/internal/test/testdata/regress-8403/python/setup.py b/pkg/codegen/internal/test/testdata/regress-8403/python/setup.py new file mode 100644 index 000000000..37e583cc7 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/python/setup.py @@ -0,0 +1,58 @@ +# coding=utf-8 +# *** WARNING: this file was generated by test. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import errno +from setuptools import setup, find_packages +from setuptools.command.install import install +from subprocess import check_call + + +VERSION = "0.0.0" +PLUGIN_VERSION = "0.0.0" + +class InstallPluginCommand(install): + def run(self): + install.run(self) + try: + check_call(['pulumi', 'plugin', 'install', 'resource', 'mongodbatlas', PLUGIN_VERSION]) + except OSError as error: + if error.errno == errno.ENOENT: + print(f""" + There was an error installing the mongodbatlas resource provider plugin. + It looks like `pulumi` is not installed on your system. + Please visit https://pulumi.com/ to install the Pulumi CLI. + You may try manually installing the plugin by running + `pulumi plugin install resource mongodbatlas {PLUGIN_VERSION}` + """) + else: + raise + + +def readme(): + try: + with open('README.md', encoding='utf-8') as f: + return f.read() + except FileNotFoundError: + return "mongodbatlas Pulumi Package - Development Version" + + +setup(name='pulumi_mongodbatlas', + version=VERSION, + long_description=readme(), + long_description_content_type='text/markdown', + cmdclass={ + 'install': InstallPluginCommand, + }, + packages=find_packages(), + package_data={ + 'pulumi_mongodbatlas': [ + 'py.typed', + ] + }, + install_requires=[ + 'parver>=0.2.1', + 'pulumi', + 'semver>=2.8.1' + ], + zip_safe=False) diff --git a/pkg/codegen/internal/test/testdata/regress-8403/schema.json b/pkg/codegen/internal/test/testdata/regress-8403/schema.json new file mode 100644 index 000000000..c2afc5319 --- /dev/null +++ b/pkg/codegen/internal/test/testdata/regress-8403/schema.json @@ -0,0 +1,22 @@ +{ + "version": "0.0.1", + "name": "mongodbatlas", + "types": { + "mongodbatlas::getCustomDbRolesResult": { + "type": "object" + } + }, + "functions": { + "mongodbatlas::getCustomDbRoles": { + "inputs": {}, + "outputs": { + "type": "object", + "properties": { + "result": { + "$ref": "#/types/mongodbatlas::getCustomDbRolesResult" + } + } + } + } + } +}