public function update(Request $request, $id)
 {
     $cluster_data = \Input::all();
     $_validator = Validator::make($cluster_data, ['cluster_id_text' => 'required|string', 'subdomain_text' => ['required', "Regex:/((https?|ftp)\\:\\/\\/)?([a-z0-9+!*(),;?&=\$_.-]+(\\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?(([a-z0-9-.]*)\\.([a-z]{2,6}))|(([0-9]{1,3}\\.){3}[0-9]{1,3})(\\:[0-9]{2,5})?(\\/([a-z0-9+\$_-]\\.?)+)*\\/?(\\?[a-z+&\$_.-][a-z0-9;:@&%=+\\/\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?/i"], 'web_server_id' => 'required|string', 'db_server_id' => 'required|string', 'app_server_id' => 'required|string']);
     if ($_validator->fails()) {
         $messages = $_validator->messages()->getMessages();
         $flash_message = '';
         foreach ($messages as $key => $value) {
             switch ($key) {
                 case 'cluster_id_text':
                     $flash_message = 'Name is blank or contain invalid characters (use a-z, A-Z, 0-9, . and -)';
                     break;
                 case 'subdomain_text':
                     $flash_message = 'Fixed DNS Subdomain is blank or format is invalid (use subdomain.domain.tld)';
                     break;
                 case 'web_server_id':
                     $flash_message = 'Select Web Server';
                     break;
                 case 'db_server_id':
                     $flash_message = 'Select Database Server';
                     break;
                 case 'app_server_id':
                     $flash_message = 'Select App Server';
                     break;
             }
             break;
         }
         Session::flash('flash_message', $flash_message);
         Session::flash('flash_type', 'alert-danger');
         return redirect($this->makeRedirectUrl('clusters', $id . '/edit'))->withInput();
     }
     $servers = $cluster_data['_server_list'];
     unset($cluster_data['_method']);
     unset($cluster_data['_token']);
     unset($cluster_data['_server_list']);
     try {
         ClusterServer::where('cluster_id', '=', $id)->delete();
         $add = ['server_id' => intval($cluster_data['web_server_id']), 'cluster_id' => intval($id)];
         ClusterServer::create($add);
         $add = ['server_id' => intval($cluster_data['db_server_id']), 'cluster_id' => intval($id)];
         ClusterServer::create($add);
         $add = ['server_id' => intval($cluster_data['app_server_id']), 'cluster_id' => intval($id)];
         ClusterServer::create($add);
         unset($cluster_data['web_server_id']);
         unset($cluster_data['db_server_id']);
         unset($cluster_data['app_server_id']);
         /*
         $cluster_assigned_servers_array = [];
         
         if (!empty($servers)) {
             $cluster_assigned_servers_array = array_map('intval', explode(',', $servers));
         }
         
         $cluster_server_list = ClusterServer::where('cluster_id', '=', $id)->select(['server_id'])->get();
         
         $server_ids = [];
         
         foreach ($cluster_server_list as $value) {
             array_push($server_ids, intval($value->server_id));
         }
         
         $servers_remove = array_diff($server_ids, $cluster_assigned_servers_array);
         
         foreach (array_values($servers_remove) as $value) {
             ClusterServer::where('server_id', '=', intval($value))->where('cluster_id', '=', intval($id))->delete();
         }
         
         $servers_add = array_diff($cluster_assigned_servers_array, $server_ids);
         
         foreach (array_values($servers_add) as $value) {
             $add = ['server_id' => intval($value), 'cluster_id' => intval($id)];
             ClusterServer::create($add);
         }
         */
         if (!Cluster::find($id)->update($cluster_data)) {
             throw new DatabaseException('Unable to update cluster "' . $id . '"');
         }
         \Session::flash('flash_message', 'The server "' . $cluster_data['cluster_id_text'] . '" was updated successfully!');
         \Session::flash('flash_type', 'alert-success');
         return \Redirect::to($this->makeRedirectUrl('clusters'));
         //return \Redirect::to($this->makeRedirectUrl('clusters',
         //['flash_message' => $result_text, 'flash_type' => $result_status]));
     } catch (QueryException $e) {
         //$res_text = $e->getMessage();
         \Session::flash('flash_message', 'An error occurred! Check for errors and try again.');
         \Session::flash('flash_type', 'alert-danger');
         return redirect('/' . $this->getUiPrefix() . '/clusters/' . $id . '/edit')->withInput();
     }
 }