blueprint: move FilesystemCustomization code to separate file
Move the `FilesystemCustomization` structure and its custom unmarshallers to a dedicated file. This makes `customizations.go` easier to read. Signed-off-by: Tomáš Hozza <thozza@redhat.com>
This commit is contained in:
parent
3075d3a2ad
commit
eb0531b89b
2 changed files with 71 additions and 66 deletions
|
|
@ -1,12 +1,9 @@
|
||||||
package blueprint
|
package blueprint
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/osbuild/osbuild-composer/internal/common"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Customizations struct {
|
type Customizations struct {
|
||||||
|
|
@ -106,74 +103,11 @@ type ServicesCustomization struct {
|
||||||
Disabled []string `json:"disabled,omitempty" toml:"disabled,omitempty"`
|
Disabled []string `json:"disabled,omitempty" toml:"disabled,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type FilesystemCustomization struct {
|
|
||||||
Mountpoint string `json:"mountpoint,omitempty" toml:"mountpoint,omitempty"`
|
|
||||||
MinSize uint64 `json:"minsize,omitempty" toml:"size,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type OpenSCAPCustomization struct {
|
type OpenSCAPCustomization struct {
|
||||||
DataStream string `json:"datastream,omitempty" toml:"datastream,omitempty"`
|
DataStream string `json:"datastream,omitempty" toml:"datastream,omitempty"`
|
||||||
ProfileID string `json:"profile_id,omitempty" toml:"profile_id,omitempty"`
|
ProfileID string `json:"profile_id,omitempty" toml:"profile_id,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fsc *FilesystemCustomization) UnmarshalTOML(data interface{}) error {
|
|
||||||
d, _ := data.(map[string]interface{})
|
|
||||||
|
|
||||||
switch d["mountpoint"].(type) {
|
|
||||||
case string:
|
|
||||||
fsc.Mountpoint = d["mountpoint"].(string)
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("TOML unmarshal: mountpoint must be string, got %v of type %T", d["mountpoint"], d["mountpoint"])
|
|
||||||
}
|
|
||||||
|
|
||||||
switch d["size"].(type) {
|
|
||||||
case int64:
|
|
||||||
fsc.MinSize = uint64(d["size"].(int64))
|
|
||||||
case string:
|
|
||||||
size, err := common.DataSizeToUint64(d["size"].(string))
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("TOML unmarshal: size is not valid filesystem size (%w)", err)
|
|
||||||
}
|
|
||||||
fsc.MinSize = size
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("TOML unmarshal: size must be integer or string, got %v of type %T", d["size"], d["size"])
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fsc *FilesystemCustomization) UnmarshalJSON(data []byte) error {
|
|
||||||
var v interface{}
|
|
||||||
if err := json.Unmarshal(data, &v); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
d, _ := v.(map[string]interface{})
|
|
||||||
|
|
||||||
switch d["mountpoint"].(type) {
|
|
||||||
case string:
|
|
||||||
fsc.Mountpoint = d["mountpoint"].(string)
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("JSON unmarshal: mountpoint must be string, got %v of type %T", d["mountpoint"], d["mountpoint"])
|
|
||||||
}
|
|
||||||
|
|
||||||
// The JSON specification only mentions float64 and Go defaults to it: https://go.dev/blog/json
|
|
||||||
switch d["minsize"].(type) {
|
|
||||||
case float64:
|
|
||||||
// Note that it uses different key than the TOML version
|
|
||||||
fsc.MinSize = uint64(d["minsize"].(float64))
|
|
||||||
case string:
|
|
||||||
size, err := common.DataSizeToUint64(d["minsize"].(string))
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("JSON unmarshal: size is not valid filesystem size (%w)", err)
|
|
||||||
}
|
|
||||||
fsc.MinSize = size
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("JSON unmarshal: minsize must be float64 number or string, got %v of type %T", d["minsize"], d["minsize"])
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type CustomizationError struct {
|
type CustomizationError struct {
|
||||||
Message string
|
Message string
|
||||||
}
|
}
|
||||||
|
|
|
||||||
71
internal/blueprint/filesystem_customizations.go
Normal file
71
internal/blueprint/filesystem_customizations.go
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
package blueprint
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/osbuild/osbuild-composer/internal/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FilesystemCustomization struct {
|
||||||
|
Mountpoint string `json:"mountpoint,omitempty" toml:"mountpoint,omitempty"`
|
||||||
|
MinSize uint64 `json:"minsize,omitempty" toml:"size,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fsc *FilesystemCustomization) UnmarshalTOML(data interface{}) error {
|
||||||
|
d, _ := data.(map[string]interface{})
|
||||||
|
|
||||||
|
switch d["mountpoint"].(type) {
|
||||||
|
case string:
|
||||||
|
fsc.Mountpoint = d["mountpoint"].(string)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("TOML unmarshal: mountpoint must be string, got %v of type %T", d["mountpoint"], d["mountpoint"])
|
||||||
|
}
|
||||||
|
|
||||||
|
switch d["size"].(type) {
|
||||||
|
case int64:
|
||||||
|
fsc.MinSize = uint64(d["size"].(int64))
|
||||||
|
case string:
|
||||||
|
size, err := common.DataSizeToUint64(d["size"].(string))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("TOML unmarshal: size is not valid filesystem size (%w)", err)
|
||||||
|
}
|
||||||
|
fsc.MinSize = size
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("TOML unmarshal: size must be integer or string, got %v of type %T", d["size"], d["size"])
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fsc *FilesystemCustomization) UnmarshalJSON(data []byte) error {
|
||||||
|
var v interface{}
|
||||||
|
if err := json.Unmarshal(data, &v); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d, _ := v.(map[string]interface{})
|
||||||
|
|
||||||
|
switch d["mountpoint"].(type) {
|
||||||
|
case string:
|
||||||
|
fsc.Mountpoint = d["mountpoint"].(string)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("JSON unmarshal: mountpoint must be string, got %v of type %T", d["mountpoint"], d["mountpoint"])
|
||||||
|
}
|
||||||
|
|
||||||
|
// The JSON specification only mentions float64 and Go defaults to it: https://go.dev/blog/json
|
||||||
|
switch d["minsize"].(type) {
|
||||||
|
case float64:
|
||||||
|
// Note that it uses different key than the TOML version
|
||||||
|
fsc.MinSize = uint64(d["minsize"].(float64))
|
||||||
|
case string:
|
||||||
|
size, err := common.DataSizeToUint64(d["minsize"].(string))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("JSON unmarshal: size is not valid filesystem size (%w)", err)
|
||||||
|
}
|
||||||
|
fsc.MinSize = size
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("JSON unmarshal: minsize must be float64 number or string, got %v of type %T", d["minsize"], d["minsize"])
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue