Я пытаюсь использовать Python SDK для Service Fabric, чтобы получить список типов приложений из кластера.

Кластер не поддерживает Azure AD, поэтому в PowerShell я подключаюсь к нему с помощью сертификата.

Я не уверен, как это сделать с Python.

У меня есть разрешения владельца на подписку, и я использую правильную учетную запись SPN для получения информации, другие операции Python в группе ресурсов или объекте кластера возвращают мне выходные данные.

from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.servicefabric import ServiceFabricManagementClient

tenant_id = os.environ['AZURE_TENANT']
spn_client_id = os.environ['AZURE_CLIENT']
spn_secret = os.environ['AZURE_SECRET']
sub_id = 'some-subscription-id'

credentials = ServicePrincipalCredentials(
    client_id = spn_client_id,
    secret = spn_secret,
    tenant = tenant_id
)

sf_client = ServiceFabricManagementClient(credentials, sub_id)
sf_api_client = ServiceFabricClientAPIs(credentials, sub_id)

Этот код работает:

sf_client.clusters.get('some-rg-name', 'some-cluster-name')

Поскольку у меня есть разрешения на подписку, Azure Api возвращает значения.

Проверка приложений в кластере - это другое дело, я не могу перечислить типы приложений, например, с помощью следующего кода:

sf_client.application_type.list('some-rg-name', 'some-cluster-name')
0
Pixel 20 Окт 2019 в 18:31

1 ответ

Это не связано с разрешением, достаточно роли Owner.

В вашем коде ошибка, это должно быть sf_client.application_types.list, а не sf_client.application_type.list, это работает на моей стороне.

apptype = sf_client.application_types.list('some-rg-name', 'some-cluster-name')
print(apptype)

enter image description here


Кроме того , если вы получаете 'value': [] в результате, это также означает успех, просто потому, что в вашем кластере нет ресурса application type. Вы можете проверить результат с помощью этого REST API Application Types - List сначала.

Обновление :

Используйте этот api Application Types - Create Or Update для создания нового типа приложения укажите параметры и тело запроса, которое должно быть таким.

{
  "location": "eastus",
  "tags": {}
}

Снимок экрана:

enter image description here

Отклик:

enter image description here

Затем используйте этот api Application Types - List или sf_client.application_types.list('some-rg-name', 'some-cluster-name'), чтобы перечислить типы приложений.

enter image description here

0
Joy Wang-MSFT 21 Окт 2019 в 11:01
Когда я запускаю вашу модификацию кода, я получаю AttributeError: объект 'ServiceFabricManagementClient' не имеет атрибута 'application_types', когда я запускаю dir (sf_client), я получаю '' application ',' application_type '"как часть результатов объекта
 – 
Pixel
21 Окт 2019 в 09:30
Я забыл упомянуть, что у меня есть типы приложений и экземпляры в кластере, я могу видеть их в проводнике служебной фабрики или когда я подключаюсь к кластеру с помощью PowerShell с предоставленным сертификатом в качестве аутентификации и авторизации (сертификат администратора). Если я запускаю команду, как в моем сообщении, я получаю объект без ничего в поле значения, объект, который я получаю для "application_type", вставлен ниже ... может быть, есть небольшая разница в их именах в python sdk? <azure.mgmt.servicefabric.operations.application_type_operations.ApplicationTypeOperations
 – 
Pixel
21 Окт 2019 в 09:43
Попробуйте azure-mgmt-servicefabric с версией 0.4.0. pypi.org/project/azure-mgmt-servicefabric
 – 
Joy Wang-MSFT
21 Окт 2019 в 09:46
Pip обновлен до 0.4.0, теперь просто другое название, но тот же результат. Я также использовал api из ссылки, которую вы разместили, и почтальона, без значения, но в кластере есть приложения
 – 
Pixel
21 Окт 2019 в 10:02
Вы уверены? Не могли бы вы использовать этот api docs.microsoft.com/en -us / rest / api / servicefabric / application /…, чтобы создать новый тип приложения, а затем попробовать? Просто нажмите кнопку Try it и следуйте этому образец.
 – 
Joy Wang-MSFT
21 Окт 2019 в 10:10