[8.8] [Data Views] Support "namespaces" param in create data view API (#155815) (#156991)

# Backport

This will backport the following commits from `main` to `8.8`:
- [[Data Views] Support "namespaces" param in create data view API
(#155815)](https://github.com/elastic/kibana/pull/155815)

<!--- Backport version: 8.9.7 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Davis
McPhee","email":"davis.mcphee@elastic.co"},"sourceCommit":{"committedDate":"2023-05-08T13:03:08Z","message":"[Data
Views] Support \"namespaces\" param in create data view API
(#155815)\n\n## Summary\r\n\r\nThis work was originally done by
@jughosta in #150712, I just added a\r\ncouple of integration tests and
opened another PR for it.\r\n\r\nFixes #140426.\r\n\r\n#### Original PR
summary:\r\n\r\nThis PR adds support for `namespaces` param in create
data view API as\r\nper
docs\r\nhttps://www.elastic.co/guide/en/kibana/current/data-views-api-create.html#data-views-api-properties\r\n\r\n<img
width=\"300\" alt=\"Screenshot 2023-02-09 at 15 04
55\"\r\nsrc=\"https://user-images.githubusercontent.com/1415710/217835577-fa4286ff-89f4-4de2-97b0-62c04f756858.png\">\r\n\r\nPrevious
functionality is still in place:\r\n* setting \"default\" space if
\"namespaces\" param is not provided\r\n<img width=\"300\"
alt=\"Screenshot 2023-02-09 at 15 06
55\"\r\nsrc=\"https://user-images.githubusercontent.com/1415710/217835951-d274c8ba-5bd9-4c36-9487-c2dbd5ce42de.png\">\r\n\r\n*
setting the specified in URL space ID if \"namespaces\" param is
not\r\nprovided\r\n<img width=\"300\" alt=\"Screenshot 2023-02-09 at 15
06
34\"\r\nsrc=\"https://user-images.githubusercontent.com/1415710/217836019-81f36a16-157f-4ce9-9d19-c5685d633acc.png\">\r\n\r\n###
Checklist\r\n\r\n- [ ] ~Any text added follows [EUI's
writing\r\nguidelines](https://elastic.github.io/eui/#/guidelines/writing),
uses\r\nsentence case text and includes
[i18n\r\nsupport](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)~\r\n-
[
]\r\n~[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\r\nwas
added for features that require explanation or tutorials~\r\n- [x] [Unit
or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common scenarios\r\n- [ ] ~Any UI
touched in this PR is usable by keyboard only (learn more\r\nabout
[keyboard\r\naccessibility](https://webaim.org/techniques/keyboard/))~\r\n-
[ ] ~Any UI touched in this PR does not create any new axe
failures\r\n(run axe in
browser:\r\n[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),\r\n[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))~\r\n-
[ ] ~If a plugin configuration key changed, check if it needs to
be\r\nallowlisted in the cloud and added to the
[docker\r\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~\r\n-
[ ] ~This renders correctly on smaller devices using a
responsive\r\nlayout. (You can test this [in
your\r\nbrowser](https://www.browserstack.com/guide/responsive-testing-on-local-server))~\r\n-
[ ] ~This was checked for
[cross-browser\r\ncompatibility](https://www.elastic.co/support/matrix#matrix_browsers)~\r\n\r\n###
For maintainers\r\n\r\n- [ ] This was checked for breaking API changes
and was
[labeled\r\nappropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\r\n\r\n---------\r\n\r\nCo-authored-by:
Julia Rechkunova
<julia.rechkunova@elastic.co>","sha":"ab2f967ba5720daffa8d404802effe688804d41c","branchLabelMapping":{"^v8.9.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Feature:Data
Views","Team:DataDiscovery","v8.8.0","v8.9.0"],"number":155815,"url":"https://github.com/elastic/kibana/pull/155815","mergeCommit":{"message":"[Data
Views] Support \"namespaces\" param in create data view API
(#155815)\n\n## Summary\r\n\r\nThis work was originally done by
@jughosta in #150712, I just added a\r\ncouple of integration tests and
opened another PR for it.\r\n\r\nFixes #140426.\r\n\r\n#### Original PR
summary:\r\n\r\nThis PR adds support for `namespaces` param in create
data view API as\r\nper
docs\r\nhttps://www.elastic.co/guide/en/kibana/current/data-views-api-create.html#data-views-api-properties\r\n\r\n<img
width=\"300\" alt=\"Screenshot 2023-02-09 at 15 04
55\"\r\nsrc=\"https://user-images.githubusercontent.com/1415710/217835577-fa4286ff-89f4-4de2-97b0-62c04f756858.png\">\r\n\r\nPrevious
functionality is still in place:\r\n* setting \"default\" space if
\"namespaces\" param is not provided\r\n<img width=\"300\"
alt=\"Screenshot 2023-02-09 at 15 06
55\"\r\nsrc=\"https://user-images.githubusercontent.com/1415710/217835951-d274c8ba-5bd9-4c36-9487-c2dbd5ce42de.png\">\r\n\r\n*
setting the specified in URL space ID if \"namespaces\" param is
not\r\nprovided\r\n<img width=\"300\" alt=\"Screenshot 2023-02-09 at 15
06
34\"\r\nsrc=\"https://user-images.githubusercontent.com/1415710/217836019-81f36a16-157f-4ce9-9d19-c5685d633acc.png\">\r\n\r\n###
Checklist\r\n\r\n- [ ] ~Any text added follows [EUI's
writing\r\nguidelines](https://elastic.github.io/eui/#/guidelines/writing),
uses\r\nsentence case text and includes
[i18n\r\nsupport](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)~\r\n-
[
]\r\n~[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\r\nwas
added for features that require explanation or tutorials~\r\n- [x] [Unit
or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common scenarios\r\n- [ ] ~Any UI
touched in this PR is usable by keyboard only (learn more\r\nabout
[keyboard\r\naccessibility](https://webaim.org/techniques/keyboard/))~\r\n-
[ ] ~Any UI touched in this PR does not create any new axe
failures\r\n(run axe in
browser:\r\n[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),\r\n[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))~\r\n-
[ ] ~If a plugin configuration key changed, check if it needs to
be\r\nallowlisted in the cloud and added to the
[docker\r\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~\r\n-
[ ] ~This renders correctly on smaller devices using a
responsive\r\nlayout. (You can test this [in
your\r\nbrowser](https://www.browserstack.com/guide/responsive-testing-on-local-server))~\r\n-
[ ] ~This was checked for
[cross-browser\r\ncompatibility](https://www.elastic.co/support/matrix#matrix_browsers)~\r\n\r\n###
For maintainers\r\n\r\n- [ ] This was checked for breaking API changes
and was
[labeled\r\nappropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\r\n\r\n---------\r\n\r\nCo-authored-by:
Julia Rechkunova
<julia.rechkunova@elastic.co>","sha":"ab2f967ba5720daffa8d404802effe688804d41c"}},"sourceBranch":"main","suggestedTargetBranches":["8.8"],"targetPullRequestStates":[{"branch":"8.8","label":"v8.8.0","labelRegex":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v8.9.0","labelRegex":"^v8.9.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/155815","number":155815,"mergeCommit":{"message":"[Data
Views] Support \"namespaces\" param in create data view API
(#155815)\n\n## Summary\r\n\r\nThis work was originally done by
@jughosta in #150712, I just added a\r\ncouple of integration tests and
opened another PR for it.\r\n\r\nFixes #140426.\r\n\r\n#### Original PR
summary:\r\n\r\nThis PR adds support for `namespaces` param in create
data view API as\r\nper
docs\r\nhttps://www.elastic.co/guide/en/kibana/current/data-views-api-create.html#data-views-api-properties\r\n\r\n<img
width=\"300\" alt=\"Screenshot 2023-02-09 at 15 04
55\"\r\nsrc=\"https://user-images.githubusercontent.com/1415710/217835577-fa4286ff-89f4-4de2-97b0-62c04f756858.png\">\r\n\r\nPrevious
functionality is still in place:\r\n* setting \"default\" space if
\"namespaces\" param is not provided\r\n<img width=\"300\"
alt=\"Screenshot 2023-02-09 at 15 06
55\"\r\nsrc=\"https://user-images.githubusercontent.com/1415710/217835951-d274c8ba-5bd9-4c36-9487-c2dbd5ce42de.png\">\r\n\r\n*
setting the specified in URL space ID if \"namespaces\" param is
not\r\nprovided\r\n<img width=\"300\" alt=\"Screenshot 2023-02-09 at 15
06
34\"\r\nsrc=\"https://user-images.githubusercontent.com/1415710/217836019-81f36a16-157f-4ce9-9d19-c5685d633acc.png\">\r\n\r\n###
Checklist\r\n\r\n- [ ] ~Any text added follows [EUI's
writing\r\nguidelines](https://elastic.github.io/eui/#/guidelines/writing),
uses\r\nsentence case text and includes
[i18n\r\nsupport](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)~\r\n-
[
]\r\n~[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\r\nwas
added for features that require explanation or tutorials~\r\n- [x] [Unit
or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common scenarios\r\n- [ ] ~Any UI
touched in this PR is usable by keyboard only (learn more\r\nabout
[keyboard\r\naccessibility](https://webaim.org/techniques/keyboard/))~\r\n-
[ ] ~Any UI touched in this PR does not create any new axe
failures\r\n(run axe in
browser:\r\n[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),\r\n[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))~\r\n-
[ ] ~If a plugin configuration key changed, check if it needs to
be\r\nallowlisted in the cloud and added to the
[docker\r\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~\r\n-
[ ] ~This renders correctly on smaller devices using a
responsive\r\nlayout. (You can test this [in
your\r\nbrowser](https://www.browserstack.com/guide/responsive-testing-on-local-server))~\r\n-
[ ] ~This was checked for
[cross-browser\r\ncompatibility](https://www.elastic.co/support/matrix#matrix_browsers)~\r\n\r\n###
For maintainers\r\n\r\n- [ ] This was checked for breaking API changes
and was
[labeled\r\nappropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\r\n\r\n---------\r\n\r\nCo-authored-by:
Julia Rechkunova
<julia.rechkunova@elastic.co>","sha":"ab2f967ba5720daffa8d404802effe688804d41c"}}]}]
BACKPORT-->

Co-authored-by: Davis McPhee <davis.mcphee@elastic.co>
This commit is contained in:
Kibana Machine 2023-05-08 12:32:09 -04:00 committed by GitHub
parent 7584884a8f
commit 03935668fb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 63 additions and 4 deletions

View file

@ -1011,6 +1011,7 @@ export class DataViewsService {
body,
{
id: dataView.id,
initialNamespaces: dataView.namespaces.length > 0 ? dataView.namespaces : undefined,
}
)) as SavedObject<DataViewAttributes>;

View file

@ -296,7 +296,7 @@ export interface SavedObjectsClientCommon {
create: (
type: string,
attributes: DataViewAttributes,
options: SavedObjectsCreateOptions
options: SavedObjectsCreateOptions & { initialNamespaces?: string[] }
) => Promise<SavedObject>;
/**
* Delete a saved object by id

View file

@ -70,6 +70,7 @@ const dataViewSpecSchema = schema.object({
allowNoIndex: schema.maybe(schema.boolean()),
runtimeFieldMap: schema.maybe(schema.recordOf(schema.string(), runtimeFieldSchema)),
name: schema.maybe(schema.string()),
namespaces: schema.maybe(schema.arrayOf(schema.string())),
});
const registerCreateDataViewRouteFactory =
@ -124,7 +125,10 @@ const registerCreateDataViewRouteFactory =
'content-type': 'application/json',
},
body: {
[serviceKey]: dataView.toSpec(),
[serviceKey]: {
...dataView.toSpec(),
namespaces: dataView.namespaces,
},
},
});
})

View file

@ -8,7 +8,7 @@
import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../../ftr_provider_context';
import { configArray } from '../../constants';
import { configArray, dataViewConfig } from '../../constants';
export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
@ -290,5 +290,59 @@ export default function ({ getService }: FtrProviderContext) {
});
});
});
describe('spaces', () => {
const kibanaServer = getService('kibanaServer');
const fooNamespace = 'foo-namespace';
before(async () => {
await kibanaServer.spaces.create({
id: fooNamespace,
name: fooNamespace,
});
});
after(async () => {
await kibanaServer.spaces.delete(fooNamespace);
});
it('can specify optional namespaces array when creating a data view', async () => {
const title = `foo-${Date.now()}-${Math.random()}*`;
const namespaces = ['default', fooNamespace];
const createResponse = await supertest.post(dataViewConfig.path).send({
[dataViewConfig.serviceKey]: {
title,
namespaces,
},
});
expect(createResponse.status).to.be(200);
expect(createResponse.body[dataViewConfig.serviceKey].namespaces).to.eql(namespaces);
const getResponse = await supertest.get(dataViewConfig.basePath);
const dataView = getResponse.body.data_view.find((dv: any) => dv.title === title);
expect(dataView.namespaces).to.eql(namespaces);
});
it('sets namespaces to the current space if namespaces array is not specified', async () => {
const title = `foo-${Date.now()}-${Math.random()}*`;
const createResponse = await supertest
.post(`/s/${fooNamespace}${dataViewConfig.path}`)
.send({
[dataViewConfig.serviceKey]: {
title,
},
});
expect(createResponse.status).to.be(200);
expect(createResponse.body[dataViewConfig.serviceKey].namespaces).to.eql([fooNamespace]);
const getResponse = await supertest.get(`/s/${fooNamespace}${dataViewConfig.basePath}`);
const dataView = getResponse.body.data_view.find((dv: any) => dv.title === title);
expect(dataView.namespaces).to.eql([fooNamespace]);
});
});
});
}

View file

@ -111,7 +111,7 @@ export default function ({ getService }: FtrProviderContext) {
expect(response6.status).to.be(200);
const recreatedIndexPattern = response6.body.index_pattern;
expect(_.omit(recreatedIndexPattern, 'version')).to.eql(
expect(_.omit(recreatedIndexPattern, 'version', 'namespaces')).to.eql(
_.omit(resultIndexPattern, 'version')
);
});