in internal/cmds/cmds.go [685:723]
func createOrReplaceAppendBlobUsingManagedIdentity(blobUri string, managedIdentity *handlersettings.RunCommandManagedIdentity) (*appendblob.Client, error) {
var ID string = ""
var miCred *azidentity.ManagedIdentityCredential = nil
var miCredError error = nil
if managedIdentity != nil {
if managedIdentity.ClientId != "" {
ID = managedIdentity.ClientId
} else if managedIdentity.ObjectId != "" { //ObjectId is not supported by azidentity.NewManagedIdentityCredential
return nil, errors.New("Managed identity's ObjectId is not supported. Use ClientId instead")
}
}
if ID != "" { // Use user-assigned identity if clientId is provided
miCredentialOptions := azidentity.ManagedIdentityCredentialOptions{ID: azidentity.ClientID(ID)}
miCred, miCredError = azidentity.NewManagedIdentityCredential(&miCredentialOptions)
} else { // Use system-assigned identity if clientId not provided
miCred, miCredError = azidentity.NewManagedIdentityCredential(nil)
}
var appendBlobClient *appendblob.Client
var appendBlobNewClientError error
if miCredError == nil {
appendBlobClient, appendBlobNewClientError = appendblob.NewClient(blobUri, miCred, nil)
if appendBlobNewClientError != nil {
return nil, errors.Wrap(appendBlobNewClientError, fmt.Sprintf("Error Creating client to Append Blob '%s'. Make sure you are using Append blob. Other types of blob such as PageBlob, BlockBlob are not supported types.", download.GetUriForLogging(blobUri)))
} else {
// Create or Replace Append blob. If AppendBlob already exists, blob gets cleared.
_, createAppendBlobError := appendBlobClient.Create(context.Background(), nil)
if createAppendBlobError != nil {
return nil, errors.Wrap(createAppendBlobError, fmt.Sprintf("Error creating or replacing the Append blob '%s'. Make sure you are using Append blob. Other types of blob such as PageBlob, BlockBlob are not supported types.", download.GetUriForLogging(blobUri)))
}
}
} else {
return nil, errors.Wrap(miCredError, "Error while retrieving managed identity credential")
}
return appendBlobClient, nil
}