@@ -16,6 +16,28 @@ import { getConfigPath, getConfigDirectory } from '@kbn/utils';
1616import { isKibanaDistributable } from '@kbn/repo-info' ;
1717import { readKeystore } from '../keystore/read_keystore' ;
1818
19+ /** @typedef {'es' | 'oblt' | 'security' } ServerlessProjectMode */
20+ /** @type {ServerlessProjectMode[] } */
21+ const VALID_SERVERLESS_PROJECT_MODE = [ 'es' , 'oblt' , 'security' ] ;
22+
23+ /**
24+ * @param {Record<string, unknown> } opts
25+ * @returns {ServerlessProjectMode | null }
26+ */
27+ function getServerlessProjectMode ( opts ) {
28+ if ( ! opts . serverless ) {
29+ return null ;
30+ }
31+
32+ if ( VALID_SERVERLESS_PROJECT_MODE . includes ( opts . serverless ) ) {
33+ return opts . serverless ;
34+ }
35+
36+ throw new Error (
37+ `invalid --serverless value, must be one of ${ VALID_SERVERLESS_PROJECT_MODE . join ( ', ' ) } `
38+ ) ;
39+ }
40+
1941function canRequire ( path ) {
2042 try {
2143 require . resolve ( path ) ;
@@ -212,7 +234,7 @@ export default function (program) {
212234 '--run-examples' ,
213235 'Adds plugin paths for all the Kibana example plugins and runs with no base path'
214236 )
215- . option ( '--serverless' , 'Start Kibana with serverless configuration overrides ' ) ;
237+ . option ( '--serverless <oblt|security|es> ' , 'Start Kibana in a serverless project mode ' ) ;
216238 }
217239
218240 if ( DEV_MODE_SUPPORTED ) {
@@ -237,17 +259,20 @@ export default function (program) {
237259 command . action ( async function ( opts ) {
238260 const unknownOptions = this . getUnknownOptions ( ) ;
239261 const configs = [ getConfigPath ( ) , ...getEnvConfigs ( ) , ...( opts . config || [ ] ) ] ;
262+ const serverlessMode = getServerlessProjectMode ( opts ) ;
240263
241264 // we "unshift" .serverless. config so that it only overrides defaults
242- if ( opts . serverless ) {
243- maybeAddConfig ( 'kibana.serverless.yml' , configs , 'unshift' ) ;
265+ if ( serverlessMode ) {
266+ maybeAddConfig ( `serverless.yml` , configs , 'push' ) ;
267+ maybeAddConfig ( `serverless.${ serverlessMode } .yml` , configs , 'unshift' ) ;
244268 }
245269
246270 // .dev. configs are "pushed" so that they override all other config files
247271 if ( opts . dev && opts . devConfig !== false ) {
248272 maybeAddConfig ( 'kibana.dev.yml' , configs , 'push' ) ;
249- if ( opts . serverless ) {
250- maybeAddConfig ( 'kibana.serverless.dev.yml' , configs , 'push' ) ;
273+ if ( serverlessMode ) {
274+ maybeAddConfig ( `serverless.dev.yml` , configs , 'push' ) ;
275+ maybeAddConfig ( `serverless.${ serverlessMode } .dev.yml` , configs , 'push' ) ;
251276 }
252277 }
253278
0 commit comments