postgres: add --json body example to create-role help#5111
Open
jamesbroadhead wants to merge 3 commits intomainfrom
Open
postgres: add --json body example to create-role help#5111jamesbroadhead wants to merge 3 commits intomainfrom
--json body example to create-role help#5111jamesbroadhead wants to merge 3 commits intomainfrom
Conversation
4 tasks
Approval status: pending
|
`databricks postgres create-role`'s `--json` flag binds to the inner Role
object (CreateRoleRequest.Role, JSON-tagged "role"), so users supply
`spec`/`name`/etc. directly. Without an example this is non-obvious:
- Auto-generated help leaves `// TODO: complex arg: spec` with no flag
hint, so the only way to set spec fields is through `--json`.
- If a user wraps the body in `{"role": ...}` (matching the wire format
the SDK marshals to), the CLI strips `role` as unknown and ships an
empty body. The server then returns a generic
`Field 'role' is required and must contain at least one subfield with
a non-default value` — which is hard to act on.
Adds a curated override that appends a concrete service-principal-role
example to `cmd.Long`, plus a short note on the wrapping pitfall.
Same pattern (auto-gen TODO `spec`/`status`, opaque error on bad body)
exists for create-endpoint, create-branch, create-project, and
create-database. Holding off on those until this approach is approved.
Co-authored-by: Isaac
The previous example granted DATABRICKS_SUPERUSER, normalizing over-privileged service-principal roles. Drop membership_roles from the example so the default copy-paste path follows least privilege; add a note pointing to separate SQL grants and noting when DATABRICKS_SUPERUSER is appropriate. Co-authored-by: Isaac
…-role
The --json flag binds to the inner Role object, so a top-level
{"role": {...}} wrapper produced an "unknown field: role" warning, an
empty body, and a confusing server error: "Field 'role' is required".
Add a PreRunE on create-role that peeks at the raw --json bytes via a
new flags.JsonFlag.Raw() accessor and rejects any object with a top-
level "role" key, returning an actionable error that points to the
correct shape. Update the help text to reflect the new behavior and
add unit-tests covering wrapped, unwrapped, empty, non-object, and
no-flag cases.
Co-authored-by: Isaac
5254a5b to
4ff71dd
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
databricks postgres create-role's--jsonflag binds to the innerRoleobject (CreateRoleRequest.Role, JSON-tagged"role"), so users must supplyspec/name/ etc. directly. Without an example this isn't obvious — the auto-generated help leaves the spec fields unflagged (// TODO: complex arg: specin the generator), and the server's error when the body is wrong is vague:That fires whenever the inner
Rolehas no recognized fields, which most commonly happens when a user wraps the body in{"role": ...}(matching the wire format the SDK marshals to). The CLI strips the unknown outer key withWarning: unknown field: roleand ships an empty body. Walking out of that loop currently requires reading the SDK source.This adds a curated override (
cmd/workspace/postgres/overrides.go) that appends a concrete service-principal-role example tocmd.Long, plus a short note on the wrapping pitfall.Help output (after)
Scope
This PR only touches
create-role. The same shape gap (// TODO: complex arg: spec+ opaque error) exists forcreate-endpoint,create-branch,create-project, andcreate-database. Happy to extend if the approach is right; left them out so reviewers can decide on the pattern first.Test plan
go build ./cmd/workspace/postgres/...databricks postgres create-role --helpshows the new section (output above)make fmtcleanThis pull request and its description were written by Isaac.