pulumi/sdk/go/auto/optimport/optimport.go

142 lines
4.7 KiB
Go

// Copyright 2016-2024, 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 optimport contains functional options to be used with workspace stack import operations
// github.com/sdk/v3/go/auto workspace.Import(context.Context, ...optimport.Option)
package optimport
import "io"
// Option is a parameter to be applied to a LocalWorkspace.Import() operation
type Option interface {
ApplyOption(*Options)
}
// Protect configures whether to set imported resources as protected in the Pulumi state.
func Protect(value bool) Option {
return optionFunc(func(opts *Options) {
opts.Protect = &value
})
}
// GenerateCode configures whether to generate code for the imported resources
func GenerateCode(value bool) Option {
return optionFunc(func(opts *Options) {
opts.GenerateCode = &value
})
}
// NameTable maps language names to parent and provider URNs. These names are
// used in the generated definitions, and should match the corresponding declarations
// in the source program. This table is required if any parents or providers are
// specified by the resources to import.
func NameTable(nameTable map[string]string) Option {
return optionFunc(func(opts *Options) {
opts.NameTable = nameTable
})
}
// Resources specified the resources to import
func Resources(resources []*ImportResource) Option {
return optionFunc(func(opts *Options) {
opts.Resources = resources
})
}
// Converter specifies the converter to use for importing the resources
func Converter(converter string) Option {
return optionFunc(func(opts *Options) {
opts.Converter = &converter
})
}
// ConverterArgs specifies the arguments to pass to the converter used for the import
func ConverterArgs(converterArgs []string) Option {
return optionFunc(func(opts *Options) {
opts.ConverterArgs = converterArgs
})
}
// ShowSecrets configures whether to show config secrets when they appear.
func ShowSecrets(value bool) Option {
return optionFunc(func(opts *Options) {
opts.ShowSecrets = value
})
}
// Message to associate with the update operation
func Message(message string) Option {
return optionFunc(func(opts *Options) {
opts.Message = message
})
}
// ProgressStreams allows specifying one or more io.Writers to redirect incremental update stdout
func ProgressStreams(writers ...io.Writer) Option {
return optionFunc(func(opts *Options) {
opts.ProgressStreams = writers
})
}
// ErrorProgressStreams allows specifying one or more io.Writers to redirect incremental update stderr
func ErrorProgressStreams(writers ...io.Writer) Option {
return optionFunc(func(opts *Options) {
opts.ErrorProgressStreams = writers
})
}
type ImportResource struct {
// The ID of the resource to import. The format of the ID is determined by the resource's provider.
ID string `json:"id,omitempty"`
// The type token of the Pulumi resource
Type string `json:"type,omitempty"`
// The name of the resource
Name string `json:"name,omitempty"`
// The name of the resource used in the generated Pulumi program from the import
LogicalName string `json:"logicalName,omitempty"`
// The parent of the resource
Parent string `json:"parent,omitempty"`
// The provider to use for importing the resource
Provider string `json:"provider,omitempty"`
// The version of the provider of the resource
Version string `json:"version,omitempty"`
// The URL to download the provider plugin from
PluginDownloadURL string `json:"pluginDownloadUrl,omitempty"`
// The input properties to use when importing the resource
Properties []string `json:"properties,omitempty"`
// Whether the resource is a component placeholder. When specifying this option, you don't need to provide an ID.
Component bool `json:"component,omitempty"`
// When the resource is a component, this specifies it as a remote component.
Remote bool `json:"remote,omitempty"`
}
type Options struct {
Protect *bool
GenerateCode *bool
NameTable map[string]string
Resources []*ImportResource
Converter *string
ConverterArgs []string
ShowSecrets bool
Message string
ProgressStreams []io.Writer
ErrorProgressStreams []io.Writer
}
type optionFunc func(*Options)
func (o optionFunc) ApplyOption(opts *Options) {
o(opts)
}