csharp/Microsoft.Azure.Databricks.Client/ClusterPoliciesApiClient.cs (96 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using Microsoft.Azure.Databricks.Client.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.Azure.Databricks.Client;
public class ClusterPoliciesApiClient : ApiClient, IClusterPoliciesApi
{
/// <summary>
/// Initializes a new instance of the <see cref="ClusterPoliciesApiClient"/> class.
/// </summary>
/// <param name="httpClient">The HTTP client.</param>
public ClusterPoliciesApiClient(HttpClient httpClient) : base(httpClient)
{
}
public async Task<Policy> Get(string policyId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/policies/clusters/get?policy_id={policyId}";
return await HttpGet<Policy>(this.HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<IEnumerable<Policy>> List(ListOrder sortOrder = ListOrder.DESC, PolicySortColumn sortBy = PolicySortColumn.POLICY_CREATION_TIME,
CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/policies/clusters/list?sort_order={sortOrder}&sort_column={sortBy}";
var policiesList = await HttpGet<JsonObject>(this.HttpClient, requestUri, cancellationToken)
.ConfigureAwait(false);
policiesList.TryGetPropertyValue("policies", out var policiesNode);
return policiesNode?.Deserialize<IEnumerable<Policy>>(Options) ?? Enumerable.Empty<Policy>();
}
public async Task<string> Create(string name, string definition, long? maxClustersPerUser = default, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/policies/clusters/create";
var clusterIdentifier =
await HttpPost<dynamic, JsonObject>(this.HttpClient, requestUri, new { name, definition, max_clusters_per_user = maxClustersPerUser }, cancellationToken)
.ConfigureAwait(false);
return clusterIdentifier["policy_id"]!.GetValue<string>();
}
public async Task<string> CreateWithPoiclyFamily(string name, string policyFamilyId, string policyFamilyDefinitionOverrides = default, long? maxClustersPerUser = default, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/policies/clusters/create";
var clusterIdentifier = await HttpPost<dynamic, JsonObject>(
this.HttpClient,
requestUri,
new { name, policy_family_id = policyFamilyId, policy_family_definition_overrides = policyFamilyDefinitionOverrides, max_clusters_per_user = maxClustersPerUser },
cancellationToken
).ConfigureAwait(false);
return clusterIdentifier["policy_id"]!.GetValue<string>();
}
public async Task Edit(string policyId, string name, string definition, long? maxClustersPerUser = null, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/policies/clusters/edit";
await HttpPost(this.HttpClient, requestUri, new { policy_id = policyId, name, definition, max_clusters_per_user = maxClustersPerUser }, cancellationToken)
.ConfigureAwait(false);
}
public async Task EditWithPoiclyFamily(string policyId, string name, string policyFamilyId, string policyFamilyDefinitionOverrides = null, long? maxClustersPerUser = null, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/policies/clusters/edit";
await HttpPost(
this.HttpClient,
requestUri,
new { policy_id = policyId, name, policy_family_id = policyFamilyId, policy_family_definition_overrides = policyFamilyDefinitionOverrides, max_clusters_per_user = maxClustersPerUser },
cancellationToken
).ConfigureAwait(false);
}
public async Task Delete(string policyId, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/policies/clusters/delete";
await HttpPost(this.HttpClient, requestUri, new { policy_id = policyId }, cancellationToken)
.ConfigureAwait(false);
}
public async Task<PolicyFamily> GetPolicyFamily(string id, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/policy-families/{id}";
return await HttpGet<PolicyFamily>(this.HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
}
public async Task<(IEnumerable<PolicyFamily>, string)> ListPolicyFamily(int maxResults = 20, string pageToken = default, CancellationToken cancellationToken = default)
{
var requestUri = $"{ApiVersion}/policy-families?max_results={maxResults}";
requestUri += string.IsNullOrEmpty(pageToken) ? string.Empty : $"&page_token={pageToken}";
var response = await HttpGet<JsonObject>(this.HttpClient, requestUri, cancellationToken).ConfigureAwait(false);
response.TryGetPropertyValue("policy_families", out var familiesNode);
response.TryGetPropertyValue("next_page_token", out var nextPageTokenNode);
var families = familiesNode?.Deserialize<IEnumerable<PolicyFamily>>(Options) ?? Enumerable.Empty<PolicyFamily>();
var nextPageToken = nextPageTokenNode?.GetValue<string>() ?? string.Empty;
return (families, nextPageToken);
}
public global::Azure.AsyncPageable<PolicyFamily> ListPolicyFamilyPageable(int pageSize, CancellationToken cancellationToken = default)
{
return new AsyncPageable<PolicyFamily>(async (pageToken) =>
{
var (policyFamilyList, nextPageToken) = await ListPolicyFamily(pageSize, pageToken, cancellationToken).ConfigureAwait(false);
return (policyFamilyList.ToList(), !string.IsNullOrEmpty(nextPageToken), nextPageToken);
});
}
}