Skip to content

Commit 6e1c618

Browse files
committed
improved ignition dirs transpiling
1 parent 496a426 commit 6e1c618

File tree

5 files changed

+54
-21
lines changed

5 files changed

+54
-21
lines changed

pkg/controller/internalreleaseimage/internalreleaseimage_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ func (ctrl *Controller) syncInternalReleaseImage(key string) error {
320320
if isNotFound {
321321
mc, err = r.CreateEmptyMachineConfig()
322322
if err != nil {
323-
return err //syncStatusOnly, could not create MachineConfig
323+
return err // syncStatusOnly, could not create MachineConfig
324324
}
325325
}
326326

pkg/controller/internalreleaseimage/internalreleaseimage_helpers_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func verifyInternalReleaseMasterMachineConfig(t *testing.T, mc *mcfgv1.MachineCo
3030
assert.Equal(t, controllerKind.Kind, mc.OwnerReferences[0].Kind)
3131

3232
ignCfg, err := ctrlcommon.ParseAndConvertConfig(mc.Spec.Config.Raw)
33-
assert.NoError(t, err)
33+
assert.NoError(t, err, mc.Name)
3434

3535
assert.Len(t, ignCfg.Systemd.Units, 1)
3636
assert.Contains(t, *ignCfg.Systemd.Units[0].Contents, "docker-registry-image-pullspec")

pkg/controller/internalreleaseimage/internalreleaseimage_renderer.go

Lines changed: 48 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,20 @@ import (
1010
"text/template"
1111

1212
"github.com/clarketm/json"
13+
fcctbase "github.com/coreos/fcct/base/v0_1"
14+
"github.com/coreos/go-semver/semver"
15+
ign3 "github.com/coreos/ignition/v2/config/v3_5"
1316
ign3types "github.com/coreos/ignition/v2/config/v3_5/types"
17+
"github.com/ghodss/yaml"
18+
corev1 "k8s.io/api/core/v1"
19+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
20+
1421
mcfgv1 "github.com/openshift/api/machineconfiguration/v1"
1522
mcfgv1alpha1 "github.com/openshift/api/machineconfiguration/v1alpha1"
23+
"github.com/openshift/machine-config-operator/pkg/controller/common"
1624
ctrlcommon "github.com/openshift/machine-config-operator/pkg/controller/common"
1725
templatectrl "github.com/openshift/machine-config-operator/pkg/controller/template"
1826
"github.com/openshift/machine-config-operator/pkg/version"
19-
corev1 "k8s.io/api/core/v1"
20-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2127
)
2228

2329
var (
@@ -143,35 +149,58 @@ func (r *Renderer) generateIgnitionFromTemplates(rc *renderContext) (*ign3types.
143149
if err != nil {
144150
return nil, err
145151
}
146-
dirs := []string{
147-
"/etc/iri-registry",
148-
"/etc/iri-registry/certs",
149-
"/var/lib/iri-registry",
152+
dirs, err := r.renderTemplateFolder(rc, filepath.Join(r.role, "directories"))
153+
if err != nil {
154+
return nil, err
150155
}
151156

152157
// Generate the iri ignition
153-
ignCfg, err := ctrlcommon.TranspileCoreOSConfigToIgn(files, units)
158+
ignCfg, err := r.transpileIgnition(dirs, files, units)
154159
if err != nil {
155160
return nil, fmt.Errorf("error transpiling CoreOS config to Ignition config: %w", err)
156161
}
157-
r.transpileIgitionDirs(ignCfg, dirs)
162+
return ignCfg, nil
163+
}
164+
165+
func (r *Renderer) transpileIgnition(dirs []string, files []string, units []string) (*ign3types.Config, error) {
166+
ignCfg, err := ctrlcommon.TranspileCoreOSConfigToIgn(files, units)
167+
if err != nil {
168+
return nil, err
169+
}
158170

171+
ignCfgDirs, err := r.transpileCoreOSConfigDirsToIgn(dirs)
172+
if err != nil {
173+
return nil, err
174+
}
175+
176+
*ignCfg = ign3.Merge(*ignCfg, *ignCfgDirs)
159177
return ignCfg, nil
160178
}
161179

162180
// transpileIgitionDirs generates the ignition for creating the specified directories.
163-
func (r *Renderer) transpileIgitionDirs(ignCfg *ign3types.Config, directories []string) {
164-
for _, d := range directories {
165-
mode := 0644
166-
ignCfg.Storage.Directories = append(ignCfg.Storage.Directories, ign3types.Directory{
167-
Node: ign3types.Node{
168-
Path: d,
169-
},
170-
DirectoryEmbedded1: ign3types.DirectoryEmbedded1{
171-
Mode: &mode,
172-
},
173-
})
181+
func (r *Renderer) transpileCoreOSConfigDirsToIgn(directories []string) (*ign3types.Config, error) {
182+
outConfig := ign3types.Config{}
183+
for _, contents := range directories {
184+
d := new(fcctbase.Directory)
185+
if err := yaml.Unmarshal([]byte(contents), d); err != nil {
186+
return nil, fmt.Errorf("failed to unmarshal %q into struct: %w", contents, err)
187+
}
188+
189+
// Add the directory to the config
190+
var ctCfg fcctbase.Config
191+
ctCfg.Storage.Directories = append(ctCfg.Storage.Directories, *d)
192+
ign30Config, tSet, err := ctCfg.ToIgn3_0()
193+
if err != nil {
194+
return nil, fmt.Errorf("failed to transpile config to Ignition config %w\nTranslation set: %v", err, tSet)
195+
}
196+
ign3Config, err := common.IgnitionConverterSingleton().Convert(ign30Config, *semver.New(ign30Config.Ignition.Version), ign3types.MaxVersion)
197+
if err != nil {
198+
return nil, fmt.Errorf("failed to convert config from 3.0 to %v. %w", ign3types.MaxVersion, err)
199+
}
200+
outConfig = ign3.Merge(outConfig, ign3Config.(ign3types.Config))
174201
}
202+
203+
return &outConfig, nil
175204
}
176205

177206
// renderTemplateFolder renders all the templates found in the specified folder.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
path: /etc/iri-registry/certs
2+
mode: 0644
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
path: /var/lib/iri-registry
2+
mode: 0644

0 commit comments

Comments
 (0)