1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
// Copyright (c) Contributors to the Apptainer project, established as
// Apptainer a Series of LF Projects LLC.
// For website terms of use, trademark policy, privacy policy and other
// project policies see https://lfprojects.org/policies
// Copyright (c) 2018-2020, Sylabs Inc. All rights reserved.
// This software is licensed under a 3-clause BSD license. Please consult the
// LICENSE.md file distributed with the sources of this project regarding your
// rights to use or distribute this software.
package config
import (
"encoding/json"
"github.com/apptainer/apptainer/internal/pkg/metric"
"github.com/apptainer/apptainer/pkg/plugin"
)
// Common provides the basis for all engine configs. Anything that can not be
// properly described through the OCI config can be stored as a generic JSON []byte.
type Common struct {
EngineName string `json:"engineName"`
ContainerID string `json:"containerID"`
// EngineConfig is the raw JSON representation of the Engine's underlying config.
EngineConfig EngineConfig `json:"engineConfig"`
// PluginConfig is the JSON raw representation of the plugin configurations.
PluginConfig map[string]json.RawMessage `json:"plugin"`
// Apptheus connection, this field will be ignored
ApptheusSocket *metric.Apptheus `json:"-"`
}
// GetPluginConfig retrieves the configuration for the corresponding plugin.
func (c *Common) GetPluginConfig(pl plugin.Plugin, cfg interface{}) error {
if c.PluginConfig == nil {
c.PluginConfig = make(map[string]json.RawMessage)
}
if raw, found := c.PluginConfig[pl.Manifest.Name]; found {
return json.Unmarshal(raw, cfg)
}
return nil
}
// SetPluginConfig sets the configuration for the corresponding plugin.
func (c *Common) SetPluginConfig(pl plugin.Plugin, cfg interface{}) error {
raw, err := json.Marshal(cfg)
if err != nil {
return err
}
if c.PluginConfig == nil {
c.PluginConfig = make(map[string]json.RawMessage)
}
c.PluginConfig[pl.Manifest.Name] = raw
return nil
}
// EngineConfig is a generic interface to represent the implementations of an EngineConfig.
type EngineConfig interface{}
|