Initial commit
This commit is contained in:
91
provider/provider.go
Normal file
91
provider/provider.go
Normal file
@@ -0,0 +1,91 @@
|
||||
// Copyright 2016-2023, Pulumi Corporation.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package provider
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
p "github.com/pulumi/pulumi-go-provider"
|
||||
"github.com/pulumi/pulumi-go-provider/infer"
|
||||
"github.com/pulumi/pulumi/sdk/v3/go/common/tokens"
|
||||
)
|
||||
|
||||
// Version is initialized by the Go linker to contain the semver of this build.
|
||||
var Version string
|
||||
|
||||
const Name string = "xyz"
|
||||
|
||||
func Provider() p.Provider {
|
||||
// We tell the provider what resources it needs to support.
|
||||
// In this case, a single custom resource.
|
||||
return infer.Provider(infer.Options{
|
||||
Resources: []infer.InferredResource{
|
||||
infer.Resource[Random, RandomArgs, RandomState](),
|
||||
},
|
||||
ModuleMap: map[tokens.ModuleName]tokens.ModuleName{
|
||||
"provider": "index",
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// Each resource has a controlling struct.
|
||||
// Resource behavior is determined by implementing methods on the controlling struct.
|
||||
// The `Create` method is mandatory, but other methods are optional.
|
||||
// - Check: Remap inputs before they are typed.
|
||||
// - Diff: Change how instances of a resource are compared.
|
||||
// - Update: Mutate a resource in place.
|
||||
// - Read: Get the state of a resource from the backing provider.
|
||||
// - Delete: Custom logic when the resource is deleted.
|
||||
// - Annotate: Describe fields and set defaults for a resource.
|
||||
// - WireDependencies: Control how outputs and secrets flows through values.
|
||||
type Random struct{}
|
||||
|
||||
// Each resource has an input struct, defining what arguments it accepts.
|
||||
type RandomArgs struct {
|
||||
// Fields projected into Pulumi must be public and hava a `pulumi:"..."` tag.
|
||||
// The pulumi tag doesn't need to match the field name, but it's generally a
|
||||
// good idea.
|
||||
Length int `pulumi:"length"`
|
||||
}
|
||||
|
||||
// Each resource has a state, describing the fields that exist on the created resource.
|
||||
type RandomState struct {
|
||||
// It is generally a good idea to embed args in outputs, but it isn't strictly necessary.
|
||||
RandomArgs
|
||||
// Here we define a required output called result.
|
||||
Result string `pulumi:"result"`
|
||||
}
|
||||
|
||||
// All resources must implement Create at a minimum.
|
||||
func (Random) Create(ctx p.Context, name string, input RandomArgs, preview bool) (string, RandomState, error) {
|
||||
state := RandomState{RandomArgs: input}
|
||||
if preview {
|
||||
return name, state, nil
|
||||
}
|
||||
state.Result = makeRandom(input.Length)
|
||||
return name, state, nil
|
||||
}
|
||||
|
||||
func makeRandom(length int) string {
|
||||
seededRand := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||
charset := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
|
||||
|
||||
result := make([]rune, length)
|
||||
for i := range result {
|
||||
result[i] = charset[seededRand.Intn(len(charset))]
|
||||
}
|
||||
return string(result)
|
||||
}
|
||||
Reference in New Issue
Block a user