diff options
author | Javier Sánchez Parra <jsanchez@soleta.eu> | 2022-06-16 14:28:43 +0200 |
---|---|---|
committer | Javier Sánchez Parra <jsanchez@soleta.eu> | 2022-06-20 10:41:32 +0200 |
commit | 52a38d3e574fb25b47d230bc87754583eb17b4a6 (patch) | |
tree | 0cca8d4a0ef608459addd256b6740b0de044d2d6 /src/rest.c | |
parent | a0a3470682852d5f72967553d5debe41e86eca78 (diff) |
#915 Use the repository id on image creation
POST /image/create has two modes, image creation and update. You can
find more information about the "creation" mode in commit:
d2f20d0be06617f421eecca111449d94672695eb
On image creation, use the id to identify repositories instead of the
IP. This is a preparative commit to the support of repositories with
several IPs.
On image update, "repository_id" field is not needed because the image
already has the repository assigned.
This commit maintains backward compatibility with the Web Console (old
web interface), because it only use the "update" mode of /image/create.
Request POST /create/image:
{
"clients": [
"192.168.56.11"
],
"disk": "1",
"partition": "1",
"name": "archlinux",
"repository_id": 1,
"id": "0",
"code": "131",
"description": "This is a test",
"group_id": 0,
"center_id": 1
}
Response 200 OK
Diffstat (limited to 'src/rest.c')
-rw-r--r-- | src/rest.c | 37 |
1 files changed, 24 insertions, 13 deletions
@@ -2154,10 +2154,8 @@ int og_json_parse_create_image(json_t *element, (char *)¶ms->image.name, sizeof(params->image.name)); params->flags |= OG_REST_PARAM_NAME; - } else if (!strcmp(key, "repository")) { - err = og_json_parse_string_copy(value, - (char *)¶ms->image.repo_ip, - sizeof(params->image.repo_ip)); + } else if (!strcmp(key, "repository_id")) { + err = og_json_parse_uint64(value, ¶ms->image.repo_id); params->flags |= OG_REST_PARAM_REPO; } else if (!strcmp(key, "clients")) { err = og_json_parse_clients(value, params); @@ -2186,6 +2184,7 @@ int og_json_parse_create_image(json_t *element, static int og_cmd_create_image(json_t *element, struct og_msg_params *params) { + char repository_ip[OG_DB_IP_MAXLEN + 1]; char new_image_id[OG_DB_INT_MAXLEN + 1]; struct og_dbi *dbi; json_t *clients; @@ -2200,25 +2199,30 @@ static int og_cmd_create_image(json_t *element, struct og_msg_params *params) OG_REST_PARAM_PARTITION | OG_REST_PARAM_CODE | OG_REST_PARAM_ID | - OG_REST_PARAM_NAME | - OG_REST_PARAM_REPO)) + OG_REST_PARAM_NAME)) + return -1; + + dbi = og_dbi_open(&ogconfig.db); + if (!dbi) { + syslog(LOG_ERR, + "cannot open connection database (%s:%d)\n", + __func__, __LINE__); return -1; + } /* If there is a description, this means the image is not in the DB. */ if (params->image.description[0]) { - dbi = og_dbi_open(&ogconfig.db); - if (!dbi) { - syslog(LOG_ERR, - "cannot open connection database (%s:%d)\n", - __func__, __LINE__); + if (!og_msg_params_validate(params, OG_REST_PARAM_REPO)) { + og_dbi_close(dbi); return -1; } err = og_dbi_add_image(dbi, ¶ms->image); - og_dbi_close(dbi); - if (err < 0) + if (err < 0) { + og_dbi_close(dbi); return err; + } snprintf(new_image_id, sizeof(new_image_id), "%u", err); params->id = new_image_id; @@ -2227,6 +2231,13 @@ static int og_cmd_create_image(json_t *element, struct og_msg_params *params) clients = json_copy(element); json_object_del(clients, "clients"); + err = og_dbi_get_repository_ip(dbi, atoll(params->id), repository_ip); + og_dbi_close(dbi); + if (err < 0) + return err; + + json_object_set_new(clients ,"repository", json_string(repository_ip)); + return og_send_request(OG_METHOD_POST, OG_CMD_IMAGE_CREATE, params, clients); } |