From b5da15e2d8ea31664da00582f4d545184f9b5f6c Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Tue, 24 Mar 2020 16:02:01 -0700 Subject: [PATCH] client: Add /modules/ support --- internal/client/modules.go | 70 ++++++++++++++++++++++++++++++++++++++ internal/weldr/json.go | 12 +++++++ 2 files changed, 82 insertions(+) create mode 100644 internal/client/modules.go diff --git a/internal/client/modules.go b/internal/client/modules.go new file mode 100644 index 000000000..c95f4c5c7 --- /dev/null +++ b/internal/client/modules.go @@ -0,0 +1,70 @@ +// Package client - modules contains functions for the modules API +// Copyright (C) 2020 by Red Hat, Inc. +package client + +import ( + "encoding/json" + "fmt" + "net/http" + // "strings" + + "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/weldr" +) + +// ListAllModulesV0 returns a list of all the available module names +func ListAllModulesV0(socket *http.Client) ([]weldr.ModuleName, *APIResponse, error) { + body, resp, err := GetJSONAll(socket, "/api/v0/modules/list") + if resp != nil || err != nil { + return nil, resp, err + } + var list weldr.ModulesListV0 + err = json.Unmarshal(body, &list) + if err != nil { + return nil, nil, err + } + return list.Modules, nil, nil +} + +// ListSomeModulesV0 returns a list of all the available modules names +func ListSomeModulesV0(socket *http.Client, offset, limit int) ([]weldr.ModuleName, *APIResponse, error) { + path := fmt.Sprintf("/api/v0/modules/list?offset=%d&limit=%d", offset, limit) + body, resp, err := GetRaw(socket, "GET", path) + if resp != nil || err != nil { + return nil, resp, err + } + var list weldr.ModulesListV0 + err = json.Unmarshal(body, &list) + if err != nil { + return nil, nil, err + } + return list.Modules, nil, nil +} + +// ListModulesV0 returns a list of all the available modules names +func ListModulesV0(socket *http.Client, moduleNames string) ([]weldr.ModuleName, *APIResponse, error) { + body, resp, err := GetRaw(socket, "GET", "/api/v0/modules/list/"+moduleNames) + if resp != nil || err != nil { + return nil, resp, err + } + var list weldr.ModulesListV0 + err = json.Unmarshal(body, &list) + if err != nil { + return nil, nil, err + } + return list.Modules, nil, nil +} + +// GetModulesInfoV0 returns detailed module info on the named modules +func GetModulesInfoV0(socket *http.Client, modulesNames string) ([]rpmmd.PackageInfo, *APIResponse, error) { + body, resp, err := GetRaw(socket, "GET", "/api/v0/modules/info/"+modulesNames) + if resp != nil || err != nil { + return nil, resp, err + } + var list weldr.ModulesInfoV0 + err = json.Unmarshal(body, &list) + if err != nil { + return nil, nil, err + } + return list.Modules, nil, nil +} diff --git a/internal/weldr/json.go b/internal/weldr/json.go index 20fa9a641..be81cce4c 100644 --- a/internal/weldr/json.go +++ b/internal/weldr/json.go @@ -140,6 +140,18 @@ type ProjectsDependenciesV0 struct { Projects []rpmmd.PackageSpec `json:"projects"` } +type ModuleName struct { + Name string `json:"name"` + GroupType string `json:"group_type"` +} + +type ModulesListV0 struct { + Total uint `json:"total"` + Offset uint `json:"offset"` + Limit uint `json:"limit"` + Modules []ModuleName `json:"modules"` +} + // ModulesInfoV0 is the response to /modules/info request type ModulesInfoV0 struct { Modules []rpmmd.PackageInfo `json:"modules"`