mirror of
https://dev.azure.com/effectory/Survey%20Software/_git/Cloud%20Engineering
synced 2026-02-27 18:52:18 +01:00
Added Creatondate consoleapp and tagging policy
This commit is contained in:
334
ConsoleApps/.gitignore
vendored
Normal file
334
ConsoleApps/.gitignore
vendored
Normal file
@@ -0,0 +1,334 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# Bicep output
|
||||
Authorization.Deploy/authorization.json
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
#**/Properties/launchSettings.json
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
25
ConsoleApps/AzureRestApi/AzureRestApi.sln
Normal file
25
ConsoleApps/AzureRestApi/AzureRestApi.sln
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.1.32328.378
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureRestApi", "AzureRestApi\AzureRestApi.csproj", "{DCEBAB23-4E5B-4FBE-9752-EC9C22E5C394}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{DCEBAB23-4E5B-4FBE-9752-EC9C22E5C394}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DCEBAB23-4E5B-4FBE-9752-EC9C22E5C394}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DCEBAB23-4E5B-4FBE-9752-EC9C22E5C394}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DCEBAB23-4E5B-4FBE-9752-EC9C22E5C394}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {9F84ED05-3BCF-4BA7-B4ED-FEF688F8A2D0}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
26
ConsoleApps/AzureRestApi/AzureRestApi/AzureRestApi.csproj
Normal file
26
ConsoleApps/AzureRestApi/AzureRestApi/AzureRestApi.csproj
Normal file
@@ -0,0 +1,26 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Azure.Identity" Version="1.6.0" />
|
||||
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.3.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="5.2.9" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="appsettings.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,9 @@
|
||||
using AzureRestApi.Models.Resources;
|
||||
|
||||
namespace AzureRestApi.Models.Api
|
||||
{
|
||||
public class ResourcesResponse
|
||||
{
|
||||
public List<Resource>? value { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using AzureRestApi.Models.Resources;
|
||||
|
||||
namespace AzureRestApi.Models.Api
|
||||
{
|
||||
public class SubscriptionResponse
|
||||
{
|
||||
public List<Subscription>? value { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using AzureRestApi.Models.Resources;
|
||||
|
||||
namespace AzureRestApi.Models.Api
|
||||
{
|
||||
public class TagProperties
|
||||
{
|
||||
public TagTags properties { get; set; } = new TagTags();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
namespace AzureRestApi.Models.Resources
|
||||
{
|
||||
public class Resource
|
||||
{
|
||||
public string? id { get; set; }
|
||||
public string? name { get; set; }
|
||||
public string? type { get; set; }
|
||||
public string? location { get; set; }
|
||||
public string? createdTime { get; set; }
|
||||
public string? changedTime { get; set; }
|
||||
public Dictionary<string, string> tags { get; set; } = new Dictionary<string, string>();
|
||||
|
||||
public string? CreatedOn
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(createdTime))
|
||||
{
|
||||
return changedTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
return createdTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
namespace AzureRestApi.Models.Resources
|
||||
{
|
||||
public class Subscription
|
||||
{
|
||||
public string? id { get; set; }
|
||||
public string? authorizationSource { get; set; }
|
||||
public string? subscriptionId { get; set; }
|
||||
public string? tenantId { get; set; }
|
||||
public string? displayName { get; set; }
|
||||
public string? state { get; set; }
|
||||
|
||||
public bool Enabled
|
||||
{
|
||||
get
|
||||
{
|
||||
return state == "Enabled";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace AzureRestApi.Models.Resources
|
||||
{
|
||||
public class TagTags
|
||||
{
|
||||
public Dictionary<string, string> tags { get; set; } = new Dictionary<string, string>();
|
||||
}
|
||||
}
|
||||
8
ConsoleApps/AzureRestApi/AzureRestApi/Models/Settings.cs
Normal file
8
ConsoleApps/AzureRestApi/AzureRestApi/Models/Settings.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace AzureRestApi.Models
|
||||
{
|
||||
public class Settings
|
||||
{
|
||||
public string KeyVaultName { get; set; }
|
||||
public string AzureTenantId { get; set; }
|
||||
}
|
||||
}
|
||||
38
ConsoleApps/AzureRestApi/AzureRestApi/Program.cs
Normal file
38
ConsoleApps/AzureRestApi/AzureRestApi/Program.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using AzureRestApi.Models;
|
||||
using AzureRestApi.Repositories;
|
||||
using AzureRestApi.Services;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace AzureRestApi
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static Task Main(string[] args) =>
|
||||
CreateHostBuilder(args).Build().RunAsync();
|
||||
|
||||
static IHostBuilder CreateHostBuilder(string[] args) =>
|
||||
Host.CreateDefaultBuilder(args)
|
||||
.ConfigureServices((builder, services) =>
|
||||
{
|
||||
IConfiguration config = new ConfigurationBuilder()
|
||||
.AddJsonFile("appsettings.json")
|
||||
.AddEnvironmentVariables()
|
||||
.Build();
|
||||
|
||||
Settings settings = config.GetRequiredSection("Settings").Get<Settings>();
|
||||
|
||||
services.AddSingleton<AccessTokenRepository>();
|
||||
services.AddSingleton(settings);
|
||||
|
||||
services.AddHttpClient<AzureSubscriptionRepository>();
|
||||
services.AddHttpClient<AzureResourceRepository>();
|
||||
services.AddHttpClient<AzureTagRepository>();
|
||||
|
||||
services.AddScoped<CreatedOnDateService>();
|
||||
|
||||
services.AddHostedService<OptionService>();
|
||||
} );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using Azure.Identity;
|
||||
using Azure.Security.KeyVault.Secrets;
|
||||
using AzureRestApi.Models;
|
||||
using Microsoft.IdentityModel.Clients.ActiveDirectory;
|
||||
|
||||
namespace AzureRestApi.Repositories
|
||||
{
|
||||
public class AccessTokenRepository
|
||||
{
|
||||
private readonly Settings _settings;
|
||||
private string? _accessToken;
|
||||
|
||||
public AccessTokenRepository(Settings settings)
|
||||
{
|
||||
_settings = settings;
|
||||
}
|
||||
|
||||
public async Task<string> GetAccessToken()
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(_accessToken)) return _accessToken;
|
||||
|
||||
var keyvaultUri = "https://" + _settings.KeyVaultName + ".vault.azure.net";
|
||||
var credential = new DefaultAzureCredential();
|
||||
var client = new SecretClient(new Uri(keyvaultUri), credential);
|
||||
var clientId = (await client.GetSecretAsync("ClientID")).Value.Value;
|
||||
var clientSecret = (await client.GetSecretAsync("ClientSecret")).Value.Value;
|
||||
|
||||
ClientCredential cc = new(clientId, clientSecret);
|
||||
var context = new AuthenticationContext("https://login.microsoftonline.com/" + _settings.AzureTenantId);
|
||||
var result = context.AcquireTokenAsync("https://management.azure.com/", cc);
|
||||
if (result == null)
|
||||
{
|
||||
throw new InvalidOperationException("Failed to obtain the Access token");
|
||||
}
|
||||
_accessToken = result.Result.AccessToken;
|
||||
|
||||
return _accessToken;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using AzureRestApi.Models.Api;
|
||||
using AzureRestApi.Models.Resources;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace AzureRestApi.Repositories
|
||||
{
|
||||
public class AzureResourceRepository
|
||||
{
|
||||
private readonly HttpClient _httpClient;
|
||||
private readonly AccessTokenRepository _accessTokenRepository;
|
||||
|
||||
public AzureResourceRepository(HttpClient httpClient, AccessTokenRepository accessTokenRepository)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_accessTokenRepository = accessTokenRepository;
|
||||
}
|
||||
|
||||
public async Task<List<Resource>?> GetAllResources(string subscriptionId)
|
||||
{
|
||||
// GET https://management.azure.com/subscriptions/{subscriptionId}/resources?$filter={$filter}&$expand={$expand}&$top={$top}&api-version=2021-04-01
|
||||
var accessToken = await _accessTokenRepository.GetAccessToken();
|
||||
var uri = new Uri("https://management.azure.com/subscriptions/" + subscriptionId + "/resources?$expand=createdTime,changedTime&api-version=2021-04-01");
|
||||
|
||||
HttpRequestMessage request = new(HttpMethod.Get, uri);
|
||||
request.Headers.Accept.Clear();
|
||||
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
|
||||
|
||||
var response = await _httpClient.SendAsync(request).ConfigureAwait(false);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
|
||||
|
||||
return JsonSerializer.Deserialize<ResourcesResponse>(responseString)?.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using AzureRestApi.Models.Api;
|
||||
using AzureRestApi.Models.Resources;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace AzureRestApi.Repositories
|
||||
{
|
||||
public class AzureSubscriptionRepository
|
||||
{
|
||||
private readonly HttpClient _httpClient;
|
||||
private readonly AccessTokenRepository _accessTokenRepository;
|
||||
|
||||
public AzureSubscriptionRepository(HttpClient httpClient, AccessTokenRepository accessTokenRepository)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_accessTokenRepository = accessTokenRepository;
|
||||
}
|
||||
|
||||
public async Task<List<Subscription>?> GetAllSubscriptions()
|
||||
{
|
||||
// GET https://management.azure.com/subscriptions?api-version=2020-01-01
|
||||
|
||||
var accessToken = await _accessTokenRepository.GetAccessToken();
|
||||
var uri = new Uri("https://management.azure.com/subscriptions?api-version=2020-01-01");
|
||||
|
||||
HttpRequestMessage request = new(HttpMethod.Get, uri);
|
||||
request.Headers.Accept.Clear();
|
||||
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
|
||||
|
||||
var response = await _httpClient.SendAsync(request).ConfigureAwait(false);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
|
||||
|
||||
return JsonSerializer.Deserialize<SubscriptionResponse>(responseString)?.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
using AzureRestApi.Models.Api;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace AzureRestApi.Repositories
|
||||
{
|
||||
public class AzureTagRepository
|
||||
{
|
||||
private readonly HttpClient _httpClient;
|
||||
private readonly AccessTokenRepository _accessTokenRepository;
|
||||
private readonly ILogger<AzureTagRepository> _logger;
|
||||
|
||||
public AzureTagRepository(HttpClient httpClient, AccessTokenRepository accessTokenRepository, ILogger<AzureTagRepository> logger)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_accessTokenRepository = accessTokenRepository;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task<bool> SetTag(string scope, string name, string value)
|
||||
{
|
||||
// PUT https://management.azure.com/{scope}/providers/Microsoft.Resources/tags/default?api-version=2021-04-01
|
||||
var result = true;
|
||||
var accessToken = await _accessTokenRepository.GetAccessToken();
|
||||
var uri = new Uri("https://management.azure.com/" + scope + "/providers/Microsoft.Resources/tags/default?api-version=2021-04-01");
|
||||
|
||||
var tagProperties = new TagProperties();
|
||||
tagProperties.properties.tags.Add(name, value);
|
||||
var body = JsonSerializer.Serialize(tagProperties);
|
||||
|
||||
HttpRequestMessage request = new(HttpMethod.Put, uri);
|
||||
request.Headers.Accept.Clear();
|
||||
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
|
||||
request.Content = new StringContent(body, Encoding.UTF8, "application/json");
|
||||
|
||||
var response = await _httpClient.SendAsync(request).ConfigureAwait(false);
|
||||
try
|
||||
{
|
||||
response.EnsureSuccessStatusCode();
|
||||
await response.Content.ReadAsStringAsync().ConfigureAwait(false);
|
||||
}
|
||||
catch
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
using AzureRestApi.Repositories;
|
||||
|
||||
namespace AzureRestApi.Services
|
||||
{
|
||||
public class CreatedOnDateService
|
||||
{
|
||||
private const string TagName = "CreatedOnDate";
|
||||
private readonly AzureSubscriptionRepository _azureSubscriptionRepository;
|
||||
private readonly AzureResourceRepository _azureResourceRepository;
|
||||
private readonly AzureTagRepository _azureTagRepository;
|
||||
|
||||
public CreatedOnDateService(AzureSubscriptionRepository azureSubscriptionRepository, AzureResourceRepository azureResourceRepository, AzureTagRepository azureTagRepository)
|
||||
{
|
||||
_azureSubscriptionRepository = azureSubscriptionRepository;
|
||||
_azureResourceRepository = azureResourceRepository;
|
||||
_azureTagRepository = azureTagRepository;
|
||||
}
|
||||
|
||||
public async Task SetCreatedOnDateTags(bool skipDone = true)
|
||||
{
|
||||
var defaultForeGround = Console.ForegroundColor;
|
||||
Console.WriteLine("==============================================");
|
||||
Console.WriteLine("Setting CreatedOnDateTags");
|
||||
Console.WriteLine("==============================================");
|
||||
|
||||
var subscriptions = await _azureSubscriptionRepository.GetAllSubscriptions();
|
||||
if (subscriptions == null || !subscriptions.Any()) throw new Exception("No subscriptions found");
|
||||
subscriptions = subscriptions.Where(s => s.Enabled && !string.IsNullOrWhiteSpace(s.subscriptionId)).ToList();
|
||||
if (!subscriptions.Any()) throw new Exception("No subscriptions found");
|
||||
|
||||
foreach (var subscription in subscriptions)
|
||||
{
|
||||
Console.WriteLine("----------------------------------------------");
|
||||
Console.WriteLine(subscription.displayName);
|
||||
Console.WriteLine("----------------------------------------------");
|
||||
|
||||
var resources = await _azureResourceRepository.GetAllResources(subscription.subscriptionId);
|
||||
if (resources == null || !resources.Any()) continue;
|
||||
resources = resources.Where(r => !string.IsNullOrWhiteSpace(r.CreatedOn) && !string.IsNullOrWhiteSpace(r.id)).ToList();
|
||||
|
||||
if (skipDone)
|
||||
{
|
||||
resources = resources.Where(r => !r.tags.Any(t => t.Key == TagName && !string.IsNullOrWhiteSpace(t.Value))).ToList();
|
||||
}
|
||||
|
||||
foreach (var resource in resources)
|
||||
{
|
||||
Console.Write(resource.id);
|
||||
var tagSuccess = await _azureTagRepository.SetTag(resource.id, TagName, resource.CreatedOn);
|
||||
|
||||
Console.ForegroundColor = tagSuccess ? ConsoleColor.DarkGreen : ConsoleColor.Red;
|
||||
Console.Write(tagSuccess ? " V" : " X");
|
||||
Console.ForegroundColor = defaultForeGround;
|
||||
|
||||
Console.WriteLine();
|
||||
}
|
||||
}
|
||||
Console.WriteLine("==============================================");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AzureRestApi.Services
|
||||
{
|
||||
public class OptionService : IHostedService
|
||||
{
|
||||
private readonly ILogger<OptionService> _logger;
|
||||
private readonly CreatedOnDateService _createdOnDateService;
|
||||
|
||||
public OptionService(ILogger<OptionService> logger, CreatedOnDateService createdOnDateService)
|
||||
{
|
||||
_logger = logger;
|
||||
_createdOnDateService = createdOnDateService;
|
||||
}
|
||||
|
||||
public async Task StartAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
int userInput = 0;
|
||||
bool validatedInput = false;
|
||||
while (!validatedInput)
|
||||
{
|
||||
Console.WriteLine("================================================================");
|
||||
Console.WriteLine("Cloud Egineering Console App");
|
||||
Console.WriteLine("================================================================");
|
||||
Console.WriteLine("-- This couldn't be done with Powershell, so here we are.... ");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Select what you want to do:");
|
||||
Console.WriteLine("1. Update missing CreatedOnDate tags.");
|
||||
Console.WriteLine("0. Exit.");
|
||||
|
||||
string? result = Console.ReadLine();
|
||||
bool parsed = int.TryParse(result, out userInput);
|
||||
|
||||
validatedInput = (parsed && (new[] { 1, 0 }).Contains(userInput));
|
||||
|
||||
if (!validatedInput)
|
||||
{
|
||||
Console.WriteLine("Please enter a valid choice");
|
||||
}
|
||||
}
|
||||
|
||||
if (userInput == 1)
|
||||
{
|
||||
await _createdOnDateService.SetCreatedOnDateTags(true);
|
||||
}
|
||||
|
||||
Console.WriteLine("Bye.");
|
||||
}
|
||||
|
||||
public Task StopAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
13
ConsoleApps/AzureRestApi/AzureRestApi/appsettings.json
Normal file
13
ConsoleApps/AzureRestApi/AzureRestApi/appsettings.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"Settings": {
|
||||
"KeyVaultName": "consoleapp",
|
||||
"AzureTenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Warning",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "None"
|
||||
}
|
||||
}
|
||||
}
|
||||
8
ConsoleApps/AzureRestApi/ConsoleApp1/ConsoleApp1.csproj
Normal file
8
ConsoleApps/AzureRestApi/ConsoleApp1/ConsoleApp1.csproj
Normal file
@@ -0,0 +1,8 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
12
ConsoleApps/AzureRestApi/ConsoleApp1/Program.cs
Normal file
12
ConsoleApps/AzureRestApi/ConsoleApp1/Program.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
|
||||
namespace ConsoleApp1
|
||||
{
|
||||
internal class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Hello World!");
|
||||
}
|
||||
}
|
||||
}
|
||||
846
ConsoleApps/x.json
Normal file
846
ConsoleApps/x.json
Normal file
@@ -0,0 +1,846 @@
|
||||
{
|
||||
"value": [
|
||||
{
|
||||
"id": "/subscriptions/0c50e758-0cfb-4d35-9d52-b39ba918ce30",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "0c50e758-0cfb-4d35-9d52-b39ba918ce30",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Team Yellow",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/0e4ba075-f7d9-4f31-860c-3cb8673f1f08",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "0e4ba075-f7d9-4f31-860c-3cb8673f1f08",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Customer Data",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/0ecf52e9-a2b1-4938-b0b1-f7c1878de642",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "0ecf52e9-a2b1-4938-b0b1-f7c1878de642",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "MyEffectory Project",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/0f35097b-19f1-4baf-b548-f31bc71eccea",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "0f35097b-19f1-4baf-b548-f31bc71eccea",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Logit Production",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/14c2354d-45a9-4e0f-98ff-be58cdbcddc7",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "14c2354d-45a9-4e0f-98ff-be58cdbcddc7",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "EffectoryCore",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/14f042a9-182f-4f09-9df7-d9ebf3eb9968",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "14f042a9-182f-4f09-9df7-d9ebf3eb9968",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription (Maria)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/1ab2120c-947c-40e2-96c7-460d3e9659de",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "1ab2120c-947c-40e2-96c7-460d3e9659de",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Int-Aut Productie",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/1c406a29-e1ad-4be0-849a-9364009af505",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "1c406a29-e1ad-4be0-849a-9364009af505",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Corporate Marketing Campaigns Testing",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDNDevTest_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/2372e452-d101-4fb1-b9ed-664b8cd68e40",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [
|
||||
{
|
||||
"tenantId": "2f4a9838-26b7-47ee-be60-ccc1fdec5953"
|
||||
}
|
||||
],
|
||||
"subscriptionId": "2372e452-d101-4fb1-b9ed-664b8cd68e40",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Data warehouse production",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/23e654c9-ed9d-424e-b69a-6a0be116a3ce",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "23e654c9-ed9d-424e-b69a-6a0be116a3ce",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Dev/Test Hans",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDNDevTest_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/27bd000b-3dfb-49c5-afba-be437ecb188c",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "27bd000b-3dfb-49c5-afba-be437ecb188c",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Premium met MSDN (Ramon)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/2c20594a-bb4e-4103-8e3c-017f6ca01431",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "2c20594a-bb4e-4103-8e3c-017f6ca01431",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Participant Invite Import",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/2e7c2d8f-b022-4136-9ea3-81f6daece91b",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "2e7c2d8f-b022-4136-9ea3-81f6daece91b",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription ( Ziyad )",
|
||||
"state": "Disabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/30ce4e64-4299-4b93-91b8-4c953f63678e",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "30ce4e64-4299-4b93-91b8-4c953f63678e",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Cloud Engineering",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/3190b0fd-4a66-4636-a204-5b9f18be78a6",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "3190b0fd-4a66-4636-a204-5b9f18be78a6",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Authorization",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/31b26889-ee10-480e-be6a-da5d8a58f19f",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "31b26889-ee10-480e-be6a-da5d8a58f19f",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "HR",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/31cb867e-4cb5-47d3-b12a-7692cf746376",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "31cb867e-4cb5-47d3-b12a-7692cf746376",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Orange dev/test",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDNDevTest_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/33fc60b1-a502-44da-acf5-b9fe22b1ea6f",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "33fc60b1-a502-44da-acf5-b9fe22b1ea6f",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Premium met MSDN (Erik AD)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/4db5ca42-c8f1-4392-a9fc-96937874ef74",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "4db5ca42-c8f1-4392-a9fc-96937874ef74",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Survey Software Shared Infrastructure",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/4f5c19be-141c-411b-bf83-6133298dbe7c",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "4f5c19be-141c-411b-bf83-6133298dbe7c",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription (Erik)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/511e74de-3ad1-4aa1-bc74-b6b2833a8551",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "511e74de-3ad1-4aa1-bc74-b6b2833a8551",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Enterprise Subscription (Jurjen)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/54794e27-b714-4346-81bc-05eae7ccb5a5",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "54794e27-b714-4346-81bc-05eae7ccb5a5",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Question Management",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/56378832-ba51-4f4f-99c1-cff97c244e8e",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "56378832-ba51-4f4f-99c1-cff97c244e8e",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription (Reinier)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/5df09d5a-b1c1-48b8-b72c-ebe9b27e0e0c",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [
|
||||
{
|
||||
"tenantId": "2f4a9838-26b7-47ee-be60-ccc1fdec5953"
|
||||
}
|
||||
],
|
||||
"subscriptionId": "5df09d5a-b1c1-48b8-b72c-ebe9b27e0e0c",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Survey Software Testing",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDNDevTest_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/5e1ac47a-0729-4546-b93f-469d92c5ac4a",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "5e1ac47a-0729-4546-b93f-469d92c5ac4a",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Data warehouse dev/test",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDNDevTest_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/5e6326e8-f587-440a-acdc-3bf7ff5be9cf",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "5e6326e8-f587-440a-acdc-3bf7ff5be9cf",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "VS Pro Sub (Ali)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/602c0bff-e517-4f7c-966b-3664928cbbce",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "602c0bff-e517-4f7c-966b-3664928cbbce",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription (Johannes Ouendag)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/632010d6-01a6-4b0b-b6ff-9fab7f8a4bcf",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "632010d6-01a6-4b0b-b6ff-9fab7f8a4bcf",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional - Mitchell",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/63cc34fe-1aea-4cef-8402-5869c9fff78b",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "63cc34fe-1aea-4cef-8402-5869c9fff78b",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Dynamics CRM",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/63e30762-4d09-4b15-8104-aac48716c7bf",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "63e30762-4d09-4b15-8104-aac48716c7bf",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription (Aris)",
|
||||
"state": "Disabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/6e2b45e4-5e7b-4628-8827-ec44e23d2f6b",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "6e2b45e4-5e7b-4628-8827-ec44e23d2f6b",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Participant Integration",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/70cae949-5013-4c40-b718-911dbf9b9a80",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "70cae949-5013-4c40-b718-911dbf9b9a80",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Participant Core",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/72474dd4-e94a-4b6e-bb98-3d6cc9884ff4",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "72474dd4-e94a-4b6e-bb98-3d6cc9884ff4",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional (Johannes Oenema)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/750d0421-da63-42fb-9f89-74aeb5dfe05b",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "750d0421-da63-42fb-9f89-74aeb5dfe05b",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Cloud Engineering Dev/Test",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDNDevTest_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/7cc36153-a8a4-4566-86bc-fec178ed176a",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "7cc36153-a8a4-4566-86bc-fec178ed176a",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Hierarchies Dev/Test",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDNDevTest_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/7feeb150-9ee0-4aea-992a-5f3a89d933e6",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "7feeb150-9ee0-4aea-992a-5f3a89d933e6",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Results",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/80eaaecd-37af-4e15-9384-d5729b096740",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "80eaaecd-37af-4e15-9384-d5729b096740",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "EA Logit Testing",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/86945e42-fa5a-4bbc-948f-3f5407f15d3e",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "86945e42-fa5a-4bbc-948f-3f5407f15d3e",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Hierarchies",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/8bc7d396-c37f-4ecd-9041-5c1e0b717ce9",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "8bc7d396-c37f-4ecd-9041-5c1e0b717ce9",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription (Tiago)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/8c282de4-a7df-458e-b151-e10ca7b49966",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "8c282de4-a7df-458e-b151-e10ca7b49966",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "My Effectory Project settings",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/91dcc05c-adec-43b7-9ec9-495f195f3df5",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "91dcc05c-adec-43b7-9ec9-495f195f3df5",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/976c455b-3922-4c4e-b6d3-fcd19432cac9",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "976c455b-3922-4c4e-b6d3-fcd19432cac9",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional (Thimo)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/a134faf1-7a89-4f2c-8389-06d00bd5e2a7",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [
|
||||
{
|
||||
"tenantId": "2f4a9838-26b7-47ee-be60-ccc1fdec5953"
|
||||
}
|
||||
],
|
||||
"subscriptionId": "a134faf1-7a89-4f2c-8389-06d00bd5e2a7",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Survey Software Production",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/a6230840-431c-4445-b3ec-41400d584eb2",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "a6230840-431c-4445-b3ec-41400d584eb2",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription (Ekaterina)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/ab77ee05-80f0-4d16-9be3-bc02a5f0455f",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "ab77ee05-80f0-4d16-9be3-bc02a5f0455f",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Int-Aut Testing",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDNDevTest_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/b5676abc-2355-4a1a-8aab-6c7d33dead1a",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "b5676abc-2355-4a1a-8aab-6c7d33dead1a",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Premium met MSDN (Sebas)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/b9652347-25d1-43ce-aa63-33f2826816d8",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "b9652347-25d1-43ce-aa63-33f2826816d8",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription (Khaled)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/ba6bde9e-8690-4c49-a3e1-1576c8ca8ab3",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "ba6bde9e-8690-4c49-a3e1-1576c8ca8ab3",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/baed3117-d2f3-4289-977d-6d4429d9e983",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "baed3117-d2f3-4289-977d-6d4429d9e983",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Team Yellow Dev/Test",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDNDevTest_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/c23331b3-60ac-447c-a978-b9572c577bd9",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "c23331b3-60ac-447c-a978-b9572c577bd9",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription ( Reza )",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/cce2448e-a3b1-493d-90a4-034828a005ab",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "cce2448e-a3b1-493d-90a4-034828a005ab",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Betalen naar gebruik",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "PayAsYouGo_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/dbbb7e6a-5fd3-4db5-bf73-bc940889c209",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "dbbb7e6a-5fd3-4db5-bf73-bc940889c209",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Corporate Website",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/e6daa42b-c939-4ef9-b384-c0cec82b7757",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "e6daa42b-c939-4ef9-b384-c0cec82b7757",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Hierarchy Invite Import",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/eec75831-812e-4b06-a7a4-ec28a5126238",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "eec75831-812e-4b06-a7a4-ec28a5126238",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Teamie Production",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/f17df03f-6856-4d4e-b7ce-67d3ccbfad2e",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "f17df03f-6856-4d4e-b7ce-67d3ccbfad2e",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional Subscription (Jurjen)",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/f612a7cd-5729-45e3-af34-3385b9eef7f4",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "f612a7cd-5729-45e3-af34-3385b9eef7f4",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Visual Studio Professional - Jimmy",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "MSDN_2014-09-01",
|
||||
"spendingLimit": "On"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/f929a33f-3956-4f73-82d5-9c52f272ff0f",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "f929a33f-3956-4f73-82d5-9c52f272ff0f",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Corporate Marketing Campaigns Production",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/f9ab522b-4895-492d-b8a8-ca6e1f60c2a8",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "f9ab522b-4895-492d-b8a8-ca6e1f60c2a8",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Participant Exchange",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "/subscriptions/fced11a2-8ba7-4596-9ff4-de8b47713c48",
|
||||
"authorizationSource": "RoleBased",
|
||||
"managedByTenants": [],
|
||||
"subscriptionId": "fced11a2-8ba7-4596-9ff4-de8b47713c48",
|
||||
"tenantId": "e9792fd7-4044-47e7-a40d-3fba46f1cd09",
|
||||
"displayName": "Result Integration",
|
||||
"state": "Enabled",
|
||||
"subscriptionPolicies": {
|
||||
"locationPlacementId": "Public_2014-09-01",
|
||||
"quotaId": "EnterpriseAgreement_2014-09-01",
|
||||
"spendingLimit": "Off"
|
||||
}
|
||||
}
|
||||
],
|
||||
"count": {
|
||||
"type": "Total",
|
||||
"value": 59
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user