* Initial stab at core task manager logic
* Update task_manager readme
* Update task manager readme
* Add cancelable helper package, OSS, and general purpose, but
will be useful for writing cancelable x-pack tasks.
* Make the cancellable package promise-compliant
* Update task manager readme w/ reference to cancellable
* Change pool from lazy to eager, add support for sub-pools per task type.
* Move cancellable to task_manager, and typescriptify it.
* Working proof of concept for task manager. Still have lots to do:
clean up, tests, comments, validations, assertions, etc.
* Add pagination support to task manager fetch
* Move task manager to OSS
* Remove task manager reference from x-pack
* Make task_manager a valid core plugin
* Modify how task resource allocation works
* Remove the special case 'max' workers occupied value
* Remove x-pack package.json changes
* Make taskDefinitions a part of uiExports
* Make task docs saved-object compliant.
* Add kbnServer to the task context.
* Allow tasks to have a void / undefined return type
* revert x-pack change
* move cancellable to src/utils
* move to src/server
* use afterPluginsInit hook
* task_manager.ts rename
* add a wrapper with a setClient method
* Add tests for task runner
* Break task_pool into smaller, testable pieces
* return raw task doc fields for calling code
* remove todo comment
* helper module for default client
- setClient takes a callback fn
* fix misidentified field name
* fix rest args warning
* flatten task_pool
* remove cancellable
* return raw task doc fields for calling code
* remove todo comment
* helper module for default client
- setClient takes a callback fn
* fix rest args warning
* typescript fixes
* roll back setClient takes a callback
* createTaskRunner returns an object with run/cancel functions
* Test task store, tweak task poller tests
* Rename num_workers to max_workers
* Tweak task pool method names
* Fix cancellable test, and ts errors
* Rename doc to _doc
* Fix the doc type in the task manager index mappings
* Make task costs configurable in kibana.yml
* fix a tslint warning
* TaskManager.afterPluginsInit replaces circuitous stuff
* addMiddleware, implement beforeSave
* wip
* comment
* run context stuff
* pretty fix
* comments
* lint/pretty fixes
* safeties in case they don't define both beforeRun and beforeSave
* task runner test constructor opts fix
* Add task_manager integration tests
* FIx readme mistakes, fix schedule signature
* Fix integration tests
* Add blurb about middleware
* make a libs directory for the small things
* test for extractTaskDefinitions
* unit test for middleware
* Comment, refactor, and test task_manager
* Touch up comments
* Make task store throw error if given an unknown task type
* Fix sample task definition in readme
* Make task manager toggle on / off based on Elasticsearch connectivity
* Prevent task manager from crashing Kibana if
elasticsearch plugin is disabled
* Fix task manager signature
* Move the task manager into the task manager mixin,
fix tests. It's an uber integration object anyway, so
it seemed to make sense to keep it in one place.
* Fix task manager integration tests
* Update the task manager index creation to use auto_expand_replicas
* Fix task manager integration tests
* Fix task manager integration tests
* Fix the overzealous deletion of .kibana during tests
* Core task manager
* Allow hardcoded ID passed in
* comments
* don't deconstruct type and task for payload
* remove uiExport support
* move task_manager to x-pack/plugins
* expose as client on the plugin namespace
* fix tests
* move plugin api integration tests
* roll back readme sample task definition example
* fix sample plugin link
* server.taskManager
* sanitizeTaskDefinitions
* fix integration tests
* sanitize rename
* assert unintialized and check for duplicates in registerTaskDefinitions
* Remove unnecessary defaults from task_manager.test.ts
* Remove task manager from OSS
* Remove task manager from src
* Tidy up task_manager unit tests around elasticsearch status changes
* Integration test for specifying ID in scheduling
* Task_manager init -> preInit to allow other plugins to consume
taskManager in their init.
* Remove task manager integration tests from OSS
* Make saved object client error while Kibana index is migrating
* Tidy up a bit, and refactor the way the `isMigrated` check is accessed
* Remove unused interface declaration
* Remove default migrator from saved objects repository constructor
* Fix repository migrator isComplete check
* Wrap callCluster and delay it until migrations have completed...
* Fix inaccurate comment
* Ensure migrations wait for elasticsearch to go green prior to running
* Reenabling tests
* Add tests for callCluster being wrapped in the repository, fix
the es_archiver's call to migrate index.
* Fixing esArchiver's usage of migrations
* Disabling spaces for the phanton api BWC tests
* don't throw if authorization mode is already initialized
* Adding spaces to the reporting historical archives
* Loading empty_kibana for grok debugger tests
* Enabling reporting tests
* Altering the method in which we logout users to be more fault tolerant
* Actually doing what I said before...
* Skipping Dashboard Preserve Layout, it likes to fail a lot
* Skipping dashboard view mode tests
* Putting logout back how it was, trying to make the security tests run
properly when we don't have dashboard mode tests
* Running subsection of tests that are failing
* Don't bail, run them all
* Disabling canvas, breaks logout
* Fixing spaces create legacy error assertion
* Putting comment about why we're disabling spaces for the functional
tests
### Review notes
This is generally ready for review. We are awaiting https://github.com/elastic/elasticsearch/issues/32777 to improve handling when users do not have any access to Kibana, but this should not hold up the overall review for this PR.
This PR is massive, there's no denying that. Here's what to focus on:
1) `x-pack/plugins/spaces`: This is, well, the Spaces plugin. Everything in here is brand new. The server code is arguably more important, but feel free to review whatever you see fit.
2) `x-pack/plugins/security`: There are large and significant changes here to allow Spaces to be securable. To save a bit of time, you are free to ignore changes in `x-pack/plugins/security/public`: These are the UI changes for the role management screen, which were previously reviewed by both us and the design team.
3) `x-pack/test/saved_object_api_integration` and `x-pack/test/spaces_api_integration`: These are the API test suites which verify functionality for:
a) Both security and spaces enabled
b) Only security enabled
c) Only spaces enabled
What to ignore:
1) As mentioned above, you are free to ignore changes in `x-pack/plugins/security/public`
2) Changes to `kibana/src/server/*`: These changes are part of a [different PR that we're targeting against master](https://github.com/elastic/kibana/pull/23378) for easier review.
## Saved Objects Client Extensions
A bulk of the changes to the saved objects service are in the namespaces PR, but we have a couple of important changes included here.
### Priority Queue for wrappers
We have implemented a priority queue which allows plugins to specify the order in which their SOC wrapper should be applied: `kibana/src/server/saved_objects/service/lib/priority_collection.ts`. We are leveraging this to ensure that both the security SOC wrapper and the spaces SOC wrapper are applied in the correct order (more details below).
### Spaces SOC Wrapper
This wrapper is very simple, and it is only responsible for two things:
1) Prevent users from interacting with any `space` objects (use the Spaces client instead, described below)
2) Provide a `namespace` to the underlying Saved Objects Client, and ensure that no other wrappers/callers have provided a namespace. In order to accomplish this, the Spaces wrapper uses the priority queue to ensure that it is the last wrapper invoked before calling the underlying client.
### Security SOC Wrapper
This wrapper is responsible for performing authorization checks. It uses the priority queue to ensure that it is the first wrapper invoked. To say another way, if the authorization checks fail, then no other wrappers will be called, and the base client will not be called either. This wrapper authorizes users in one of two ways: RBAC or Legacy. More details on this are below.
### Examples:
`GET /s/marketing/api/saved_objects/index-pattern/foo`
**When both Security and Spaces are enabled:**
1) Saved objects API retrieves an instance of the SOC via `savedObjects.getScopedClient()`, and invokes its `get` function
2) The Security wrapper is invoked.
a) Authorization checks are performed to ensure user can access this particular saved object at this space.
3) The Spaces wrapper is invoked.
a) Spaces applies a `namespace` to be used by the underlying client
4) The underlying client/repository are invoked to retrieve the object from ES.
**When only Spaces are enabled:**
1) Saved objects API retrieves an instance of the SOC via `savedObjects.getScopedClient()`, and invokes its `get` function
2) The Spaces wrapper is invoked.
a) Spaces applies a `namespace` to be used by the underlying client
3) The underlying client/repository are invoked to retrieve the object from ES.
**When only Security is enabled:**
(assume `/s/marketing` is no longer part of the request)
1) Saved objects API retrieves an instance of the SOC via `savedObjects.getScopedClient()`, and invokes its `get` function
2) The Security wrapper is invoked.
a) Authorization checks are performed to ensure user can access this particular saved object globally.
3) The underlying client/repository are invoked to retrieve the object from ES.
## Authorization
Authorization changes for this project are centered around Saved Objects, and builds on the work introduced in RBAC Phase 1.
### Saved objects client
#### Security without spaces
When security is enabled, but spaces is disabled, then the authorization model behaves the same way as before: If the user is taking advantage of Kibana Privileges, then we check their privileges "globally" before proceeding. A "global" privilege check specifies `resources: ['*']` when calling the [ES _has_privileges api.](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-has-privileges.html). Legacy users (non-rbac) will continue to use the underlying index privileges for authorization.
#### Security with spaces
When both plugins are enabled, then the authorization model becomes more fine-tuned. Rather than checking privileges globally, the privileges are checked against a specific resource that matches the user's active space. In order to accomplish this, the Security plugin needs to know if Spaces is enabled, and if so, it needs to ask Spaces for the user's active space. The subsequent call to the `ES _has_privileges api` would use `resources: ['space:marketing']` to verify that the user is authorized at the `marketing` space. Legacy users (non-rbac) will continue to use the underlying index privileges for authorization. **NOTE** The legacy behavior implies that those users will have access to all spaces. The read/write restrictions are still enforced, but there is no way to restrict access to a specific space for legacy auth users.
#### Spaces without security
No authorization performed. Everyone can access everything.
### Spaces client
Spaces, when enabled, prevents saved objects of type `space` from being CRUD'd via the Saved Objects Client. Instead, the only "approved" way to work with these objects is through the new Spaces client (`kibana/x-pack/plugins/spaces/lib/spaces_client.ts`).
When security is enabled, the Spaces client performs its own set of authorization checks before allowing the request to proceed. The Spaces client knows which authorization checks need to happen for a particular request, but it doesn't know _how_ to check privileges. To accomplish this, the spaces client will delegate the check security's authorization service.
#### FAQ: Why oh why can't you used the Saved Objects Client instead!?
That's a great question! We did this primarily to simplify the authorization model (at least for our initial release). Accessing regular saved objects follows a predictible authorization pattern (described above). Spaces themselves inform the authorization model, and this interplay would have greatly increased the complexity. We are brainstorming ideas to obselete the Spaces client in favor of using the Saved Objects Client everywhere, but that's certainly out of scope for this release.
## Test Coverage
### Saved Objects API
A bulk of the changes to enable spaces are centered around saved objects, so we have spent a majority of our time automating tests against the saved objects api.
**`x-pack/test/saved_object_api_integration/`** contains the test suites for the saved objects api. There is a `common/suites` subfolder which contains a bulk of the test logic. The suites defined here are used in the following test configurations:
1) Spaces only: `./spaces_only`
2) Security and spaces: `./security_and_spaces`
3) Security only: `./security_only`
Each of these test configurations will start up ES/Kibana with the appropriate license and plugin set. Each set runs through the entire test suite described in `common/suites`. Each test with in each suite is run multiple times with different inputs, to test the various permutations of authentication, authorization type (legacy vs RBAC), space-level privileges, and the user's active space.
### Spaces API
Spaces provides an experimental public API.
**`x-pack/test/spaces_api_integration`** contains the test suites for the Spaces API. Similar to the Saved Objects API tests described above, there is a `common/suites` folder which contains a bulk of the test logic. The suites defined here are used in the following test configurations:
1) Spaces only: `./spaces_only`
2) Security and spaces: `./security_and_spaces`
### Role Management UI
We did not provide any new functional UI tests for role management, but the existing suite was updated to accomidate the screen rewrite.
We do have a decent suite of jest unit tests for the various components that make up the new role management screen. They're nested within `kibana/x-pack/plugins/security/public/views/management/edit_role`
### Spaces Management UI
We did not provide any new functional UI tests for spaces management, but the components that make up the screens are well-tested, and can be found within `kibana/x-pack/plugins/spaces/public/views/management/edit_space`
### Spaces Functional UI Tests
There are a couple of UI tests that verify _basic_ functionality. They assert that a user can login, select a space, and then choose a different space once inside: `kibana/x-pack/test/functional/apps/spaces`
## Reference
Notable child PRs are listed below for easier digesting. Note that some of these PRs are built on other PRs, so the deltas in the links below may be outdated. Cross reference with this PR when in doubt.
### UI
- Reactify Role Management Screen: https://github.com/elastic/kibana/pull/19035
- Space Aware Privileges UI: https://github.com/elastic/kibana/pull/21049
- Space Selector (in Kibana Nav): https://github.com/elastic/kibana/pull/19497
- Recently viewed Widget: https://github.com/elastic/kibana/pull/22492
- Support Space rename/delete: https://github.com/elastic/kibana/pull/22586
### Saved Objects Client
- ~~Space Aware Saved Objects: https://github.com/elastic/kibana/pull/18862~~
- ~~Add Space ID to document id: https://github.com/elastic/kibana/pull/21372~~
- Saved object namespaces (supercedes #18862 and #21372): https://github.com/elastic/kibana/pull/22357
- Securing saved objects: https://github.com/elastic/kibana/pull/21995
- Dedicated Spaces client (w/ security): https://github.com/elastic/kibana/pull/21995
### Other
- Public Spaces API (experimental): https://github.com/elastic/kibana/pull/22501
- Telemetry: https://github.com/elastic/kibana/pull/20581
- Reporting: https://github.com/elastic/kibana/pull/21457
- Spencer's original Spaces work: https://github.com/elastic/kibana/pull/18664
- Expose `spaceId` to "Add Data" tutorials: https://github.com/elastic/kibana/pull/22760Closes#18948
"Release Note: Create spaces within Kibana to organize dashboards, visualizations, and other saved objects. Secure access to each space when X-Pack Security is enabled"
Update Chromium to a recent version compatible with Puppeteer.
Update Chromium build scripts to initialize build environments and work with
recent versions of Chromium.
Modify Chromium reporting logic to be driven mostly by Puppeteer.
* Retry the entire screenshotStitcher call
* Go back to a single run
* Only retry for this specific error. Post more information including the git issue link
* partial implementation for OLS Phase 1
* Allow Saved Objects Client to be wrapped
* Add placeholder "kibana.namespace" configuration property
* revert changes to saved objects client
* Remove circular dependency
* Removing namespace setting, we're using xpack.security.rbac.application
* Adding config.getDefault
* Expose SavedObjectsClientProvider on the server for easy plugin consumption
* migrate x-pack changes into kibana
* Beginning to use the ES APIs to insert/check privileges (#18645)
* Beginning to use the ES APIs to insert/check privileges
* Removing todo comment, I think we're good with the current check
* Adding ability to edit kibana application privileges
* Introducing DEFAULT_RESOURCE constant
* Removing unused arguments when performing saved objects auth check
* Performing bulkCreate auth more efficiently
* Throwing error in SavedObjectClient.find if type isn't provided
* Fixing Reporting and removing errant console.log
* Introducing a separate hasPrivileges "service"
* Adding tests and fleshing out the has privileges "service"
* Fixing error message
* You can now edit whatever roles you want
* We're gonna throw the find error in another PR
* Changing conflicting version detection to work when user has no
application privileges
* Throwing correct error when user is forbidden
* Removing unused interceptor
* Adding warning if they're editing a role with application privileges we
can't edit
* Fixing filter...
* Beginning to only update privileges when they need to be
* More tests
* One more test...
* Restricting the rbac application name that can be chosen
* Removing DEFAULT_RESOURCE check
* Supporting 1024 characters for the role name
* Renaming some variables, fixing issue with role w/ no kibana privileges
* Throwing decorated general error when appropriate
* Fixing test description
* Dedent does nothing...
* Renaming some functions
* Adding built-in types and alphabetizing (#19306)
* Filtering out non-default resource Kibana privileges (#19321)
* Removing unused file
* Adding kibana_rbac_dashboard_only_user to dashboard only mode roles (#19511)
* Adding create default roles test (#19505)
* RBAC - SecurityAuditLogger (#19571)
* Manually porting over the AuditLogger for use within the security audit
logger
* HasPrivileges now returns the user from the request
* Has privileges returns username from privilegeCheck
* Adding first eventType to the security audit logger
* Adding authorization success message
* Logging arguments when authorization success
* Fixing test description
* Logging args during audit failures
* RBAC Integration Tests (#19647)
* Porting over the saved objects tests, a bunch are failing, I believe
because security is preventing the requests
* Running saved objects tests with rbac and xsrf disabled
* Adding users
* BulkGet now tests under 3 users
* Adding create tests
* Adding delete tests
* Adding find tests
* Adding get tests
* Adding bulkGet forbidden tests
* Adding not a kibana user tests
* Update tests
* Renaming the actions/privileges to be closer to the functions on the
saved object client itself
* Cleaning up tests and removing without index tests
I'm considering the without index tests to be out of scope for the RBAC
API testing, and we already have unit coverage for these and integration
coverage via the OSS Saved Objects API tests.
* Fixing misspelling
* Fixing "conflicts" after merging master
* Removing some white-space differences
* Deleting files that got left behind in a merge
* Adding the RBAC API Integration Tests
* SavedObjectClient.find filtering (#19708)
* Adding ability to specify filters when calling the repository
* Implementing find filtering
* Revert "Adding ability to specify filters when calling the repository"
This reverts commit 9da30a15db.
* Adding integration tests for find filtering
* Adding forbidden auth logging
* Adding asserts to make sure some audit log isn't used
* Adding more audit log specific tests
* Necessarly is not a work, unfortunately
* Fixing test
* More descriptive name than "result"
* Better unauthorized find message?
* Adding getTypes tests
* Trying to isolate cause of rbac test failures
* Adding .toLowerCase() to work around capitalization issue
* No longer exposing the auditLogger, we don't need it like that right now
* Removing some unused code
* Removing defaultSettings from test that doesn't utilize them
* Fixing misspelling
* Don't need an explicit login privilege when we have them all
* Removing unused code, fixing misspelling, adding comment
* Putting a file back
* No longer creating the roles on start-up (#19799)
* Removing kibana_rbac_dashboard_only_user from dashboard only role
defaults
* Fixing small issue with editing Kibana privileges
* [RBAC Phase 1] - Update application privileges when XPack license changes (#19839)
* Adding start to supporting basic license and switching to plat/gold
* Initialize application privilages on XPack license change
* restore mirror_status_and_initialize
* additional tests and peer review updates
* Introducing watchStatusAndLicenseToInitialize
* Adding some tests
* One more test
* Even better tests
* Removing unused mirrorStatusAndInitialize
* Throwing an error if the wrong status function is called
* RBAC Legacy Fallback (#19818)
* Basic implementation, rather sloppy
* Cleaning stuff up a bit
* Beginning to write tests, going to refactor how we build the privileges
* Making the buildPrivilegesMap no longer return application name as the
main key
* Using real privileges since we need to use them for the legacy fallback
* Adding more tests
* Fixing spelling
* Fixing test description
* Fixing comment description
* Adding similar line breaks in the has privilege calls
* No more settings
* No more rbac enabled setting, we just do RBAC
* Using describe to cleanup the test cases
* Logging deprecations when using the legacy fallback
* Cleaning up a bit...
* Using the privilegeMap for the legacy fallback tests
* Now with even less duplication
* Removing stray `rbacEnabled` from angularjs
* Fixing checkLicenses tests since we added RBAC
* [Flaky Test] - wait for page load to complete (#19895)
@kobelb this seems unrelated to our RBAC Phase 1 work, but I was able to consistently reproduce this on my machine.
* [Flaky Test] Fixes flaky role test (#19899)
Here's a fix for the latest flaky test @kobelb
* Now with even easier repository access
* Sample was including login/version privileges, which was occasionally (#19915)
causing issues that were really hard to replicate
* Dynamic types (#19925)
No more hard-coded types! This will make it so that plugins that register their own mappings just transparently work.
* start to address feedback
* Fix RBAC Phase 1 merge from master (#20226)
This updates RBAC Phase 1 to work against the latest master. Specifically:
1. Removes `xpack_main`'s `registerLicenseChangeCallback`, which we introduced in `security-app-privs`, in favor of `onLicenseInfoChange`, which was recently added to master
2. Updated `x-pack/plugins/security/server/lib/watch_status_and_license_to_initialize.js` to be compliant with rxjs v6
* Retrying initialize 20 times with a scaling backoff (#20297)
* Retrying initialize 20 times with a scaling backoff
* Logging error when we are registering the privileges
* Alternate legacy fallback (#20322)
* Beginning to use alternate callWithRequest fallback
* Only use legacy fallback when user has "some" privileges on index
* Logging useLegacyFallback when there's an authorization failure
* Adding tests, logging failure during find no types fallback
* Switching to using an enum instead of success/useLegacyFallback
* Using _execute to share some of the structure
* Moving comment to where it belongs
* No longer audit logging when we use the legacy fallback
* Setting the status to red on the first error then continually (#20343)
initializing
* Renaming get*Privilege to get*Action
* Adding "instance" to alert about other application privileges
* Revising some of the naming for the edit roles screen
* One more edit role variable renamed
* hasPrivileges is now checkPrivileges
* Revising check_license tests
* Adding 2 more privileges tests
* Moving the other _find method to be near his friend
* Spelling "returning" correctly, whoops
* Adding Privileges tests
* tests for Elasticsearch's privileges APIs
* Switching the hard-coded resource from 'default' to *
* Throw error before we execute a POST privilege call that won't work
* Resolving issue when initially registering privileges
* Logging legacy fallback deprecation warning on login (#20493)
* Logging legacy fallback deprecation on login
* Consolidation the privileges/authorization folder
* Exposing rudimentary authorization service and fixing authenticate tests
* Moving authorization services configuration to initAuthorization
* Adding "actions" service exposed by the authorization
* Fixing misspelling
* Removing invalid and unused exports
* Adding note about only adding privileges
* Calling it initAuthorizationService
* Throwing explicit validation error in actions.getSavedObjectAction
* Deep freezing authorization service
* Adding deepFreeze tests
* Checking privileges in one call and cleaning up tests
* Deriving application from Kibana index (#20614)
* Specifying the application on the "authorization service"
* Moving watchStatusAndLicenseToInitialize to be below initAuthorizationService
* Using short-hand propery assignment
* Validate ES has_privileges response before trusting it (#20682)
* validate elasticsearch has_privileges response before trusting it
* address feedback
* Removing unused setting
* Public Role APIs (#20732)
* Beginning to work on external role management APIs
* Refactoring GET tests and adding more permutations
* Adding test for excluding other resources
* Adding get role tests
* Splitting out the endpoints, or else it's gonna get overwhelming
* Splitting out the post and delete actions
* Beginning to work on POST and the tests
* Posting the updated role
* Adding update tests
* Modifying the UI to use the new public APIs
* Removing internal roles API
* Moving the rbac api integration setup tests to use the public role apis
* Testing field_security and query
* Adding create role tests
* We can't update the transient_metadata...
* Removing debugger
* Update and delete tests
* Returning a 204 when POSTing a Role.
* Switching POST to PUT and roles to role
* We don't need the rbacApplication client-side anymore
* Adding delete route tests
* Using not found instead of not acceptable, as that's more likely
* Only allowing us to PUT known Kibana privileges
* Removing transient_metadata
* Removing one letter variable names
* Using PUT instead of POST when saving roles
* Fixing broken tests
* Adding setting to allow the user to turn off the legacy fallback (#20766)
* Pulling the version from the kibana server
* Deleting unused file
* Add API integration tests for roles with index and app privileges (#21033)
* Rbac phase1 functional UI tests (#20949)
* rbac functional tests
* changes to the test file
* RBAC_functional test
* incorporating review feedback
* slight modification to the addPriv() to cover all tests
* removed the @ in secure roles and perm file in the describe block and made it look more relevant
* Fixing role management API from users
* Set a timeout when we try/catch a find, so it doesn't pause a long time
* Changing the way we detect if a user is reserved for the ftr
* Skipping flaky test
* Move all reporting tests into their own folder to allow for multiple kibana.yml configuration tests, including chromium
* Add debugging and try to skip other tests an jenkins to speed things up
* More debug output
* more logging (remove other line which failed on jenkins)
* Remove no sandbox flag, it doesn't help
* Add fix for socket hangup and clean up tests
* fix path to logstash_functional
* Extend timeout for chromium, add verbose logging, add better comment, conditionally output curl command
* fix path... again
* Ah, other functional tests still need access to reporting page object, put it back
* fix sp err
* Add debug logs for screenshot stitching for png.bitblt error
* Fix tests that don't pass logger to screenshotStitcher
* Fix logger being undefined
* Add more debug output
* png has data, too much info to spit out
* Add comment with link to issue for extra debug messages so they can be left in since so many passes
* Dont use spawnSync with curl, use http.request instead, more support for it
* Comment out chromium tests for now to avoid flakiness
* Wait... lets at least make sure the other fix worked (the http.request instead of spawnsync and curl)
* New http.request code doesn't seem to work on jenkins, timing out after 10 secs maybe
* go back to spawnsync to see if it's an issue with the rxjs code or the http.request code
* I think I figured it out...
* Comment out tests to avoid flaky png error in the screenshot stitcher
* Use a const for OSS archive path
* use path.resolve correctly.
Restructure testing with kbn-test package
- Run with multiple configs, move cli options to config
- Package-ify kbn-test
- Eventually we'll have functional_test_runner live in a package
of its own, and then this kbn-test will use that as a dependency,
probably still as a devDependency.
- Implement functional_tests_server
- Collapse single and multiple config apis into one command
Use kbn-es
Replace es_test_cluster + es_test_config with kbn/test utils
Implement new createEsTestCluster
Improve scripts, jsdocs, cli top-level tools
Lift error handling to the top level