Skip to content

Commit

Permalink
Merge pull request #26 from cobbler/deduplicate-xmlrpc
Browse files Browse the repository at this point in the history
Deduplicate common conversions
  • Loading branch information
SchoolGuy committed Jun 5, 2024
2 parents 20c493c + d6ad149 commit f1c22ad
Show file tree
Hide file tree
Showing 16 changed files with 129 additions and 356 deletions.
76 changes: 18 additions & 58 deletions actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,14 @@ func (c *Client) Sync() error {
// which can be used to query the GetEventLog endpoint.
func (c *Client) BackgroundSync(options BackgroundSyncOptions) (string, error) {
res, err := c.Call("background_sync", options, c.Token)
if err != nil {
return "", err
} else {
return res.(string), err
}
return returnString(res, err)
}

// BackgroundSyncSystems runs the "cobbler syncsystems" action which only executes a Cobbler sync for a specific
// subset of systems.
func (c *Client) BackgroundSyncSystems(options BackgroundSyncSystemsOptions) (string, error) {
res, err := c.Call("background_syncsystems", options, c.Token)
if err != nil {
return "", err
} else {
return res.(string), err
}
return returnString(res, err)
}

// Check runs the "cobbler check" action and list all possible points for improvements on server side as a
Expand All @@ -45,80 +37,48 @@ func (c *Client) Check() (*[]string, error) {
// BackgroundBuildiso builds an ISO file on the server. The return value is the task ID which is started on the
// server.
func (c *Client) BackgroundBuildiso(options BuildisoOptions) (string, error) {
result, err := c.Call("background_buildiso", options, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("background_buildiso", options, c.Token)
return returnString(res, err)
}

// BackgroundAclSetup applies updated ACLs on the Cobbler system.
func (c *Client) BackgroundAclSetup(options AclSetupOptions) (string, error) {
result, err := c.Call("background_aclsetup", options, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("background_aclsetup", options, c.Token)
return returnString(res, err)
}

// BackgroundHardlink tries to save space inside the web directory through hardlinking identical files.
func (c *Client) BackgroundHardlink() (string, error) {
result, err := c.Call("background_hardlink", map[string]string{}, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("background_hardlink", map[string]string{}, c.Token)
return returnString(res, err)
}

// BackgroundValidateAutoinstallFiles checks if the files generated by Cobbler are valid from a syntax perspective.
func (c *Client) BackgroundValidateAutoinstallFiles() (string, error) {
result, err := c.Call("background_validate_autoinstall_files", map[string]string{}, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("background_validate_autoinstall_files", map[string]string{}, c.Token)
return returnString(res, err)
}

// BackgroundReplicate replicates the Cobbler server to the target defined in the arguments.
func (c *Client) BackgroundReplicate(options ReplicateOptions) (string, error) {
result, err := c.Call("background_replicate", options, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("background_replicate", options, c.Token)
return returnString(res, err)
}

// BackgroundImport runs an import locally on the server with the specified options.
func (c *Client) BackgroundImport(options BackgroundImportOptions) (string, error) {
result, err := c.Call("background_import", options, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("background_import", options, c.Token)
return returnString(res, err)
}

// BackgroundReposync runs a reposyonc asynchronous in the background on the server.
func (c *Client) BackgroundReposync(options BackgroundReposyncOptions) (string, error) {
result, err := c.Call("background_reposync", options, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("background_reposync", options, c.Token)
return returnString(res, err)
}

// BackgroundMkLoaders runs the mkloaders action on the server in the background.
func (c *Client) BackgroundMkLoaders() (string, error) {
result, err := c.Call("background_mkloaders", map[string]string{}, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("background_mkloaders", map[string]string{}, c.Token)
return returnString(res, err)
}
74 changes: 12 additions & 62 deletions authentication.go
Original file line number Diff line number Diff line change
@@ -1,32 +1,5 @@
package cobblerclient

import "errors"

func convertIntBool(integer int) (bool, error) {
if integer == 0 {
return false, nil
}
if integer == 1 {
return true, nil
}
return false, errors.New("integer was neither 0 nor 1")
}

func convertToInt(integer interface{}) (int, error) {
switch integer.(type) {
case int8:
return int(integer.(int8)), nil
case int16:
return int(integer.(int16)), nil
case int32:
return int(integer.(int32)), nil
case int64:
return int(integer.(int64)), nil
default:
return -1, errors.New("integer could not be converted")
}
}

// CheckAccessNoFail validates if a certain resource can be accessed with the current token. "arg1" and "arg2" have
// different meanings depending on the authorization provider configured server side.
func (c *Client) CheckAccessNoFail(resource, arg1, arg2 string) (bool, error) {
Expand All @@ -49,29 +22,18 @@ func (c *Client) CheckAccess(resource, arg1, arg2 string) (int, error) {
if err != nil {
return -1, err
} else {
switch result.(type) {
case int8:
return int(result.(int8)), err
case int16:
return int(result.(int16)), err
case int32:
return int(result.(int32)), err
case int64:
return int(result.(int64)), err
default:
return -1, errors.New("integer could not be converted")
convertedInteger, err := convertToInt(result)
if err != nil {
return -1, err
}
return convertedInteger, err
}
}

// GetAuthnModuleName retrieves the currently configured authentication module name.
func (c *Client) GetAuthnModuleName() (string, error) {
result, err := c.Call("get_authn_module_name", c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("get_authn_module_name", c.Token)
return returnString(res, err)
}

// Login performs a login request to Cobbler using the credentials provided in the configuration in the initializer.
Expand All @@ -87,30 +49,18 @@ func (c *Client) Login() (bool, error) {

// Logout performs a logout from the Cobbler server.
func (c *Client) Logout() (bool, error) {
result, err := c.Call("logout", c.Token)
if err != nil {
return false, err
} else {
return result.(bool), err
}
res, err := c.Call("logout", c.Token)
return returnBool(res, err)
}

// TokenCheck returns if a given token is still valid or not.
func (c *Client) TokenCheck(token string) (bool, error) {
result, err := c.Call("token_check", token)
if err != nil {
return false, err
} else {
return result.(bool), err
}
res, err := c.Call("token_check", token)
return returnBool(res, err)
}

// GetUserFromToken checks what user a given token is belonging to.
func (c *Client) GetUserFromToken(token string) (string, error) {
result, err := c.Call("get_user_from_token", token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("get_user_from_token", token)
return returnString(res, err)
}
21 changes: 3 additions & 18 deletions distro.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,19 +213,8 @@ func (c *Client) FindDistro(criteria map[string]interface{}) ([]*Distro, error)

// FindDistroNames searches for one or more distros by any of its attributes.
func (c *Client) FindDistroNames(criteria map[string]interface{}) ([]string, error) {
var result []string

resultUnmarshalled, err := c.Call("find_distro", criteria, false, c.Token)

if err != nil {
return nil, err
}

for _, name := range resultUnmarshalled.([]interface{}) {
result = append(result, name.(string))
}

return result, nil
return returnStringSlice(resultUnmarshalled, err)
}

// RenameDistro renames a distro with a given object id.
Expand All @@ -236,10 +225,6 @@ func (c *Client) RenameDistro(objectId, newName string) error {

// GetDistroHandle gets the internal ID of a Cobbler item.
func (c *Client) GetDistroHandle(name string) (string, error) {
result, err := c.Call("get_distro_handle", name, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("get_distro_handle", name, c.Token)
return returnString(res, err)
}
15 changes: 6 additions & 9 deletions event.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ var EMPTYEVENT = CobblerEvent{
// GetEvents retrieves all events from the Cobbler server
func (c *Client) GetEvents(forUser string) ([]*CobblerEvent, error) {
var events []*CobblerEvent
unmarshalled_result, err := c.Call("get_events", forUser)
unmarshalledResult, err := c.Call("get_events", forUser)
if err != nil {
return nil, err
}
for key, event := range unmarshalled_result.(map[string]interface{}) {
for key, event := range unmarshalledResult.(map[string]interface{}) {
eventData := event.([]interface{})
eventObj := &CobblerEvent{
id: key,
Expand All @@ -44,21 +44,18 @@ func (c *Client) GetEvents(forUser string) ([]*CobblerEvent, error) {

// GetEventLog retrieves the logged messages for a given event id.
func (c *Client) GetEventLog(eventId string) (string, error) {
result, err := c.Call("get_event_log", eventId)
if err != nil {
return "", err
}
return result.(string), err
res, err := c.Call("get_event_log", eventId)
return returnString(res, err)
}

// GetTaskStatus takes the event ID from Cobbler and returns its status.
func (c *Client) GetTaskStatus(eventId string) (CobblerEvent, error) {
unmarshalled_result, err := c.Call("get_task_status", eventId)
unmarshalledResult, err := c.Call("get_task_status", eventId)
if err != nil {
return EMPTYEVENT, err
}
// FIXME: Server has the wrong format. Needs to be fixed there.
// return result.(string), err
fmt.Printf("%#v", unmarshalled_result)
fmt.Printf("%#v", unmarshalledResult)
return EMPTYEVENT, err
}
23 changes: 4 additions & 19 deletions file.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ func (c *Client) DeleteFile(name string) error {
return err
}

// ListDistroNames returns a list of all files names currently available in Cobbler.
// ListFileNames returns a list of all files names currently available in Cobbler.
func (c *Client) ListFileNames() ([]string, error) {
return c.GetItemNames("file")
}
Expand All @@ -131,29 +131,14 @@ func (c *Client) FindFile(criteria map[string]interface{}) ([]*File, error) {

// FindFileNames searches for one or more files by any of its attributes.
func (c *Client) FindFileNames(criteria map[string]interface{}) ([]string, error) {
var result []string

resultUnmarshalled, err := c.Call("find_file", criteria, false, c.Token)

if err != nil {
return nil, err
}

for _, name := range resultUnmarshalled.([]interface{}) {
result = append(result, name.(string))
}

return result, nil
return returnStringSlice(resultUnmarshalled, err)
}

// GetFileHandle gets the internal ID of a Cobbler item.
func (c *Client) GetFileHandle(name string) (string, error) {
result, err := c.Call("get_file_handle", name, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("get_file_handle", name, c.Token)
return returnString(res, err)
}

// CopyFile duplicates a file on the server with a new name.
Expand Down
34 changes: 4 additions & 30 deletions image.go
Original file line number Diff line number Diff line change
Expand Up @@ -287,29 +287,14 @@ func (c *Client) FindImage(criteria map[string]interface{}) ([]*Image, error) {

// FindImageNames searches for one or more distros by any of its attributes.
func (c *Client) FindImageNames(criteria map[string]interface{}) ([]string, error) {
var result []string

resultUnmarshalled, err := c.Call("find_image", criteria, false, c.Token)

if err != nil {
return nil, err
}

for _, name := range resultUnmarshalled.([]interface{}) {
result = append(result, name.(string))
}

return result, nil
return returnStringSlice(resultUnmarshalled, err)
}

// GetImageHandle gets the internal ID of a Cobbler item.
func (c *Client) GetImageHandle(name string) (string, error) {
result, err := c.Call("get_image_handle", name, c.Token)
if err != nil {
return "", err
} else {
return result.(string), err
}
res, err := c.Call("get_image_handle", name, c.Token)
return returnString(res, err)
}

// CopyImage duplicates an image on the server with a new name.
Expand Down Expand Up @@ -351,17 +336,6 @@ func (c *Client) SaveImage(objectId, editmode string) error {

// GetValidImageBootLoaders retrieves the list of bootloaders that can be assigned to an image.
func (c *Client) GetValidImageBootLoaders(imageName string) ([]string, error) {
var result []string

resultUnmarshalled, err := c.Call("get_valid_image_boot_loaders", imageName, c.Token)

if err != nil {
return nil, err
}

for _, name := range resultUnmarshalled.([]interface{}) {
result = append(result, name.(string))
}

return result, err
return returnStringSlice(resultUnmarshalled, err)
}
Loading

0 comments on commit f1c22ad

Please sign in to comment.