diff --git a/doc/API/Port_Groups.md b/doc/API/Port_Groups.md index ce3d307697..051bc403a8 100644 --- a/doc/API/Port_Groups.md +++ b/doc/API/Port_Groups.md @@ -69,3 +69,58 @@ Output: "message": "Port group New Port Group created" } ``` + +### `assign_portgroup` + +Assign a Port Group to a list of Ports + +Route: `/api/v0/port_groups/:port_group_id/assign` + +Input (JSON): + +- `port_ids`: *required* - List of Port Ids + +Examples: + +Dynamic Example: + +```curl +curl -H 'X-Auth-Token: YOURAPITOKENHERE' -X POST -d '{"port_ids": ["4","34","25,"983"]}' https://librenms.org/api/v0/port_groups/3/assign +``` + +Output: + +```json +{ + "status": "ok", + "Port Ids 4, 34, 25, 983 have been added to Port Group Id 3": 200 +} +``` + +### `remove_portgroup` + +Remove a Port Group from a list of Ports + +Route: `/api/v0/port_groups/:port_group_id/remove` + +Input (JSON): + +- `port_ids`: *required* - List of Port Ids + +Examples: + +Dynamic Example: + +```curl +curl -H 'X-Auth-Token: YOURAPITOKENHERE' -X POST -d '{"port_ids": ["4","34","25,"983"]}' https://librenms.org/api/v0/port_groups/3/remove +``` + +Output: + +```json +{ + "status": "ok", + "Port Ids 4, 34, 25, 983 have been removed from Port Group Id 3": 200 +} +``` + diff --git a/includes/html/api_functions.inc.php b/includes/html/api_functions.inc.php index 6c456bbfc2..8cbee466a3 100644 --- a/includes/html/api_functions.inc.php +++ b/includes/html/api_functions.inc.php @@ -1934,6 +1934,54 @@ function get_port_groups(Illuminate\Http\Request $request) return api_success($groups->makeHidden('pivot')->toArray(), 'groups', 'Found ' . $groups->count() . ' port groups'); } +function assign_port_group(Illuminate\Http\Request $request) +{ + $port_group_id = $request->route('port_group_id'); + $data = json_decode($request->getContent(), true); + $port_id_list = $data['port_ids']; + + if (json_last_error() || ! is_array($data)) { + return api_error(400, "We couldn't parse the provided json. " . json_last_error_msg()); + } + + if (! isset($port_id_list)) { + return api_error(400, "Missing data field 'port_ids' " . json_last_error_msg()); + } + + $port_group = PortGroup::find($port_group_id); + if (! isset($port_group)) { + return api_error(404, 'Port Group ID ' . $port_group_id . ' not found'); + } + + $port_group->ports()->attach($port_id_list); + + return api_success(200, 'Port Ids ' . implode(', ', $port_id_list) . ' have been added to Port Group Id ' . $port_group_id); +} + +function remove_port_group(Illuminate\Http\Request $request) +{ + $port_group_id = $request->route('port_group_id'); + $data = json_decode($request->getContent(), true); + $port_id_list = $data['port_ids']; + + if (json_last_error() || ! is_array($data)) { + return api_error(400, "We couldn't parse the provided json. " . json_last_error_msg()); + } + + if (! isset($port_id_list)) { + return api_error(400, "Missing data field 'port_ids' " . json_last_error_msg()); + } + + $port_group = PortGroup::find($port_group_id); + if (! isset($port_group)) { + return api_error(404, 'Port Group ID ' . $port_group_id . ' not found'); + } + + $port_group->ports()->detach($port_id_list); + + return api_success(200, 'Port Ids ' . implode(', ', $port_id_list) . ' have been removed from Port Group Id ' . $port_group_id); +} + function add_device_group(Illuminate\Http\Request $request) { $data = json_decode($request->getContent(), true); diff --git a/routes/api.php b/routes/api.php index 7948014720..ccbab6ccef 100644 --- a/routes/api.php +++ b/routes/api.php @@ -77,6 +77,8 @@ Route::group(['prefix' => 'v0', 'namespace' => '\App\Api\Controllers'], function Route::get('oxidized/config/{device_name}', 'LegacyApiController@get_oxidized_config')->name('get_oxidized_config'); Route::post('devicegroups', 'LegacyApiController@add_device_group')->name('add_device_group'); Route::post('port_groups', 'LegacyApiController@add_port_group')->name('add_port_group'); + Route::post('port_groups/{port_group_id}/assign', 'LegacyApiController@assign_port_group')->name('assign_port_group'); + Route::post('port_groups/{port_group_id}/remove', 'LegacyApiController@remove_port_group')->name('remove_port_group'); Route::post('devices/{id}/parents', 'LegacyApiController@add_parents_to_host')->name('add_parents_to_host'); Route::delete('/devices/{id}/parents', 'LegacyApiController@del_parents_from_host')->name('del_parents_from_host'); Route::post('locations', 'LegacyApiController@add_location')->name('add_location');