Azure список Azure База данных для PostgreSQL серверов в группе ресурсов с использованием Azure Java SDK - PullRequest
2 голосов
/ 10 февраля 2020

Каков наилучший и правильный способ составления списка Azure База данных для PostgreSQL серверов, присутствующих в моей группе ресурсов с использованием Azure Java SDK? В настоящее время у нас есть развертывания, которые происходят с использованием шаблонов ARM, и после того, как ресурсы были развернуты, мы хотим иметь возможность получать информацию об этих ресурсах из самого Azure. Я попытался сделать следующим образом:

PagedList<SqlServer> azureSqlServers = azure1.sqlServers().listByResourceGroup("resourceGrpName");
//PagedList<SqlServer> azureSqlServers = azure1.sqlServers().list();
for(SqlServer azureSqlServer : azureSqlServers) {
    System.out.println(azureSqlServer.fullyQualifiedDomainName());
}
System.out.println(azureSqlServers.size());

Но размер списка возвращается 0.

Однако для виртуальных машин я могу получить информацию в следующем way:

PagedList<VirtualMachine> vms = azure1.virtualMachines().listByResourceGroup("resourceGrpName");
for (VirtualMachine vm : vms) {
    System.out.println(vm.name());
    System.out.println(vm.powerState());
    System.out.println(vm.size());
    System.out.println(vm.tags());
}

Итак, как правильно получить информацию о Azure Database for PostgreSQL с использованием Azure Java SDK?

PS Как только я получу информацию относительно Azure База данных для PostgreSQL, мне нужна аналогичная информация о Azure Database for MySQL Servers.

Редактировать: я видел этот вопрос, который был задан 2 года назад, и хотел бы знать, если Azure добавлена ​​поддержка для Azure База данных для серверов PostgreSQL / MySQL или нет. Azure Java SDK для баз данных MySQL / PostgreSQL?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Итак, я вроде как реализовал это следующим образом, и это можно рассматривать как альтернативный способ ... Рассматривая Azure SDK для java репо на Github (https://github.com/Azure/azure-sdk-for-java/tree/master/sdk/postgresql ), похоже, они есть в бета-версии, поэтому я искал пом в mvnrepository. Я импортировал следующий pom в моем проекте (azure -mgmt- postgresql все еще находится в бета-версии):

<!-- https://mvnrepository.com/artifact/com.microsoft.azure.postgresql.v2017_12_01/azure-mgmt-postgresql -->
<dependency>
    <groupId>com.microsoft.azure.postgresql.v2017_12_01</groupId>
    <artifactId>azure-mgmt-postgresql</artifactId>
    <version>1.0.0-beta-5</version>
</dependency>

В коде ниже приводится суть того, как я это сделал: у меня уже есть директор службы создан и имеет свою информацию со мной. Но любому, кто попытается это сделать, потребуются clientId, tenantId, clientSecret и subscriptionId с ними, как объяснил @Jim Xu.

// create the credentials object
ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(clientId, tenantId, clientSecret, AzureEnvironment.AZURE);

// build a rest client object configured with the credentials created above
RestClient restClient = new RestClient.Builder()
        .withBaseUrl(credentials.environment(), AzureEnvironment.Endpoint.RESOURCE_MANAGER)
        .withCredentials(credentials)
        .withSerializerAdapter(new AzureJacksonAdapter())
        .withResponseBuilderFactory(new AzureResponseBuilder.Factory())
        .withInterceptor(new ProviderRegistrationInterceptor(credentials))
        .withInterceptor(new ResourceManagerThrottlingInterceptor())
        .build();

// use the PostgreSQLManager
PostgreSQLManager psqlManager = PostgreSQLManager.authenticate(restClient, subscriptionId);
PagedList<Server> azurePsqlServers = psqlManager.servers().listByResourceGroup(resourceGrpName);
for(Server azurePsqlServer : azurePsqlServers) {
    System.out.println(azurePsqlServer.fullyQualifiedDomainName());
    System.out.println(azurePsqlServer.userVisibleState().toString());
    System.out.println(azurePsqlServer.sku().name());    
}

Примечание: класс Server относится к com.microsoft.azure.management.postgresql.v2017_12_01.Server

Также, если вы посмотрите на класс Azure, вы заметите, как они это делают внутри.

Для справки, вы можете использовать SqlServerManager sqlServerManager в класс Azure и посмотрите, как они его использовали и создали менеджер с проверкой подлинности на случай, если вы захотите использовать некоторые службы, которые все еще находятся в preview или beta.

0 голосов
/ 12 февраля 2020

Согласно моему тесту, мы можем использовать java sdk azure-mgmt-resources для реализации ваших потребностей. Например,

  1. Создание субъекта службы
az login
# it will create a service pricipal and assign a contributor rolen to the sp
az ad sp create-for-rbac -n "MyApp"  --scope "/subscriptions/<subscription id>" --sdk-auth

enter image description here

код
        String tenantId = "<the tenantId you copy >";
        String clientId = "<the clientId you copy>";
        String clientSecret= "<the clientSecre you copy>";
        String subscriptionId = "<the subscription id you copy>";
       ApplicationTokenCredentials creds = new 
          ApplicationTokenCredentials(clientId,domain,secret,AzureEnvironment.AZURE);
            RestClient restClient =new RestClient.Builder()
                                   .withBaseUrl(AzureEnvironment.AZURE, AzureEnvironment.Endpoint.RESOURCE_MANAGER)
                                   .withSerializerAdapter(new AzureJacksonAdapter())
                                   .withReadTimeout(150, TimeUnit.SECONDS)
                                   .withLogLevel(LogLevel.BODY)
                                   .withResponseBuilderFactory(new AzureResponseBuilder.Factory())
                                   .withCredentials(creds)
                                   .build();


            ResourceManager resourceClient= ResourceManager.authenticate(restClient).withSubscription(subscriptionId);
            ResourceManagementClientImpl  client=  resourceClient.inner();

            String filter="resourceType eq 'Microsoft.DBforPostgreSQL/servers'"; //The filter to apply on the operation
            String expand=null;//The $expand query parameter. You can expand createdTime and changedTime.For example, to expand both properties, use $expand=changedTime,createdTime
            Integer top =null;// The number of results to return. If null is passed, returns all resource groups.
            PagedList<GenericResourceInner> results= client.resources().list(filter, null,top);
            while (true) {
                for (GenericResourceInner resource : results.currentPage().items()) {

                    System.out.println(resource.id());
                    System.out.println(resource.name());
                    System.out.println(resource.type());
                    System.out.println(resource.location());
                    System.out.println(resource.sku().name());
                    System.out.println("------------------------------");
                }
                if (results.hasNextPage()) {
                    results.loadNextPage();
                } else {
                    break;
                }
            }

enter image description here

Кроме того, вы также можете использовать Azure REST API для реализации ваших потребностей. Для более подробной информации, пожалуйста, обратитесь к https://docs.microsoft.com/en-us/rest/api/resources/resources

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...