How Can We Help?

Cloudockit JSON File Format Description

The purpose of this document is to explain the Cloudockit Format.

This format is returned by Cloudockit in a standardized way between all Cloud Providers.

It includes, all the objects scanned by Cloudockit, all the links, types & metadata related to those objects.

It is composed of the following three main sections:

  • Properties: contains the generic properties like Shema Version and the filters used during the document generation
  • Objects: contains the list of all objects discovered by Cloudockit during the scanning process
  • Metadata: contains all the structure and metadata around Objects. Typically, this include the object Types, Platform, Compliance Rules…

Properties Section

This section contains the generic properties like Schema Version and the filters used during the document generation. The list of properties contained in this section is as follow:

SchemaVersionVersion of the current schema
GeneratorAssemblyVersionVersion of Cloudockit Generator used to generate the file
GenerationDateUTCDate of Generation of the file

Objects Section

This section contains the list of all objects discovered by Cloudockit during the scanning process.

Each object has the following properties:

IdUnique Identifier of the object. This will be stable from one generation to another. This is typically extracted from the Cloud environment or auto generated by Cloudockit if it does not exist.
NameDisplayed Name of the object
UriResource Identifier that comes from the Cloud Provider (Resource Uri in Azure, Arn in AWS and SelfLink in GCP)
EnvironmentIDThis is the Azure Subscription ID or AWS Account ID or GCP Project ID.
EnvironmentNameThis is the Azure Subscription Name or AWS Account Alias or GCP Project Name.

This is de-Normalized value for ease-of-access as this could be retrieved using the ID and the Metadata section of the document.

TypeIDType of the object. It refers to the Types section of the Metadata. For example, this is the ID of the type Azure Virtual Machine.
TypeNameType Name of the object. It refers to the Types section of the Metadata.

This is de-Normalized value for ease-of-access as this could be retrieved using the ID and the Metadata section of the document.

AttachedDocumentsList of documents generated for this specific object.

It includes (can change depending on the settings):

  • Extension
  • Filename
  • DisplayName
  • URL (where to get the document)
  • Content (if this is not through an URL, for example, inline HTML)

Example:

{
	"AttachedDocuments": [
		{
			"extension": "vsdx",
			"name": "thediagram.vsdx",
			"displayName": "Diagram",
			"url": "sotrage.azure.com/123/thediagram.vsdx",
			"content": null
		},
		{
			"extension": "docx",
			"name": "thedoc.docx",
			"displayName": "Documentation",
			"url": "sotrage.azure.com/123/thedoc.docx",
			"content": null
		},
		{
			"extension": "html",
			"name": "webpage.html",
			"displayName": "Web Page",
			"url": null,
			"content": "<body>the vm 789 ...</body>"
		}
	]
}
PropertiesThese are all the properties of the object.

Properties are basically key/value pairs with the name of the property (internal name, not display name) and the value. The actual display name of the property can be retrieved from the Metadata Section of the json file in the Types list.

Property value can also be arrays.

Example:

{
	"Properties": {
		"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/myfirstVM",
		"Name": "MyFirstVM",
		"AvailabilitySetName": "The availability set",
		"MaxDataDiskCount": "5",
		"NetworkInterfaces": [
			{
				"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/nic1",
				"Name": "Nic1",
				"PrivateIP": "10.10.0.2",
				"PublicIP": "11.10.0.2"
			},
			{
				"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/nic2",
				"Name": "Nic2",
				"PrivateIP": "20.10.0.2",
				"PublicIP": "21.10.0.2"
			}
		]
	}
}
LinksArray of links found for the object.

Each link contains the following properties:

  • sourceID: unique ID of the source object for the link
  • targetID: unique ID of the target object for the link
  • typeID: unique ID of the type. Refer the metadata section to get more information (Name…) from the typeID

Here is an example of Links collection:

{
	"Links": [
		{
			"sourceID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/myfirstVM",
			"targetID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/theVNET/theSubnet",
			"typeID": "Connection"
		},
		{
			"sourceID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1",
			"targetID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/myfirstVM",
			"typeID": "Aggregation"
		},
		{
			"sourceID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1",
			"targetID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/myfirstVM",
			"typeID": "Aggregation"
		}
	]
}
ComplianceRulesList of Compliance Rules IDs that are found for the object.

Refer to the metadata Section of the document to get all the details about the Rules from the ID.

Example:

{
"ComplianceRules": [
"CDK_AppServices_NotHttpsMandary"
]
}
RawDataForInternalUseOnlyInternal Use Only. Do not use that.

Metadata

This section contains all the structure and metadata around Objects. Typically, this include the object Types, Platform, Compliance Rules…

It is split in the following sub-section:

  • Categories (Categories_TBM, Categories_CDK): List of all Categories that are used to classify types
  • Types: List of all Types of Object (with inheritance between the objects)
  • LinkTypes: List of all Types of Links that can be defined between two objects
  • ComplianceRules: List of all Compliance Rules
  • Platforms: List of all Platform (Azure, AWS, GCP…) and their characteristics
  • Regions: List of all Regions
  • Regions: Details about Billing

Categories

Categories are used to classify the types defined in Cloudockit. Categories are hierarchical so a Category can have a ParentId Attribute which defines the hierarchy.

Each Category has the following attributes:

IdUnique Identifier of the Category
NameName (English) of the Category
TranslatedNameTranslations for the name
ParentIdNull if root, Parent ID otherwise
DescriptionTextual description of the meaning of the Category
CategoriesChild Categories

There can be multiple categories implemented in Cloudockit. Currently only the TBM Categories are supported (cf. https://tbmcouncil.jiveon.com/docs/DOC-7736 for more details). To support multiple categories, multiple Categories subsection with suffixes are used like Categories_TBM.

Example:

{
	"Categories_TBM": [
		{
			"Id": "Infrastructure",
			"Name": "Infrastructure",
			"TranslatedName": {
				"fr": "Infrastructure"
			},
			"ParentId": null,
			"Description": null
		},
		{
			"Id": "ComputeAndContainer",
			"Name": "Compute And Container",
			"TranslatedName": {
				"fr": "..."
			},
			"ParentId": "Infrastructure",
			"Description": null
		},
		{
			"Id": "Compute",
			"Name": "Compute",
			"TranslatedName": {
				"fr": "Compute"
			},
			"ParentId": "ComputeAndContainer",
			"Description": null
		}
	]
}

Types

In this section, all the types are defined with their properties, categories, template and other attributes.

The Types are hierarchical and a ParentId attribute is used to define the hierarchy.

Type are used for true inheritance like an Azure Virtual Machine that has some properties of a Virtual Machine. This is not used to define a similar classification like a Network Card and a Subnet that are two network components but completely different component. To indicate similar classification, the Categories should be used instead of Type Inheritance.

Each Type has the following attributes:

IdUnique Identifier of the Type
NameName of the Type
ParentIDNull if root, Parent ID otherwise
CategoryId_TBMId of the Category TBM (cf. previous section) where the Type is classified. This is suffixed to allow multiple categories (like TBM)
CategoryId_CDKId of the Category CDK (cf. previous section) where the Type is classified. This is suffixed to allow multiple categories (like CDK)
HTMLTemplateTemplate (format HTML) to display the documentation of this object type. It includes templating using HandleBar.
MDTemplateTemplate (format MD) to display the documentation of this object type. It includes templating using HandleBar.
DiagramIconMasterShapeNameMaster Shape Name in Visio Stencil that represent the object. Null if object is not displayed in Diagrams.
PictureBase64Base64 encoded picture that represent the object type graphically.
IsPhysicalObjectTrue if the object exists in the Cloud Platform (for example a Virtual Machine)

False if the object does not exist in the Cloud Platform (for example an Application that contains resources based on tag and that was automatically inferred)

IsTopLevelObjectThe object exists as a top-level object in the Cloud Provider. For example, a Virtual Network exist in Azure, but a Subnet is just inside the Virtual Network object.
PlatformIdId of the platform if the type only applies for a specific platform. For example, EC2 Instance type has PlatformId set to AWS.
PropertiesList of properties for the type.

The properties are specific to the type and parent type’s properties are not repeated in children properties. It means that a type full properties list is the merge of its properties and all the parents’ properties.

Each Property defines the following attributes:

  • Id: Id of the field (internal Cloudockit Name)
  • Binding: Internal Binding to the Native Platform Object model
  • Type: Property type. Currently the two following types are supported
    • String
    • List
  • Display Name: Display name in plain English
  • TranslatedDisplayName: List of display names in other languages
  • Items: For list properties only. It contains the definition of the Items. This are again properties (nested values)

Example:

{
	"Name": "Azure Subnet",
	"Id": "AzureSubnet",
	"ParentId": "Subnet",
	"CategoryId_TBM": "CDKCategoryTBM_InfrastructureServices_Network_VirtualPrivateNetwork",
	"CategoryLevel1_TBM": "Infrastructure Services ",
	"CategoryLevel2_TBM": "Network",
	"CategoryLevel3_TBM": "Virtual Private Network",
	"DiagramIconMasterShapeName": "AzSubnet",
	"PictureBase64": null,
	"IsTopLevelObject": null,
	"IsPhysicalObject": null,
	"HTMLTemplate": "<div><h2>Subnet {{Name}}</h2> Adress Prefix is {{AddressPrefix}}</div>",
	"MDTemplate": "#Subnet {{Name}} Adress Prefix is {{AddressPrefix}}",
	"PlatformId": "Azure",
	"Properties": [
		{
			"Id": "IpConfigurations",
			"Binding": "IpConfigurations",
			"DisplayName": "IP Configurations",
			"Children": [
				{
					"Properties": [
						{
							"Id": "Name",
							"Binding": "Name",
							"DisplayName": "Name"
						},
						{
							"Id": "PublicIP",
							"Binding": "PublicIP",
							"DisplayName": "Public IP Address"
						},
						{
							"Id": "PrivateIPAddress",
							"Binding": "PrivateIPAddress",
							"DisplayName": "Private IP Address"
						}
					]
				}
			]
		}
	]
}

LinkTypes

Each LinkType has the following attributes:

IdUnique Identifier of the Link Type
DisplayNameDisplay Name
TranslatedDisplayNameTranslated Display Name
DescriptionShort description of the link type
FromToLabelText to use to show dependency from – to
ToFromLabelText to use to show dependency to – from
ExampleUse cases of this type of link

Example:

{
	"Id": "Generalization",
	"DisplayName": "Generalization",
	"TranslatedDisplayName": {
		"fr": "Généralisation"
	},
	"Description": "A generalization relationship indicates that a specialized (child) model element is based on a general (parent) model element",
	"TranslatedDescription": null,
	"FromToLabel": "is a generalization of",
	"TranslatedFromToLabel": null,
	"ToFromLabel": "is a specialisation of",
	"TranslatedToFromLabel": null,
	"Examples": [
		"A Virtual Machine is a generalization of an EC2 Instance."
	]
}

ComplianceRules

Each Compliance Rule has the following attributes:

IdUnique Identifier of the Rule
CodeInternal Code of the rule
DisplayNameDisplay Name
TranslatedDisplayNameTranslated Display Name
DescriptionShort description of the compliance rules
CriticityCriticity of the Rule (High, Medium, Low)
TypeType of the Rule (Security, Billing, BestPractices)
CategoryUser Defined Category
JsonTriggerTrigger of the rule (json definition)

Example:

{
	"Id": "CDK_AppServices_NotHttpsMandary",
	"DisplayName": "CDK AppServices NotHttpsMandary",
	"TranslatedDisplayName": null,
	"Description": "This rule ensure App Service is HTTPS configured",
	"Criticity": "High",
	"Type": "Security",
	"Category": "AppServices",
	"JsonTrigger": ""
}

Platforms

Each Platform has the following attributes:

IdUnique Identifier of the Platform
NameName of the Platform
DisplayNameDisplay Name
PictureBase64Picture Base 64 of the Logo of the Platform
SeeMoreAtHyperlink of the platform

Example:

{
	"Id": "Azure",
	"Name": "Azure",
	"PictureBase64": "",
	"SeeMoreAt": "https://azure.microsoft.com"
}

Regions

Each Region has the following attributes:

IdUnique Identifier of the Region
SystemNameName of the Region (internal Code of the Cloud Provider)
DisplayNameDisplay Name of the Region
PlatformIdId of the Platform where it belongs
LatitudeLatitude of the Region
LongitudeLongitude of the Region
IsoIso Code of the Country (2 letters)
Iso3Iso Code of the Country (3 letters)
ContinentContinent of the Region
CapitalCapital of the Region
CurrencyCodeCurrency of the Region

Annexes

Annex 1 – Sample JSON File

{
	"Properties": {
		"SchemaVersion": "2.0",
		"GeneratorAssemblyVersion": "20.0",
		"GenerationDateUTC": "2019-07-08T22:09:39.0896792+00:00",
		"GenerationDurationSeconds": "1200",
		"Settings": {}
	},
	"Objects": [
		{
			"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1",
			"Name": "Visual Studio Premium with MSDN - PASCALWANADOO",
			"EnvironmentID": "275ddf79-b240-44e7-9916-f24175b451b1",
			"EnvironmentName": "Visual Studio Premium with MSDN - PASCALWANADOO",
			"TypeID": "AzureSubscription",
			"TypeName": "Azure Subscription",
			"AttachedDocuments": [
				{
					"extension": "vsdx",
					"fileName": "globalDiagram.vsdx",
					"displayName": "Global Diagram",
					"url": "sotrage.azure.com/123/globalDiagram.vsdx",
					"content": null
				},
				{
					"extension": "vsdx",
					"name": "byLocationDiagram.vsdx",
					"displayName": "By Location Diagram",
					"url": "sotrage.azure.com/123/byLocationDiagram.vsdx",
					"content": null
				},
				{
					"extension": "docx",
					"name": "thedoc.docx",
					"displayName": "Documentation",
					"url": "sotrage.azure.com/123/thedoc.docx",
					"content": null
				}
			],
			"Properties": [
				{
					"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1",
					"Name": "Visual Studio Premium with MSDN - PASCALWANADOO"
				}
			]
		},
		{
			"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1",
			"Name": "Rg1",
			"EnvironmentID": "275ddf79-b240-44e7-9916-f24175b451b1",
			"EnvironmentName": "Visual Studio Premium with MSDN - PASCALWANADOO",
			"TypeID": "AzureResourceGroup",
			"TypeName": "Azure Resource Group",
			"Properties": {
				"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1",
				"Name": "Rg1"
			},
			"Links": [
				{
					"sourceID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1",
					"targetID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1",
					"typeID": "Aggregation"
				}
			],
			"ComplianceRules": null,
			"RawDataForInternalUseOnly": null
		},
		{
			"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/myfirstVM",
			"Name": "MyFirstVM",
			"EnvironmentID": "275ddf79-b240-44e7-9916-f24175b451b1",
			"EnvironmentName": "Visual Studio Premium with MSDN - PASCALWANADOO",
			"TypeID": "AzureVirtualMachine",
			"TypeName": "Azure Virtual Machine",
			"Properties": {
				"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/myfirstVM",
				"Name": "MyFirstVM",
				"AvailabilitySetName": "The availability set",
				"MaxDataDiskCount": "5",
				"NetworkInterfaces": [
					{
						"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/nic1",
						"Name": "Nic1",
						"PrivateIP": "10.10.0.2",
						"PublicIP": "11.10.0.2"
					},
					{
						"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/nic2",
						"Name": "Nic2",
						"PrivateIP": "20.10.0.2",
						"PublicIP": "21.10.0.2"
					}
				]
			},
			"AttachedDocuments": [
				{
					"extension": "vsdx",
					"name": "thediagram.vsdx",
					"displayName": "Diagram",
					"url": "sotrage.azure.com/123/thediagram.vsdx",
					"content": null
				},
				{
					"extension": "docx",
					"name": "thedoc.docx",
					"displayName": "Documentation",
					"url": "sotrage.azure.com/123/thedoc.docx",
					"content": null
				},
				{
					"extension": "html",
					"name": "webpage.html",
					"displayName": "Web Page",
					"url": null,
					"content": "<body>the vm 789 ...</body>"
				}
			],
			"Links": [
				{
					"sourceID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/myfirstVM",
					"targetID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/theVNET/theSubnet",
					"typeID": "Connection"
				},
				{
					"sourceID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1",
					"targetID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/myfirstVM",
					"typeID": "Aggregation"
				},
				{
					"sourceID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1",
					"targetID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/myfirstVM",
					"typeID": "Aggregation"
				}
			],
			"ComplianceRules": null,
			"RawDataForInternalUseOnly": {
				"ADK_ObjectType": "Storage account(this is not the good one, just for the sake of the file...)",
				"StoragePrimaryEndpoints": {
					"blob": "https://adkjenkinstestdiag235.blob.core.windows.net/",
					"queue": "https://adkjenkinstestdiag235.queue.core.windows.net/",
					"table": "https://adkjenkinstestdiag235.table.core.windows.net/",
					"file": "https://adkjenkinstestdiag235.file.core.windows.net/",
					"web": null,
					"dfs": null
				},
				"ResourceLocation": null,
				"ResourceGroup": "adkjenkinstest",
				"Firewalls": [],
				"VirtualNetworkRules": [],
				"ADK_DiagramIconMasterShape": "Storage",
				"Status": "Primary: Available",
				"SkuName": "StandardLRS",
				"ADK_GUID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourceGroups/adkjenkinstest/providers/Microsoft.Storage/storageAccounts/adkjenkinstestdiag235",
				"ADK_Location": "eastus",
				"CDK_AutoGenerated": true,
				"ADK_Name": "adkjenkinstestdiag235",
				"CompareResult": {
					"AreEqual": true,
					"Differences": []
				},
				"Differences": [],
				"AverageValues": {},
				"MaxValues": {},
				"MinValues": {},
				"RoleAssignments": null,
				"ManagementLocks": [],
				"Tags": [],
				"CDK_Platform": "Azure",
				"CDKTypeLevel1": "Azure",
				"CDKTypeLevel2": "Storage",
				"CDKTypeLevel3": "Storage account",
				"CDKClassificationLevel1": "Infrastructure Services",
				"CDKClassificationLevel2": "Storage",
				"CDKClassificationLevel3": "File & Object Storage",
				"CDKEnvironmentName": "Visual Studio Premium with MSDN - PASCALWANADOO",
				"CDKEnvironmentID": "275ddf79-b240-44e7-9916-f24175b451b1",
				"CDK_Stages": "",
				"CDK_Applications": "",
				"sku": {
					"name": "Standard_LRS",
					"tier": "Standard",
					"resourceType": null,
					"kind": null,
					"locations": null,
					"capabilities": null,
					"restrictions": null
				},
				"kind": "Storage",
				"identity": null,
				"properties.provisioningState": "Succeeded",
				"properties.primaryEndpoints": {
					"blob": "https://adkjenkinstestdiag235.blob.core.windows.net/",
					"queue": "https://adkjenkinstestdiag235.queue.core.windows.net/",
					"table": "https://adkjenkinstestdiag235.table.core.windows.net/",
					"file": "https://adkjenkinstestdiag235.file.core.windows.net/",
					"web": null,
					"dfs": null
				},
				"properties.primaryLocation": "eastus",
				"properties.statusOfPrimary": "available",
				"properties.lastGeoFailoverTime": null,
				"properties.secondaryLocation": null,
				"properties.statusOfSecondary": null,
				"properties.customDomain": null,
				"properties.secondaryEndpoints": null,
				"properties.encryption": {
					"services": {
						"blob": {
							"enabled": true
						},
						"file": {
							"enabled": true
						},
						"table": null,
						"queue": null
					},
					"keySource": "Microsoft.Storage",
					"keyvaultproperties": null
				},
				"properties.accessTier": null,
				"properties.azureFilesAadIntegration": null,
				"properties.supportsHttpsTrafficOnly": false,
				"properties.networkAcls": {
					"bypass": "AzureServices",
					"virtualNetworkRules": [],
					"ipRules": [],
					"defaultAction": "Allow"
				},
				"properties.isHnsEnabled": null,
				"properties.geoReplicationStats": null,
				"properties.failoverInProgress": null,
				"tags": {},
				"location": "eastus",
				"id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourceGroups/adkjenkinstest/providers/Microsoft.Storage/storageAccounts/adkjenkinstestdiag235",
				"name": "adkjenkinstestdiag235",
				"type": "Microsoft.Storage/storageAccounts",
				"CDKCollectionName": "MicrosoftStorageAccounts"
			}
		},
		{
			"Id": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/theVNET/theSubnet",
			"Name": "theSubnet",
			"EnvironmentID": "275ddf79-b240-44e7-9916-f24175b451b1",
			"EnvironmentName": "Visual Studio Premium with MSDN - PASCALWANADOO",
			"TypeID": "AzureSubnet",
			"TypeName": "Azure Subnet",
			"Properties": [
				{
					"AddressPrefix": "124.12.0.1",
					"IpConfigurations": [
						{
							"Name": "myIPConfiguration1",
							"PublicIP": "12.14.15.12",
							"PrivateIP": "112.14.15.12"
						},
						{
							"Name": "myIPConfiguration2",
							"PublicIP": "12.14.15.13",
							"PrivateIP": "112.14.15.14"
						}
					]
				}
			],
			"AttachedDocuments": [
				{
					"extension": "html",
					"name": "webpage.html",
					"displayName": "Web Page",
					"url": null,
					"content": "<body>the subnet theSubnet has the prefix 124.12.0.1</body>"
				}
			],
			"Links": [
				{
					"sourceID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/theVNET",
					"targetID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/theVNET/theSubnet",
					"typeID": "Aggregation"
				},
				{
					"sourceID": "/subscriptions/275ddf79-b240-44e7-9916-f24175b451b1/resourcegroups/rg1/theVNET/theSubnet",
					"targetID": "CDK_AppServices_NotHttpsMandary",
					"typeID": "Classification"
				}
			],
			"ComplianceRules": [
				"CDK_AppServices_NotHttpsMandary"
			],
			"RawDataForInternalUseOnly": {}
		},
		{
			"Id": "Concerto",
			"Name": "Concerto",
			"Type": "Application",
			"TypeID": "Application",
			"AttachedDocuments": [
				{
					"extension": "vsdx",
					"name": "thediagram",
					"url": "sotrage.azure.com/123/thediagram.vsdx",
					"content": null
				},
				{
					"extension": "docx",
					"name": "thedoc",
					"url": "sotrage.azure.com/123/thedoc.docx",
					"content": null
				},
				{
					"extension": "html",
					"name": "webpage",
					"url": null,
					"content": "<body>the vm 789 ...</body>"
				}
			],
			"Links": [
				{
					"sourceID": "343",
					"targetID": "789",
					"typeID": "345"
				}
			],
			"ComplianceRules": null,
			"RawDataForInternalUseOnly": {}
		}
	],
	"Metadata": {
		"Categories": [
			{
				"Id": "Infrastructure",
				"Name": "Infrastructure",
				"TranslatedName": {
					"fr": "Infrastructure"
				},
				"ParentId": null,
				"Description": null
			},
			{
				"Id": "ComputeAndContainer",
				"Name": "Compute And Container",
				"TranslatedName": {
					"fr": "..."
				},
				"ParentId": "Infrastructure",
				"Description": null
			},
			{
				"Id": "Compute",
				"Name": "Compute",
				"TranslatedName": {
					"fr": "Compute"
				},
				"ParentId": "ComputeAndContainer",
				"Description": null
			}
		],
		"Types": [
			{
				"Name": "Component",
				"Id": "Component",
				"ParentId": null,
				"CategoryId": null,
				"CategoryLevel1": null,
				"CategoryLevel2": null,
				"CategoryLevel3": null,
				"HTMLTemplate": null,
				"MDTemplate": null,
				"DiagramIconMasterShapeName": null,
				"PictureBase64": null,
				"IsPhysicalObject": false,
				"IsTopLevelObject": false,
				"PlatformId": null,
				"Properties": [
					{
						"Name": "Id",
						"Binding": "Id",
						"DisplayName": "Unique Component Identifier",
						"Type": "string",
						"TranslatedDisplayName": {
							"fr": "Identificant unique du composant"
						}
					},
					{
						"Name": "Name",
						"Binding": "Name",
						"DisplayName": "Name",
						"Type": "string",
						"TranslatedDisplayName": {
							"fr": "Nom"
						}
					}
				]
			},
			{
				"Name": "Azure Virtual Machine",
				"Id": "AzureVirtualMachine",
				"ParentId": "VirtualMachine",
				"CategoryId": "Compute",
				"CategoryLevel1": "Infrastructure",
				"CategoryLevel2": "Compute & Container",
				"CategoryLevel3": "Compute",
				"HTMLTemplate": "<div><h2>Virtual Machine {{Name}}</h2> The vm has the following availability set : {{AvailabilitySetName}}</div>...",
				"MDTemplate": "#Virtual Machine {{Name}} ##The vm has the following availability set : {{AvailabilitySetName}}",
				"DiagramIconMasterShapeName": "AzVirtualMachine",
				"IsTopLevelObject": true,
				"IsPhysicalObject": true,
				"PlatformId": "Azure",
				"Properties": [
					{
						"Name": "AvailabilitySetName",
						"Binding": "AvailabilitySetName",
						"DisplayName": "Availability Set",
						"Type": "string",
						"TranslatedDisplayName": {
							"fr": "Zone de disponibilité"
						}
					},
					{
						"Name": "NumberOfCores",
						"Binding": "VMSizeDetails.MaxDataDiskCount",
						"DisplayName": "Max Data Disk Count",
						"Type": "string",
						"TranslatedDisplayName": {
							"fr": "Nombre de disque maximum"
						}
					}
				]
			},
			{
				"Name": "EC2 Instance",
				"Id": "EC2Instance",
				"ParentId": "VirtualMachine",
				"CategoryId": "Compute",
				"CategoryLevel1": "Infrastructure",
				"CategoryLevel2": "Compute & Container",
				"CategoryLevel3": "Compute",
				"PlatformId": "AWS"
			},
			{
				"Name": "Virtual Machine",
				"Id": "VirtualMachine",
				"ParentId": "Component",
				"CategoryId": "Compute",
				"CategoryLevel1": "Infrastructure",
				"CategoryLevel2": "Compute & Container",
				"CategoryLevel3": "Compute",
				"DiagramIconMasterShapeName": null,
				"PictureBase64": null,
				"IsTopLevelObject": null,
				"IsPhysicalObject": null,
				"PlatformId": null,
				"Properties": [
					{
						"Name": "NumberOfCores",
						"Binding": "NumberOfCores",
						"DisplayName": "Number of Cores",
						"Type": "string",
						"TranslatedDisplayName": {
							"fr": "Nombre de coeur"
						}
					}
				]
			},
			{
				"Name": "Subnet",
				"Id": "Subnet",
				"ParentId": "VirtualPrivateNetwork",
				"Type_Level0": "Component",
				"Type_Level1": "Infrastructure",
				"Type_Level2": "Network",
				"Type_Level3": "Virtual Private Network",
				"Type_Level4": "Subnet",
				"Type_Level5": null,
				"DiagramIconMasterShapeName": null,
				"PictureBase64": null,
				"IsTopLevelObject": null,
				"IsPhysicalObject": null,
				"HTMLTemplate": null,
				"MDTemplate": null,
				"PlatformId": null,
				"Properties": [
					{
						"Name": "AddressPrefix",
						"Binding": "AddressPrefix",
						"DisplayName": "Address Prefix",
						"Type": "string",
						"TranslatedDisplayName": {
							"fr": "Prefix d'adresse"
						}
					},
					{
						"Name": "Peerings",
						"Binding": "Peerings",
						"DisplayName": "Peerings",
						"Type": "list",
						"Items": [
							{
								"Properties": [
									{
										"Name": "Name",
										"Binding": "Name",
										"DisplayName": "Name",
										"Type": "string"
									}
								]
							}
						]
					}
				]
			},
			{
				"Name": "Azure Subnet",
				"Id": "AzureSubnet",
				"ParentId": "Subnet",
				"Type_Level0": "Component",
				"Type_Level1": "Infrastructure",
				"Type_Level2": "Network",
				"Type_Level3": "Virtual Private Network",
				"Type_Level4": "Virtual Machine",
				"Type_Level5": "Azure Subnet",
				"DiagramIconMasterShapeName": "AzSubnet",
				"PictureBase64": null,
				"IsTopLevelObject": null,
				"IsPhysicalObject": null,
				"HTMLTemplate": "<div><h2>Subnet {{Name}}</h2> Adress Prefix is {{AddressPrefix}}</div>",
				"MDTemplate": "#Subnet {{Name}} Adress Prefix is {{AddressPrefix}}",
				"PlatformId": "Azure",
				"Properties": [
					{
						"Name": "IpConfigurations",
						"Binding": "IpConfigurations",
						"DisplayName": "IP Configurations",
						"Children": [
							{
								"Properties": [
									{
										"Name": "Name",
										"Binding": "Name",
										"DisplayName": "Name"
									},
									{
										"Name": "PublicIP",
										"Binding": "PublicIP",
										"DisplayName": "Public IP Address"
									},
									{
										"Name": "PrivateIPAddress",
										"Binding": "PrivateIPAddress",
										"DisplayName": "Private IP Address"
									}
								]
							}
						]
					}
				]
			}
		],
		"LinkTypes": [
			{
				"Id": "Generalization",
				"DisplayName": "Generalization",
				"TranslatedDisplayName": {
					"fr": "Généralisation"
				},
				"Description": "A generalization relationship indicates that a specialized (child) model element is based on a general (parent) model element",
				"TranslatedDescription": null,
				"FromToLabel": "is a generalization of",
				"TranslatedFromToLabel": null,
				"ToFromLabel": "is a specialisation of",
				"TranslatedToFromLabel": null,
				"Examples": [
					"A Virtual Machine is a generalization of an EC2 Instance."
				]
			},
			{
				"Id": "Aggregation",
				"DisplayName": "Aggregation",
				"Description": "An aggregation relationship depicts a classifier as a part of, or as subordinate to, another classifier",
				"FromToLabel": "contains",
				"ToFromLabel": "belongs to",
				"Examples": [
					"An Azure Resource Group contains Azure Resources.",
					"An AWS AutoScaling Group contains EC2 instances."
				]
			},
			{
				"Id": "Connection",
				"DisplayName": "Connection",
				"Description": "A connection relationship indicates that a system is connected to another system and it uses it.",
				"FromToLabel": "is connected to",
				"ToFromLabel": "is connected to",
				"Examples": [
					"A Network Interface Card is connected to a Virtual Machine.",
					"An Azure Traffic Manager is connected to an Azure App Service.",
					"An Azure App Service is connected to an Azure SQL Database.",
					"An Azure App Service is connected to an Azure Key Vault."
				]
			},
			{
				"Id": "Classification",
				"DisplayName": "Classification",
				"Description": "A classification relationship indicates that an object has a specified property or type.",
				"FromToLabel": "is classified in",
				"ToFromLabel": "has the following object classified in it:",
				"Examples": [
					"A Virtual Machine is classified in BusinessRuleViolation1.",
					"A Virtual Machine is classified in Azure."
				]
			}
		],
		"ComplianceRules": [
			{
				"Id": "CDK-ComplianceRule-CDK_AppServices_NotHttpsMandary",
				"Code": "CDK_AppServices_NotHttpsMandary",
				"DisplayName": "CDK AppServices NotHttpsMandary",
				"TranslatedDisplayName": null,
				"Description": "This rule ensure App Service is HTTPS configured",
				"Criticity": "High",
				"Type": "Security",
				"Category": "AppServices",
				"JsonTrigger": ""
			},
			{
				"Id": "CDK_Networking_NoNSG",
				"Criticity": "High",
				"Type": "Security",
				"JsonTrigger": ""
			}
		],
		"Platforms": [
			{
				"Id": "Azure",
				"Name": "Azure",
				"PictureBase64": "",
				"SeeMoreAt": "https://azure.microsoft.com"
			},
			{
				"Id": "AWS",
				"Name": "AWS",
				"PictureBase64": "",
				"SeeMoreAt": "https://aws.amazon.com/"
			}
		],
		"DataCenters": [
			{
				"Id": "CDK-DataCenter-Azure-eastus",
				"Name": "east-us",
				"DisplayName": "East US",
				"PlatformId": "Azure",
				"Location": {
					"Lat": "72.0",
					"Long": "75.0",
					"TextAdress": ""
				}
			}
		]
	}
}
Table of Contents