Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions deploy/osps/default/osp-flatcar.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -343,10 +343,13 @@ spec:
content: |
[Install]
WantedBy=multi-user.target

{{- if not (eq .CloudProviderName "vmware-cloud-director") }}

[Unit]
Requires=network-online.target
After=network-online.target
{{- end }}

[Service]
Type=oneshot
Expand Down
48 changes: 45 additions & 3 deletions pkg/controllers/osc/resources/operating_system_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,17 @@ func GenerateOperatingSystemConfig(
// Render files for provisioning config
renderedProvisioningFiles, err := renderedFiles(osp.Spec.ProvisioningConfig, containerRuntime, data)
if err != nil {
return nil, fmt.Errorf("failed to render bootstrapping file templates: %w", err)
return nil, fmt.Errorf("failed to render provisioning file templates: %w", err)
}

renderedBootstrappingUnits, err := renederedUnits(osp.Spec.BootstrapConfig, data)
if err != nil {
return nil, fmt.Errorf("failed to render bootstrapping Unit templates: %w", err)
}

renderedProvisioningUnits, err := renederedUnits(osp.Spec.ProvisioningConfig, data)
if err != nil {
return nil, fmt.Errorf("failed to render provisioning Unit templates: %w", err)
}

osc.Spec = osmv1alpha1.OperatingSystemConfigSpec{
Expand All @@ -245,13 +255,13 @@ func GenerateOperatingSystemConfig(
Spec: providerConfig.CloudProviderSpec,
},
BootstrapConfig: osmv1alpha1.OSCConfig{
Units: ospOriginal.Spec.BootstrapConfig.Units,
Units: renderedBootstrappingUnits,
Files: renderedBootstrappingFiles,
UserSSHKeys: providerConfig.SSHPublicKeys,
CloudInitModules: osp.Spec.BootstrapConfig.CloudInitModules,
},
ProvisioningConfig: osmv1alpha1.OSCConfig{
Units: ospOriginal.Spec.ProvisioningConfig.Units,
Units: renderedProvisioningUnits,
Files: renderedProvisioningFiles,
UserSSHKeys: providerConfig.SSHPublicKeys,
CloudInitModules: osp.Spec.ProvisioningConfig.CloudInitModules,
Expand Down Expand Up @@ -411,6 +421,38 @@ func selectAdditionalTemplates(config osmv1alpha1.OSPConfig, containerRuntime st
return templates, nil
}

func renederedUnits(config osmv1alpha1.OSPConfig, data filesData) ([]osmv1alpha1.Unit, error) {
populatedUnits, err := populateUnitList(config.Units, data)
if err != nil {
return nil, fmt.Errorf("failed to populate OSP Unit template: %w", err)
}
return populatedUnits, nil
}

func populateUnitList(units []osmv1alpha1.Unit, d filesData) ([]osmv1alpha1.Unit, error) {
funcMap := fm.ExtraTxtFuncMap()
var punits []osmv1alpha1.Unit
for _, unit := range units {
content := unit.Content
tmpl, err := template.New(unit.Name).Funcs(funcMap).Parse(*content)
if err != nil {
return nil, fmt.Errorf("failed to parse OSP Unit [%s] template: %w", unit.Name, err)
}

buff := bytes.Buffer{}
if err := tmpl.Execute(&buff, &d); err != nil {
return nil, err
}
pcontent := buff.String()
punit := unit.DeepCopy()
punit.Content = &pcontent

punits = append(punits, *punit)
}

return punits, nil
}

func addTemplatingSequence(templateName, template string) string {
return fmt.Sprintf("\n{{- define \"%s\" }}\n%s\n{{- end }}", templateName, template)
}
Expand Down