summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* client: remove redundant refresh validationOpenGnSys Support Team2024-09-231-24/+7
| | | | json parser already validates attributes must be set on.
* ogAdmServer: replace old actualizaConfiguracionOpenGnSys Support Team2024-09-234-210/+347
| | | | | | | | | | | | Reimplement the legacy funcion actualizaConfiguracion with og_update_client_config in src/client.c if disk does not exist, add it, otherwise update disk contents. if partition size, code, filesystem or os is different, reset image id, otherwise update partition usage only. delete partitions that are gone at the end.
* rest: remove scheduler codeOpenGnSys Support Team2024-09-1715-3827/+439
| | | | Put ogserver into diet, remove this feature, including pending command queue.
* rest: better json clients validationOpenGnSys Support Team2024-09-171-8/+8
| | | | | - check maximum limit of clients - reject empty array
* rest: add GET /efiAlejandro Sirgo Rica2024-09-116-0/+355
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add GET /efi request to obtain information about the client's boot entries. Field inside the /refresh payload 'efi': { 'entries': [ { "order": 0, "name": "Boot0000", "active": false, "description": "grub" }, { "order": 1, "name": "Boot0001", "active": true, "description": "UEFI: PXE IP4 Realtek PCIe GBE Family Controller" } ] } If the client is not a EFI system it won't add the 'efi' field. If an entry is not in the boot order it won't have the 'order' field. GET /efi resquest payload structure: { 'clients': ['10.141.10.21', '10.141.10.22'] } GET /efi response's structure: { 'clients': [ { 'ip': '10.141.10.21', 'entries': [ { "order": 0, "name": "Boot0000", "active": false, "description": "grub" }, { "order": 1, "name": "Boot0001", "active": true, "description": "UEFI: PXE IP4 Realtek PCIe GBE Family Controller" } ] }, { 'ip': '10.141.10.22', 'entries': [] } ] } The client with ip 10.141.10.22 is a BIOS system. If an entry does not appear in the boot order it won't have the 'order' field.
* rest: restore change client repositoryOpenGnSys Support Team2024-09-101-1/+1
| | | | use correct format for mac SQL query to fix 568d709
* repo: allow 128 IPs per repositoryv1.2.5-20OpenGnSys Support Team2024-09-101-1/+1
| | | | rise this artificial limit.
* rest: use integer for repository IDOpenGnSys Support Team2024-09-091-7/+7
| | | | ID is integer, fix inconsistency in dc68d0f ('rest: add POST /client/repo')
* src: fallback to use first repository/server foundv1.2.5-19OpenGnSys Support Team2024-09-041-12/+30
| | | | | | use first repository/server in the list in case no specific repository/server is found in the same network, this is a fallback that works if repository/server is reachable through gateway.
* rest: use integer for server idv1.2.5-18OpenGnSys Support Team2024-09-031-3/+4
| | | | id is not a string, use integer instead
* rest: memleak in error path of image/createOpenGnSys Support Team2024-08-301-7/+6
| | | | | if obtaining repository IP fails, json object for client is leaked, move it after query to infer repository IP.
* rest: adapt cache/fetch to support repository with multiple IP adddressOpenGnSys Support Team2024-08-301-12/+25
| | | | take repository_id as json attributo, then infer repository IP from client.
* rest: adapt restore/image to support repository with multiple IP adddressOpenGnSys Support Team2024-08-301-7/+24
| | | | take repository_id as json attributo, then infer repository IP from client.
* src: infer server IP when it has more than one IP addressOpenGnSys Support Team2024-08-283-117/+96
| | | | | | | | | | | | | | | infer server IP for a given client. User does not have to attach a client to a given server IP anymore through ordenadores.identorno. this simplifies previous work to allow a server to have more than one IP address a0a347068285 ('#1074 rest: set_mode: add support for different ogserver addresses') 44745a3f2287 ('rest: add POST client/server method') POST /client/server is removed, it is only used by ogcli and explicit association between server and client is not required. server_id json attribute is also removed in GET client/info.
* schema: incorrect error logOpenGnSys Support Team2024-08-281-2/+2
| | | | fix incorrect error report when updating table.
* rest: allow repository to have more than one IP addressOpenGnSys Support Team2024-08-218-157/+461
| | | | | | | | | | Repository can have more than one single IP address. * Add alias field to database to represent the extra IPs that are attached to the repository, update schema and add version 9. * Use og_dbi_get_repository_ip() to infer the repository IP address. * Add helper functions (src/repo.c) to build a list of repositories and update rest API to use it.
* rest: simplify SQL in set_client_modeAlejandro Sirgo Rica2024-08-211-39/+121
| | | | | Build boot file parameters in C and simplify SQL statement that obtains the client configuration from the database.
* rest: use json integer for repository id instead of stringOpenGnSys Support Team2024-08-211-4/+5
| | | | use integer not string, it breaks backwards compatibility.
* rest: add cache/fetchv1.2.5-17Alejandro Sirgo Rica2024-08-093-0/+61
| | | | | | | | | | | | | | | | | | | Add POST cache/fetch request to request download of images in the client's cache. Resquest payload structure: { 'clients': ['10.141.10.21', '10.141.10.22'] 'image': 'windows.img' 'type': 'TIPTORRENT' 'repository': '12.141.10.2' } The clients listed in the 'clients' field will receive a cache/fetch POST request with the payload received by the server without the 'clients' field. The clients respond with the contents of their cache so the server can update the database.
* rest: use JSON_ENSURE_ASCII in json dumpsOpenGnSys Support Team2024-08-061-22/+22
| | | | | | | escape non-ascii characters in json otherwise ogclient len() and Content-Length: report a mismatch when utf-8 representation is used in any of the string fields. For consistency, enable this flag too for json dumps that are consumed by ogcp and ogcli.
* client: split revision query when updating image informationv1.2.5-16OpenGnSys Support Team2024-07-191-3/+23
| | | | a simple cleanup to help diagnose problems, not behaviour change expected.
* dbi: use repository_id field if front-end offers itOpenGnSys Support Team2024-07-193-13/+18
| | | | | | | | | | If repository_id json field is provided, use it to narrow down the image lookup. After this, search use this same repository ID to fetch the IP address. Old web console may not provide repository_id, infer it from the image name. Always set image id field for creation and update.
* rest: delete pxe files on client delete and updatev1.2.5-15v1.2.5-14Alejandro Sirgo Rica2024-07-181-0/+28
| | | | | | call og_delete_tftpboot_file for both pxe configuration files in client/delete and client/update. Delete files for client/update only if the MAC changes.
* rest: update client ip in /client/updateAlejandro Sirgo Rica2024-07-181-8/+12
| | | | | Use idordenador as discriminator value instead of the client's ip. Update client ip if the new ip is not used by other clients.
* rest: add GET,POST /image/restrictOpenGnSys Support Team2024-07-173-0/+280
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Allow to restrict image to scope: POST /image/restrict { "image" : 49, "scopes" : [ 1,3 ] } response: 200 OK This restricts image with ID 49 to scopes 1 and 3. You can also fetch the current list of restrictions: GET /image/restrict { "image" : 49 } response: 200 OK { "image" : 49, "scopes" : [ 1,3 ] } Existing limitations in this interface: - Only restriction of image to center is possible at this moment. - This is only used by ogCP to validate if this is possible, no existing code in the ogserver uses this to restrict POST image/restore. This is a usability feature.
* src: port setclientmode code to CAlejandro Sirgo Rica2024-07-162-36/+210
| | | | | | | | | | | | | | | | | | | | | | | | | | | Implement most of the code from the script setclientmode into ogServer to improve error handling and logs. Use a reduced version legacy script to replace the contents of the base PXE template. This file is now called updategrubprofile. Add updategrubprofile to the new extras/ folder. Create BIOS and UEFI files for PXE boot configuration. Each file is located in a different directory and requires a different name pattern. -BIOS- File format: /opt/opengnsys/tftpboot/menu.lst/01-XX-XX-XX-XX-XX-XX Template dir: /opt/opengnsys/tftpboot/menu.lst/templates/ -UEFI- File format: /opt/opengnsys/tftpboot/grub/01-xx:xx:xx:xx:xx:xx Template dir: /opt/opengnsys/tftpboot/grub/templates/
* src: add str_toupper and str_tolower functionsAlejandro Sirgo Rica2024-07-152-3/+12
| | | | Add auxiliar string case change functions.
* rest: replace strcat with strncat in og_set_client_modeAlejandro Sirgo Rica2024-07-151-1/+2
| | | | | Improve string handling security by replacing strcat with the more secure strncat.
* rest: add dbi query checks in og_set_client_modeAlejandro Sirgo Rica2024-07-151-0/+8
| | | | | Check if the the execution of the main SQL query is not successfull.
* rest: add default value to og_set_client_mode vga fieldAlejandro Sirgo Rica2024-07-151-2/+2
| | | | | | Define a default value of 788 for the vga field to assign the value from ogServer instead of modifying it through the legacy script setclientmode.
* client: fortify check for mandatory cmd json field in shell/outputOpenGnSys Support Team2024-07-151-2/+2
| | | | | | | | Revisit 6cbe69e89e71 ("rest: add cmd to shell/output") to reject response with no 'cmd' field, otherwise strdup() crashes when dealing with NULL string. Set retcode to zero, otherwise this value remains uninitialized if no retcode json field is provided by the client.
* rest: add checksum to GET /imagesOpenGnSys Support Team2024-07-054-5/+49
| | | | | Add a new checksum attribute to GET /images, extend database to add a new checksum field to images table.
* rest: create new shell folder automagicallyOpenGnSys Support Team2024-06-281-0/+4
| | | | | | If folder does not exist, create it. This makes it easier to transition from existing deployments.
* rest: enable shell/output as a GET requestv1.2.5-13Alejandro Sirgo Rica2024-06-251-1/+1
| | | | | | | shell/output does not modify state, add check to consider GET shell/output a valid request. Keep POST shell/output compatibility.
* rest: add shell/listAlejandro Sirgo Rica2024-06-252-0/+105
| | | | | | | | | | | | Add GET shell/list request to obtain the list of scripts available in /opt/opengnsys/client/shell Resquest payload structure: no paylaod Response's structure: { 'scripts': ['script', 'script2'] }
* rest: shell/output does not fail if command was never runOpenGnSys Support Team2024-06-211-1/+1
| | | | | skip including client in the listing if command never run or it did not finished yet.
* rest: add timestamp to shell/outputOpenGnSys Support Team2024-06-213-0/+3
| | | | Provide a timestamp that tells when the command output from client was received.
* rest: add cmd to shell/outputOpenGnSys Support Team2024-06-214-3/+19
| | | | | Add "cmd" field to json that provides the original command string, so it is provided with the output and the return code.
* rest: add retcode to shell/outputOpenGnSys Support Team2024-06-214-5/+16
| | | | Add retcode field to specify return code of shell invocation.
* rest: fix memory leak in folder/deleteAlejandro Sirgo Rica2024-06-181-0/+2
| | | | Free dbi result after use in og_delete_computer_folder().
* rest: Add /client/movev1.2.5-12OpenGnSys Support Team2024-06-172-0/+81
| | | | | | | | | | | | | | | | Add URI to allow a POST request to move clients to a new room/folder. Request POST /client/move: { "clients": [ "192.168.56.11" ], "room": 10, "folder_id": 0, } If folder_id is zero then that means computer is not stored in a folder.
* rest: allow the same center name in center updateAlejandro Sirgo Rica2024-06-121-6/+8
| | | | | | | Exclude centerid of the center we update from the search of centers with the same name. Report when other center have the same name as the one in the payload of the update request.
* rest: validate mac in client/updateAlejandro Sirgo Rica2024-06-121-1/+22
| | | | | Check if the requested new MAC exists in another client and refuse update request if that's the case.
* rest: fix memory leak in client/updateAlejandro Sirgo Rica2024-06-121-0/+3
| | | | Free dbi result after use in og_cmd_post_client_update().
* rest: Add /center/infoOpenGnSys Support Team2024-06-124-0/+115
| | | | | | | | | | | | Add URI to allow a GET request to obtain info about a center (name, id and comment of the center as of now). To use this uri, simply send a GET request with a json containing the id of the center whose info needs to be consulted: curl -X GET -H "Authorization: $API_KEY" http://127.0.0.1:8888/center/info -d '{"id":1}' based on work from Javier Hernandez.
* client: update cache after image/restorev1.2.5-11Alejandro Sirgo Rica2024-05-301-0/+2
| | | | | | | | | | | | | | | | | | | | Update the database with the new cache contents sent by the client after an image/restore operation. Resquest response structure: { ... 'cache': [ {'name': 'windows.img', 'size': 2432370213, checksum: '5d4dcc677bc19f40a647d0002f4ade90'}, {'name': 'linux.img', 'size': 243234534213, checksum: '3eb22f888f88a55ad954f55644e1192e'} ] ... } Parse the contents of the 'cache' field to update the data of the client's cache in the database. This is one of the required changes the make cache/list coherent and prevent cache desync between the server and clients.
* rest: add cache/deleteAlejandro Sirgo Rica2024-05-303-0/+109
| | | | | | | | | | | | | | | | | | | Add POST cache/delete request to request deletion of images in the client's cache. Resquest payload structure: { 'clients': ['10.141.10.21', '10.141.10.22'] 'images': ['windows.img', 'linux.img'] } The clients listed in the 'clients' field will receive a cache/delete POST request with the 'clients' field removed and only containing 'images' from the payload received by the server. Each client will try to delete as many images as available in their cache from the list of files in 'images'. The clients will give response with the contents of the cache so the server can update the database.
* rest: add cache/listAlejandro Sirgo Rica2024-05-302-0/+162
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add GET cache/list request to obtain information about the client's cache. Resquest payload structure: { 'clients': ['10.141.10.21', '10.141.10.22'] } Response's structure: { 'clients': [ { 'ip': '10.141.10.21', 'cache_size': 2894572304857, 'images': [ {name:'img1', size: 87283902343, checksum: '5d4dcc677bc19f40a647d0002f4ade90'}, {name:'img2', size: 894572304857, checksum: '3eb22f888f88a55ad954f55644e1192e'} ] }, { 'ip': '10.141.10.22', 'cache_size': 49872839023434, 'images': [ {name:'img2', size: 894572304857, checksum: '3eb22f888f88a55ad954f55644e1192e'} ] } ] } Both 'cache_size' and the values in 'image_sizes' are provided as bytes. If a client has no cache partition the payload will include it as: ... { 'ip': '10.141.10.22', 'cache_size': 0, 'images': [] } ...
* client: store image cache data in databaseAlejandro Sirgo Rica2024-05-303-7/+141
| | | | | | | | | | | | | | | | | | | | | | Parse the 'cache' field of the refresh payload sent by the clients. Cache field structure in the payload: { ... 'cache': [ {'name': 'windows.img', 'size': 2432370213, checksum: '5d4dcc677bc19f40a647d0002f4ade90'}, {'name': 'linux.img', 'size': 243234534213, checksum: '3eb22f888f88a55ad954f55644e1192e'}, ] ... } Store that data in the 'cache' table of the database so it can be obtained later on. The table contains the following fields: - clientid: the numeric identifier of the client. - imagename: name of the image in cache. - size: size in bytes of the image in cache. - checksum: checksum of the image in cache.
* src: replace old function to update image informationOpenGnSys Support Team2024-05-293-112/+91
| | | | replace old legacy code, no functional changes are intended.