package slurm import ( "context" "fmt" "net/url" ) // Node query flags for GetNodesOptions.Flags and GetNodeOptions.Flags. const ( NodeFlagAll = "ALL" NodeFlagDetail = "DETAIL" NodeFlagMixed = "MIXED" NodeFlagLocal = "LOCAL" NodeFlagSibling = "SIBLING" NodeFlagFederation = "FEDERATION" NodeFlagFuture = "FUTURE" ) // GetNodesOptions specifies optional parameters for GetNodes. type GetNodesOptions struct { UpdateTime *string `url:"update_time,omitempty"` Flags *string `url:"flags,omitempty"` // Use NodeFlag* constants (e.g. NodeFlagDetail) } // GetNodeOptions specifies optional parameters for GetNode. type GetNodeOptions struct { UpdateTime *string `url:"update_time,omitempty"` Flags *string `url:"flags,omitempty"` // Use NodeFlag* constants (e.g. NodeFlagDetail) } // GetNodes lists all nodes. func (s *NodesService) GetNodes(ctx context.Context, opts *GetNodesOptions) (*OpenapiNodesResp, *Response, error) { path := "slurm/v0.0.40/nodes" req, err := s.client.NewRequest("GET", path, nil) if err != nil { return nil, nil, err } if opts != nil { u, parseErr := url.Parse(req.URL.String()) if parseErr != nil { return nil, nil, parseErr } q := u.Query() if opts.UpdateTime != nil { q.Set("update_time", *opts.UpdateTime) } if opts.Flags != nil { q.Set("flags", *opts.Flags) } u.RawQuery = q.Encode() req.URL = u } var result OpenapiNodesResp resp, err := s.client.Do(ctx, req, &result) if err != nil { return nil, resp, err } return &result, resp, nil } // GetNode gets a single node by name. func (s *NodesService) GetNode(ctx context.Context, nodeName string, opts *GetNodeOptions) (*OpenapiNodesResp, *Response, error) { path := fmt.Sprintf("slurm/v0.0.40/node/%s", nodeName) req, err := s.client.NewRequest("GET", path, nil) if err != nil { return nil, nil, err } if opts != nil { u, parseErr := url.Parse(req.URL.String()) if parseErr != nil { return nil, nil, parseErr } q := u.Query() if opts.UpdateTime != nil { q.Set("update_time", *opts.UpdateTime) } if opts.Flags != nil { q.Set("flags", *opts.Flags) } u.RawQuery = q.Encode() req.URL = u } var result OpenapiNodesResp resp, err := s.client.Do(ctx, req, &result) if err != nil { return nil, resp, err } return &result, resp, nil } // PostNode updates a node. func (s *NodesService) PostNode(ctx context.Context, nodeName string, update *UpdateNodeMsg) (*OpenapiResp, *Response, error) { path := fmt.Sprintf("slurm/v0.0.40/node/%s", nodeName) req, err := s.client.NewRequest("POST", path, update) if err != nil { return nil, nil, err } var result OpenapiResp resp, err := s.client.Do(ctx, req, &result) if err != nil { return nil, resp, err } return &result, resp, nil } // DeleteNode deletes a node. func (s *NodesService) DeleteNode(ctx context.Context, nodeName string) (*OpenapiResp, *Response, error) { path := fmt.Sprintf("slurm/v0.0.40/node/%s", nodeName) req, err := s.client.NewRequest("DELETE", path, nil) if err != nil { return nil, nil, err } var result OpenapiResp resp, err := s.client.Do(ctx, req, &result) if err != nil { return nil, resp, err } return &result, resp, nil }