@@ -79,12 +79,19 @@ def _create_update_user(cluster_id, grafana_url, grafana_secret, user_secret, up
7979
8080
8181def _add_graylog_input (cluster_ip , password ):
82- url = f"http://{ cluster_ip } /graylog/api/system/inputs"
82+ base_url = f"http://{ cluster_ip } /graylog/api"
83+ input_url = f"{ base_url } /system/inputs"
8384
8485 retries = 30
85- reachable = False
86- while retries > 0 :
86+ reachable = False
87+ session = requests .session ()
88+ session .auth = ("admin" , password )
89+ headers = {
90+ 'X-Requested-By' : 'setup-script' ,
91+ 'Content-Type' : 'application/json' ,
92+ }
8793
94+ while retries > 0 :
8895 payload = json .dumps ({
8996 "title" : "spdk log input" ,
9097 "type" : "org.graylog2.inputs.gelf.tcp.GELFTCPInput" ,
@@ -99,30 +106,61 @@ def _add_graylog_input(cluster_ip, password):
99106 },
100107 "global" : True
101108 })
102- headers = {
103- 'X-Requested-By' : '' ,
104- 'Content-Type' : 'application/json' ,
105- }
106- session = requests .session ()
107- session .auth = ("admin" , password )
108- response = session .request ("POST" , url , headers = headers , data = payload )
109+
110+ response = session .post (input_url , headers = headers , data = payload )
109111 if response .status_code == 201 :
110112 logger .info ("Graylog input created..." )
111- reachable = True
113+ reachable = True
112114 break
113115
114116 logger .debug (response .text )
115117 retries -= 1
116118 time .sleep (5 )
119+
117120 if not reachable :
118121 logger .error (f"Failed to create graylog input: { response .text } " )
119122 return False
120123
121- return response .status_code == 201
124+ inputs_response = session .get (input_url , headers = headers )
125+ if inputs_response .status_code != 200 :
126+ logger .error (f"Failed to retrieve inputs: { inputs_response .text } " )
127+ return False
128+
129+ input_id = None
130+ for item in inputs_response .json ()["inputs" ]:
131+ if item ["title" ] == "spdk log input" :
132+ input_id = item ["id" ]
133+ break
134+
135+ if not input_id :
136+ logger .error ("Could not find created input to add extractor." )
137+ return False
138+
139+ extractor_url = f"{ input_url } /{ input_id } /extractors"
140+ extractor_payload = {
141+ "title" : "Extract Kubernetes JSON" ,
142+ "type" : "json" ,
143+ "converters" : [],
144+ "order" : 0 ,
145+ "cursor_strategy" : "copy" ,
146+ "source_field" : "message" ,
147+ "target_field" : "" ,
148+ "extractor_config" : {},
149+ "condition_type" : "none" ,
150+ "condition_value" : ""
151+ }
152+
153+ extractor_response = session .post (extractor_url , headers = headers , data = json .dumps (extractor_payload ))
154+ if extractor_response .status_code != 201 :
155+ logger .error (f"Failed to add JSON extractor: { extractor_response .text } " )
156+ return False
157+
158+ logger .info ("JSON extractor added successfully." )
159+ return True
122160
123161def _set_max_result_window (cluster_ip , max_window = 100000 ):
124162
125- url_existing_indices = f"http://{ cluster_ip } :9200 /_all/_settings"
163+ url_existing_indices = f"http://{ cluster_ip } /opensearch /_all/_settings"
126164
127165 retries = 30
128166 reachable = False
@@ -149,7 +187,7 @@ def _set_max_result_window(cluster_ip, max_window=100000):
149187 logger .error (f"Failed to update settings for existing indices: { response .text } " )
150188 return False
151189
152- url_template = f"http://{ cluster_ip } :9200 /_template/all_indices_template"
190+ url_template = f"http://{ cluster_ip } /opensearch /_template/all_indices_template"
153191 payload_template = json .dumps ({
154192 "index_patterns" : ["*" ],
155193 "settings" : {
@@ -166,7 +204,7 @@ def _set_max_result_window(cluster_ip, max_window=100000):
166204
167205
168206def create_cluster (blk_size , page_size_in_blocks , cli_pass ,
169- cap_warn , cap_crit , prov_cap_warn , prov_cap_crit , ifname , log_del_interval , metrics_retention_period ,
207+ cap_warn , cap_crit , prov_cap_warn , prov_cap_crit , ifname , mgmt_ip , log_del_interval , metrics_retention_period ,
170208 contact_point , grafana_endpoint , distr_ndcs , distr_npcs , distr_bs , distr_chunk_bs , ha_type , mode ,
171209 enable_node_affinity , qpair_count , max_queue_size , inflight_io_threshold , enable_qos , disable_monitoring ,
172210 strict_node_anti_affinity , name , refresh_token_secret ) -> str :
@@ -178,17 +216,16 @@ def create_cluster(blk_size, page_size_in_blocks, cli_pass,
178216 scripts .install_deps (mode )
179217 logger .info ("Installing dependencies > Done" )
180218
181- if not ifname :
182- ifname = "eth0"
183-
184- dev_ip = utils .get_iface_ip (ifname )
185- if not dev_ip :
186- raise ValueError (f"Error getting interface ip: { ifname } " )
219+ if mode == "docker" :
220+ if not ifname :
221+ ifname = "eth0"
187222
188- db_connection = f"{ utils .generate_string (8 )} :{ utils .generate_string (32 )} @{ dev_ip } :4500"
189- scripts .set_db_config (db_connection )
223+ dev_ip = utils .get_iface_ip (ifname )
224+ if not dev_ip :
225+ raise ValueError (f"Error getting interface ip: { ifname } " )
190226
191- if mode == "docker" :
227+ db_connection = f"{ utils .generate_string (8 )} :{ utils .generate_string (32 )} @{ dev_ip } :4500"
228+ scripts .set_db_config (db_connection )
192229 logger .info (f"Node IP: { dev_ip } " )
193230 scripts .configure_docker (dev_ip )
194231 logger .info ("Configuring docker swarm..." )
@@ -218,6 +255,14 @@ def create_cluster(blk_size, page_size_in_blocks, cli_pass,
218255 logger .info (f"Labeled node '{ hostname } ' with app=graylog" )
219256 else :
220257 logger .warning ("Could not find current node for labeling" )
258+ elif mode == "kubernetes" :
259+ dev_ip = mgmt_ip
260+ if not dev_ip :
261+ raise ValueError ("Error getting ip: For Kubernetes-based deployments, please supply --mgmt-ip." )
262+
263+ current_node = utils .get_node_name_by_ip (dev_ip )
264+ utils .label_node_as_mgmt_plane (current_node )
265+ db_connection = f"{ utils .generate_string (8 )} :{ utils .generate_string (32 )} @{ dev_ip } :4500"
221266
222267 if not cli_pass :
223268 cli_pass = utils .generate_string (10 )
@@ -286,7 +331,8 @@ def create_cluster(blk_size, page_size_in_blocks, cli_pass,
286331 log_level = "DEBUG" if constants .LOG_WEB_DEBUG else "INFO"
287332 scripts .deploy_k8s_stack (cli_pass , dev_ip , constants .SIMPLY_BLOCK_DOCKER_IMAGE , cluster .secret , cluster .uuid ,
288333 log_del_interval , metrics_retention_period , log_level , cluster .grafana_endpoint ,
289- contact_point , constants .K8S_NAMESPACE , str (disable_monitoring ), refresh_token_secret )
334+ contact_point , db_connection , constants .K8S_NAMESPACE , str (disable_monitoring ),
335+ refresh_token_secret )
290336 logger .info ("Deploying helm stack > Done" )
291337
292338 logger .info ("Configuring DB..." )
@@ -307,7 +353,7 @@ def create_cluster(blk_size, page_size_in_blocks, cli_pass,
307353
308354 cluster_events .cluster_create (cluster )
309355
310- mgmt_node_ops .add_mgmt_node (dev_ip , cluster .uuid )
356+ mgmt_node_ops .add_mgmt_node (dev_ip , mode , cluster .uuid )
311357
312358 logger .info ("New Cluster has been created" )
313359 logger .info (cluster .uuid )
0 commit comments