Skip to content

Commit

Permalink
MGMT-16649: Use ignition info in request for ignition
Browse files Browse the repository at this point in the history
  • Loading branch information
CrystalChun committed Jan 31, 2024
1 parent 976b223 commit 99cc068
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 24 deletions.
10 changes: 5 additions & 5 deletions internal/bminventory/inventory.go
Original file line number Diff line number Diff line change
Expand Up @@ -974,7 +974,7 @@ func (b *bareMetalInventory) V2ImportClusterInternal(ctx context.Context, kubeKe
return &newCluster, nil
}

func (b *bareMetalInventory) createAndUploadDay2NodeIgnition(ctx context.Context, cluster *common.Cluster, host *models.Host, ignitionEndpointToken string) error {
func (b *bareMetalInventory) createAndUploadDay2NodeIgnition(ctx context.Context, cluster *common.Cluster, host *models.Host, ignitionInfo *common.IgnitionInfo, ignitionEndpointToken string) error {
log := logutil.FromContext(ctx, b.log)
log.Infof("Starting createAndUploadDay2NodeIgnition for cluster %s, host %s", cluster.ID, host.ID)

Expand All @@ -988,7 +988,7 @@ func (b *bareMetalInventory) createAndUploadDay2NodeIgnition(ctx context.Context
caCert = cluster.IgnitionEndpoint.CaCertificate
}

fullIgnition, err := b.IgnitionBuilder.FormatSecondDayWorkerIgnitionFile(ignitionEndpointUrl, caCert, ignitionEndpointToken, host)
fullIgnition, err := b.IgnitionBuilder.FormatSecondDayWorkerIgnitionFile(ignitionEndpointUrl, caCert, ignitionEndpointToken, ignitionInfo, host)
if err != nil {
return errors.Wrapf(err, "Failed to create ignition string for cluster %s, host %s", cluster.ID, host.ID)
}
Expand Down Expand Up @@ -1430,9 +1430,9 @@ func (b *bareMetalInventory) InstallSingleDay2HostInternal(ctx context.Context,
return err
}
// move host to installing
err = b.createAndUploadDay2NodeIgnition(ctx, cluster, &h.Host, h.IgnitionEndpointToken)
err = b.createAndUploadDay2NodeIgnition(ctx, cluster, &h.Host, &h.IgnitionInfo, h.IgnitionEndpointToken)
if err != nil {
log.Errorf("Failed to upload ignition for host %s", h.RequestedHostname)
log.WithError(err).Errorf("Failed to upload ignition for host %s", h.RequestedHostname)
return err
}
if installErr := b.hostApi.Install(ctx, &h.Host, tx); installErr != nil {
Expand Down Expand Up @@ -1501,7 +1501,7 @@ func (b *bareMetalInventory) V2InstallHost(ctx context.Context, params installer
if cluster, err = common.GetClusterFromDB(b.db, *h.ClusterID, common.SkipEagerLoading); err != nil {
return common.GenerateErrorResponder(err)
}
err = b.createAndUploadDay2NodeIgnition(ctx, cluster, h, host.IgnitionEndpointToken)
err = b.createAndUploadDay2NodeIgnition(ctx, cluster, h, &host.IgnitionInfo, host.IgnitionEndpointToken)
if err != nil {
log.Errorf("Failed to upload ignition for host %s", h.RequestedHostname)
return common.GenerateErrorResponder(err)
Expand Down
12 changes: 6 additions & 6 deletions internal/bminventory/inventory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12794,7 +12794,7 @@ var _ = Describe("Install Host test", func() {
mockHostApi.EXPECT().RefreshStatus(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockHostApi.EXPECT().Install(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockS3Client.EXPECT().Upload(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(secondDayWorkerIgnition, nil).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(secondDayWorkerIgnition, nil).Times(1)
res := bm.V2InstallHost(ctx, params)
Expect(res).Should(BeAssignableToTypeOf(installer.NewV2InstallHostAccepted()))
})
Expand All @@ -12812,7 +12812,7 @@ var _ = Describe("Install Host test", func() {
mockHostApi.EXPECT().RefreshStatus(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockHostApi.EXPECT().Install(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockS3Client.EXPECT().Upload(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile("http://example.com/worker", gomock.Any(), gomock.Any(), gomock.Any()).Return(secondDayWorkerIgnition, nil).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile("http://example.com/worker", gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(secondDayWorkerIgnition, nil).Times(1)
res := bm.V2InstallHost(ctx, params)
Expect(res).Should(BeAssignableToTypeOf(installer.NewV2InstallHostAccepted()))
})
Expand Down Expand Up @@ -12860,7 +12860,7 @@ var _ = Describe("Install Host test", func() {
mockHostApi.EXPECT().AutoAssignRole(gomock.Any(), gomock.Any(), gomock.Any()).Return(true, nil).Times(1)
mockHostApi.EXPECT().RefreshStatus(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockS3Client.EXPECT().Upload(gomock.Any(), gomock.Any(), gomock.Any()).Return(fmt.Errorf("some error")).Times(0)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, fmt.Errorf("ign failure")).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, fmt.Errorf("ign failure")).Times(1)
res := bm.V2InstallHost(ctx, params)
verifyApiError(res, http.StatusInternalServerError)
})
Expand All @@ -12875,7 +12875,7 @@ var _ = Describe("Install Host test", func() {
mockHostApi.EXPECT().AutoAssignRole(gomock.Any(), gomock.Any(), gomock.Any()).Return(true, nil).Times(1)
mockHostApi.EXPECT().RefreshStatus(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockS3Client.EXPECT().Upload(gomock.Any(), gomock.Any(), gomock.Any()).Return(fmt.Errorf("some error")).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(secondDayWorkerIgnition, nil).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(secondDayWorkerIgnition, nil).Times(1)
res := bm.V2InstallHost(ctx, params)
verifyApiError(res, http.StatusInternalServerError)
})
Expand Down Expand Up @@ -12924,7 +12924,7 @@ var _ = Describe("InstallSingleDay2Host test", func() {
mockHostApi.EXPECT().RefreshStatus(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockHostApi.EXPECT().Install(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockS3Client.EXPECT().Upload(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(secondDayWorkerIgnition, nil).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(secondDayWorkerIgnition, nil).Times(1)
res := bm.InstallSingleDay2HostInternal(ctx, clusterID, clusterID, hostId)
Expect(res).Should(BeNil())
})
Expand All @@ -12937,7 +12937,7 @@ var _ = Describe("InstallSingleDay2Host test", func() {
mockHostApi.EXPECT().RefreshStatus(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockHostApi.EXPECT().Install(gomock.Any(), gomock.Any(), gomock.Any()).Return(errors.New(expectedErrMsg)).Times(1)
mockS3Client.EXPECT().Upload(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(secondDayWorkerIgnition, nil).Times(1)
mockIgnitionBuilder.EXPECT().FormatSecondDayWorkerIgnitionFile(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(secondDayWorkerIgnition, nil).Times(1)
res := bm.InstallSingleDay2HostInternal(ctx, clusterID, clusterID, hostId)
Expect(res.Error()).Should(Equal(expectedErrMsg))
})
Expand Down
15 changes: 11 additions & 4 deletions internal/ignition/ignition.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ type Generator interface {
//go:generate mockgen -source=ignition.go -package=ignition -destination=mock_ignition.go
type IgnitionBuilder interface {
FormatDiscoveryIgnitionFile(ctx context.Context, infraEnv *common.InfraEnv, cfg IgnitionConfig, safeForLogs bool, authType auth.AuthType, overrideDiscoveryISOType string) (string, error)
FormatSecondDayWorkerIgnitionFile(url string, caCert *string, bearerToken string, host *models.Host) ([]byte, error)
FormatSecondDayWorkerIgnitionFile(url string, caCert *string, bearerToken string, ignitionInfo *common.IgnitionInfo, host *models.Host) ([]byte, error)
}

type installerGenerator struct {
Expand Down Expand Up @@ -1906,15 +1906,22 @@ func (ib *ignitionBuilder) prepareStaticNetworkConfigForIgnition(ctx context.Con
return filesList, nil
}

func (ib *ignitionBuilder) FormatSecondDayWorkerIgnitionFile(url string, caCert *string, bearerToken string, host *models.Host) ([]byte, error) {
func (ib *ignitionBuilder) FormatSecondDayWorkerIgnitionFile(url string, caCert *string, bearerToken string, ignitionInfo *common.IgnitionInfo, host *models.Host) ([]byte, error) {
var ignitionParams = map[string]interface{}{
// https://github.com/openshift/machine-config-operator/blob/master/docs/MachineConfigServer.md#endpoint
"SOURCE": url,
"HEADERS": map[string]string{},
"CACERT": "",
}
if bearerToken != "" {
ignitionParams["HEADERS"].(map[string]string)["Authorization"] = fmt.Sprintf("Bearer %s", bearerToken)
if ignitionInfo.IgnitionEndpointToken != "" {
ignitionParams["HEADERS"].(map[string]string)["Authorization"] = fmt.Sprintf("Bearer %s", ignitionInfo.IgnitionEndpointToken)
}

if ignitionInfo.TargetConfigVersionHash != "" {
ignitionParams["HEADERS"].(map[string]string)["TargetConfigVersionHash"] = ignitionInfo.TargetConfigVersionHash
}
if ignitionInfo.NodePoolName != "" {
ignitionParams["HEADERS"].(map[string]string)["NodePool"] = ignitionInfo.NodePoolName
}

if caCert != nil {
Expand Down
10 changes: 5 additions & 5 deletions internal/ignition/ignition_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1497,7 +1497,7 @@ var _ = Describe("IgnitionBuilder", func() {
}}
serviceBaseURL := "http://10.56.20.70:7878"

text, err := builder.FormatSecondDayWorkerIgnitionFile(serviceBaseURL, nil, "", cluster.Hosts[0])
text, err := builder.FormatSecondDayWorkerIgnitionFile(serviceBaseURL, nil, "", nil, cluster.Hosts[0])

Expect(err).Should(BeNil())
Expect(text).Should(ContainSubstring("/tmp/example"))
Expand Down Expand Up @@ -1797,7 +1797,7 @@ var _ = Describe("FormatSecondDayWorkerIgnitionFile", func() {
Context("test custom ignition endpoint", func() {

It("are rendered properly without ca cert and token", func() {
ign, err := builder.FormatSecondDayWorkerIgnitionFile("http://url.com", nil, "", mockHost)
ign, err := builder.FormatSecondDayWorkerIgnitionFile("http://url.com", nil, "", nil, mockHost)
Expect(err).NotTo(HaveOccurred())

ignConfig, _, err := config_31.Parse(ign)
Expand All @@ -1809,7 +1809,7 @@ var _ = Describe("FormatSecondDayWorkerIgnitionFile", func() {

It("are rendered properly with token", func() {
token := "xyzabc123"
ign, err := builder.FormatSecondDayWorkerIgnitionFile("http://url.com", nil, token, mockHost)
ign, err := builder.FormatSecondDayWorkerIgnitionFile("http://url.com", nil, token, nil, mockHost)
Expect(err).NotTo(HaveOccurred())

ignConfig, _, err := config_31.Parse(ign)
Expand All @@ -1826,7 +1826,7 @@ var _ = Describe("FormatSecondDayWorkerIgnitionFile", func() {
"aEA8gNEmV+rb7h1v0r3EwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCaXMxCzAJBgNVBAgMAmRk" +
"2lyDI6UR3Fbz4pVVAxGXnVhBExjBE=\n-----END CERTIFICATE-----"
encodedCa := base64.StdEncoding.EncodeToString([]byte(ca))
ign, err := builder.FormatSecondDayWorkerIgnitionFile("https://url.com", &encodedCa, "", mockHost)
ign, err := builder.FormatSecondDayWorkerIgnitionFile("https://url.com", &encodedCa, "", nil, mockHost)
Expect(err).NotTo(HaveOccurred())

ignConfig, _, err := config_31.Parse(ign)
Expand All @@ -1843,7 +1843,7 @@ var _ = Describe("FormatSecondDayWorkerIgnitionFile", func() {
"aEA8gNEmV+rb7h1v0r3EwDQYJKoZIhvcNAQELBQAwYTELMAkGA1UEBhMCaXMxCzAJBgNVBAgMAmRk" +
"2lyDI6UR3Fbz4pVVAxGXnVhBExjBE=\n-----END CERTIFICATE-----"
encodedCa := base64.StdEncoding.EncodeToString([]byte(ca))
ign, err := builder.FormatSecondDayWorkerIgnitionFile("https://url.com", &encodedCa, token, mockHost)
ign, err := builder.FormatSecondDayWorkerIgnitionFile("https://url.com", &encodedCa, token, nil, mockHost)

Expect(err).NotTo(HaveOccurred())

Expand Down
8 changes: 4 additions & 4 deletions internal/ignition/mock_ignition.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 99cc068

Please sign in to comment.