in main.go [1019:1066]
func migrateRun(cmd *cobra.Command, args []string) error {
ctx, client, err := clientWithContext(cmd.Context())
if err != nil {
return misuseError(err)
}
bucket := strings.Trim(strings.TrimPrefix(args[0], "gs://"), "/")
storageList, err := client.List(ctx, &berglas.StorageListRequest{
Bucket: bucket,
Generations: true,
})
if err != nil {
return apiError(err)
}
for _, s := range storageList.Secrets {
name := strings.Replace(s.Name, "/", "_", -1)
fmt.Fprintf(stdout, "Migrating %s to projects/%s/secrets/%s... ",
s.Name, projectID, name)
secret, err := client.Read(ctx, &berglas.StorageReadRequest{
Bucket: s.Parent,
Object: s.Name,
})
if err != nil {
return apiError(err)
}
if len(secret.Plaintext) == 0 {
fmt.Fprintf(stdout, "skip (empty plaintext)\n")
continue
}
if _, err := client.Update(ctx, &berglas.SecretManagerUpdateRequest{
Project: projectID,
Name: name,
Plaintext: secret.Plaintext,
CreateIfMissing: true,
}); err != nil {
return apiError(err)
}
fmt.Fprintf(stdout, "done!\n")
}
return nil
}