#1004 Handle new fields in /image/create response

ogClient now includes more information regarding the new image. This patch
modifies ogServer to support new elements sent in ogClient /image/create
response and store them in the database.

Example of new /image/create response:

{
  "disk": "1",
  "partition": "1",
  "code": "131",
  "id": "1",
  "name": "ubuntu",
  "repository": "192.168.56.10",
  "software": "Ubuntu 18.04.5 LTS \naccountsservice 0.6.45\n...",
  "clonator": "PARTCLONE",
  "compressor": "LZOP",
  "filesystem": "EXTFS",
  "datasize": 2100000
}

New fields are "clonator", "compressor", "filesystem" and "datasize".
master
Javier Sánchez Parra 2020-09-09 11:27:45 +02:00 committed by OpenGnSys Support Team
parent a1aaad46fb
commit 0efc182c9b
3 changed files with 58 additions and 3 deletions

View File

@ -426,18 +426,47 @@ static int og_resp_refresh(json_t *data, struct og_client *cli)
return 0;
}
static int update_image_info(struct og_dbi *dbi, const char *image_id,
const char *clonator, const char *compressor,
const char *filesystem, const uint64_t datasize)
{
const char *msglog;
dbi_result result;
result = dbi_conn_queryf(dbi->conn,
"UPDATE imagenes"
" SET clonator='%s', compressor='%s',"
" filesystem='%s', datasize=%d"
" WHERE idimagen=%s", clonator, compressor, filesystem,
datasize, image_id);
if (!result) {
dbi_conn_error(dbi->conn, &msglog);
syslog(LOG_ERR, "failed to query database (%s:%d) %s\n",
__func__, __LINE__, msglog);
return -1;
}
dbi_result_free(result);
return 0;
}
static int og_resp_image_create(json_t *data, struct og_client *cli)
{
struct og_software_legacy soft_legacy;
struct og_image_legacy img_legacy;
const char *compressor = NULL;
const char *filesystem = NULL;
const char *partition = NULL;
const char *software = NULL;
const char *image_id = NULL;
const char *clonator = NULL;
struct og_computer computer;
const char *disk = NULL;
const char *code = NULL;
const char *name = NULL;
const char *repo = NULL;
uint64_t datasize = 0;
struct og_dbi *dbi;
const char *key;
json_t *value;
@ -462,6 +491,14 @@ static int og_resp_image_create(json_t *data, struct og_client *cli)
err = og_json_parse_string(value, &name);
else if (!strcmp(key, "repository"))
err = og_json_parse_string(value, &repo);
else if (!strcmp(key, "clonator"))
err = og_json_parse_string(value, &clonator);
else if (!strcmp(key, "compressor"))
err = og_json_parse_string(value, &compressor);
else if (!strcmp(key, "filesystem"))
err = og_json_parse_string(value, &filesystem);
else if (!strcmp(key, "datasize"))
err = og_json_parse_uint64(value, &datasize);
else
return -1;
@ -470,7 +507,7 @@ static int og_resp_image_create(json_t *data, struct og_client *cli)
}
if (!software || !partition || !disk || !code || !image_id || !name ||
!repo) {
!repo || !clonator || !compressor || !filesystem || !datasize) {
syslog(LOG_ERR, "malformed response json\n");
return -1;
}
@ -518,10 +555,18 @@ static int og_resp_image_create(json_t *data, struct og_client *cli)
img_legacy.code,
img_legacy.repo,
soft_legacy.id);
if (!res) {
og_dbi_close(dbi);
syslog(LOG_ERR, "Problem updating client configuration\n");
return -1;
}
res = update_image_info(dbi, image_id, clonator, compressor,
filesystem, datasize);
og_dbi_close(dbi);
if (!res) {
syslog(LOG_ERR, "Problem updating client configuration\n");
if (res) {
syslog(LOG_ERR, "Problem updating image info\n");
return -1;
}

View File

@ -18,6 +18,15 @@ int og_json_parse_string(json_t *element, const char **str)
return 0;
}
int og_json_parse_uint64(json_t *element, uint64_t *integer)
{
if (json_typeof(element) != JSON_INTEGER)
return -1;
*integer = json_integer_value(element);
return 0;
}
int og_json_parse_uint(json_t *element, uint32_t *integer)
{
if (json_typeof(element) != JSON_INTEGER)

View File

@ -5,6 +5,7 @@
#include "schedule.h"
int og_json_parse_string(json_t *element, const char **str);
int og_json_parse_uint64(json_t *element, uint64_t *integer);
int og_json_parse_uint(json_t *element, uint32_t *integer);
int og_json_parse_bool(json_t *element, bool *value);