func migrateRun()

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
}