Fix Service Templates Dynamic (#12626)

* Fix Service Templates Dynamic
Remove dynamic groups type, it did not work.
Rename and simplify field names.  (fixing an issue with the builder where the rules field should be named rules)

* update schema def

* wrong method name in migration

* fix rules builder

* corerct call to apply

* sqlite can't drop columns

* correct column rename order on down.

* fix sqlite again

* fix whitespace
This commit is contained in:
Tony Murray
2021-03-18 08:14:45 -05:00
committed by GitHub
parent 92bf7d5efa
commit ac7b4539ce
9 changed files with 130 additions and 224 deletions

View File

@@ -69,11 +69,9 @@ class ServiceTemplateController extends Controller
'groups.*' => 'integer',
'devices' => 'array',
'devices.*' => 'integer',
'type' => 'string',
'dtype' => 'required|in:dynamic,static',
'dgtype' => 'required|in:dynamic,static',
'drules' => 'json|required_if:dtype,dynamic',
'dgrules' => 'json|required_if:dgtype,dynamic',
'check' => 'string',
'type' => 'required|in:dynamic,static',
'rules' => 'json|required_if:type,dynamic',
'param' => 'nullable|string',
'ip' => 'nullable|string',
'desc' => 'nullable|string',
@@ -87,11 +85,9 @@ class ServiceTemplateController extends Controller
$request->only(
[
'name',
'check',
'type',
'dtype',
'dgtype',
'drules',
'dgrules',
'rules',
'param',
'ip',
'desc',
@@ -101,16 +97,14 @@ class ServiceTemplateController extends Controller
]
)
);
$template->drules = json_decode($request->drules);
$template->dgrules = json_decode($request->dgrules);
$template->rules = json_decode($request->rules);
$template->save();
if ($request->dtype == 'static') {
if ($request->type == 'static') {
$template->devices()->sync($request->devices);
}
if ($request->dgtype == 'static') {
$template->groups()->sync($request->groups);
}
$template->groups()->sync($request->groups);
Toastr::success(__('Service Template :name created', ['name' => $template->name]));
return redirect()->route('services.templates.index');
@@ -165,15 +159,13 @@ class ServiceTemplateController extends Controller
}
),
],
'dtype' => 'required|in:dynamic,static',
'drules' => 'json|required_if:dtype,dynamic',
'type' => 'required|in:dynamic,static',
'rules' => 'json|required_if:type,dynamic',
'devices' => 'array',
'devices.*' => 'integer',
'dgtype' => 'required|in:dynamic,static',
'dgrules' => 'json|required_if:dgtype,dynamic',
'groups' => 'array',
'groups.*' => 'integer',
'type' => 'string',
'check' => 'string',
'param' => 'nullable|string',
'ip' => 'nullable|string',
'desc' => 'nullable|string',
@@ -187,11 +179,9 @@ class ServiceTemplateController extends Controller
$request->only(
[
'name',
'check',
'type',
'dtype',
'dgtype',
'drules',
'dgrules',
'rules',
'param',
'ip',
'desc',
@@ -203,27 +193,22 @@ class ServiceTemplateController extends Controller
);
$devices_updated = false;
if ($template->dtype == 'static') {
if ($template->type == 'static') {
// sync device_ids from input
$updated = $template->devices()->sync($request->get('devices', []));
// check for attached/detached/updated
$devices_updated = array_sum(array_map(function ($device_ids) {
return count($device_ids);
}, $updated)) > 0;
} else {
$template->drules = json_decode($request->drules);
}
$device_groups_updated = false;
if ($template->dgtype == 'static') {
} elseif ($template->type == 'dynamic') {
$template->rules = json_decode($request->rules);
} elseif ($template->type == 'groups') {
// sync device_group_ids from input
$updated = $template->groups()->sync($request->get('groups', []));
// check for attached/detached/updated
$device_groups_updated = array_sum(array_map(function ($device_group_ids) {
return count($device_group_ids);
}, $updated)) > 0;
} else {
$template->dgrules = json_decode($request->dgrules);
}
if ($template->isDirty() || $devices_updated || $device_groups_updated) {
@@ -237,8 +222,7 @@ class ServiceTemplateController extends Controller
}
} catch (\Illuminate\Database\QueryException $e) {
return redirect()->back()->withInput()->withErrors([
'drules' => __('Rules resulted in invalid query: ') . $e->getMessage(),
'dgrules' => __('Rules resulted in invalid query: ') . $e->getMessage(),
'rules' => __('Rules resulted in invalid query: ') . $e->getMessage(),
]);
}
} else {
@@ -264,7 +248,7 @@ class ServiceTemplateController extends Controller
],
[
'service_name' => $template->name,
'service_type' => $template->type,
'service_type' => $template->check,
'service_template_id' => $template->id,
'service_param' => $template->param,
'service_ip' => $template->ip,
@@ -295,7 +279,7 @@ class ServiceTemplateController extends Controller
],
[
'service_name' => $template->name,
'service_type' => $template->type,
'service_type' => $template->check,
'service_template_id' => $template->id,
'service_param' => $template->param,
'service_ip' => $template->ip,
@@ -318,7 +302,7 @@ class ServiceTemplateController extends Controller
public function applyAll()
{
foreach (ServiceTemplate::all() as $template) {
ServiceTemplateController::apply($template);
$this->apply($template);
}
$msg = __('All Service Templates have been applied');