public static async Task <AdTokenResponse> GetToken(Dictionary <string, string> envVars) { string adTokenEpUri = envVars[AzureAdEnvConstants.AZURE_AD_TOKEN_EP] + "/" + envVars[AzureAdEnvConstants.AZURE_AD_TENANT_ID] + "/oauth2/token"; Dictionary <string, string> cred = new Dictionary <string, string>(); cred.Add("grant_type", envVars[AzureAdEnvConstants.OAUTH_GRANT_TYPE]); cred.Add("client_id", envVars[AzureAdEnvConstants.AZURE_SP_CLIENT_ID]); cred.Add("client_secret", envVars[AzureAdEnvConstants.AZURE_SP_CLIENT_SECRET]); cred.Add("resource", envVars[AzureAdEnvConstants.AZURE_SP_APP_ID_URI]); HttpResponseMessage response = await client.PostAsync(new Uri(adTokenEpUri), new FormUrlEncodedContent(cred)); HttpStatusCode respCode = response.StatusCode; if (respCode != HttpStatusCode.OK) { throw new HttpRequestException(string.Format("AD Token request failed. Received HTTP status code: {0} ({1})", (int)respCode, respCode)); } AdTokenResponse token = await JsonSerializer.DeserializeAsync <AdTokenResponse>(await response.Content.ReadAsStreamAsync()); return(token); }
// public static async Task Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log) public static async Task Run([TimerTrigger("%VmssTriggerSchedule%")] TimerInfo myTimer, ILogger log) { log.LogInformation($"***** AksVmssScaleTrigger - Start Time: {DateTime.Now}"); Dictionary <string, string> envVars = new Dictionary <string, string>(); new ParseAzureADInputs().GetEnvVars(ref envVars); envVars.Add(AzureAdEnvConstants.OAUTH_GRANT_TYPE, "client_credentials"); string adTokenEpUri = envVars[AzureAdEnvConstants.AZURE_AD_TOKEN_EP] + "/" + envVars[AzureAdEnvConstants.AZURE_AD_TENANT_ID] + "/oauth2/token"; log.LogInformation($"***** AksVmssScaleTrigger - AD Endpoint URI: {adTokenEpUri}"); AdTokenResponse token = await AdTokenFactory.GetToken(envVars); log.LogInformation($"***** AksVmssScaleTrigger - Access Token: {token.AccessToken}"); new ParseAzureInputs().GetEnvVars(ref envVars); new ParseAzureVMssInputs().GetEnvVars(ref envVars); RestApiRequest request = new RestApiRequest(); try { /* request.AzureEndPoint = * string.Format(AzureEnvConstants.AZURE_MGMT_API_EP,subId,rgName) + * "Microsoft.Compute/virtualMachineScaleSets?api-version=" + vmssVersion; */ request.AzureEndPoint = string.Format( AzureEnvConstants.AZURE_MGMT_API_EP, envVars[AzureEnvConstants.AZURE_SUBSCRIPTION_ID], envVars[AzureEnvConstants.AZURE_RES_GROUP_NAME]) + "Microsoft.Compute/virtualMachineScaleSets/" + envVars[AzureVMssConstants.AZURE_VMSS_NAME] + string.Format( "/{0}?api-version={1}", envVars[AzureVMssConstants.AZURE_VMSS_ACTION], envVars[AzureVMssConstants.AZURE_VMSS_API_VER]); log.LogInformation($"***** AksVmssScaleTrigger - Azure API URI: {request.AzureEndPoint}"); request.ReqHeaders.Add("Authorization", string.Format("Bearer {0}", token.AccessToken)); IRestApiOperations vmssApi = new AzVmssApiOperations(); // RestApiResponse response = await vmssApi.ExecuteGet(request); RestApiResponse response = await vmssApi.ExecutePost(request); if (!string.IsNullOrEmpty(response.ReasonPhrase)) { throw new ApiOperationException(string.Format("Azure REST API call failed. Received HTTP status code: {0} ({1}), Response: {2}", (int)response.StatusCode, response.ReasonPhrase, response.Response)); } log.LogInformation($"***** AksVmssScaleTrigger - API Response status: {response.StatusCode}, Response: {response.Response}"); } catch (Exception exp) // Catch HTTP Exceptions - Server down, connection refused ... { log.LogError($"***** AksVmssScaleTrigger - Encountered exception: {exp}"); }; log.LogInformation($"***** AksVmssScaleTrigger - End Time: {DateTime.Now}"); }