blob: e7a509d342a43dd33e289e5f9446cf5a6f05c881 [file] [log] [blame]
Mohammed Naserc6e431b2024-03-15 01:21:44 -04001package openstack_helm
2
3import (
4 "gopkg.in/yaml.v2"
5 "helm.sh/helm/v3/pkg/chart/loader"
6 "helm.sh/helm/v3/pkg/chartutil"
7)
8
9type HelmValues struct {
Mohammed Naser60bb74c2025-02-10 10:52:10 -050010 Pod `yaml:"pod"`
Mohammed Naserc6e431b2024-03-15 01:21:44 -040011 Conf `yaml:"conf"`
12}
13
Mohammed Naser60bb74c2025-02-10 10:52:10 -050014type PodPriorityClassConfig map[string]string
15type PodRuntimeClassConfig map[string]string
16
17type PodMount map[string]interface{}
18
19type Pod struct {
20 PriorityClass PodPriorityClassConfig `yaml:"priorityClassName,omitempty"`
21 RuntimeClass PodRuntimeClassConfig `yaml:"runtimeClassName,omitempty"`
22 Mounts map[string]PodMount `yaml:"mounts,omitempty"`
Jason Halldea3c672025-02-12 10:33:39 -060023 AntiAffinityType PodAntiAffinityTypeConfig `yaml:"affinity.anti.type,omitempty"`
Mohammed Naser60bb74c2025-02-10 10:52:10 -050024}
25
Jason Halldea3c672025-02-12 10:33:39 -060026type PodAntiAffinityTypeConfig map[string]interface{}
27
Mohammed Naserc6e431b2024-03-15 01:21:44 -040028type Conf struct {
29 Barbican *BarbicanConf `yaml:"barbican,omitempty"`
30 Cinder *CinderConf `yaml:"cinder,omitempty"`
31 Designate *DesignateConf `yaml:"designate,omitempty"`
32 Glance *GlanceConf `yaml:"glance,omitempty"`
33 Heat *HeatConf `yaml:"heat,omitempty"`
Mohammed Naser60bb74c2025-02-10 10:52:10 -050034 Ironic *IronicConf `yaml:"ironic,omitempty"`
Mohammed Naserc6e431b2024-03-15 01:21:44 -040035 Keystone *KeystoneConf `yaml:"keystone,omitempty"`
36 Magnum *MagnumConf `yaml:"magnum,omitempty"`
37 Manila *ManilaConf `yaml:"manila,omitempty"`
Mohammed Naser60bb74c2025-02-10 10:52:10 -050038 Memcached *MemcachedConf `yaml:"memcached,omitempty"`
Mohammed Naserc6e431b2024-03-15 01:21:44 -040039 Neutron *NeutronConf `yaml:"neutron,omitempty"`
40 Nova *NovaConf `yaml:"nova,omitempty"`
41 Octavia *OctaviaConf `yaml:"octavia,omitempty"`
42 Placement *PlacementConf `yaml:"placement,omitempty"`
Mohammed Naserc6e431b2024-03-15 01:21:44 -040043 Staffeln *StaffelnConf `yaml:"staffeln,omitempty"`
44}
45
46func (h *HelmValues) YAML() ([]byte, error) {
47 return yaml.Marshal(h)
48}
49
50func (h *HelmValues) NativeHelmValues() (chartutil.Values, error) {
51 yamlData, err := h.YAML()
52 if err != nil {
53 return nil, err
54 }
55
56 return chartutil.ReadValues(yamlData)
57}
58
59func FromYAML(yamlData []byte) (*HelmValues, error) {
60 var helmValues HelmValues
61 err := yaml.Unmarshal(yamlData, &helmValues)
62 if err != nil {
63 return nil, err
64 }
65
66 return &helmValues, nil
67}
68
69func FromYAMLString(yamlString string) (*HelmValues, error) {
70 return FromYAML([]byte(yamlString))
71}
72
73func CoalescedHelmValues(name string, values *HelmValues) (*HelmValues, error) {
74 chart, err := loader.Load(name)
75 if err != nil {
76 return nil, err
77 }
78
79 releaseValues, err := values.NativeHelmValues()
80 if err != nil {
81 return nil, err
82 }
83
84 mergedValues, err := chartutil.CoalesceValues(chart, releaseValues)
85 if err != nil {
86 return nil, err
87 }
88
89 yamlData, err := mergedValues.YAML()
90 if err != nil {
91 return nil, err
92 }
93
94 return FromYAMLString(yamlData)
95}