in pkg/providers/imagefamily/customscriptsbootstrap/provisionclientbootstrap.go [170:221]
func (p *ProvisionClientBootstrap) getNodeBootstrappingFromClient(ctx context.Context, provisionProfile *models.ProvisionProfile, provisionHelperValues *models.ProvisionHelperValues, bootstrapToken string) (string, string, error) {
transport := httptransport.New(options.FromContext(ctx).NodeBootstrappingServerURL, "/", []string{"http"})
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
loggingClient := restlogger.NewLoggingClient(logger)
transport.Transport = loggingClient.Transport
client := client.New(transport, strfmt.Default)
params := operations.NewNodeBootstrappingGetParams()
params.ResourceGroupName = p.ClusterResourceGroup
params.ResourceName = p.ClusterName
params.SubscriptionID = p.SubscriptionID
provisionValues := &models.ProvisionValues{
ProvisionProfile: provisionProfile,
ProvisionHelperValues: provisionHelperValues,
}
params.Parameters = provisionValues
params.WithTimeout(30 * time.Second)
params.Context = ctx
resp, err := client.Operations.NodeBootstrappingGet(params)
if err != nil {
// As of now we just fail the provisioning given the unlikely scenario of retriable error, but could be revisited along with retriable status on the server side.
return "", "", err
}
if resp.Payload == nil {
return "", "", fmt.Errorf("no payload in response")
}
if resp.Payload.Cse == nil || *resp.Payload.Cse == "" {
return "", "", fmt.Errorf("no CSE in response")
}
if resp.Payload.CustomData == nil || *resp.Payload.CustomData == "" {
return "", "", fmt.Errorf("no CustomData in response")
}
cseWithoutBootstrapToken := *resp.Payload.Cse
customDataWithoutBootstrapToken := *resp.Payload.CustomData
cseWithBootstrapToken := strings.ReplaceAll(cseWithoutBootstrapToken, "{{.TokenID}}.{{.TokenSecret}}", bootstrapToken)
decodedCustomDataWithoutBootstrapTokenInBytes, err := base64.StdEncoding.DecodeString(customDataWithoutBootstrapToken)
if err != nil {
return "", "", err
}
decodedCustomDataWithBootstrapToken := strings.ReplaceAll(string(decodedCustomDataWithoutBootstrapTokenInBytes), "{{.TokenID}}.{{.TokenSecret}}", bootstrapToken)
customDataWithBootstrapToken := base64.StdEncoding.EncodeToString([]byte(decodedCustomDataWithBootstrapToken))
return customDataWithBootstrapToken, cseWithBootstrapToken, nil
}