@@ -277,12 +277,13 @@ public static void main(String args[]) {
277277 setupAdminUser ();
278278 setupNotificationEmails ();
279279 setupTokenExpirationHours ();
280- setupPorts ();
281- getKeystorePassword ();
282- setupTaskAssigmentEmails ();
283- setupSMTP ();
284- setupElasticsearch ();
285- setupLogstash ();
280+ setupPorts ();
281+ getKeystorePassword ();
282+ setupTaskAssigmentEmails ();
283+ setupSMTP ();
284+ // Elasticsearch is now optional - only setup if configured
285+ setupElasticsearch ();
286+ setupLogstash ();
286287 setupHistoryLevel ();
287288 setupAws ();
288289 if (installConsole ) {
@@ -1279,14 +1280,29 @@ private static void setupElasticsearch() {
12791280 // PROMPT USER FOR ELASTICSEARCH PROTOCOL
12801281 elasticsearch_protocol = getPreset ("elasticsearch_protocol" );
12811282
1283+ // Elasticsearch is now optional - if no protocol is provided, skip setup
1284+ if (elasticsearch_protocol == null && !cws_installer_mode .equals ("interactive" )) {
1285+ log .info ("Elasticsearch configuration not provided - skipping Elasticsearch setup (optional)" );
1286+ return ;
1287+ }
1288+
12821289 if (cws_installer_mode .equals ("interactive" )) {
12831290 if (elasticsearch_protocol == null ) {
1291+ String read_elasticsearch_protocol = readLine ("Enter the Elasticsearch protocol (HTTP/HTTPS) or press Enter to skip Elasticsearch setup: " , "" );
1292+
1293+ // Allow user to skip Elasticsearch setup
1294+ if (read_elasticsearch_protocol == null || read_elasticsearch_protocol .trim ().isEmpty ()) {
1295+ log .info ("Elasticsearch setup skipped by user" );
1296+ return ;
1297+ }
12841298
1285- String read_elasticsearch_protocol = "" ;
12861299 while (!read_elasticsearch_protocol .toLowerCase ().startsWith ("https" ) &&
12871300 !read_elasticsearch_protocol .toLowerCase ().startsWith ("http" )) {
1288- read_elasticsearch_protocol = readRequiredLine ("Enter the Elasticsearch protocol (be sure to use HTTP or HTTPS): " ,
1289- "You must enter a protocol" );
1301+ read_elasticsearch_protocol = readLine ("Invalid protocol. Enter HTTP or HTTPS, or press Enter to skip: " , "" );
1302+ if (read_elasticsearch_protocol == null || read_elasticsearch_protocol .trim ().isEmpty ()) {
1303+ log .info ("Elasticsearch setup skipped by user" );
1304+ return ;
1305+ }
12901306 }
12911307
12921308 elasticsearch_protocol_init = read_elasticsearch_protocol ;
@@ -1301,10 +1317,6 @@ private static void setupElasticsearch() {
13011317 elasticsearch_protocol = readLine ("Enter the Elasticsearch protocol. " + "Default is " + elasticsearch_protocol + ": " , elasticsearch_protocol );
13021318 }
13031319 } else {
1304- if (elasticsearch_protocol == null ) {
1305- bailOutMissingOption ("elasticsearch_protocol" );
1306- }
1307-
13081320 elasticsearch_protocol_init = elasticsearch_protocol ;
13091321 elasticsearch_protocol = elasticsearch_protocol .toLowerCase ();
13101322 if (elasticsearch_protocol .startsWith ("https" )) {
@@ -1319,16 +1331,14 @@ private static void setupElasticsearch() {
13191331
13201332 log .debug ("elasticsearch_protocol: " + elasticsearch_protocol );
13211333
1322-
13231334 // PROMPT USER FOR ELASTICSEARCH HOST
13241335 elasticsearch_host = getPreset ("elasticsearch_host" );
13251336
13261337 if (cws_installer_mode .equals ("interactive" )) {
13271338 if (elasticsearch_host == null ) {
13281339
13291340 String read_elasticsearch_host = "" ;
1330- read_elasticsearch_host = readRequiredLine ("Enter the Elasticsearch host: " ,
1331- "You must enter a hostname" );
1341+ read_elasticsearch_host = readLine ("Enter the Elasticsearch host (or press Enter for default 'localhost'): " , "localhost" );
13321342
13331343 elasticsearch_host_init = read_elasticsearch_host ;
13341344 elasticsearch_host = read_elasticsearch_host .toLowerCase ();
@@ -1340,8 +1350,10 @@ private static void setupElasticsearch() {
13401350 elasticsearch_host = readLine ("Enter the Elasticsearch host. " + "Default is " + elasticsearch_host + ": " , elasticsearch_host );
13411351 }
13421352 } else {
1353+ // In non-interactive mode, use default if not provided
13431354 if (elasticsearch_host == null ) {
1344- bailOutMissingOption ("elasticsearch_host" );
1355+ elasticsearch_host = "localhost" ;
1356+ log .info ("Using default Elasticsearch host: localhost" );
13451357 }
13461358
13471359 elasticsearch_host_init = elasticsearch_host ;
@@ -1391,14 +1403,17 @@ private static void setupElasticsearch() {
13911403 elasticsearch_use_auth = getPreset ("default_elasticsearch_use_auth" );
13921404 }
13931405
1406+ // Default to 'n' if not provided
1407+ if (elasticsearch_use_auth == null ) {
1408+ elasticsearch_use_auth = "n" ;
1409+ }
1410+
13941411 if (cws_installer_mode .equals ("interactive" )) {
1395- String read_elasticsearch_use_auth = "" ;
1412+ String read_elasticsearch_use_auth = readLine ( "Does your Elasticsearch cluster require authentication? (Y/N, default N): " , "n" ) ;
13961413
13971414 while (!read_elasticsearch_use_auth .equalsIgnoreCase ("y" ) &&
13981415 !read_elasticsearch_use_auth .equalsIgnoreCase ("n" )) {
1399- read_elasticsearch_use_auth =
1400- readRequiredLine ("Does you Elasticsearch cluster require authentication? (Y/N): " ,
1401- "ERROR: Must specify either 'Y' or 'N'" );
1416+ read_elasticsearch_use_auth = readLine ("Invalid input. Enter Y or N (default N): " , "n" );
14021417 }
14031418
14041419 elasticsearch_use_auth = read_elasticsearch_use_auth .toLowerCase ();
@@ -1414,12 +1429,13 @@ private static void setupElasticsearch() {
14141429 elasticsearch_username = readRequiredLine ("Enter the elasticsearch username: " ,
14151430 "Must specify an elasticsearch username!" );
14161431 } else {
1417- elasticsearch_username = readLine ("Enter the database username. " +
1432+ elasticsearch_username = readLine ("Enter the elasticsearch username. " +
14181433 "Default is " + elasticsearch_username + ": " , elasticsearch_username );
14191434 }
14201435 } else {
14211436 if (elasticsearch_username == null ) {
1422- bailOutMissingOption ("elasticsearch_username" );
1437+ log .warn ("elasticsearch_username not provided but authentication is enabled - using empty string" );
1438+ elasticsearch_username = "" ;
14231439 }
14241440 }
14251441
@@ -1439,9 +1455,18 @@ private static void setupElasticsearch() {
14391455 elasticsearch_password = String .valueOf (password );
14401456 } else {
14411457 if (elasticsearch_password == null ) {
1442- bailOutMissingOption ("elasticsearch_password" );
1458+ log .warn ("elasticsearch_password not provided but authentication is enabled - using empty string" );
1459+ elasticsearch_password = "" ;
14431460 }
14441461 }
1462+ } else {
1463+ // Set defaults for username and password when auth is not used
1464+ if (elasticsearch_username == null ) {
1465+ elasticsearch_username = "" ;
1466+ }
1467+ if (elasticsearch_password == null ) {
1468+ elasticsearch_password = "" ;
1469+ }
14451470 }
14461471 }
14471472
@@ -1797,13 +1822,17 @@ private static void showInstallationInfo() {
17971822 print ("SMTP host = " + cws_smtp_hostname );
17981823 print ("SMTP port = " + cws_smtp_port );
17991824 print ("...................................................................................." );
1800- print ("Elasticsearch Protocol = " + elasticsearch_protocol );
1801- print ("Elasticsearch Host = " + elasticsearch_host );
1802- print ("Elasticsearch Index Prefix = " + elasticsearch_index_prefix );
1803- print ("Elasticsearch Port = " + elasticsearch_port );
1804- if (elasticsearch_use_auth .equalsIgnoreCase ("Y" )) {
1805- print ("Elasticsearch User = " + elasticsearch_username );
1806- print ("Elasticsearch Password = ****** (hidden) " );
1825+ if (elasticsearch_protocol != null && !elasticsearch_protocol .isEmpty ()) {
1826+ print ("Elasticsearch Protocol = " + elasticsearch_protocol );
1827+ print ("Elasticsearch Host = " + elasticsearch_host );
1828+ print ("Elasticsearch Index Prefix = " + elasticsearch_index_prefix );
1829+ print ("Elasticsearch Port = " + elasticsearch_port );
1830+ if (elasticsearch_use_auth .equalsIgnoreCase ("Y" )) {
1831+ print ("Elasticsearch User = " + elasticsearch_username );
1832+ print ("Elasticsearch Password = ****** (hidden) " );
1833+ }
1834+ } else {
1835+ print ("Elasticsearch = Not Configured (Optional)" );
18071836 }
18081837 print ("...................................................................................." );
18091838 if (user_provided_logstash .equalsIgnoreCase ("Y" )) {
@@ -1869,8 +1898,12 @@ private static void validateConfig() {
18691898 warningCount ++;
18701899 }
18711900
1872- // Check that user provided Elasticsearch service is up and healthy
1873- warningCount += validateElasticsearch ();
1901+ // Check that user provided Elasticsearch service is up and healthy (only if configured)
1902+ if (elasticsearch_protocol != null && !elasticsearch_protocol .isEmpty ()) {
1903+ warningCount += validateElasticsearch ();
1904+ } else {
1905+ log .info ("Elasticsearch not configured - skipping validation" );
1906+ }
18741907
18751908 // Check that keystore and truststore is valid, not expired
18761909 warningCount += validateKeystoreTruststore ();
0 commit comments