pkg/berglas/replace.go (31 lines of code) (raw):
package berglas
import (
"context"
"fmt"
"os"
"github.com/GoogleCloudPlatform/berglas/v2/pkg/berglas/logging"
)
// Replace parses a berglas reference and replaces it. See Client.Replace for
// more details and examples.
func Replace(ctx context.Context, key string) error {
client, err := New(ctx)
if err != nil {
return err
}
return client.Replace(ctx, key)
}
// Replace parses a berglas reference from the environment variable at the
// given environment variable name. If parsing and extraction is successful,
// this function replaces the value of the environment variable to the resolved
// secret reference.
func (c *Client) Replace(ctx context.Context, key string) error {
value := os.Getenv(key)
logger := logging.FromContext(ctx).With(
"key", key,
"reference", value,
)
logger.DebugContext(ctx, "replacevalue.start")
defer logger.DebugContext(ctx, "replacevalue.finish")
plaintext, err := c.Resolve(ctx, value)
if err != nil {
return err
}
if err := os.Setenv(key, string(plaintext)); err != nil {
return fmt.Errorf("failed to set %s: %w", key, err)
}
return nil
}