-
Notifications
You must be signed in to change notification settings - Fork 8.5k
Copy Saved Objects to Spaces API #38014
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
Merged
Merged
Changes from all commits
Commits
Show all changes
84 commits
Select commit
Hold shift + click to select a range
0051703
POC for copy-to-space
legrego d6d18b0
fix typings
legrego a3109ce
update import/export tests
legrego 9590fd2
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego 48cbd59
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego 6054610
fix merge from master
legrego 9278c15
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego 3135f8b
reintroduce spaces SOC namespace check
legrego 5b041e1
export new SOC typedefs
legrego 53ae63e
fix import/export module resolution
legrego 445c0f3
use new excludedWrappers option
legrego 505b1f7
rename ImportError -> SavedObjectsImportError for exportability
legrego 05b79ba
cleanup
legrego deb66b5
allow resolve_import_errors to accept an optional namespace
legrego 357b6a8
additional core changes; allowing export to accept a namespace
legrego 6e32fc3
api testing and security fixes
legrego cc459f9
implementing/testing the conflict resolution api
legrego 0726f02
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego 934cc63
doc updates following merge
legrego ac64e6f
jest api tests
legrego 32944cb
API docs
legrego 760b373
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego 4cd5e15
fix typings
legrego b07722a
update snapshots
legrego 7b74d0b
extract createEmptyFailureResponse
legrego cfad9d6
retrieve spaces user can 'copy to space' with
legrego c65228f
ts fixes
legrego 1d484dc
make conflict resolution API public, with docs
legrego e7675f2
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego d8f7633
remove unused saved object action
legrego 6e74bb0
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego 174e3e4
fix merge
legrego 2eab9c3
revert unnecessary change
legrego 5d0fbc6
using new api doc format
legrego 4a2c343
simplify conflict api payload
legrego ef90d0c
fix test
legrego e100185
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego f30fa33
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego ca9171d
reverting checkPrivilegesDynamically
legrego 2828bde
adjusting API documentation
legrego 90b2dac
removing hard-coded export size
legrego 0f52952
move to FtrProviderContext
legrego a7ad6f5
additional tests
legrego a4b43d7
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego 5f38425
testing canManageSavedObjects
legrego f169117
remove unused import
legrego a4d72e5
Update docs/api/saved-objects/copy_to_space.asciidoc
legrego e8023f2
removing deepClone from rereadable_stream
legrego f355861
moving docs
legrego 42d5978
Merge branch 'spaces/copy-to-space-api' of github.com:legrego/kibana …
legrego 79cc29f
read exported SO stream to completion
legrego 7241dd6
reenable tests
legrego c8cccca
make API endpoints snake_case instead of camelCase
legrego b4ae5d2
removing explicit auth checks prior to initiating copy operation
legrego 6b53969
improve error handling when thrown from wrapped Saved Objects Client
legrego 6330858
make TS happy
legrego 22ab280
Apply suggestions from code review
legrego eb12dd6
rename 'get space' purpose from 'copySavedObjects' to 'copySavedObjec…
legrego 943cf95
prefixing RPC routes with an underscore
legrego 5f57c7b
updating functional API tests
legrego 4eca3f9
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego 5a749e2
Merge branch 'spaces/copy-to-space-api' of github.com:legrego/kibana …
legrego 3219006
apply doc suggestions
legrego 683b207
move stream creation to utility function
legrego e5d7682
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego 3eb982b
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego 857034d
Update docs/api/spaces-management/get.asciidoc
legrego d8a82e9
cleaning up poorly named test spaces
legrego be26e69
removing unused error types
legrego 21a5bca
improving spaces_client tests
legrego 4e07b45
Apply suggestions from code review
legrego 3d7c8b2
Merge branch 'spaces/copy-to-space-api' of github.com:legrego/kibana …
legrego c5d2b9e
uncommenting test suites
legrego 9507ac7
ensure SOC is created without spaces wrapper
legrego 1ee8e01
testing stream read errors
legrego 393f8e6
testing readStreamToCompletion and createReadableStreamFromArray
legrego 23fdb80
verify the correct number of spaces were copied into
legrego 76dbdc0
add missing tests
legrego 61df1e2
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego d913b59
fix test suite name
legrego 0acb332
fixing test reference
legrego 302230c
fix it again
legrego 37ac143
addressing feedback
legrego 5c467ba
Merge branch 'master' of github.com:elastic/kibana into spaces/copy-t…
legrego File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,288 @@ | ||
| [role="xpack"] | ||
| [[spaces-api-copy-saved-objects]] | ||
| === Copy Saved Objects to Space | ||
| ++++ | ||
| <titleabbrev>Copy Saved Objects to Space</titleabbrev> | ||
| ++++ | ||
|
|
||
| experimental[This functionality is *experimental* and may be changed or removed completely in a future release.] | ||
|
|
||
| Copies saved objects from one space to other spaces. | ||
|
|
||
| //// | ||
| Use the appropriate heading levels for your book. | ||
| Add anchors for each section. | ||
| FYI: The section titles use attributes in case those terms change. | ||
| //// | ||
|
|
||
| [[spaces-api-copy-saved-objects-request]] | ||
| ==== {api-request-title} | ||
| //// | ||
| This section show the basic endpoint, without the body or optional parameters. | ||
| Variables should use <...> syntax. | ||
| If an API supports both PUT and POST, include both here. | ||
| //// | ||
|
|
||
| `POST /api/spaces/_copy_saved_objects` | ||
|
|
||
| `POST /s/<space_id>/api/spaces/_copy_saved_objects` | ||
|
|
||
|
|
||
| //// | ||
| [[spaces-api-copy-saved-objects-prereqs]] | ||
| ==== {api-prereq-title} | ||
| //// | ||
| //// | ||
| Optional list of prerequisites. | ||
|
|
||
| For example: | ||
|
|
||
| * A snapshot of an index created in 5.x can be restored to 6.x. You must... | ||
| * If the {es} {security-features} are enabled, you must have `write`, `monitor`, | ||
| and `manage_follow_index` index privileges... | ||
| //// | ||
|
|
||
|
|
||
| [[spaces-api-copy-saved-objects-desc]] | ||
| ==== {api-description-title} | ||
|
|
||
| Copy saved objects between spaces. | ||
|
|
||
| It also allows you to automatically copy related objects, so when you copy a `dashboard`, this can automatically copy over the | ||
| associated visualizations, index patterns, and saved searches, as required. | ||
|
|
||
| You can request to overwrite any objects that already exist in the target space if they share an ID, or you can use the | ||
| <<spaces-api-resolve-copy-saved-objects-conflicts, Resolve copy saved objects conflicts API>> to do this on a per-object basis. | ||
|
|
||
| //// | ||
| Add a more detailed description the context. | ||
| Link to related APIs if appropriate. | ||
|
|
||
| Guidelines for parameter documentation | ||
| *************************************** | ||
| * Use a definition list. | ||
| * End each definition with a period. | ||
| * Include whether the parameter is Optional or Required and the data type. | ||
| * Include default values as the last sentence of the first paragraph. | ||
| * Include a range of valid values, if applicable. | ||
| * If the parameter requires a specific delimiter for multiple values, say so. | ||
| * If the parameter supports wildcards, ditto. | ||
| * For large or nested objects, consider linking to a separate definition list. | ||
| *************************************** | ||
| //// | ||
|
|
||
|
|
||
| [[spaces-api-copy-saved-objects-path-params]] | ||
| ==== {api-path-parms-title} | ||
| //// | ||
| A list of all the parameters within the path of the endpoint (before the query string (?)). | ||
|
|
||
| For example: | ||
| `<follower_index>`:: | ||
| (Required, string) Name of the follower index | ||
| //// | ||
| `space_id`:: | ||
| (Optional, string) Identifies the source space from which saved objects will be copied. If `space_id` is not specified in the URL, the default space is used. | ||
|
|
||
| //// | ||
| [[spaces-api-copy-saved-objects-params]] | ||
| ==== {api-query-parms-title} | ||
| //// | ||
| //// | ||
| A list of the parameters in the query string of the endpoint (after the ?). | ||
|
|
||
| For example: | ||
| `wait_for_active_shards`:: | ||
| (Optional, integer) Specifies the number of shards to wait on being active before | ||
| responding. A shard must be restored from the leader index being active. | ||
| Restoring a follower shard requires transferring all the remote Lucene segment | ||
| files to the follower index. The default is `0`, which means waiting on none of | ||
| the shards to be active. | ||
| //// | ||
|
|
||
| [[spaces-api-copy-saved-objects-request-body]] | ||
| ==== {api-request-body-title} | ||
| //// | ||
| A list of the properties you can specify in the body of the request. | ||
|
|
||
| For example: | ||
| `remote_cluster`:: | ||
| (Required, string) The <<modules-remote-clusters,remote cluster>> that contains | ||
| the leader index. | ||
|
|
||
| `leader_index`:: | ||
| (Required, string) The name of the index in the leader cluster to follow. | ||
| //// | ||
| `spaces` :: | ||
| (Required, string array) The ids of the spaces the specified object(s) will be copied into. | ||
|
|
||
| `objects` :: | ||
| (Required, object array) The saved objects to copy. | ||
| `type` ::: | ||
| (Required, string) The saved object type. | ||
| `id` ::: | ||
| (Required, string) The saved object id. | ||
|
|
||
| `includeReferences` :: | ||
| (Optional, boolean) When set to `true`, all saved objects related to the specified saved objects will also be copied into the target spaces. The default value is `false`. | ||
|
|
||
| `overwrite` :: | ||
| (Optional, boolean) When set to `true`, all conflicts will be automatically overidden. If a saved object with a matching `type` and `id` exists in the target space, then that version will be replaced with the version from the source space. The default value is `false`. | ||
|
|
||
|
|
||
| [[spaces-api-copy-saved-objects-response-body]] | ||
| ==== {api-response-body-title} | ||
| //// | ||
| Response body is only required for detailed responses. | ||
|
|
||
| For example: | ||
| `auto_follow_stats`:: | ||
| (object) An object representing stats for the auto-follow coordinator. This | ||
| object consists of the following fields: | ||
|
|
||
| `auto_follow_stats.number_of_successful_follow_indices`::: | ||
| (long) the number of indices that the auto-follow coordinator successfully | ||
| followed | ||
| ... | ||
|
|
||
| //// | ||
|
|
||
| `<space_id>`:: | ||
| (object) Specifies the dynamic keys that are included in the response. An object describing the result of the copy operation for this particular space. | ||
| `success`::: | ||
| (boolean) Indicates if the copy operation was successful. Note that some objects may have been copied even if this is set to `false`. Consult the `successCount` and `errors` properties of the response for additional information. | ||
| `successCount`::: | ||
| (number) The number of objects that were successfully copied. | ||
| `errors`::: | ||
| (Optional, array) Collection of any errors that were encountered during the copy operation. If any errors are reported, then the `success` flag will be set to `false`. | ||
| `id`:::: | ||
| (string) The saved object id which failed to copy. | ||
| `type`:::: | ||
| (string) The type of saved object which failed to copy. | ||
| `error`:::: | ||
| (object) The error which caused the copy operation to fail. | ||
| `type`::::: | ||
| (string) Indicates the type of error. May be one of: `conflict`, `unsupported_type`, `missing_references`, `unknown`. Errors marked as `conflict` may be resolved by using the <<spaces-api-resolve-copy-saved-objects-conflicts, Resolve copy saved objects conflicts API>>. | ||
|
|
||
| //// | ||
| [[spaces-api-copy-saved-objects-response-codes]] | ||
| ==== {api-response-codes-title} | ||
| //// | ||
| //// | ||
| Response codes are only required when needed to understand the response body. | ||
|
|
||
| For example: | ||
| `200`:: | ||
| Indicates all listed indices or index aliases exist. | ||
|
|
||
| `404`:: | ||
| Indicates one or more listed indices or index aliases **do not** exist. | ||
| //// | ||
|
|
||
|
|
||
| [[spaces-api-copy-saved-objects-example]] | ||
| ==== {api-examples-title} | ||
| //// | ||
| Optional brief example. | ||
| Use an 'Examples' heading if you include multiple examples. | ||
|
|
||
|
|
||
| [source,js] | ||
| ---- | ||
| PUT /follower_index/_ccr/follow?wait_for_active_shards=1 | ||
| { | ||
| "remote_cluster" : "remote_cluster", | ||
| "leader_index" : "leader_index", | ||
| "max_read_request_operation_count" : 1024, | ||
| "max_outstanding_read_requests" : 16, | ||
| "max_read_request_size" : "1024k", | ||
| "max_write_request_operation_count" : 32768, | ||
| "max_write_request_size" : "16k", | ||
| "max_outstanding_write_requests" : 8, | ||
| "max_write_buffer_count" : 512, | ||
| "max_write_buffer_size" : "512k", | ||
| "max_retry_delay" : "10s", | ||
| "read_poll_timeout" : "30s" | ||
| } | ||
| ---- | ||
| // CONSOLE | ||
| // TEST[setup:remote_cluster_and_leader_index] | ||
|
|
||
| The API returns the following result: | ||
|
|
||
| [source,js] | ||
| ---- | ||
| { | ||
| "follow_index_created" : true, | ||
| "follow_index_shards_acked" : true, | ||
| "index_following_started" : true | ||
| } | ||
| ---- | ||
| // TESTRESPONSE | ||
| //// | ||
|
|
||
| The following example attempts to copy a dashboard with id `my-dashboard`, including all references from the `default` space to the `marketing` and `sales` spaces. The `marketing` space succeeds, while the `sales` space fails due to a conflict on the underlying index pattern: | ||
|
|
||
| [source,js] | ||
| ---- | ||
| POST /api/spaces/_copy_saved_objects | ||
| { | ||
| "objects": [{ | ||
| "type": "dashboard", | ||
| "id": "my-dashboard" | ||
| }], | ||
| "spaces": ["marketing", "sales"], | ||
| "includeReferences": true | ||
| } | ||
| ---- | ||
| // KIBANA | ||
|
|
||
| The API returns the following result: | ||
|
|
||
| [source,js] | ||
| ---- | ||
| { | ||
| "marketing": { | ||
| "success": true, | ||
| "successCount": 5 | ||
| }, | ||
| "sales": { | ||
| "success": false, | ||
| "successCount": 4, | ||
| "errors": [{ | ||
| "id": "my-index-pattern", | ||
| "type": "index-pattern", | ||
| "error": { | ||
| "type": "conflict" | ||
| } | ||
| }] | ||
| } | ||
| } | ||
| ---- | ||
|
|
||
| The following example successfully copies a visualization with id `my-viz` from the `marketing` space to the `default` space: | ||
|
|
||
| [source,js] | ||
| ---- | ||
| POST /s/marketing/api/spaces/_copy_saved_objects | ||
| { | ||
| "objects": [{ | ||
| "type": "visualization", | ||
| "id": "my-viz" | ||
| }], | ||
| "spaces": ["default"] | ||
| } | ||
| ---- | ||
| // KIBANA | ||
|
|
||
| The API returns the following result: | ||
|
|
||
| [source,js] | ||
| ---- | ||
| { | ||
| "default": { | ||
| "success": true, | ||
| "successCount": 1 | ||
| } | ||
| } | ||
| ---- | ||
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
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of
{api-request-title}, it should beRequestor whatever title you want it to be. For the other Kibana APIs, I just usedRequest, but I'm always open for other ideas.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh interesting, I thought the purpose of using
{api-request-title}was to ensure the section titles were consistent across all docs, with a central definition. Am I misunderstanding this comment?FWIW, it seems to be replacing the attributes correctly:
