{
    "properties": {
        "displayName": "Deploy - Configure Dependency agent to be enabled on Windows virtual machines",
        "policyType": "BuiltIn",
        "mode": "Indexed",
        "description": "Deploy Dependency agent for Windows virtual machines if the virtual machine image is in the list defined and the agent is not installed.",
        "metadata": {
            "version": "2.0.0",
            "category": "Monitoring"
        },
        "parameters": {
            "listOfImageIdToInclude": {
                "type": "Array",
                "defaultValue": [],
                "metadata": {
                    "displayName": "Optional: List of virtual machine images that have supported Windows OS to add to scope",
                    "description": "Example value: '/subscriptions/<subscriptionId>/resourceGroups/YourResourceGroup/providers/Microsoft.Compute/images/ContosoStdImage'"
                }
            },
            "effect": {
                "type": "string",
                "defaultValue": "DeployIfNotExists",
                "allowedValues": [
                    "DeployIfNotExists",
                    "Disabled"
                ],
                "metadata": {
                    "displayName": "Effect",
                    "description": "Enable or disable the execution of the policy"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Compute/virtualMachines"
                    },
                    {
                        "anyOf": [
                            {
                                "field": "Microsoft.Compute/imageId",
                                "in": "[parameters('listOfImageIdToInclude')]"
                            },
                            {
                                "allOf": [
                                    {
                                        "field": "Microsoft.Compute/imagePublisher",
                                        "equals": "MicrosoftWindowsServer"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageOffer",
                                        "equals": "WindowsServer"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageSKU",
                                        "in": [
                                            "2008-R2-SP1",
                                            "2008-R2-SP1-smalldisk",
                                            "2012-Datacenter",
                                            "2012-Datacenter-smalldisk",
                                            "2012-R2-Datacenter",
                                            "2012-R2-Datacenter-smalldisk",
                                            "2016-Datacenter",
                                            "2016-Datacenter-Server-Core",
                                            "2016-Datacenter-Server-Core-smalldisk",
                                            "2016-Datacenter-smalldisk",
                                            "2016-Datacenter-with-Containers",
                                            "2016-Datacenter-with-RDSH",
                                            "2019-Datacenter",
                                            "2019-Datacenter-Core",
                                            "2019-Datacenter-Core-smalldisk",
                                            "2019-Datacenter-Core-with-Containers",
                                            "2019-Datacenter-Core-with-Containers-smalldisk",
                                            "2019-Datacenter-smalldisk",
                                            "2019-Datacenter-with-Containers",
                                            "2019-Datacenter-with-Containers-smalldisk",
                                            "2019-Datacenter-zhcn"
                                        ]
                                    }
                                ]
                            },
                            {
                                "allOf": [
                                    {
                                        "field": "Microsoft.Compute/imagePublisher",
                                        "equals": "MicrosoftWindowsServer"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageOffer",
                                        "equals": "WindowsServerSemiAnnual"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageSKU",
                                        "in": [
                                            "Datacenter-Core-1709-smalldisk",
                                            "Datacenter-Core-1709-with-Containers-smalldisk",
                                            "Datacenter-Core-1803-with-Containers-smalldisk"
                                        ]
                                    }
                                ]
                            },
                            {
                                "allOf": [
                                    {
                                        "field": "Microsoft.Compute/imagePublisher",
                                        "equals": "MicrosoftWindowsServerHPCPack"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageOffer",
                                        "equals": "WindowsServerHPCPack"
                                    }
                                ]
                            },
                            {
                                "allOf": [
                                    {
                                        "field": "Microsoft.Compute/imagePublisher",
                                        "equals": "MicrosoftSQLServer"
                                    },
                                    {
                                        "anyOf": [
                                            {
                                                "field": "Microsoft.Compute/imageOffer",
                                                "like": "*-WS2016"
                                            },
                                            {
                                                "field": "Microsoft.Compute/imageOffer",
                                                "like": "*-WS2016-BYOL"
                                            },
                                            {
                                                "field": "Microsoft.Compute/imageOffer",
                                                "like": "*-WS2012R2"
                                            },
                                            {
                                                "field": "Microsoft.Compute/imageOffer",
                                                "like": "*-WS2012R2-BYOL"
                                            }
                                        ]
                                    }
                                ]
                            },
                            {
                                "allOf": [
                                    {
                                        "field": "Microsoft.Compute/imagePublisher",
                                        "equals": "MicrosoftRServer"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageOffer",
                                        "equals": "MLServer-WS2016"
                                    }
                                ]
                            },
                            {
                                "allOf": [
                                    {
                                        "field": "Microsoft.Compute/imagePublisher",
                                        "equals": "MicrosoftVisualStudio"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageOffer",
                                        "in": [
                                            "VisualStudio",
                                            "Windows"
                                        ]
                                    }
                                ]
                            },
                            {
                                "allOf": [
                                    {
                                        "field": "Microsoft.Compute/imagePublisher",
                                        "equals": "MicrosoftDynamicsAX"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageOffer",
                                        "equals": "Dynamics"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageSKU",
                                        "equals": "Pre-Req-AX7-Onebox-U8"
                                    }
                                ]
                            },
                            {
                                "allOf": [
                                    {
                                        "field": "Microsoft.Compute/imagePublisher",
                                        "equals": "MicrosoftDynamicsAX"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageOffer",
                                        "equals": "Dynamics"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageSKU",
                                        "equals": "Pre-Req-AX7-Onebox-V4"
                                    }
                                ]
                            },
                            {
                                "allOf": [
                                    {
                                        "field": "Microsoft.Compute/imagePublisher",
                                        "equals": "microsoft-ads"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageOffer",
                                        "equals": "windows-data-science-vm"
                                    }
                                ]
                            },
                            {
                                "allOf": [
                                    {
                                        "field": "Microsoft.Compute/imagePublisher",
                                        "equals": "MicrosoftWindowsDesktop"
                                    },
                                    {
                                        "field": "Microsoft.Compute/imageOffer",
                                        "equals": "Windows-10"
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effect')]",
                "details": {
                    "type": "Microsoft.Compute/virtualMachines/extensions",
                    "roleDefinitionIds": [
                        "/providers/microsoft.authorization/roleDefinitions/92aaf0da-9dab-42b6-94a3-d43ce8d16293"
                    ],
                    "existenceCondition": {
                        "allOf": [
                            {
                                "field": "Microsoft.Compute/virtualMachines/extensions/type",
                                "equals": "DependencyAgentWindows"
                            },
                            {
                                "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
                                "equals": "Microsoft.Azure.Monitoring.DependencyAgent"
                            },
                            {
                                "field": "Microsoft.Compute/virtualMachines/extensions/provisioningState",
                                "equals": "Succeeded"
                            }
                        ]
                    },
                    "deployment": {
                        "properties": {
                            "mode": "incremental",
                            "template": {
                                "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                                "contentVersion": "1.0.0.0",
                                "parameters": {
                                    "vmName": {
                                        "type": "string"
                                    },
                                    "location": {
                                        "type": "string"
                                    }
                                },
                                "variables": {
                                    "vmExtensionName": "DependencyAgentWindows",
                                    "vmExtensionPublisher": "Microsoft.Azure.Monitoring.DependencyAgent",
                                    "vmExtensionType": "DependencyAgentWindows",
                                    "vmExtensionTypeHandlerVersion": "9.6"
                                },
                                "resources": [
                                    {
                                        "type": "Microsoft.Compute/virtualMachines/extensions",
                                        "name": "[concat(parameters('vmName'), '/', variables('vmExtensionName'))]",
                                        "apiVersion": "2018-06-01",
                                        "location": "[parameters('location')]",
                                        "properties": {
                                            "publisher": "[variables('vmExtensionPublisher')]",
                                            "type": "[variables('vmExtensionType')]",
                                            "typeHandlerVersion": "[variables('vmExtensionTypeHandlerVersion')]",
                                            "autoUpgradeMinorVersion": true
                                        }
                                    }
                                ],
                                "outputs": {
                                    "policy": {
                                        "type": "string",
                                        "value": "[concat('Enabled extension for VM', ': ', parameters('vmName'))]"
                                    }
                                }
                            },
                            "parameters": {
                                "vmName": {
                                    "value": "[field('name')]"
                                },
                                "location": {
                                    "value": "[field('location')]"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "id": "/providers/Microsoft.Authorization/policyDefinitions/1c210e94-a481-4beb-95fa-1571b434fb04",
    "name": "1c210e94-a481-4beb-95fa-1571b434fb04"
}