pulumi/tests/integration/construct_component_provider/testcomponent-go/main.go

93 lines
2.3 KiB
Go

// Copyright 2016-2021, Pulumi Corporation. All rights reserved.
//go:build !all
// +build !all
package main
import (
"fmt"
"github.com/blang/semver"
"github.com/pulumi/pulumi/pkg/v3/resource/provider"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/cmdutil"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
pulumiprovider "github.com/pulumi/pulumi/sdk/v3/go/pulumi/provider"
)
type Provider struct {
pulumi.ProviderResourceState
Message pulumi.StringOutput `pulumi:"message"`
}
type Component struct {
pulumi.ResourceState
Message pulumi.StringOutput `pulumi:"message"`
}
func NewComponent(ctx *pulumi.Context, name string, opts ...pulumi.ResourceOption) (*Component, error) {
component := &Component{}
err := ctx.RegisterComponentResource("testcomponent:index:Component", name, component, opts...)
if err != nil {
return nil, err
}
// Test that we're indeed getting back an instance of `Provider` with its state.
provider := component.GetProvider("testcomponent::").(*Provider)
component.Message = provider.Message
if err := ctx.RegisterResourceOutputs(component, pulumi.Map{
"message": component.Message,
}); err != nil {
return nil, err
}
return component, nil
}
const (
providerName = "testcomponent"
version = "0.0.1"
)
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:testcomponent" {
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 main() {
pulumi.RegisterResourcePackage(providerName, &pkg{semver.MustParse(version)})
if err := provider.ComponentMain(providerName, version, nil, func(ctx *pulumi.Context, typ, name string,
inputs pulumiprovider.ConstructInputs, options pulumi.ResourceOption,
) (*pulumiprovider.ConstructResult, error) {
if typ != "testcomponent:index:Component" {
return nil, fmt.Errorf("unknown resource type %s", typ)
}
component, err := NewComponent(ctx, name, options)
if err != nil {
return nil, fmt.Errorf("creating component: %w", err)
}
return pulumiprovider.NewConstructResult(component)
}); err != nil {
cmdutil.ExitError(err.Error())
}
}