Skip to content

Commit d0bcd09

Browse files
committed
Refactor BMC CA injection to make it a bootstrap asset
Signed-off-by: Dmitry Tantsur <[email protected]>
1 parent 6d3497d commit d0bcd09

File tree

6 files changed

+76
-19
lines changed

6 files changed

+76
-19
lines changed

data/data/bootstrap/baremetal/files/etc/containers/systemd/ironic.container.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Volume=/opt/openshift/tls/ironic/:/certs/vmedia/:z
2323
{{ end }}
2424
Volume=/opt/openshift/tls/ironic/:/certs/ironic/:z
2525
{{ if ne len(.PlatformData.BareMetal.BMCVerifyCA) 0 }}
26-
Volume=/tmp/cert/ca/bmc:/certs/ca/bmc:z
26+
Volume=/opt/openshift/bmc-ca:/certs/ca/bmc:z
2727
{{ end }}
2828
Environment="IRONIC_RAMDISK_SSH_KEY=${IRONIC_RAMDISK_SSH_KEY}"
2929
Environment="PROVISIONING_INTERFACE=${PROVISIONING_INTERFACE}"

data/data/bootstrap/baremetal/files/usr/local/bin/build-ironic-env.sh

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@ build_ironic_env() {
2323
printf 'CUSTOMIZATION_IMAGE="%s"\n' "$(image_for machine-image-customization-controller)"
2424
printf 'MACHINE_OS_IMAGES_IMAGE="%s"\n' "$(image_for machine-os-images)"
2525

26-
if [[ "$BMC_VERIFY_CA" ]]; then
27-
mkdir -p /tmp/cert/ca/bmc
28-
echo "$BMC_VERIFY_CA" > /tmp/cert/ca/bmc/verify_ca.crt
29-
fi
30-
3126
# set password for ironic basic auth
3227
# The ironic container contains httpd (and thus httpd-tools), so rely on it
3328
# to supply the htpasswd command

data/data/bootstrap/baremetal/systemd/units/build-ironic-env.service.template

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ Environment="PROVISIONING_MAC={{.PlatformData.BareMetal.ProvisioningInterfaceMAC
1010
Environment="PROVISIONING_NETWORK_TYPE={{.PlatformData.BareMetal.ProvisioningNetwork}}"
1111
Environment="IRONIC_IP={{index .PlatformData.BareMetal.APIVIPs 0}}"
1212
Environment="IRONIC_USERNAME={{.PlatformData.BareMetal.IronicUsername}}"
13-
Environment="BMC_VERIFY_CA={{.PlatformData.BareMetal.BMCVerifyCA}}"
1413
ExecStart=/usr/local/bin/build-ironic-env.sh
1514
Type=oneshot
1615
RemainAfterExit=true

pkg/asset/ignition/bootstrap/common.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ func (a *Common) Dependencies() []asset.Asset {
171171
&tls.RootCA{},
172172
&tls.ServiceAccountKeyPair{},
173173
&tls.IronicTLSCert{},
174+
&tls.BMCVerifyCA{},
174175
&releaseimage.Image{},
175176
new(rhcos.Image),
176177
}
@@ -671,6 +672,7 @@ func (a *Common) addParentFiles(dependencies asset.Parents) {
671672
&tls.ServiceAccountKeyPair{},
672673
&tls.JournalCertKey{},
673674
&tls.IronicTLSCert{},
675+
&tls.BMCVerifyCA{},
674676
} {
675677
dependencies.Get(asset)
676678

pkg/asset/manifests/bmcverifycaconfigmap.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ import (
1010
"sigs.k8s.io/yaml"
1111

1212
"github.com/openshift/installer/pkg/asset"
13-
"github.com/openshift/installer/pkg/asset/installconfig"
14-
"github.com/openshift/installer/pkg/types/baremetal"
13+
"github.com/openshift/installer/pkg/asset/tls"
1514
)
1615

1716
var (
@@ -41,21 +40,18 @@ func (*BMCVerifyCAConfigMap) Name() string {
4140
// the asset.
4241
func (*BMCVerifyCAConfigMap) Dependencies() []asset.Asset {
4342
return []asset.Asset{
44-
&installconfig.InstallConfig{},
43+
&tls.BMCVerifyCA{},
4544
}
4645
}
4746

4847
// Generate generates the BMC Verify CA ConfigMap.
4948
func (bvc *BMCVerifyCAConfigMap) Generate(_ context.Context, dependencies asset.Parents) error {
50-
installConfig := &installconfig.InstallConfig{}
51-
dependencies.Get(installConfig)
49+
bmcVerifyCA := &tls.BMCVerifyCA{}
50+
dependencies.Get(bmcVerifyCA)
5251

53-
// Only generate the ConfigMap for baremetal platform with BMCVerifyCA configured
54-
if installConfig.Config.Platform.Name() != baremetal.Name {
55-
return nil
56-
}
57-
58-
if installConfig.Config.Platform.BareMetal == nil || installConfig.Config.Platform.BareMetal.BMCVerifyCA == "" {
52+
// Only generate the ConfigMap if BMCVerifyCA has content
53+
files := bmcVerifyCA.Files()
54+
if len(files) == 0 {
5955
return nil
6056
}
6157

@@ -69,7 +65,7 @@ func (bvc *BMCVerifyCAConfigMap) Generate(_ context.Context, dependencies asset.
6965
Name: bmcVerifyCAConfigMapName,
7066
},
7167
Data: map[string]string{
72-
bmcVerifyCAConfigMapDataKey: installConfig.Config.Platform.BareMetal.BMCVerifyCA,
68+
bmcVerifyCAConfigMapDataKey: string(files[0].Data),
7369
},
7470
}
7571

pkg/asset/tls/bmcverifyca.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package tls
2+
3+
import (
4+
"context"
5+
6+
"github.com/openshift/installer/pkg/asset"
7+
"github.com/openshift/installer/pkg/asset/installconfig"
8+
"github.com/openshift/installer/pkg/types/baremetal"
9+
)
10+
11+
// BMCVerifyCA is the asset for the user-provided BMC verify CA certificate file.
12+
// This CA certificate is used to verify BMC TLS certificates.
13+
type BMCVerifyCA struct {
14+
File *asset.File
15+
}
16+
17+
var _ asset.WritableAsset = (*BMCVerifyCA)(nil)
18+
19+
// Name returns the human-friendly name of the asset.
20+
func (*BMCVerifyCA) Name() string {
21+
return "BMC Verify CA Certificate"
22+
}
23+
24+
// Dependencies returns the dependency of the asset.
25+
func (*BMCVerifyCA) Dependencies() []asset.Asset {
26+
return []asset.Asset{
27+
&installconfig.InstallConfig{},
28+
}
29+
}
30+
31+
// Generate generates the BMC verify CA file from the install config.
32+
func (a *BMCVerifyCA) Generate(_ context.Context, dependencies asset.Parents) error {
33+
installConfig := &installconfig.InstallConfig{}
34+
dependencies.Get(installConfig)
35+
36+
// Only generate the file for baremetal platform with BMCVerifyCA configured
37+
if installConfig.Config.Platform.Name() != baremetal.Name {
38+
return nil
39+
}
40+
41+
if installConfig.Config.Platform.BareMetal == nil || installConfig.Config.Platform.BareMetal.BMCVerifyCA == "" {
42+
return nil
43+
}
44+
45+
// Create the file at rootDir/bmc-ca/verify_ca.crt (rootDir = /opt/openshift)
46+
a.File = &asset.File{
47+
Filename: "bmc-ca/verify_ca.crt",
48+
Data: []byte(installConfig.Config.Platform.BareMetal.BMCVerifyCA),
49+
}
50+
51+
return nil
52+
}
53+
54+
// Files returns the files generated by the asset.
55+
func (a *BMCVerifyCA) Files() []*asset.File {
56+
if a.File != nil {
57+
return []*asset.File{a.File}
58+
}
59+
return []*asset.File{}
60+
}
61+
62+
// Load loads the already-generated files back from disk.
63+
func (a *BMCVerifyCA) Load(f asset.FileFetcher) (bool, error) {
64+
return false, nil
65+
}

0 commit comments

Comments
 (0)