Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added JSON input validation for CLI commands #1771

Merged
merged 15 commits into from
Oct 11, 2024

Conversation

andrewnester
Copy link
Contributor

@andrewnester andrewnester commented Sep 13, 2024

Changes

Added JSON input validation for CLI commands. Now when invalid JSON passed as a payload to CLI commands, CLI performs input normalisation and detects if there are any mismatches such as incorrect types, unknown fields and etc.

This diagnostic information is printed in standard error output and does not block command execution, so the change is backward compatible.

This PR also addresses issue when values which are considered "empty" in Go (such as false, 0, "" and etc.) were ignored and not passed to API request payload.

Fixes #1769 #1764 #1625 #1560

Tests

Added unit tests

andrew.nester@HFW9Y94129 ~ % databricks jobs create --json '{"seeti}'
Error: error decoding JSON at (inline):1:2: unexpected EOF


andrew.nester@HFW9Y94129 ~ % databricks jobs create --json '{"seeti": true}'
Warning: unknown field: seeti
  in (inline):1:9

Error: Job settings must be specified.

libs/flags/json_flag.go Show resolved Hide resolved
libs/dyn/jsonloader/json.go Outdated Show resolved Hide resolved
@@ -33,7 +35,27 @@ func (j *JsonFlag) Unmarshal(v any) error {
if j.raw == nil {
return nil
}
return json.Unmarshal(j.raw, v)

dv, err := jsonloader.LoadJSON(j.raw)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we do the same for the YAML flag?

I believe that's the only reason we still depend on github.com/ghodss/yaml. This package uses the json tags in the types as opposed to yaml tags, which the upstream YAML package uses. Since we use the json tags as well in the dyn package it should be possible to replace it.

Not blocking for this PR, of course.

@andrewnester andrewnester requested a review from pietern October 3, 2024 14:10
@andrewnester andrewnester changed the title [WIP] Added JSON input validation for CLI commands Added JSON input validation for CLI commands Oct 3, 2024
libs/dyn/convert/to_typed.go Show resolved Hide resolved
libs/dyn/convert/to_typed.go Outdated Show resolved Hide resolved
libs/dyn/convert/to_typed.go Show resolved Hide resolved
libs/dyn/jsonloader/json_test.go Show resolved Hide resolved
libs/dyn/jsonloader/locations.go Outdated Show resolved Hide resolved
libs/dyn/jsonloader/locations.go Outdated Show resolved Hide resolved
libs/flags/json_flag.go Outdated Show resolved Hide resolved
libs/flags/json_flag.go Outdated Show resolved Hide resolved
libs/flags/json_flag_test.go Outdated Show resolved Hide resolved
andrewnester and others added 2 commits October 8, 2024 13:30
Co-authored-by: Pieter Noordhuis <pieter.noordhuis@databricks.com>
@andrewnester andrewnester requested a review from pietern October 8, 2024 13:37
libs/flags/json_flag.go Show resolved Hide resolved
libs/dyn/convert/to_typed.go Outdated Show resolved Hide resolved
libs/dyn/convert/to_typed.go Show resolved Hide resolved
libs/dyn/jsonloader/json.go Show resolved Hide resolved
libs/dyn/jsonloader/json_test.go Show resolved Hide resolved
@andrewnester andrewnester requested a review from pietern October 11, 2024 10:17
@andrewnester andrewnester requested a review from pietern October 11, 2024 12:42
libs/cmdio/render.go Outdated Show resolved Hide resolved
libs/dyn/convert/to_typed.go Show resolved Hide resolved
libs/dyn/jsonloader/json.go Show resolved Hide resolved
libs/dyn/jsonloader/json.go Show resolved Hide resolved
@andrewnester andrewnester requested a review from pietern October 11, 2024 14:32
@pietern pietern disabled auto-merge October 11, 2024 14:35
Copy link
Contributor

@pietern pietern left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, can you TAL at the PR summary before merging?

@andrewnester andrewnester added this pull request to the merge queue Oct 11, 2024
Merged via the queue into main with commit f0e2981 Oct 11, 2024
5 checks passed
@andrewnester andrewnester deleted the feature/payload-mismatch branch October 11, 2024 14:46
andrewnester added a commit that referenced this pull request Oct 23, 2024
CLI:
 * Added JSON input validation for CLI commands ([#1771](#1771)).

Bundles:
 * Support Git worktrees for `sync` ([#1831](#1831)).
 * Add `bundle summary` to display URLs for deployed resources ([#1731](#1731)).
 * Added a warning when incorrect permissions used for `/Workspace/Shared` bundle root ([#1821](#1821)).
 * Show actionable errors for collaborative deployment scenarios ([#1386](#1386)).
 * Fix path to repository-wide exclude file ([#1837](#1837)).
 * Fixed typo in converting cluster permissions ([#1826](#1826)).
 * Ignore metastore permission error during template generation ([#1819](#1819)).
 * Handle normalization of `dyn.KindTime` into an any type ([#1836](#1836)).
 * Added support for pip options in environment dependencies ([#1842](#1842)).
 * Fix race condition when restarting continuous jobs ([#1849](#1849)).
 * Fix pipeline in default-python template not working for certain workspaces ([#1854](#1854)).
 * Add "output" flag to the bundle sync command ([#1853](#1853)).

Internal:
 * Move utility functions dealing with IAM to libs/iamutil ([#1820](#1820)).
 * Remove unused `IS_OWNER` constant ([#1823](#1823)).
 * Assert SDK version is consistent in the CLI generation process ([#1814](#1814)).
 * Fixed unmarshalling json input into `interface{}` type ([#1832](#1832)).
 * Fix `TestAccFsMkdirWhenFileExistsAtPath` in isolated Azure environments ([#1833](#1833)).
 * Add behavioral tests for examples from the YAML spec ([#1835](#1835)).
 * Remove Terraform conversion function that's no longer used ([#1840](#1840)).
 * Encode assumptions about the dashboards API in a test ([#1839](#1839)).
 * Add script to make testing of code on branches easier ([#1844](#1844)).

API Changes:
 * Added `databricks disable-legacy-dbfs` command group.

OpenAPI commit cf9c61453990df0f9453670f2fe68e1b128647a2 (2024-10-14)
Dependency updates:
 * Upgrade TF provider to 1.54.0 ([#1852](#1852)).
 * Bump github.com/databricks/databricks-sdk-go from 0.48.0 to 0.49.0 ([#1843](#1843)).
github-merge-queue bot pushed a commit that referenced this pull request Oct 23, 2024
CLI:
* Added JSON input validation for CLI commands
([#1771](#1771)).
* Support Git worktrees for `sync`
([#1831](#1831)).

Bundles:
* Add `bundle summary` to display URLs for deployed resources
([#1731](#1731)).
* Added a warning when incorrect permissions used for
`/Workspace/Shared` bundle root
([#1821](#1821)).
* Show actionable errors for collaborative deployment scenarios
([#1386](#1386)).
* Fix path to repository-wide exclude file
([#1837](#1837)).
* Fixed typo in converting cluster permissions
([#1826](#1826)).
* Ignore metastore permission error during template generation
([#1819](#1819)).
* Handle normalization of `dyn.KindTime` into an any type
([#1836](#1836)).
* Added support for pip options in environment dependencies
([#1842](#1842)).
* Fix race condition when restarting continuous jobs
([#1849](#1849)).
* Fix pipeline in default-python template not working for certain
workspaces ([#1854](#1854)).
* Add "output" flag to the bundle sync command
([#1853](#1853)).

Internal:
* Move utility functions dealing with IAM to libs/iamutil
([#1820](#1820)).
* Remove unused `IS_OWNER` constant
([#1823](#1823)).
* Assert SDK version is consistent in the CLI generation process
([#1814](#1814)).
* Fixed unmarshalling json input into `interface{}` type
([#1832](#1832)).
* Fix `TestAccFsMkdirWhenFileExistsAtPath` in isolated Azure
environments ([#1833](#1833)).
* Add behavioral tests for examples from the YAML spec
([#1835](#1835)).
* Remove Terraform conversion function that's no longer used
([#1840](#1840)).
* Encode assumptions about the dashboards API in a test
([#1839](#1839)).
* Add script to make testing of code on branches easier
([#1844](#1844)).

API Changes:
 * Added `databricks disable-legacy-dbfs` command group.

OpenAPI commit cf9c61453990df0f9453670f2fe68e1b128647a2 (2024-10-14)
Dependency updates:
* Upgrade TF provider to 1.54.0
([#1852](#1852)).
* Bump github.com/databricks/databricks-sdk-go from 0.48.0 to 0.49.0
([#1843](#1843)).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

CLI "invalid character" error message when issuing valid jobs create command
2 participants