mirror of https://git.48k.eu/ogserver
#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
parent
a1aaad46fb
commit
0efc182c9b
51
src/client.c
51
src/client.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue