Я довольно новичок в Service Fabri c, поэтому я не уверен, является ли это проблемой с командлетом или это ошибка с моей стороны. Я использую модуль Az.ServiceFabri c версии 2.0.2 и модуль Az версии 3.8.0.
Я пытаюсь использовать командлет Add-AzServiceFabricClusterCertificate для добавления вторичного сертификата, который я уже создал в моем Azure KeyVault к моему кластеру. Когда я запускаю командлет, он выходит из строя с этой ошибкой (запуск с Debug дал мне больше деталей стека):
DEBUG: AzureQoSEvent: CommandName - Add-AzServiceFabricClusterCertificate; IsSuccess - False; Duration -
00:00:07.3059582;; Exception - System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Azure.Commands.ServiceFabric.Commands.ServiceFabricClusterCmdlet.GetClusterType(Cluster
clusterResource)
at Microsoft.Azure.Commands.ServiceFabric.Commands.AddAzureRmServiceFabricClusterCertificate.ExecuteCmdlet()
at Microsoft.WindowsAzure.Commands.Utilities.Common.AzurePSCmdlet.ProcessRecord();
Глядя на код для этого командлета, я заметил, что он, вероятно, дает сбой, потому что ресурс кластера, который передается в GetClusterType не имеет своего члена Certificate, поэтому он завершается ошибкой при попытке проверить Certificate.Thumbprint и Certificate.ThumbprintSecondary:
internal ClusterType GetClusterType(Cluster clusterResource)
{
if (string.IsNullOrWhiteSpace(clusterResource.Certificate.Thumbprint) &&
string.IsNullOrWhiteSpace(clusterResource.Certificate.ThumbprintSecondary))
{
return ClusterType.Unsecure;
}
else
{
return ClusterType.Secure;
}
}
Кластер, который передается в GetClusterType, получается таким же образом как и в командлете Get-AzServiceFabricCluster, поэтому, когда я запускаю этот командлет для кластера, к которому пытаюсь добавить сертификат, я заметил, что мое поле «Сертификат» пусто в ответе. Я предполагаю, что именно это вызывает исключение NullRef. Вот этот соответствующий фрагмент:
AzureActiveDirectory :
TenantId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ClusterApplication : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ClientApplication : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Certificate :
CertificateCommonNames : Microsoft.Azure.Management.ServiceFabric.Models.ServerCertificateCommonNames
ClientCertificateCommonNames :
ClientCertificateThumbprints :
Мне интересно, ожидается ли, что поле Certificate будет пустым, когда я использую командлет Get-AzServiceFabricCluster, и действительно ли это является причиной моего Add-AzServiceFabricClusterCertificate? Сбой в командлете. Когда я смотрю на блейд Security кластера в Azure Portal, я вижу сертификат первичного кластера, с которым я изначально создал кластер, и это сертификат, который я использую при развертывании и выполнении других операций кластера. Однако я заметил, что поле отпечатка сертификата пусто при просмотре сертификата с портала. Я ожидаю увидеть этот сертификат при использовании Get-AzServiceFabricCluster, но он пуст. Этот сертификат отсутствует в моем командлете Get-AzServiceFabricCluster, который можно исправить через портал или другой командлет?