From 9925e2ec468d19e4668e354fc5ea90e41f19d139 Mon Sep 17 00:00:00 2001 From: David Justice Date: Thu, 30 Apr 2020 09:15:40 -0700 Subject: [PATCH] json-schema crd generation spike (#21) * wip: walk the deployment schema to harvest types and version * wip generator to create crds * Change references to ToPackages() ToNodes() Fixing a few broken references. * Ast improvements (#47) * Fix comment handling to avoid panic * Define interface AstGenerator * Create FieldDefinition struct and test * Create StructDefinition and test * Factor out loadSchema() * Introduce SchemaScanner * Change field factory methods to return FieldDefinition * Improve logging in root.go * Make description optional for FieldDefinition * Modify getFields to return FieldDefinitions * Relocate TypeHandlers to SchemaScanner * Add fileDefinition and use to export structs * Add tests for FileDefinition * Move filters onto SchemaScanner * Introduce ScannerTopic and plumb through * Makes structs versioned * fixup! Introduce ScannerTopic and plumb through * Generate structs into different namespaces by version * Use new interface "Definition" when walking schema tree * Split method into two better focused methods * Suppress field comments if empty * Enforce field names and types being present Also includes passing ScannerTopic when creating simple fields * Fix failing tests * Remove duplicate declaration * include number of structs written in output message * Fix detection of version numbers in schema URLs * Add gitignore * Switch to log package * Fix doc-comments (somewhat) * Fix println with format specifier * Remove AstGenerator interface Modify tests to check for the Definition interface instead * Remove use of panic() * Remove redundant initialization * Fix test compilation error * Return errors from `objectTypeOf()` and `versionOf()` Co-authored-by: George Pollard * Further improvements to AST generation (#52) * Start code gen from root rather than root/resources * Remove possibility of failure from ToAst() There's no reason for this to fail, and it complicates the code. * Add Type interface to go with Definition * Flesh out types and update JSONAST to use them * Alter JSONAST so handlers return Types instead of Definitions * Add description to root type * Always use ref URL to generate new topic names * Document nil return for TypeHandler This is valid (see, e.g. RefHandler). * Reorder code to simplify * Make TypeHandler take scanner explicitly * Remove use of ScannerTopic which isn't needed any more * Hide fields in StructType * Simplify NewSchemaScanner * Factor out fixedTypeHandler * Fix nomenclature to match Go * Reduce nesting in allOfHandler * Create an IdentifierFactory to create valid Go identifiers (#53) * Create IdentifierFactory and test * Hook up use of IdentifierFactory * Code gardening * Use gomega instead of testify * Use idiomatic Go approach for test cases * Tidy go.mod * Rename local to idFactory * Enforce interface implementation w/compiler * Remove scannerTopic.go Test coverage increases by 1%! * Add copyright headers (#59) * Code Gardening (#58) * Add missing comments on public declarations * Whitespaces changes by go fmt * Preserve immutability by returning a copy of the slice * Remove else after return * Add missing header copyright comments * Fix compilation issues in branch * Make test pass * Add support for additionalProperties schema (#55) * Add support for additionalProperties schema This lets us generate types like this for tags members: ```go Tags map[string]string ``` * Add golden-files test infrastructure and tests This will add coverage for 'additionalProperties'. * Simplify runGoldenTest file reading * Run * Merge 'schema' Co-authored-by: Dave Fellows Co-authored-by: Bevan Arps Co-authored-by: George Pollard Co-authored-by: Bevan Arps --- go.mod | 2 + hack/generator/.gitignore | 1 + hack/generator/Makefile | 71 + hack/generator/cmd/gen/gen.go | 121 + hack/generator/cmd/root.go | 81 + hack/generator/config.yaml | 3 + hack/generator/go.mod | 32 + hack/generator/go.sum | 289 + hack/generator/main.go | 52 + hack/generator/pkg/astmodel/arraytype.go | 27 + hack/generator/pkg/astmodel/definition.go | 20 + .../generator/pkg/astmodel/fieldDefinition.go | 94 + .../pkg/astmodel/fieldDefinition_test.go | 55 + hack/generator/pkg/astmodel/fileDefinition.go | 70 + .../pkg/astmodel/fileDefinition_test.go | 34 + .../pkg/astmodel/identifierFactory.go | 54 + .../pkg/astmodel/identifierFactory_test.go | 37 + hack/generator/pkg/astmodel/maptype.go | 34 + hack/generator/pkg/astmodel/primitivetype.go | 38 + .../pkg/astmodel/structDefinition.go | 107 + .../pkg/astmodel/structDefinition_test.go | 41 + hack/generator/pkg/astmodel/structtype.go | 39 + hack/generator/pkg/jsonast/jsonast.go | 587 ++ hack/generator/pkg/jsonast/jsonast_test.go | 378 ++ .../pkg/jsonast/objectTypeOf_test.go | 25 + hack/generator/pkg/jsonast/schema.json | 5303 +++++++++++++++++ ...rates_field_if_other_fields_present.golden | 8 + ...nerates_field_if_other_fields_present.json | 21 + ...f_unset_and_no_other_fields_present.golden | 5 + ..._if_unset_and_no_other_fields_present.json | 13 + ...map_type_if_no_other_fields_present.golden | 5 + ...s_map_type_if_no_other_fields_present.json | 16 + ...Generates_nothing_if_set_to_'false'.golden | 6 + .../Generates_nothing_if_set_to_'false'.json | 14 + ...g_if_unset_and_other_fields_present.golden | 7 + ...ing_if_unset_and_other_fields_present.json | 18 + hack/generator/pkg/jsonast/versionOf_test.go | 24 + hack/generator/pkg/xcobra/context.go | 62 + hack/generator/pkg/xcobra/exit_handler.go | 23 + hack/generator/pkg/xcobra/noop_handler.go | 12 + hack/tools/go.mod | 2 + hack/tools/go.sum | 7 + 42 files changed, 7838 insertions(+) create mode 100644 hack/generator/.gitignore create mode 100644 hack/generator/Makefile create mode 100644 hack/generator/cmd/gen/gen.go create mode 100644 hack/generator/cmd/root.go create mode 100644 hack/generator/config.yaml create mode 100644 hack/generator/go.mod create mode 100644 hack/generator/go.sum create mode 100644 hack/generator/main.go create mode 100644 hack/generator/pkg/astmodel/arraytype.go create mode 100644 hack/generator/pkg/astmodel/definition.go create mode 100644 hack/generator/pkg/astmodel/fieldDefinition.go create mode 100644 hack/generator/pkg/astmodel/fieldDefinition_test.go create mode 100644 hack/generator/pkg/astmodel/fileDefinition.go create mode 100644 hack/generator/pkg/astmodel/fileDefinition_test.go create mode 100644 hack/generator/pkg/astmodel/identifierFactory.go create mode 100644 hack/generator/pkg/astmodel/identifierFactory_test.go create mode 100644 hack/generator/pkg/astmodel/maptype.go create mode 100644 hack/generator/pkg/astmodel/primitivetype.go create mode 100644 hack/generator/pkg/astmodel/structDefinition.go create mode 100644 hack/generator/pkg/astmodel/structDefinition_test.go create mode 100644 hack/generator/pkg/astmodel/structtype.go create mode 100644 hack/generator/pkg/jsonast/jsonast.go create mode 100644 hack/generator/pkg/jsonast/jsonast_test.go create mode 100644 hack/generator/pkg/jsonast/objectTypeOf_test.go create mode 100644 hack/generator/pkg/jsonast/schema.json create mode 100644 hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_field_if_other_fields_present.golden create mode 100644 hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_field_if_other_fields_present.json create mode 100644 hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map[string]interface{}_if_unset_and_no_other_fields_present.golden create mode 100644 hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map[string]interface{}_if_unset_and_no_other_fields_present.json create mode 100644 hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map_type_if_no_other_fields_present.golden create mode 100644 hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map_type_if_no_other_fields_present.json create mode 100644 hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_set_to_'false'.golden create mode 100644 hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_set_to_'false'.json create mode 100644 hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_unset_and_other_fields_present.golden create mode 100644 hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_unset_and_other_fields_present.json create mode 100644 hack/generator/pkg/jsonast/versionOf_test.go create mode 100644 hack/generator/pkg/xcobra/context.go create mode 100644 hack/generator/pkg/xcobra/exit_handler.go create mode 100644 hack/generator/pkg/xcobra/noop_handler.go diff --git a/go.mod b/go.mod index 3293ff88aee..a44026949f8 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,9 @@ go 1.14 require ( github.com/Azure/go-autorest/autorest v0.9.3 github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 + github.com/Azure/go-autorest/autorest/to v0.3.0 github.com/Azure/go-autorest/autorest/date v0.2.0 + github.com/Azure/go-autorest/autorest/validation v0.2.0 // indirect github.com/devigned/tab v0.1.1 github.com/go-logr/logr v0.1.0 github.com/gogo/protobuf v1.3.1 // indirect diff --git a/hack/generator/.gitignore b/hack/generator/.gitignore new file mode 100644 index 00000000000..07cf8016ca7 --- /dev/null +++ b/hack/generator/.gitignore @@ -0,0 +1 @@ +resources/ \ No newline at end of file diff --git a/hack/generator/Makefile b/hack/generator/Makefile new file mode 100644 index 00000000000..dd546ebec08 --- /dev/null +++ b/hack/generator/Makefile @@ -0,0 +1,71 @@ +APP = k8sinfra +PACKAGE = github.com/Azure/k8s-infra/hack/generator +DATE ?= $(shell date +%FT%T%z) +VERSION ?= $(shell git rev-list -1 HEAD) +SHORT_VERSION ?= $(shell git rev-parse --short HEAD) +GOBIN ?= $(HOME)/go/bin +GOFMT = gofmt +GO = go +PKGS = $(or $(PKG),$(shell $(GO) list ./... | grep -vE "^$(PACKAGE)/templates/")) +TOOLS_DIR = ../tools +TOOLSBIN = $(TOOLS_DIR)/bin +GOLINT = $(TOOLSBIN)/golint +GOX = $(TOOLSBIN)/gox + +V = 0 +Q = $(if $(filter 1,$V),,@) + +.PHONY: all +all: install-tools fmt lint vet tidy build + +install-tools: $(GOLINT) $(GOX); $(info $(M) installing tools…) + +$(GOLINT): $(TOOLS_DIR)/go.mod ## Build golint + cd $(TOOLS_DIR); go build -tags=tools -o bin/golint golang.org/x/lint/golint + +$(GOX): $(TOOLS_DIR)/go.mod ## Build gox + cd $(TOOLS_DIR); go build -tags=tools -o bin/gox github.com/mitchellh/gox + +build: lint tidy ; $(info $(M) buiding ./bin/$(APP)) + $Q $(GO) build -ldflags "-X $(PACKAGE)/cmd.GitCommit=$(VERSION)" -o ./bin/$(APP) + +.PHONY: lint +lint: $(GOLINT) ; $(info $(M) running golint…) @ ## Run golint + $(Q) $(GOLINT) -set_exit_status `go list ./... | grep -v /internal/` + +.PHONY: fmt +fmt: ; $(info $(M) running gofmt…) @ ## Run gofmt on all source files + @ret=0 && for d in $$($(GO) list -f '{{.Dir}}' ./...); do \ + $(GOFMT) -l -w $$d/*.go || ret=$$? ; \ + done ; exit $$ret + +.PHONY: vet +vet: $(GOLINT) ; $(info $(M) running vet…) @ ## Run vet + $Q $(GO) vet ./... + +.PHONY: tidy +tidy: ; $(info $(M) running tidy…) @ ## Run tidy + $Q $(GO) mod tidy + +.PHONY: build-debug +build-debug: ; $(info $(M) buiding debug...) + $Q $(GO) build -o ./bin/$(APP) -tags debug + +.PHONY: test +test: ; $(info $(M) running go test…) + $(Q) $(GO) test ./... -tags=noexit + +.PHONY: test-cover +test-cover: ; $(info $(M) running go test…) + $(Q) $(GO) test -tags=noexit -race -covermode atomic -coverprofile=profile.cov ./... + $(Q) $(TOOLSBIN)/goveralls -coverprofile=profile.cov -service=github + +.PHONY: gox +gox: install-tools + $(Q) $(TOOLSBIN)/gox -osarch="darwin/amd64 windows/amd64 linux/amd64" -ldflags "-X $(PACKAGE)/cmd.GitCommit=$(VERSION)" -output "./bin/$(SHORT_VERSION)/{{.Dir}}_{{.OS}}_{{.Arch}}" + $(Q) tar -czvf ./bin/$(SHORT_VERSION)/$(APP)_darwin_amd64.tar.gz -C ./bin/$(SHORT_VERSION)/ $(APP)_darwin_amd64 + $(Q) tar -czvf ./bin/$(SHORT_VERSION)/$(APP)_linux_amd64.tar.gz -C ./bin/$(SHORT_VERSION)/ $(APP)_linux_amd64 + $(Q) tar -czvf ./bin/$(SHORT_VERSION)/$(APP)_windows_amd64.tar.gz -C ./bin/$(SHORT_VERSION)/ $(APP)_windows_amd64.exe + +.PHONY: ci +ci: install-tools fmt lint vet tidy build test-cover \ No newline at end of file diff --git a/hack/generator/cmd/gen/gen.go b/hack/generator/cmd/gen/gen.go new file mode 100644 index 00000000000..09ec925a556 --- /dev/null +++ b/hack/generator/cmd/gen/gen.go @@ -0,0 +1,121 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package gen + +import ( + "context" + "fmt" + "log" + "os" + "unicode" + + "github.com/spf13/cobra" + "github.com/spf13/viper" + "github.com/xeipuuv/gojsonschema" + + "github.com/Azure/k8s-infra/hack/generator/pkg/astmodel" + "github.com/Azure/k8s-infra/hack/generator/pkg/jsonast" + "github.com/Azure/k8s-infra/hack/generator/pkg/xcobra" +) + +const ( + rgTemplateSchemaURI = "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json" +) + +// NewGenCommand creates a new cobra Command when invoked from the command line +func NewGenCommand() (*cobra.Command, error) { + cmd := &cobra.Command{ + Use: "gen", + Short: "generate K8s infrastructure resources from Azure deployment template schema", + Run: xcobra.RunWithCtx(func(ctx context.Context, cmd *cobra.Command, args []string) error { + + //schema, err := loadSchema(rgTemplateSchemaFile2) + schema, err := loadSchema(rgTemplateSchemaURI) + if err != nil { + return err + } + + root := schema.Root() + + idfactory := astmodel.NewIdentifierFactory() + scanner := jsonast.NewSchemaScanner(idfactory) + scanner.AddFilters(viper.GetStringSlice("resources")) + + _, err = scanner.ToNodes(ctx, root) + if err != nil { + log.Printf("Error: %v\n", err) + return err + } + + err = os.RemoveAll("resources") + if err != nil { + log.Printf("Error: %v\n", err) + return err + } + + err = os.Mkdir("resources", 0700) + if err != nil { + log.Printf("Error %v\n", err) + return err + } + + log.Printf("INF Checkpoint\n") + + for _, st := range scanner.Structs { + ns := createNamespace("api", st.Version()) + dirName := fmt.Sprintf("resources/%v", ns) + fileName := fmt.Sprintf("%v/%v.go", dirName, st.Name()) + + if _, err := os.Stat(dirName); os.IsNotExist(err) { + log.Printf("Creating folder '%s'\n", dirName) + os.Mkdir(dirName, 0700) + } + + log.Printf("Writing '%s'\n", fileName) + + genFile := astmodel.NewFileDefinition(ns, st) + genFile.SaveTo(fileName) + } + + log.Printf("Completed writing %v resources\n", len(scanner.Structs)) + + return nil + }), + } + + cmd.Flags().StringArrayP("resources", "r", nil, "list of resource type / versions to generate") + if err := viper.BindPFlag("resources", cmd.Flags().Lookup("resources")); err != nil { + return cmd, err + } + + return cmd, nil +} + +func loadSchema(source string) (*gojsonschema.Schema, error) { + sl := gojsonschema.NewSchemaLoader() + schema, err := sl.Compile(gojsonschema.NewReferenceLoader(source)) + if err != nil { + return nil, err + } + + return schema, nil +} + +func createNamespace(base string, version string) string { + var builder []rune + + for _, r := range base { + builder = append(builder, rune(r)) + } + + for _, r := range version { + if unicode.IsLetter(r) || unicode.IsNumber(r) { + builder = append(builder, rune(r)) + } + } + + return string(builder) +} diff --git a/hack/generator/cmd/root.go b/hack/generator/cmd/root.go new file mode 100644 index 00000000000..b6166f2727a --- /dev/null +++ b/hack/generator/cmd/root.go @@ -0,0 +1,81 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package cmd + +import ( + "fmt" + "log" + + "github.com/spf13/cobra" + "github.com/spf13/viper" + + "github.com/Azure/k8s-infra/hack/generator/cmd/gen" +) + +// Execute kicks off the command line +func Execute() { + cmd, err := newRootCommand() + if err != nil { + log.Fatalf("fatal error: commands failed to build! %v\n", err) + } + + if err := cmd.Execute(); err != nil { + log.Fatalln(err) + } +} + +func newRootCommand() (*cobra.Command, error) { + rootCmd := &cobra.Command{ + Use: "k8sinfra", + Short: "k8sinfra provides a cmdline interface for generating k8s-infra types from Azure deployment template schema", + TraverseChildren: true, + } + + var cfgFile string + rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (defaults are ./config.yaml, $HOME/.k8sinfra/config.yaml, /etc/k8sinfra/config.yaml)") + cobra.OnInitialize(func() { + initConfig(&cfgFile) + }) + + cmdFuncs := []func() (*cobra.Command, error){ + gen.NewGenCommand, + } + + for _, f := range cmdFuncs { + cmd, err := f() + if err != nil { + return rootCmd, err + } + rootCmd.AddCommand(cmd) + } + + return rootCmd, nil +} + +func initConfig(cfgFilePtr *string) { + cfgFile := *cfgFilePtr + if cfgFile != "" { + // Use config file from the flag. + viper.SetConfigFile(cfgFile) + } else { + viper.SetConfigName("config") + viper.AddConfigPath("/etc/k8sinfra/") + viper.AddConfigPath("$HOME/.k8sinfra") + viper.AddConfigPath(".") + } + + viper.AutomaticEnv() + if err := viper.ReadInConfig(); err != nil { + if _, ok := err.(viper.ConfigFileNotFoundError); ok { + // Config file not found; set sane defaults and carry on. + fmt.Println("Configuration file not found.") + } else { + // Config file was found but another error was produced + panic(fmt.Errorf("Fatal error reading config file: %s", err)) + } + } + fmt.Println("Found configuration file.") +} diff --git a/hack/generator/config.yaml b/hack/generator/config.yaml new file mode 100644 index 00000000000..e59c67512db --- /dev/null +++ b/hack/generator/config.yaml @@ -0,0 +1,3 @@ +resources: + - foo.bar/2019-02-01 + - bin.baz/2017-12-22 \ No newline at end of file diff --git a/hack/generator/go.mod b/hack/generator/go.mod new file mode 100644 index 00000000000..2693c11fbfb --- /dev/null +++ b/hack/generator/go.mod @@ -0,0 +1,32 @@ +module github.com/Azure/k8s-infra/hack/generator + +go 1.13 + +require ( + contrib.go.opencensus.io/exporter/jaeger v0.2.0 + github.com/devigned/tab v0.1.1 + github.com/devigned/tab/opencensus v0.1.2 + github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 // indirect + github.com/onsi/gomega v1.8.1 + github.com/pelletier/go-toml v1.6.0 // indirect + github.com/sebdah/goldie/v2 v2.3.0 + github.com/spf13/afero v1.2.2 // indirect + github.com/spf13/cast v1.3.1 // indirect + github.com/spf13/cobra v0.0.5 + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.6.1 + github.com/uber/jaeger-client-go v2.21.1+incompatible // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonschema v1.2.0 + go.opencensus.io v0.22.2 + golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 // indirect + golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e // indirect + golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8 // indirect + golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 // indirect + google.golang.org/api v0.15.0 // indirect + gopkg.in/ini.v1 v1.51.1 // indirect + gopkg.in/yaml.v2 v2.2.7 // indirect +) + +replace github.com/xeipuuv/gojsonschema => github.com/devigned/gojsonschema v1.2.1-0.20191231010529-c593123f1e5d diff --git a/hack/generator/go.sum b/hack/generator/go.sum new file mode 100644 index 00000000000..4d59a427b62 --- /dev/null +++ b/hack/generator/go.sum @@ -0,0 +1,289 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +contrib.go.opencensus.io/exporter/jaeger v0.2.0 h1:nhTv/Ry3lGmqbJ/JGvCjWxBl5ozRfqo86Ngz59UAlfk= +contrib.go.opencensus.io/exporter/jaeger v0.2.0/go.mod h1:ukdzwIYYHgZ7QYtwVFQUjiT28BJHiMhTERo32s6qVgM= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/devigned/gojsonschema v1.2.1-0.20191231010529-c593123f1e5d h1:0q2Xu1eQ4qtUJrl38FHY7GED7c6LKZ2iJxoc+O6WPKg= +github.com/devigned/gojsonschema v1.2.1-0.20191231010529-c593123f1e5d/go.mod h1:sSkPisfU5IfuoRgwlKZxezXDlqL0o2ocuSNwPqU5ecE= +github.com/devigned/tab v0.0.1/go.mod h1:oVYrfgGyond090gxCvvbjZji79+peOiSV6vhZhKJM0Y= +github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= +github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= +github.com/devigned/tab/opencensus v0.1.2 h1:IkqF46qN8f1WCGwNlvMSVOPxAdFug29n9zLIlxGL7ms= +github.com/devigned/tab/opencensus v0.1.2/go.mod h1:U6xXMXnNwXJpdaK0mnT3zdng4WTi+vCfqn7YHofEv2A= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.8.1 h1:C5Dqfs/LeauYDX0jJXIe2SWmwCbGzx9yF8C8xy3Lh34= +github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.6.0 h1:aetoXYr0Tv7xRU/V4B4IZJ2QcbtMUFoNb3ORp7TzIK4= +github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/sebdah/goldie/v2 v2.3.0 h1:qOrofCLbWLjF2PDEL/BueSdFC8V8VyRKccKmqf/89ws= +github.com/sebdah/goldie/v2 v2.3.0/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.6.1 h1:VPZzIkznI1YhVMRi6vNFLHSwhnhReBfgTxIPccpfdZk= +github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/uber/jaeger-client-go v2.15.0+incompatible h1:NP3qsSqNxh8VYr956ur1N/1C1PjvOJnJykCzcD5QHbk= +github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.21.1+incompatible h1:oozboeZmWz+tyh3VZttJWlF3K73mHgbokieceqKccLo= +github.com/uber/jaeger-client-go v2.21.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8 h1:JA8d3MPx/IToSyXZG/RhwYEtfrKO1Fxrqe8KrkiLXKM= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0 h1:KKgc1aqhV8wDPbDzlDtpvyjZFY3vjz85FP7p4wcQUyI= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.15.0 h1:yzlyyDW/J0w8yNFJIhiAJy4kq74S+1DOLdawELNxFMA= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.51.1 h1:GyboHr4UqMiLUybYjd22ZjQIKEJEpgtLXtuGbR21Oho= +gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/hack/generator/main.go b/hack/generator/main.go new file mode 100644 index 00000000000..7199c958336 --- /dev/null +++ b/hack/generator/main.go @@ -0,0 +1,52 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package main + +import ( + "fmt" + "log" + "os" + + _ "github.com/devigned/tab/opencensus" + + "contrib.go.opencensus.io/exporter/jaeger" + "go.opencensus.io/trace" + + "github.com/Azure/k8s-infra/hack/generator/cmd" +) + +func main() { + log.SetFlags(log.LstdFlags | log.Lshortfile) + + if os.Getenv("TRACING") == "true" { + closer, err := initOpenCensus() + if err != nil { + fmt.Println(err) + return + } + defer closer() + } + + cmd.Execute() +} + +func initOpenCensus() (func(), error) { + exporter, err := jaeger.NewExporter(jaeger.Options{ + AgentEndpoint: "localhost:6831", + CollectorEndpoint: "http://localhost:14268/api/traces", + Process: jaeger.Process{ + ServiceName: "generator", + }, + }) + + if err != nil { + return nil, err + } + + trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()}) + trace.RegisterExporter(exporter) + return exporter.Flush, nil +} diff --git a/hack/generator/pkg/astmodel/arraytype.go b/hack/generator/pkg/astmodel/arraytype.go new file mode 100644 index 00000000000..1f7a97dc621 --- /dev/null +++ b/hack/generator/pkg/astmodel/arraytype.go @@ -0,0 +1,27 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "go/ast" +) + +// ArrayType is used for fields that contain an array of values +type ArrayType struct { + element Type +} + +// NewArrayType creates a new array with elements of the specified type +func NewArrayType(element Type) *ArrayType { + return &ArrayType{element} +} + +// AsType renders the Go abstract syntax tree for an array type +func (array *ArrayType) AsType() ast.Expr { + return &ast.ArrayType{ + Elt: array.element.AsType(), + } +} diff --git a/hack/generator/pkg/astmodel/definition.go b/hack/generator/pkg/astmodel/definition.go new file mode 100644 index 00000000000..7934e1efd72 --- /dev/null +++ b/hack/generator/pkg/astmodel/definition.go @@ -0,0 +1,20 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import "go/ast" + +// Definition represents models that can render into Go code +type Definition interface { + // AsAst() renders a definition into a Go abstract syntax tree + AsAst() ast.Node +} + +// Type represents something that is a Go type +type Type interface { + // AsType renders the current instance as a Go abstract syntax tree + AsType() ast.Expr +} diff --git a/hack/generator/pkg/astmodel/fieldDefinition.go b/hack/generator/pkg/astmodel/fieldDefinition.go new file mode 100644 index 00000000000..f6a8dfe4456 --- /dev/null +++ b/hack/generator/pkg/astmodel/fieldDefinition.go @@ -0,0 +1,94 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "fmt" + "go/ast" +) + +// FieldDefinition encapsulates the definition of a field +type FieldDefinition struct { + fieldName string + fieldType Type + jsonName string + description string +} + +// FieldDefinition must implement Definition +var _ Definition = &FieldDefinition{} + +// NewFieldDefinition is a factory method for creating a new FieldDefinition +// name is the name for the new field (mandatory) +// fieldType is the type for the new field (mandatory) +func NewFieldDefinition(fieldName string, jsonName string, fieldType Type) *FieldDefinition { + return &FieldDefinition{ + fieldName: fieldName, + fieldType: fieldType, + jsonName: jsonName, + description: "", + } +} + +// NewEmbeddedStructDefinition is a factory method for defining an embedding +// of another struct type. +func NewEmbeddedStructDefinition(structType Type) *FieldDefinition { + // in Go, this is just a field without a name: + return &FieldDefinition{ + fieldName: "", + fieldType: structType, + jsonName: "", + description: "", + } +} + +// FieldName returns the name of the field +func (field *FieldDefinition) FieldName() string { + return field.fieldName +} + +// FieldType returns the data type of the field +func (field *FieldDefinition) FieldType() Type { + return field.fieldType +} + +// WithDescription returns a new FieldDefinition with the specified description +func (field *FieldDefinition) WithDescription(description *string) *FieldDefinition { + if description == nil { + return field + } + + result := *field + result.description = *description + return &result +} + +// AsAst generates an AST node representing this field definition +func (field FieldDefinition) AsAst() ast.Node { + return field.AsField() +} + +// AsField generates an AST field node representing this field definition +func (field FieldDefinition) AsField() *ast.Field { + + // TODO: add field tags for api hints / json binding + result := &ast.Field{ + Names: []*ast.Ident{ast.NewIdent(field.fieldName)}, + Type: field.FieldType().AsType(), + } + + if field.description != "" { + result.Doc = &ast.CommentGroup{ + List: []*ast.Comment{ + { + Text: fmt.Sprintf("\n/*\t%s: %s */", field.fieldName, field.description), + }, + }, + } + } + + return result +} diff --git a/hack/generator/pkg/astmodel/fieldDefinition_test.go b/hack/generator/pkg/astmodel/fieldDefinition_test.go new file mode 100644 index 00000000000..ead6e5b31f2 --- /dev/null +++ b/hack/generator/pkg/astmodel/fieldDefinition_test.go @@ -0,0 +1,55 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "testing" + + . "github.com/onsi/gomega" +) + +func Test_NewFieldDefinition_GivenValues_InitializesFields(t *testing.T) { + g := NewGomegaWithT(t) + + fieldName := "FullName" + fieldtype := StringType + jsonName := "family-name" + + field := NewFieldDefinition(fieldName, jsonName, fieldtype) + + g.Expect(field.fieldName).To(Equal(fieldName)) + g.Expect(field.fieldType).To(Equal(fieldtype)) + g.Expect(field.jsonName).To(Equal(jsonName)) + g.Expect(field.description).To(BeEmpty()) +} + +func Test_FieldDefinitionWithDescription_GivenDescription_SetsField(t *testing.T) { + g := NewGomegaWithT(t) + + description := "description" + field := NewFieldDefinition("FullName", "fullname", StringType).WithDescription(&description) + + g.Expect(field.description).To(Equal(description)) +} + +func Test_FieldDefinitionWithDescription_GivenDescription_DoesNotModifyOriginal(t *testing.T) { + g := NewGomegaWithT(t) + description := "description" + original := NewFieldDefinition("FullName", "fullName", StringType) + + field := original.WithDescription(&description) + + g.Expect(field.description).NotTo(Equal(original.description)) +} + +func Test_FieldDefinitionAsAst_GivenValidField_ReturnsNonNilResult(t *testing.T) { + g := NewGomegaWithT(t) + + field := NewFieldDefinition("FullName", "fullName", StringType) + node := field.AsAst() + + g.Expect(node).NotTo(BeNil()) +} diff --git a/hack/generator/pkg/astmodel/fileDefinition.go b/hack/generator/pkg/astmodel/fileDefinition.go new file mode 100644 index 00000000000..67c9a2e8a1f --- /dev/null +++ b/hack/generator/pkg/astmodel/fileDefinition.go @@ -0,0 +1,70 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "go/ast" + "go/format" + "go/token" + "os" +) + +// FileDefinition is the content of a file we're generating +type FileDefinition struct { + // Name for the package + packageName string + + // Structs to include in this file + structs []*StructDefinition +} + +// FileDefinition must implement Definition +var _ Definition = &FileDefinition{} + +// NewFileDefinition creates a file definition containing specified structs +func NewFileDefinition(packageName string, structs ...*StructDefinition) *FileDefinition { + return &FileDefinition{ + packageName: packageName, + structs: structs, + } +} + +// AsAst generates an AST node representing this file +func (file FileDefinition) AsAst() ast.Node { + + var decls []ast.Decl + for _, s := range file.structs { + decls = append(decls, s.AsDeclaration()) + } + + result := &ast.File{ + Name: ast.NewIdent(file.packageName), + Decls: decls, + } + + return result +} + +// SaveTo writes this generated file to disk +func (file FileDefinition) SaveTo(filePath string) error { + f, err := os.Create(filePath) + if err != nil { + return err + } + defer f.Close() + if err != nil { + return err + } + + content := file.AsAst() + + err = format.Node(f, token.NewFileSet(), content) + if err != nil { + return err + } + + return nil +} diff --git a/hack/generator/pkg/astmodel/fileDefinition_test.go b/hack/generator/pkg/astmodel/fileDefinition_test.go new file mode 100644 index 00000000000..7080f63055f --- /dev/null +++ b/hack/generator/pkg/astmodel/fileDefinition_test.go @@ -0,0 +1,34 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "testing" + + . "github.com/onsi/gomega" +) + +func Test_NewFileDefinition_GivenValues_InitializesFields(t *testing.T) { + g := NewGomegaWithT(t) + + packageName := "demo" + person := NewTestStruct("Person", "fullName", "knownAs", "familyName") + file := NewFileDefinition(packageName, &person) + + g.Expect(file.packageName).To(Equal(packageName)) + g.Expect(file.structs).To(HaveLen(1)) +} + +func NewTestStruct(name string, fields ...string) StructDefinition { + var fs []*FieldDefinition + for _, n := range fields { + fs = append(fs, NewFieldDefinition(n, n, StringType)) + } + + definition := NewStructDefinition(name, "2020-01-01", fs...) + + return *definition +} diff --git a/hack/generator/pkg/astmodel/identifierFactory.go b/hack/generator/pkg/astmodel/identifierFactory.go new file mode 100644 index 00000000000..1f6f5545e23 --- /dev/null +++ b/hack/generator/pkg/astmodel/identifierFactory.go @@ -0,0 +1,54 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "regexp" + "strings" +) + +var filterRegex *regexp.Regexp + +// IdentifierFactory is a factory for creating Go identifiers from Json schema names +type IdentifierFactory interface { + CreateIdentifier(name string) string +} + +// identifierFactory is an implementation of the IdentifierFactory interface +type identifierFactory struct { + renames map[string]string +} + +// NewIdentifierFactory creates an IdentifierFactory ready for use +func NewIdentifierFactory() IdentifierFactory { + return &identifierFactory{ + renames: createRenames(), + } +} + +// CreateIdentifier returns a valid Go public identifier +func (factory *identifierFactory) CreateIdentifier(name string) string { + if identifier, ok := factory.renames[name]; ok { + return identifier + } + + // replace with spaces so titlecasing works nicely + clean := filterRegex.ReplaceAllLiteralString(name, " ") + + titled := strings.Title(clean) + result := strings.ReplaceAll(titled, " ", "") + return result +} + +func createRenames() map[string]string { + return map[string]string{ + "$schema": "Schema", + } +} + +func init() { + filterRegex = regexp.MustCompile("[$@._-]") +} diff --git a/hack/generator/pkg/astmodel/identifierFactory_test.go b/hack/generator/pkg/astmodel/identifierFactory_test.go new file mode 100644 index 00000000000..eee90b45f4a --- /dev/null +++ b/hack/generator/pkg/astmodel/identifierFactory_test.go @@ -0,0 +1,37 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "testing" + + . "github.com/onsi/gomega" +) + +func Test_CreateIdentifier_GivenName_ReturnsExpectedIdentifier(t *testing.T) { + cases := []struct { + name string + expected string + }{ + {"name", "Name"}, + {"Name", "Name"}, + {"$schema", "Schema"}, + {"my_important_name", "MyImportantName"}, + {"MediaServices_liveEvents_liveOutputs_childResource", "MediaServicesLiveEventsLiveOutputsChildResource"}, + } + + idfactory := NewIdentifierFactory() + + for _, c := range cases { + c := c + t.Run(c.name, func(t *testing.T) { + t.Parallel() + g := NewGomegaWithT(t) + identifier := idfactory.CreateIdentifier(c.name) + g.Expect(identifier).To(Equal(c.expected)) + }) + } +} diff --git a/hack/generator/pkg/astmodel/maptype.go b/hack/generator/pkg/astmodel/maptype.go new file mode 100644 index 00000000000..8557822eb80 --- /dev/null +++ b/hack/generator/pkg/astmodel/maptype.go @@ -0,0 +1,34 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "go/ast" +) + +// MapType is used to define fields that contain additional property values +type MapType struct { + key Type + value Type +} + +// NewMap creates a new map with the specified key and value types +func NewMap(key Type, value Type) *MapType { + return &MapType{key, value} +} + +// NewStringMap creates a new map with string keys and the specified value type +func NewStringMap(value Type) *MapType { + return NewMap(StringType, value) +} + +// AsType implements Type for MapType to create the abstract syntax tree for a map +func (m *MapType) AsType() ast.Expr { + return &ast.MapType{ + Key: m.key.AsType(), + Value: m.value.AsType(), + } +} diff --git a/hack/generator/pkg/astmodel/primitivetype.go b/hack/generator/pkg/astmodel/primitivetype.go new file mode 100644 index 00000000000..e13715d89a8 --- /dev/null +++ b/hack/generator/pkg/astmodel/primitivetype.go @@ -0,0 +1,38 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "go/ast" +) + +// PrimitiveType represents a Go primitive type +type PrimitiveType struct { + name string +} + +// Enum represents an enumeration of predefined values +var Enum = &PrimitiveType{"ENUM"} // TODO + +// IntType represents a Go integer type +var IntType = &PrimitiveType{"int"} + +// StringType represents the Go string type +var StringType = &PrimitiveType{"string"} + +// FloatType represents the Go float64 type +var FloatType = &PrimitiveType{"float64"} + +// BoolType represents the Go bool type +var BoolType = &PrimitiveType{"bool"} + +// AnyType represents the root Go interface type, permitting any object +var AnyType = &PrimitiveType{"interface{}"} + +// AsType implements Type for PrimitiveType returning an abstract syntax tree +func (prim *PrimitiveType) AsType() ast.Expr { + return ast.NewIdent(prim.name) +} diff --git a/hack/generator/pkg/astmodel/structDefinition.go b/hack/generator/pkg/astmodel/structDefinition.go new file mode 100644 index 00000000000..7cd37e7040e --- /dev/null +++ b/hack/generator/pkg/astmodel/structDefinition.go @@ -0,0 +1,107 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "go/ast" + "go/token" +) + +// StructReference is the (versioned) name of a struct +// that can be used as a type +type StructReference struct { + name string + version string +} + +// AsType implements Type for StructReference +func (sr *StructReference) AsType() ast.Expr { + // TODO: namespaces/versions + return ast.NewIdent(sr.name) +} + +// StructDefinition encapsulates the definition of a struct +type StructDefinition struct { + StructReference + StructType + + description string +} + +// StructDefinition must implement Definition +var _ Definition = &StructDefinition{} + +// NewStructDefinition is a factory method for creating a new StructDefinition +func NewStructDefinition(name string, version string, fields ...*FieldDefinition) *StructDefinition { + return &StructDefinition{ + StructReference: StructReference{name, version}, + StructType: StructType{fields}, + } +} + +// WithDescription adds a description (doc-comment) to the struct +func (definition *StructDefinition) WithDescription(description *string) *StructDefinition { + if description == nil { + return definition + } + + result := *definition + result.description = *description + return &result +} + +// Name returns the name of the struct +func (definition *StructDefinition) Name() string { + return definition.name +} + +// Version returns the version of this struct +func (definition *StructDefinition) Version() string { + return definition.version +} + +// Field provides indexed access to our fields +func (definition *StructDefinition) Field(index int) FieldDefinition { + return *definition.fields[index] +} + +// FieldCount indicates how many fields are contained +func (definition *StructDefinition) FieldCount() int { + return len(definition.fields) +} + +// AsAst generates an AST node representing this field definition +func (definition *StructDefinition) AsAst() ast.Node { + return definition.AsDeclaration() +} + +// AsDeclaration generates an AST node representing this struct definition +func (definition *StructDefinition) AsDeclaration() *ast.GenDecl { + + identifier := ast.NewIdent(definition.name) + + typeSpecification := &ast.TypeSpec{ + Name: identifier, + Type: definition.StructType.AsType(), + } + + declaration := &ast.GenDecl{ + Tok: token.TYPE, + Specs: []ast.Spec{ + typeSpecification, + }, + } + + if definition.description != "" { + declaration.Doc = &ast.CommentGroup{ + List: []*ast.Comment{ + {Text: "\n/* " + definition.description + " */"}, + }, + } + } + + return declaration +} diff --git a/hack/generator/pkg/astmodel/structDefinition_test.go b/hack/generator/pkg/astmodel/structDefinition_test.go new file mode 100644 index 00000000000..561dd9d325b --- /dev/null +++ b/hack/generator/pkg/astmodel/structDefinition_test.go @@ -0,0 +1,41 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import ( + "testing" + + . "github.com/onsi/gomega" +) + +func Test_NewStructDefinition_GivenValues_InitializesFields(t *testing.T) { + g := NewGomegaWithT(t) + + const name = "demo" + const version = "2020-01-01" + fullNameField := createStringField("fullName", "Full legal name") + familyNameField := createStringField("familiyName", "Shared family name") + knownAsField := createStringField("knownAs", "Commonly known as") + + definition := NewStructDefinition(name, version, fullNameField, familyNameField, knownAsField) + + g.Expect(definition.name).To(Equal(name)) + g.Expect(definition.version).To(Equal(version)) + g.Expect(definition.fields).To(HaveLen(3)) +} + +func Test_StructDefinitionAsAst_GivenValidStruct_ReturnsNonNilResult(t *testing.T) { + g := NewGomegaWithT(t) + + field := NewStructDefinition("name", "2020-01-01") + node := field.AsAst() + + g.Expect(node).NotTo(BeNil()) +} + +func createStringField(name string, description string) *FieldDefinition { + return NewFieldDefinition(name, name, StringType).WithDescription(&description) +} diff --git a/hack/generator/pkg/astmodel/structtype.go b/hack/generator/pkg/astmodel/structtype.go new file mode 100644 index 00000000000..dddb05412a8 --- /dev/null +++ b/hack/generator/pkg/astmodel/structtype.go @@ -0,0 +1,39 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package astmodel + +import "go/ast" + +// StructType represents an (unnamed) struct type +type StructType struct { + fields []*FieldDefinition +} + +// NewStructType is a factory method for creating a new StructTypeDefinition +func NewStructType(fields []*FieldDefinition) *StructType { + return &StructType{fields} +} + +// Fields returns all our field definitions +// A copy of the slice is returned to preserve immutability +func (structType *StructType) Fields() []*FieldDefinition { + return append(structType.fields[:0:0], structType.fields...) +} + +// AsType implements Type for StructType +func (structType *StructType) AsType() ast.Expr { + + fieldDefinitions := make([]*ast.Field, len(structType.fields)) + for i, f := range structType.fields { + fieldDefinitions[i] = f.AsField() + } + + return &ast.StructType{ + Fields: &ast.FieldList{ + List: fieldDefinitions, + }, + } +} diff --git a/hack/generator/pkg/jsonast/jsonast.go b/hack/generator/pkg/jsonast/jsonast.go new file mode 100644 index 00000000000..9bbfa40ef0c --- /dev/null +++ b/hack/generator/pkg/jsonast/jsonast.go @@ -0,0 +1,587 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package jsonast + +import ( + "context" + "fmt" + "log" + "net/url" + "regexp" + "strings" + + "github.com/Azure/k8s-infra/hack/generator/pkg/astmodel" + "github.com/devigned/tab" + "github.com/xeipuuv/gojsonschema" +) + +type ( + // SchemaType defines the type of JSON schema node we are currently processing + SchemaType string + + // TypeHandler is a standard delegate used for walking the schema tree. + // Note that it is permissible for a TypeHandler to return `nil, nil`, which indicates that + // there is no type to be included in the output. + TypeHandler func(ctx context.Context, scanner *SchemaScanner, schema *gojsonschema.SubSchema) (astmodel.Type, error) + + // UnknownSchemaError is used when we find a JSON schema node that we don't know how to handle + UnknownSchemaError struct { + Schema *gojsonschema.SubSchema + Filters []string + } + + // A BuilderOption is used to provide custom configuration for our scanner + BuilderOption func(scanner *SchemaScanner) error + + // A SchemaScanner is used to scan a JSON Schema extracting and collecting type definitions + SchemaScanner struct { + Structs map[string]*astmodel.StructDefinition + TypeHandlers map[SchemaType]TypeHandler + Filters []string + idFactory astmodel.IdentifierFactory + } +) + +// FindStruct looks to see if we have seen the specified struct before, returning its definition if we have. +func (scanner *SchemaScanner) FindStruct(name string, version string) (*astmodel.StructDefinition, bool) { + key := name + "/" + version + result, ok := scanner.Structs[key] + return result, ok +} + +// AddStruct makes a record of the specified struct so that FindStruct() can return it when it is needed again. +func (scanner *SchemaScanner) AddStruct(structDefinition *astmodel.StructDefinition) { + key := structDefinition.Name() + "/" + structDefinition.Version() + scanner.Structs[key] = structDefinition +} + +// Definitions for different kinds of JSON schema +const ( + AnyOf SchemaType = "anyOf" + AllOf SchemaType = "allOf" + OneOf SchemaType = "oneOf" + Ref SchemaType = "ref" + Array SchemaType = "array" + Bool SchemaType = "boolean" + Int SchemaType = "integer" + Number SchemaType = "number" + Object SchemaType = "object" + String SchemaType = "string" + Enum SchemaType = "enum" + Unknown SchemaType = "unknown" + + expressionFragment = "/definitions/expression" +) + +func (use *UnknownSchemaError) Error() string { + if use.Schema == nil || use.Schema.ID == nil { + return fmt.Sprint("unable to determine schema type for nil schema or one without an ID") + } + return fmt.Sprintf("unable to determine the schema type for %s", use.Schema.ID.String()) +} + +// NewSchemaScanner constructs a new scanner, ready for use +func NewSchemaScanner(idFactory astmodel.IdentifierFactory) *SchemaScanner { + return &SchemaScanner{ + Structs: make(map[string]*astmodel.StructDefinition), + TypeHandlers: DefaultTypeHandlers(), + idFactory: idFactory, + } +} + +// AddTypeHandler will override a default type handler for a given SchemaType. This allows for a consumer to customize +// AST generation. +func (scanner *SchemaScanner) AddTypeHandler(schemaType SchemaType, handler TypeHandler) { + scanner.TypeHandlers[schemaType] = handler +} + +// RunHandler triggers the appropriate handler for the specified schemaType +func (scanner *SchemaScanner) RunHandler(ctx context.Context, schemaType SchemaType, schema *gojsonschema.SubSchema) (astmodel.Type, error) { + handler := scanner.TypeHandlers[schemaType] + return handler(ctx, scanner, schema) +} + +// RunHandlerForSchema inspects the passed schema to identify what kind it is, then runs the appropriate handler +func (scanner *SchemaScanner) RunHandlerForSchema(ctx context.Context, schema *gojsonschema.SubSchema) (astmodel.Type, error) { + schemaType, err := getSubSchemaType(schema) + if err != nil { + return nil, err + } + + return scanner.RunHandler(ctx, schemaType, schema) +} + +// AddFilters will add a filter (perhaps not currently used?) +func (scanner *SchemaScanner) AddFilters(filters []string) { + scanner.Filters = append(scanner.Filters, filters...) +} + +// ToNodes takes in the resources section of the Azure deployment template schema and returns golang AST Packages +// containing the types described in the schema which match the {resource_type}/{version} filters provided. +// +// The schema we are working with is something like the following (in yaml for brevity): +// +// resources: +// items: +// oneOf: +// allOf: +// $ref: {{ base resource schema for ARM }} +// oneOf: +// - ARM resources +// oneOf: +// allOf: +// $ref: {{ base resource for external resources, think SendGrid }} +// oneOf: +// - External ARM resources +// oneOf: +// allOf: +// $ref: {{ base resource for ARM specific stuff like locks, deployments, etc }} +// oneOf: +// - ARM specific resources. I'm not 100% sure why... +// +// allOf acts like composition which composites each schema from the child oneOf with the base reference from allOf. +func (scanner *SchemaScanner) ToNodes(ctx context.Context, schema *gojsonschema.SubSchema, opts ...BuilderOption) (astmodel.Definition, error) { + ctx, span := tab.StartSpan(ctx, "ToNodes") + defer span.End() + + for _, opt := range opts { + if err := opt(scanner); err != nil { + return nil, err + } + } + + schemaType, err := getSubSchemaType(schema) + if err != nil { + return nil, err + } + + // get initial topic from ID and Title: + url := schema.ID.GetUrl() + if schema.Title == nil { + return nil, fmt.Errorf("Given schema has no Title") + } + + rootStructName := *schema.Title + rootStructVersion, err := versionOf(url) + if err != nil { + return nil, fmt.Errorf("Unable to extract version for schema: %w", err) + } + + nodes, err := scanner.RunHandler(ctx, schemaType, schema) + if err != nil { + return nil, err + } + + // TODO: make safer: + root := astmodel.NewStructDefinition(rootStructName, rootStructVersion, nodes.(*astmodel.StructType).Fields()...) + description := "Generated from: " + url.String() + root = root.WithDescription(&description) + + scanner.AddStruct(root) + + return root, nil +} + +// DefaultTypeHandlers will create a default map of JSONType to AST transformers +func DefaultTypeHandlers() map[SchemaType]TypeHandler { + return map[SchemaType]TypeHandler{ + Array: arrayHandler, + OneOf: oneOfHandler, + AnyOf: anyOfHandler, + AllOf: allOfHandler, + Ref: refHandler, + Object: objectHandler, + Enum: enumHandler, + String: fixedTypeHandler(astmodel.StringType, "string"), + Int: fixedTypeHandler(astmodel.IntType, "int"), + Number: fixedTypeHandler(astmodel.FloatType, "number"), + Bool: fixedTypeHandler(astmodel.BoolType, "bool"), + } +} + +func enumHandler(ctx context.Context, scanner *SchemaScanner, schema *gojsonschema.SubSchema) (astmodel.Type, error) { + ctx, span := tab.StartSpan(ctx, "enumHandler") + defer span.End() + + // if there is an underlying primitive type, return that + for _, t := range []SchemaType{Bool, Int, Number, String} { + if schema.Types.Contains(string(t)) { + return getPrimitiveType(t) + } + } + + // assume string + return astmodel.StringType, nil + + //TODO Create an Enum field that captures the permitted options too +} + +func fixedTypeHandler(typeToReturn astmodel.Type, handlerName string) TypeHandler { + return func(ctx context.Context, scanner *SchemaScanner, schema *gojsonschema.SubSchema) (astmodel.Type, error) { + ctx, span := tab.StartSpan(ctx, handlerName+"Handler") + defer span.End() + + return typeToReturn, nil + } +} + +func objectHandler(ctx context.Context, scanner *SchemaScanner, schema *gojsonschema.SubSchema) (astmodel.Type, error) { + ctx, span := tab.StartSpan(ctx, "objectHandler") + defer span.End() + + fields, err := getFields(ctx, scanner, schema) + if err != nil { + return nil, err + } + + // if we _only_ have an 'additionalProperties' field, then we are making + // a dictionary-like type, and we won't generate a struct; instead, we + // will just use the 'additionalProperties' type directly + if len(fields) == 1 && fields[0].FieldName() == "additionalProperties" { + return fields[0].FieldType(), nil + } + + structDefinition := astmodel.NewStructType(fields) + return structDefinition, nil +} + +func getFields(ctx context.Context, scanner *SchemaScanner, schema *gojsonschema.SubSchema) ([]*astmodel.FieldDefinition, error) { + ctx, span := tab.StartSpan(ctx, "getFields") + defer span.End() + + var fields []*astmodel.FieldDefinition + for _, prop := range schema.PropertiesChildren { + schemaType, err := getSubSchemaType(prop) + if _, ok := err.(*UnknownSchemaError); ok { + // if we don't know the type, we still need to provide the property, we will just provide open interface + fieldName := scanner.idFactory.CreateIdentifier(prop.Property) + field := astmodel.NewFieldDefinition(fieldName, prop.Property, astmodel.AnyType).WithDescription(schema.Description) + fields = append(fields, field) + continue + } + + if err != nil { + return nil, err + } + + propType, err := scanner.RunHandler(ctx, schemaType, prop) + if _, ok := err.(*UnknownSchemaError); ok { + // if we don't know the type, we still need to provide the property, we will just provide open interface + fieldName := scanner.idFactory.CreateIdentifier(prop.Property) + field := astmodel.NewFieldDefinition(fieldName, prop.Property, astmodel.AnyType).WithDescription(schema.Description) + fields = append(fields, field) + continue + } + + if err != nil { + return nil, err + } + + fieldName := scanner.idFactory.CreateIdentifier(prop.Property) + field := astmodel.NewFieldDefinition(fieldName, prop.Property, propType).WithDescription(prop.Description) + fields = append(fields, field) + } + + // see: https://json-schema.org/understanding-json-schema/reference/object.html#properties + if schema.AdditionalProperties == nil { + // if not specified, any additional properties are allowed (TODO: tell all Azure teams this fact and get them to update their API definitions) + // for now we aren't following the spec 100% as it pollutes the generated code + // only generate this field if there are no other fields: + if len(fields) == 0 { + // TODO: for JSON serialization this needs to be unpacked into "parent" + additionalPropsField := astmodel.NewFieldDefinition("additionalProperties", "additionalProperties", astmodel.NewStringMap(astmodel.AnyType)) + fields = append(fields, additionalPropsField) + } + } else if schema.AdditionalProperties != false { + // otherwise, if not false then it is a type for all additional fields + // TODO: for JSON serialization this needs to be unpacked into "parent" + additionalPropsType, err := scanner.RunHandlerForSchema(ctx, schema.AdditionalProperties.(*gojsonschema.SubSchema)) + if err != nil { + return nil, err + } + + additionalPropsField := astmodel.NewFieldDefinition("additionalProperties", "additionalProperties", astmodel.NewStringMap(additionalPropsType)) + fields = append(fields, additionalPropsField) + } + + return fields, nil +} + +func refHandler(ctx context.Context, scanner *SchemaScanner, schema *gojsonschema.SubSchema) (astmodel.Type, error) { + ctx, span := tab.StartSpan(ctx, "refHandler") + defer span.End() + + url := schema.Ref.GetUrl() + + if url.Fragment == expressionFragment { + return nil, nil + } + + log.Printf("INF $ref to %s\n", url) + + schemaType, err := getSubSchemaType(schema.RefSchema) + if err != nil { + return nil, err + } + + // make a new topic based on the ref URL + name, err := objectTypeOf(url) + if err != nil { + return nil, err + } + + version, err := versionOf(url) + if err != nil { + return nil, err + } + + if schemaType == Object { + // see if we already generated a struct for this ref + // TODO: base this on URL? + if definition, ok := scanner.FindStruct(name, version); ok { + return &definition.StructReference, nil + } + + // Add a placeholder to avoid recursive calls + sd := astmodel.NewStructDefinition(name, version) + scanner.AddStruct(sd) + } + + result, err := scanner.RunHandler(ctx, schemaType, schema.RefSchema) + if err != nil { + return nil, err + } + + // if we got back a struct type, give it a name + // (i.e. emit it as a "type X struct {}") + // and return that instead + if std, ok := result.(*astmodel.StructType); ok { + + description := "Generated from: " + url.String() + + sd := astmodel.NewStructDefinition(name, version, std.Fields()...).WithDescription(&description) + + // this will overwrite placeholder added above + scanner.AddStruct(sd) + return &sd.StructReference, nil + } + + return result, err +} + +func allOfHandler(ctx context.Context, scanner *SchemaScanner, schema *gojsonschema.SubSchema) (astmodel.Type, error) { + ctx, span := tab.StartSpan(ctx, "allOfHandler") + defer span.End() + + var fields []*astmodel.FieldDefinition + for _, all := range schema.AllOf { + + d, err := scanner.RunHandlerForSchema(ctx, all) + if err != nil { + return nil, err + } + + if d == nil { + continue // ignore skipped types + } + + // unpack the contents of what we got from subhandlers: + switch d.(type) { + case *astmodel.StructType: + // if it's a struct type get all its fields: + s := d.(*astmodel.StructType) + fields = append(fields, s.Fields()...) + + case *astmodel.StructReference: + // if it's a reference to a struct type, embed it inside: + s := d.(*astmodel.StructReference) + fields = append(fields, astmodel.NewEmbeddedStructDefinition(s)) + + default: + log.Printf("Unhandled type in allOf: %T\n", d) + } + } + + result := astmodel.NewStructType(fields) + return result, nil +} + +func oneOfHandler(ctx context.Context, scanner *SchemaScanner, schema *gojsonschema.SubSchema) (astmodel.Type, error) { + ctx, span := tab.StartSpan(ctx, "oneOfHandler") + defer span.End() + + // make sure we visit everything before bailing out, + // to get all types generated even if we can't use them + var results []astmodel.Type + for _, one := range schema.OneOf { + result, err := scanner.RunHandlerForSchema(ctx, one) + if err != nil { + return nil, err + } + + if result != nil { + results = append(results, result) + } + } + + if len(results) == 1 { + return results[0], nil + } + + // bail out, can't handle this yet: + return astmodel.AnyType, nil +} + +func anyOfHandler(ctx context.Context, scanner *SchemaScanner, schema *gojsonschema.SubSchema) (astmodel.Type, error) { + ctx, span := tab.StartSpan(ctx, "anyOfHandler") + defer span.End() + + // again, make sure we walk everything first + // to generate types: + var results []astmodel.Type + for _, any := range schema.AnyOf { + result, err := scanner.RunHandlerForSchema(ctx, any) + if err != nil { + return nil, err + } + + if result != nil { + results = append(results, result) + } + } + + if len(results) == 1 { + return results[0], nil + } + + // return all possibilities... + return astmodel.AnyType, nil +} + +func arrayHandler(ctx context.Context, scanner *SchemaScanner, schema *gojsonschema.SubSchema) (astmodel.Type, error) { + ctx, span := tab.StartSpan(ctx, "arrayHandler") + defer span.End() + + if len(schema.ItemsChildren) > 1 { + return nil, fmt.Errorf("item contains more children than expected: %v", schema.ItemsChildren) + } + + if len(schema.ItemsChildren) == 0 { + // there is no type to the elements, so we must assume interface{} + log.Printf("WRN Interface assumption unproven\n") + + return astmodel.NewArrayType(astmodel.AnyType), nil + } + + // get the only child type and wrap it up as an array type: + + onlyChild := schema.ItemsChildren[0] + + astType, err := scanner.RunHandlerForSchema(ctx, onlyChild) + if err != nil { + return nil, err + } + + return astmodel.NewArrayType(astType), nil +} + +func getSubSchemaType(schema *gojsonschema.SubSchema) (SchemaType, error) { + // handle special nodes: + switch { + case schema.Enum != nil: // this should come before the primitive checks below + return Enum, nil + case schema.OneOf != nil: + return OneOf, nil + case schema.AllOf != nil: + return AllOf, nil + case schema.AnyOf != nil: + return AnyOf, nil + case schema.RefSchema != nil: + return Ref, nil + } + + if schema.Types.IsTyped() { + for _, t := range []SchemaType{Object, String, Number, Int, Bool, Array} { + if schema.Types.Contains(string(t)) { + return t, nil + } + } + } + + // TODO: this whole switch is a bit wrong because type: 'object' can + // be combined with OneOf/AnyOf/etc. still, it works okay for now... + if !schema.Types.IsTyped() && schema.PropertiesChildren != nil { + // no type but has properties, treat it as an object + return Object, nil + } + + return Unknown, &UnknownSchemaError{Schema: schema} +} + +func getPrimitiveType(name SchemaType) (*astmodel.PrimitiveType, error) { + switch name { + case String: + return astmodel.StringType, nil + case Int: + return astmodel.IntType, nil + case Number: + return astmodel.FloatType, nil + case Bool: + return astmodel.BoolType, nil + default: + return astmodel.AnyType, fmt.Errorf("%s is not a simple type and no ast.NewIdent can be created", name) + } +} + +func isPrimitiveType(name SchemaType) bool { + switch name { + case String, Int, Number, Bool: + return true + default: + return false + } +} + +func asComment(text *string) string { + if text == nil { + return "" + } + + return "// " + *text +} + +// Extract the name of an object from the supplied schema URL +func objectTypeOf(url *url.URL) (string, error) { + isPathSeparator := func(c rune) bool { + return c == '/' + } + + fragmentParts := strings.FieldsFunc(url.Fragment, isPathSeparator) + + return fragmentParts[len(fragmentParts)-1], nil +} + +// Extract the name of an object from the supplied schema URL +func versionOf(url *url.URL) (string, error) { + isPathSeparator := func(c rune) bool { + return c == '/' + } + + pathParts := strings.FieldsFunc(url.Path, isPathSeparator) + versionRegex, err := regexp.Compile("\\d\\d\\d\\d-\\d\\d-\\d\\d") + if err != nil { + return "", fmt.Errorf("Invalid Regex format %w", err) + } + + for _, p := range pathParts { + if versionRegex.MatchString(p) { + return p, nil + } + } + + // No version found, that's fine + return "", nil +} diff --git a/hack/generator/pkg/jsonast/jsonast_test.go b/hack/generator/pkg/jsonast/jsonast_test.go new file mode 100644 index 00000000000..f04771edd90 --- /dev/null +++ b/hack/generator/pkg/jsonast/jsonast_test.go @@ -0,0 +1,378 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package jsonast + +import ( + "bytes" + "context" + "fmt" + "go/format" + "go/token" + "io/ioutil" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/Azure/k8s-infra/hack/generator/pkg/astmodel" + "github.com/sebdah/goldie/v2" + "github.com/xeipuuv/gojsonschema" +) + +func runGoldenTest(t *testing.T, path string) { + testName := strings.TrimPrefix(t.Name(), "TestGolden/") + + g := goldie.New(t) + inputFile, err := ioutil.ReadFile(path) + if err != nil { + t.Fatal(fmt.Errorf("Cannot read golden test input file: %w", err)) + } + + loader := gojsonschema.NewSchemaLoader() + schema, err := loader.Compile(gojsonschema.NewBytesLoader(inputFile)) + + scanner := NewSchemaScanner(astmodel.NewIdentifierFactory()) + nodes, err := scanner.ToNodes(context.TODO(), schema.Root()) + + buf := &bytes.Buffer{} + format.Node(buf, token.NewFileSet(), nodes.AsAst()) + + g.Assert(t, testName, buf.Bytes()) +} + +func TestGolden(t *testing.T) { + + type Test struct { + name string + path string + } + testGroups := make(map[string][]Test) + // find all input .json files + err := filepath.Walk("testdata", func(path string, info os.FileInfo, err error) error { + if filepath.Ext(path) == ".json" { + groupName := filepath.Base(filepath.Dir(path)) + testName := strings.TrimSuffix(filepath.Base(path), ".json") + testGroups[groupName] = append(testGroups[groupName], Test{testName, path}) + } + + return nil + }) + + if err != nil { + t.Fatal(fmt.Errorf("Error enumerating files: %w", err)) + } + + // run all tests + for groupName, fs := range testGroups { + t.Run(groupName, func(t *testing.T) { + for _, f := range fs { + t.Run(f.name, func(t *testing.T) { + runGoldenTest(t, f.path) + }) + } + }) + } +} + +/* +func TestToNodes(t *testing.T) { + type args struct { + resourcesSchema *gojsonschema.SubSchema + opts []BuilderOption + } + tests := []struct { + name string + argsFactory func(*testing.T) *args + want []*ast.Package + wantErr bool + }{ + { + name: "WithSchema", + argsFactory: func(t *testing.T) *args { + schema, err := getDefaultSchema() + if err != nil { + t.Error(err) + } + + return &args{ + resourcesSchema: schema, + } + }, + want: nil, + wantErr: false, + }, + } + scanner := NewSchemaScanner() + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + arg := tt.argsFactory(t) + got, err := scanner.ToNodes(context.TODO(), arg.resourcesSchema.ItemsChildren[0], arg.opts...) + if (err != nil) != tt.wantErr { + t.Errorf("ToNodes() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("ToNodes() got = %+v, want %v", got, tt.want) + } + }) + } +} + +func TestObjectWithNoType(t *testing.T) { + schema := ` +{ + "title": "bar", + "definitions": { + "ApplicationSecurityGroupPropertiesFormat": { + "description": "Application security group properties." + } + }, + + "type": "object", + "properties": { + "foo": { + "$ref": "#/definitions/ApplicationSecurityGroupPropertiesFormat" + } + } +} +` + idFactory := astmodel.NewIdentifierFactory() + scanner := NewSchemaScanner(idFactory) + g := NewGomegaWithT(t) + sl := gojsonschema.NewSchemaLoader() + loader := gojsonschema.NewBytesLoader([]byte(schema)) + sb, err := sl.Compile(loader) + g.Expect(err).To(BeNil()) + + definition, err := scanner.ToNodes(context.TODO(), sb.Root()) + + g.Expect(err).To(BeNil()) + g.Expect(definition).ToNot(BeNil()) + g.Expect(scanner.Structs).To(HaveLen(1)) + + // Has no version!! + structDefinition := scanner.Structs["bar/"] + g.Expect(structDefinition).ToNot(BeNil()) + g.Expect(structDefinition.FieldCount()).To(Equal(1)) + + propertyField := structDefinition.Field(0) + g.Expect(propertyField.FieldName()).To(Equal("Foo")) + + g.Expect(propertyField.FieldType()).To(Equal(astmodel.AnyType)) +} + +func XTestAnyOfWithMultipleComplexObjects(t *testing.T) { + schema := ` +{ + "definitions": { + "genericExtension": { + "type": "object", + "properties": { + "publisher": { + "type": "string", + "minLength": 1, + "description": "Microsoft.Compute/extensions - Publisher" + } + } + }, + "iaaSDiagnostics": { + "type": "object", + "properties": { + "publisher": { + "enum": [ + "Microsoft.Azure.Diagnostics" + ] + } + } + } + }, + + "type": "object", + "properties": { + "properties": { + "anyOf": [ + { + "$ref": "#/definitions/genericExtension" + }, + { + "$ref": "#/definitions/iaaSDiagnostics" + } + ] + } + }, + "description": "Microsoft.Compute/virtualMachines/extensions" +} +` + scanner := &SchemaScanner{} + g := NewGomegaWithT(t) + sl := gojsonschema.NewSchemaLoader() + loader := gojsonschema.NewBytesLoader([]byte(schema)) + sb, err := sl.Compile(loader) + g.Expect(err).To(BeNil()) + nodes, err := scanner.ToNodes(context.TODO(), sb.Root()) + g.Expect(err).To(BeNil()) + g.Expect(nodes).To(HaveLen(1)) + structType, ok := nodes[0].(*ast.StructType) + g.Expect(ok).To(BeTrue()) + g.Expect(structType.Fields.List).To(HaveLen(1)) + propertiesField := structType.Fields.List[0] + g.Expect(propertiesField.Names[0]).To(Equal(ast.NewIdent("properties"))) + g.Expect(propertiesField.Type).To(Equal(ast.NewIdent("interface{}"))) +} + +func TestOneOfWithPropertySibling(t *testing.T) { + schema := ` +{ + "def": { + "type": "object", + "oneOf": [ + { + "properties": { + "ruleSetType": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AzureManagedRuleSet" + ] + }, + { + "$ref": "https://schema.management.azure.com/schemas/common/definitions.json#/definitions/expression" + } + ] + } + } + } + ], + "properties": { + "ruleSetType": { + "type": "string" + } + }, + "required": [ + "ruleSetType" + ], + "description": "Describes azure managed provider." + }, + "type": "object", + "properties": { + "ruleSets": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/def" + } + }, + { + "$ref": "https://schema.management.azure.com/schemas/common/definitions.json#/definitions/expression" + } + ], + "description": "List of rules" + } + }, + "description": "Defines ManagedRuleSets - array of managedRuleSet" +} +` + scanner := &SchemaScanner{} + g := NewGomegaWithT(t) + sl := gojsonschema.NewSchemaLoader() + loader := gojsonschema.NewBytesLoader([]byte(schema)) + sb, err := sl.Compile(loader) + g.Expect(err).To(BeNil()) + nodes, err := scanner.ToNodes(context.TODO(), sb.Root()) + g.Expect(err).To(BeNil()) + g.Expect(nodes).To(HaveLen(1)) + structType, ok := nodes[0].(*ast.StructType) + g.Expect(ok).To(BeTrue()) + g.Expect(structType.Fields.List).To(HaveLen(1)) +} + +func TestAllOfUnion(t *testing.T) { + schema := `{ + "definitions": { + "address": { + "type": "object", + "properties": { + "street_address": { "type": "string" }, + "city": { "type": "string" }, + "state": { "type": "string" } + }, + "required": ["street_address", "city", "state"] + } + }, + + "allOf": [ + { "$ref": "#/definitions/address" }, + { "properties": { + "type": { "enum": [ "residential", "business" ] } + } + } + ] +}` + scanner := &SchemaScanner{} + g := NewGomegaWithT(t) + sl := gojsonschema.NewSchemaLoader() + loader := gojsonschema.NewBytesLoader([]byte(schema)) + sb, err := sl.Compile(loader) + g.Expect(err).To(BeNil()) + nodes, err := scanner.ToNodes(context.TODO(), sb.Root()) + g.Expect(err).To(BeNil()) + g.Expect(nodes).To(HaveLen(1)) + structType, ok := nodes[0].(*ast.StructType) + g.Expect(ok).To(BeTrue()) + g.Expect(structType.Fields.List).To(HaveLen(4)) +} + +func TestAnyOfLocation(t *testing.T) { + schema := ` +{ +"anyOf": [ + { + "type": "string" + }, + { + "enum": [ + "East Asia", + "Southeast Asia", + "Central US" + ] + } + ] +}` + scanner := &SchemaScanner{} + g := NewGomegaWithT(t) + sl := gojsonschema.NewSchemaLoader() + loader := gojsonschema.NewBytesLoader([]byte(schema)) + sb, err := sl.Compile(loader) + g.Expect(err).To(BeNil()) + nodes, err := scanner.ToNodes(context.TODO(), sb.Root()) + g.Expect(err).To(BeNil()) + g.Expect(nodes).To(HaveLen(1)) + field, ok := nodes[0].(*ast.Field) + g.Expect(ok).To(BeTrue()) + g.Expect(field.Names[0].Name).To(Equal("anyOf")) + g.Expect(field.Type.(*ast.Ident)).To(Equal(ast.NewIdent("string"))) +} + +func getDefaultSchema() (*gojsonschema.SubSchema, error) { + sl := gojsonschema.NewSchemaLoader() + ref := "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json" + schema, err := sl.Compile(gojsonschema.NewReferenceLoader(ref)) + if err != nil { + return nil, err + } + + root := schema.Root() + for _, child := range root.PropertiesChildren { + if child.Property == "resources" { + return child, nil + } + } + return nil, errors.New("couldn't find resources in the schema") +} + +*/ diff --git a/hack/generator/pkg/jsonast/objectTypeOf_test.go b/hack/generator/pkg/jsonast/objectTypeOf_test.go new file mode 100644 index 00000000000..7baeff38893 --- /dev/null +++ b/hack/generator/pkg/jsonast/objectTypeOf_test.go @@ -0,0 +1,25 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package jsonast + +import ( + "net/url" + "testing" + + . "github.com/onsi/gomega" +) + +func Test_ObjectTypeOf(t *testing.T) { + g := NewGomegaWithT(t) + + url, err := url.Parse("https://schema.management.azure.com/schemas/2015-01-01/Microsoft.Resources.json#/resourceDefinitions/deployments") + g.Expect(err).To(BeNil()) + + name, err := objectTypeOf(url) + + g.Expect(name).To(Equal("deployments")) + g.Expect(err).To(BeNil()) +} diff --git a/hack/generator/pkg/jsonast/schema.json b/hack/generator/pkg/jsonast/schema.json new file mode 100644 index 00000000000..fd8d72012cc --- /dev/null +++ b/hack/generator/pkg/jsonast/schema.json @@ -0,0 +1,5303 @@ +{ + "id": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Template", + "description": "An Azure deployment template", + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "JSON schema reference" + }, + "apiProfile": { + "type": "string", + "enum": [ + "2017-03-09-profile", + "2018-03-01-hybrid", + "2018-06-01-profile" + ], + "description": "The apiProfile to use for all resources in the template." + }, + "contentVersion": { + "type": "string", + "pattern": "(^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$)", + "description": "A 4 number format for the version number of this template file. For example, 1.0.0.0" + }, + "variables": { + "type": "object", + "description": "Variable definitions" + }, + "parameters": { + "type": "object", + "description": "Input parameter definitions", + "additionalProperties": { + "$ref": "#/definitions/parameter" + } + }, + "functions": { + "type": "array", + "items": { + "$ref": "#/definitions/functionNamespace" + }, + "description": "User defined functions" + }, + "resources": { + "type": "array", + "description": "Collection of resources to be deployed", + "items": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/definitions/resourceBase" + }, + { + "oneOf": [ + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-16/Microsoft.HealthcareApis.json#/resourceDefinitions/services" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01-preview/Microsoft.AppConfiguration.json#/resourceDefinitions/configurationStores" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-20-preview/Microsoft.HealthcareApis.json#/resourceDefinitions/services" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01-preview/Microsoft.Genomics.json#/resourceDefinitions/accounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/frontDoors" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/frontDoorWebApplicationFirewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Cache.json#/resourceDefinitions/Redis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Cache.json#/resourceDefinitions/Redis_firewallRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Cache.json#/resourceDefinitions/Redis_linkedServers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Cache.json#/resourceDefinitions/Redis_patchSchedules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-19/Microsoft.Search.json#/resourceDefinitions/searchServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-16/Microsoft.AnalysisServices.json#/resourceDefinitions/servers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.AnalysisServices.json#/resourceDefinitions/servers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_extendedInformation" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-08/Microsoft.DocumentDB.json#/resourceDefinitions/databaseAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-08/Microsoft.DocumentDB.json#/resourceDefinitions/databaseAccounts_apis_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-08/Microsoft.DocumentDB.json#/resourceDefinitions/databaseAccounts_apis_databases_collections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-08/Microsoft.DocumentDB.json#/resourceDefinitions/databaseAccounts_apis_databases_containers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-08/Microsoft.DocumentDB.json#/resourceDefinitions/databaseAccounts_apis_databases_graphs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-08/Microsoft.DocumentDB.json#/resourceDefinitions/databaseAccounts_apis_keyspaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-08/Microsoft.DocumentDB.json#/resourceDefinitions/databaseAccounts_apis_keyspaces_tables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-08/Microsoft.DocumentDB.json#/resourceDefinitions/databaseAccounts_apis_tables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-01/Microsoft.KeyVault.json#/resourceDefinitions/secrets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.KeyVault.json#/resourceDefinitions/vaults_secrets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-15/Microsoft.DevTestLab.json#/resourceDefinitions/labs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-15/Microsoft.DevTestLab.json#/resourceDefinitions/labs_artifactsources" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-15/Microsoft.DevTestLab.json#/resourceDefinitions/labs_customimages" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-15/Microsoft.DevTestLab.json#/resourceDefinitions/labs_formulas" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-15/Microsoft.DevTestLab.json#/resourceDefinitions/labs_policysets_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-15/Microsoft.DevTestLab.json#/resourceDefinitions/labs_schedules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-15/Microsoft.DevTestLab.json#/resourceDefinitions/labs_virtualmachines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-15/Microsoft.DevTestLab.json#/resourceDefinitions/labs_virtualnetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationAlertSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationFabrics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationFabrics_replicationNetworks_replicationNetworkMappings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationFabrics_replicationProtectionContainers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationFabrics_replicationProtectionContainers_replicationMigrationItems" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationFabrics_replicationProtectionContainers_replicationProtectedItems" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationFabrics_replicationProtectionContainers_replicationProtectionContainerMappings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationFabrics_replicationRecoveryServicesProviders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationFabrics_replicationStorageClassifications_replicationStorageClassificationMappings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationFabrics_replicationvCenters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-10/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_replicationRecoveryPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-21-preview/Microsoft.DevTestLab.json#/resourceDefinitions/labs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-21-preview/Microsoft.DevTestLab.json#/resourceDefinitions/labs_virtualmachines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-06-01/Microsoft.Web.json#/resourceDefinitions/certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-06-01/Microsoft.Web.json#/resourceDefinitions/serverfarms" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.Web.json#/resourceDefinitions/certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.Web.json#/resourceDefinitions/serverfarms" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-01/Microsoft.DomainRegistration.json#/resourceDefinitions/domains" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-01/Microsoft.DomainRegistration.json#/resourceDefinitions/domains_domainOwnershipIdentifiers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.CertificateRegistration.json#/resourceDefinitions/certificateOrders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.CertificateRegistration.json#/resourceDefinitions/certificateOrders_certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.Web.json#/resourceDefinitions/certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.Web.json#/resourceDefinitions/csrs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_config" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_domainOwnershipIdentifiers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_hostNameBindings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_hybridconnection" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_hybridConnectionNamespaces_relays" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_instances_deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_premieraddons" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_publicCertificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_config" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_domainOwnershipIdentifiers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_hostNameBindings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_hybridconnection" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_hybridConnectionNamespaces_relays" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_instances_deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_premieraddons" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_publicCertificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_virtualNetworkConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_virtualNetworkConnections_gateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_sourcecontrol" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_sourcecontrol" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_virtualNetworkConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Web.json#/resourceDefinitions/sites_virtualNetworkConnections_gateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Web.json#/resourceDefinitions/hostingEnvironments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Web.json#/resourceDefinitions/hostingEnvironments_workerPools" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Web.json#/resourceDefinitions/hostingEnvironments_multiRolePools" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Web.json#/resourceDefinitions/serverfarms" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Web.json#/resourceDefinitions/serverfarms_virtualNetworkConnections_gateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Web.json#/resourceDefinitions/serverfarms_virtualNetworkConnections_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-07-privatepreview/Microsoft.Kusto.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-07-privatepreview/Microsoft.Kusto.json#/resourceDefinitions/clusters_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-07-preview/Microsoft.Kusto.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-07-preview/Microsoft.Kusto.json#/resourceDefinitions/clusters_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-21/Microsoft.Kusto.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-21/Microsoft.Kusto.json#/resourceDefinitions/clusters_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-21/Microsoft.Kusto.json#/resourceDefinitions/clusters_databases_dataconnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-15/Microsoft.Kusto.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-15/Microsoft.Kusto.json#/resourceDefinitions/clusters_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-15/Microsoft.Kusto.json#/resourceDefinitions/clusters_databases_dataconnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-07/Microsoft.Kusto.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-07/Microsoft.Kusto.json#/resourceDefinitions/clusters_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-07/Microsoft.Kusto.json#/resourceDefinitions/clusters_databases_dataconnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-07/Microsoft.Kusto.json#/resourceDefinitions/clusters_attacheddatabaseconfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Insights.json#/resourceDefinitions/alertrules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Insights.json#/resourceDefinitions/components" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Insights.json#/resourceDefinitions/autoscalesettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Insights.json#/resourceDefinitions/webtests" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-02-26/microsoft.visualstudio.json#/resourceDefinitions/account" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01-preview/Microsoft.Cache.json#/resourceDefinitions/Redis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-01/Microsoft.NotificationHubs.json#/resourceDefinitions/notificationHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-01/Microsoft.NotificationHubs.json#/resourceDefinitions/namespaces_notificationhubs_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.NotificationHubs.json#/resourceDefinitions/notificationHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.NotificationHubs.json#/resourceDefinitions/namespaces_notificationhubs_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.Cache.json#/resourceDefinitions/Redis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-11-01/Microsoft.Network.json#/resourceDefinitions/trafficManagerProfiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.Network.json#/resourceDefinitions/trafficManagerProfiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-05-01/Microsoft.Network.json#/resourceDefinitions/trafficManagerProfiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/trafficManagerProfiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-01-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices_containers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices_containers_immutabilityPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01-preview/Microsoft.Storage.json#/resourceDefinitions/storageAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01-preview/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_managementPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01-preview/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices_containers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01-preview/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices_containers_immutabilityPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices_containers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices_containers_immutabilityPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices_containers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices_containers_immutabilityPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_managementPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices_containers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_blobServices_containers_immutabilityPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Storage.json#/resourceDefinitions/storageAccounts_managementPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.VMwareCloudSimple.json#/resourceDefinitions/dedicatedCloudNodes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.VMwareCloudSimple.json#/resourceDefinitions/dedicatedCloudServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.VMwareCloudSimple.json#/resourceDefinitions/virtualMachines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.Compute.json#/resourceDefinitions/availabilitySets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.Compute.json#/resourceDefinitions/extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.Compute.json#/resourceDefinitions/virtualMachineScaleSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-01/Microsoft.KeyVault.json#/resourceDefinitions/vaults" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.KeyVault.json#/resourceDefinitions/vaults" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-06-01/Microsoft.Web.json#/resourceDefinitions/sites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.Web.json#/resourceDefinitions/sites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-08-01-preview/Microsoft.Scheduler.json#/resourceDefinitions/jobCollections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-01/Microsoft.NotificationHubs.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-04-01/Microsoft.NotificationHubs.json#/resourceDefinitions/namespaces_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.NotificationHubs.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.NotificationHubs.json#/resourceDefinitions/namespaces_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.Compute.json#/resourceDefinitions/virtualMachines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-01-preview/Microsoft.DataLakeStore.json#/resourceDefinitions/accounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.DataLakeStore.json#/resourceDefinitions/accounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.DataLakeStore.json#/resourceDefinitions/accounts_firewallRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.DataLakeStore.json#/resourceDefinitions/accounts_trustedIdProviders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-01-preview/Microsoft.DataLakeAnalytics.json#/resourceDefinitions/accounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.DataLakeAnalytics.json#/resourceDefinitions/accounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.DataLakeAnalytics.json#/resourceDefinitions/accounts_dataLakeStoreAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.DataLakeAnalytics.json#/resourceDefinitions/accounts_storageAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.DataLakeAnalytics.json#/resourceDefinitions/accounts_firewallRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.DataLakeAnalytics.json#/resourceDefinitions/accounts_computePolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-02-01-preview/Microsoft.CognitiveServices.json#/resourceDefinitions/accounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-18/Microsoft.CognitiveServices.json#/resourceDefinitions/accounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-01-29/Microsoft.PowerBI.json#/resourceDefinitions/workspaceCollections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.PowerBIDedicated.json#/resourceDefinitions/capacities" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.DataCatalog.json#/resourceDefinitions/catalogs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.ContainerService.json#/resourceDefinitions/containerServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-04-preview/Microsoft.Network.json#/resourceDefinitions/dnszones" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-04-preview/Microsoft.Network.json#/resourceDefinitions/dnszones_A" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-04-preview/Microsoft.Network.json#/resourceDefinitions/dnszones_AAAA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-04-preview/Microsoft.Network.json#/resourceDefinitions/dnszones_CNAME" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-04-preview/Microsoft.Network.json#/resourceDefinitions/dnszones_MX" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-04-preview/Microsoft.Network.json#/resourceDefinitions/dnszones_NS" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-04-preview/Microsoft.Network.json#/resourceDefinitions/dnszones_PTR" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-04-preview/Microsoft.Network.json#/resourceDefinitions/dnszones_SOA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-04-preview/Microsoft.Network.json#/resourceDefinitions/dnszones_SRV" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-04-preview/Microsoft.Network.json#/resourceDefinitions/dnszones_TXT" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Network.json#/resourceDefinitions/dnszones" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Network.json#/resourceDefinitions/dnszones_A" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Network.json#/resourceDefinitions/dnszones_AAAA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Network.json#/resourceDefinitions/dnszones_CNAME" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Network.json#/resourceDefinitions/dnszones_MX" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Network.json#/resourceDefinitions/dnszones_NS" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Network.json#/resourceDefinitions/dnszones_PTR" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Network.json#/resourceDefinitions/dnszones_SOA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Network.json#/resourceDefinitions/dnszones_SRV" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Network.json#/resourceDefinitions/dnszones_TXT" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-01/Microsoft.Cdn.json#/resourceDefinitions/profiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-01/Microsoft.Cdn.json#/resourceDefinitions/profiles_endpoints" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-01/Microsoft.Cdn.json#/resourceDefinitions/profiles_endpoints_customDomains" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-01/Microsoft.Cdn.json#/resourceDefinitions/profiles_endpoints_origins" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-02/Microsoft.Cdn.json#/resourceDefinitions/profiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-02/Microsoft.Cdn.json#/resourceDefinitions/profiles_endpoints" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-02/Microsoft.Cdn.json#/resourceDefinitions/profiles_endpoints_customDomains" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-02/Microsoft.Cdn.json#/resourceDefinitions/profiles_endpoints_origins" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-12-01/Microsoft.Batch.json#/resourceDefinitions/batchAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-12-01/Microsoft.Batch.json#/resourceDefinitions/batchAccounts_applications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-12-01/Microsoft.Batch.json#/resourceDefinitions/batchAccounts_applications_versions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Batch.json#/resourceDefinitions/batchAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Batch.json#/resourceDefinitions/batchAccounts_applications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Batch.json#/resourceDefinitions/batchAccounts_applications_versions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Batch.json#/resourceDefinitions/batchAccounts_certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Batch.json#/resourceDefinitions/batchAccounts_pools" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.Cache.json#/resourceDefinitions/Redis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-02-01-preview/Microsoft.Logic.json#/resourceDefinitions/workflows" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json#/resourceDefinitions/workflows" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json#/resourceDefinitions/integrationAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json#/resourceDefinitions/integrationAccounts_agreements" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json#/resourceDefinitions/integrationAccounts_certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json#/resourceDefinitions/integrationAccounts_maps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json#/resourceDefinitions/integrationAccounts_partners" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json#/resourceDefinitions/integrationAccounts_schemas" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json#/resourceDefinitions/integrationAccounts_assemblies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json#/resourceDefinitions/integrationAccounts_batchConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.Logic.json#/resourceDefinitions/workflows" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-07-01/Microsoft.Logic.json#/resourceDefinitions/workflows" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Web.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Web.json#/resourceDefinitions/connectionGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Web.json#/resourceDefinitions/customApis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.Scheduler.json#/resourceDefinitions/jobCollections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.Scheduler.json#/resourceDefinitions/jobCollections_jobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-01-preview/Microsoft.MachineLearning.json#/resourceDefinitions/webServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-05-01-preview/Microsoft.MachineLearning.json#/resourceDefinitions/commitmentPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-01/Microsoft.MachineLearning.json#/resourceDefinitions/workspaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-19/Microsoft.MachineLearningServices.json#/resourceDefinitions/workspaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-19/Microsoft.MachineLearningServices.json#/resourceDefinitions/workspaces_computes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-05-01-preview/Microsoft.MachineLearningExperimentation.json#/resourceDefinitions/accounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-05-01-preview/Microsoft.MachineLearningExperimentation.json#/resourceDefinitions/accounts_workspaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-05-01-preview/Microsoft.MachineLearningExperimentation.json#/resourceDefinitions/accounts_workspaces_projects" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01-preview/Microsoft.MachineLearningServices.json#/resourceDefinitions/workspaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_runbooks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_modules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_variables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_schedules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_jobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_connectionTypes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_compilationjobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_configurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_jobSchedules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_nodeConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_webhooks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_credentials" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-31/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_watchers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-05-15-preview/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_softwareUpdateConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-05-15-preview/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_jobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-05-15-preview/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_sourceControls" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-05-15-preview/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_sourceControls_sourceControlSyncJobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-15/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_compilationjobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-15/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_nodeConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-30/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_python2Packages" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-30/Microsoft.Automation.json#/resourceDefinitions/automationAccounts_runbooks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-10-01/Microsoft.Media.json#/resourceDefinitions/mediaServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_accountFilters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_assets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_assets_assetFilters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_contentKeyPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_liveEvents" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_liveEvents_liveOutputs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_streamingEndpoints" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_streamingLocators" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_streamingPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_transforms" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Media.json#/resourceDefinitions/mediaServices_transforms_jobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-02-03/Microsoft.Devices.json#/resourceDefinitions/IotHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-07-01/Microsoft.Devices.json#/resourceDefinitions/IotHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-22/Microsoft.Devices.json#/resourceDefinitions/IotHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Devices.json#/resourceDefinitions/IotHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-22/Microsoft.Devices.json#/resourceDefinitions/IotHubs_eventHubEndpoints_ConsumerGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Devices.json#/resourceDefinitions/IotHubs_eventHubEndpoints_ConsumerGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-21-preview/Microsoft.Devices.Provisioning.json#/resourceDefinitions/provisioningServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-15/Microsoft.Devices.Provisioning.json#/resourceDefinitions/provisioningServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-07-01-preview/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-07-01-preview/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters_applications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-07-01-preview/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters_applications_services" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-07-01-preview/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters_applicationTypes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-07-01-preview/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters_applicationTypes_versions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01-preview/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01-preview/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters_applications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01-preview/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters_applications_services" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01-preview/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters_applicationTypes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01-preview/Microsoft.ServiceFabric.json#/resourceDefinitions/clusters_applicationTypes_versions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Authorization.json#/resourceDefinitions/locks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Resources.json#/resourceDefinitions/deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-05-10/Microsoft.Resources.json#/resourceDefinitions/deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01-preview/Microsoft.Solutions.json#/resourceDefinitions/applianceDefinitions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01-preview/Microsoft.Solutions.json#/resourceDefinitions/appliances" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-07/Microsoft.ApiManagement.json#/resourceDefinitions/service" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_releases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_schemas" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_tagDescriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_authorizationServers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_backends" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_diagnostics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_diagnostics_loggers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_groups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_groups_users" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_identityProviders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_loggers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications_recipientEmails" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications_recipientUsers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_openidConnectProviders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_apis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_groups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_properties" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_subscriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_templates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_users" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_releases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_schemas" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_tagDescriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_authorizationServers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_backends" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_diagnostics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_diagnostics_loggers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_groups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_groups_users" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_identityProviders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_loggers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications_recipientEmails" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications_recipientUsers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_openidConnectProviders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_apis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_groups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_properties" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_subscriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_templates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_users" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_diagnostics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_releases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_schemas" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_tagDescriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_api-version-sets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_authorizationServers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_backends" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_diagnostics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_groups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_groups_users" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_identityProviders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_loggers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications_recipientEmails" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications_recipientUsers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_openidConnectProviders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_products" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_apis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_groups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_properties" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_subscriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_templates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ApiManagement.json#/resourceDefinitions/service_users" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_diagnostics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_operations_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_releases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_schemas" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_tagDescriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apis_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_apiVersionSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_authorizationServers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_backends" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_caches" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_diagnostics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_groups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_groups_users" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_identityProviders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_loggers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications_recipientEmails" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_notifications_recipientUsers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_openidConnectProviders" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_apis" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_groups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_policies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_products_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_properties" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_subscriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_tags" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_templates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.ApiManagement.json#/resourceDefinitions/service_users" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-30-preview/Microsoft.Compute.json#/resourceDefinitions/disks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-30-preview/Microsoft.Compute.json#/resourceDefinitions/snapshots" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-30-preview/Microsoft.Compute.json#/resourceDefinitions/images" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-30-preview/Microsoft.Compute.json#/resourceDefinitions/availabilitySets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-30-preview/Microsoft.Compute.json#/resourceDefinitions/virtualMachines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-30-preview/Microsoft.Compute.json#/resourceDefinitions/virtualMachineScaleSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-04-30-preview/Microsoft.Compute.json#/resourceDefinitions/extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-27-preview/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01-preview/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01-preview/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries_replications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01-preview/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries_webhooks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries_replications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries_webhooks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01-preview/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries_buildTasks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01-preview/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries_buildTasks_steps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.ContainerRegistry.json#/resourceDefinitions/registries_tasks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Insights.json#/resourceDefinitions/actionGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Insights.json#/resourceDefinitions/activityLogAlerts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-08-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-09-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-12-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-12-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-12-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-12-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-12-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-12-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-30/Microsoft.Compute.json#/resourceDefinitions/disks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-30/Microsoft.Compute.json#/resourceDefinitions/snapshots" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-30/Microsoft.Compute.json#/resourceDefinitions/images" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-30/Microsoft.Compute.json#/resourceDefinitions/availabilitySets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-30/Microsoft.Compute.json#/resourceDefinitions/virtualMachines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-30/Microsoft.Compute.json#/resourceDefinitions/virtualMachineScaleSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-30/Microsoft.Compute.json#/resourceDefinitions/extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.Insights.json#/resourceDefinitions/actionGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.Insights.json#/resourceDefinitions/activityLogAlerts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_advisors" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_administrators" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_auditingPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_backupLongTermRetentionVaults" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_communicationLinks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_connectionPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases_advisors" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases_auditingPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases_backupLongTermRetentionPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases_connectionPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases_dataMaskingPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases_dataMaskingPolicies_rules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases_geoBackupPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases_securityAlertPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_databases_transparentDataEncryption" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_disasterRecoveryConfiguration" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_elasticPools" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-04-01/Microsoft.Sql.json#/resourceDefinitions/servers_firewallRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01/Microsoft.Insights.json#/resourceDefinitions/components" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01/Microsoft.Insights.json#/resourceDefinitions/webtests" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/managedInstances" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_databases_auditingSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_databases_syncGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_databases_syncGroups_syncMembers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_encryptionProtector" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_failoverGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_firewallRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_keys" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_syncAgents" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_virtualNetworkRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/managedInstances_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_auditingSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_databases_auditingSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_databases_backupLongTermRetentionPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_databases_extendedAuditingSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_databases_securityAlertPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_securityAlertPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/managedInstances_databases_securityAlertPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/managedInstances_securityAlertPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_databases_vulnerabilityAssessments_rules_baselines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_databases_vulnerabilityAssessments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01-preview/Microsoft.Sql.json#/resourceDefinitions/managedInstances_databases_vulnerabilityAssessments_rules_baselines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01-preview/Microsoft.Sql.json#/resourceDefinitions/managedInstances_databases_vulnerabilityAssessments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_vulnerabilityAssessments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.Sql.json#/resourceDefinitions/managedInstances_vulnerabilityAssessments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_dnsAliases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_extendedAuditingSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_jobAgents" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_jobAgents_credentials" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_jobAgents_jobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_jobAgents_jobs_executions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_jobAgents_jobs_steps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-03-01-preview/Microsoft.Sql.json#/resourceDefinitions/servers_jobAgents_targetGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.StreamAnalytics.json#/resourceDefinitions/streamingjobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.StreamAnalytics.json#/resourceDefinitions/streamingjobs_functions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.StreamAnalytics.json#/resourceDefinitions/streamingjobs_inputs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.StreamAnalytics.json#/resourceDefinitions/streamingjobs_outputs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.StreamAnalytics.json#/resourceDefinitions/streamingjobs_transformations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-15/Microsoft.TimeSeriesInsights.json#/resourceDefinitions/environments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-15/Microsoft.TimeSeriesInsights.json#/resourceDefinitions/environments_eventSources" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-15/Microsoft.TimeSeriesInsights.json#/resourceDefinitions/environments_referenceDataSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-15/Microsoft.TimeSeriesInsights.json#/resourceDefinitions/environments_accessPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-15-preview/Microsoft.TimeSeriesInsights.json#/resourceDefinitions/environments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-15-preview/Microsoft.TimeSeriesInsights.json#/resourceDefinitions/environments_eventSources" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-15-preview/Microsoft.TimeSeriesInsights.json#/resourceDefinitions/environments_referenceDataSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-15-preview/Microsoft.TimeSeriesInsights.json#/resourceDefinitions/environments_accessPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-11-01/Microsoft.ImportExport.json#/resourceDefinitions/jobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_A" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_AAAA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_CAA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_CNAME" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_MX" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_NS" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_PTR" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_SOA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_SRV" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_TXT" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-02/Microsoft.Migrate.json#/resourceDefinitions/projects" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-02/Microsoft.Migrate.json#/resourceDefinitions/projects_groups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-02/Microsoft.Migrate.json#/resourceDefinitions/projects_groups_assessments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_A" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_AAAA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_CAA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_CNAME" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_MX" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_NS" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_PTR" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_SOA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_SRV" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_TXT" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.AzureStack.json#/resourceDefinitions/registrations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.AzureStack.json#/resourceDefinitions/registrations_customerSubscriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.Compute.json#/resourceDefinitions/images" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.Compute.json#/resourceDefinitions/availabilitySets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.Compute.json#/resourceDefinitions/virtualMachines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.Compute.json#/resourceDefinitions/virtualMachineScaleSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.Compute.json#/resourceDefinitions/extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.Compute.json#/resourceDefinitions/vmssExtensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DBforMariaDB.json#/resourceDefinitions/servers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DBforMariaDB.json#/resourceDefinitions/servers_configurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DBforMariaDB.json#/resourceDefinitions/servers_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DBforMariaDB.json#/resourceDefinitions/servers_firewallRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DBforMariaDB.json#/resourceDefinitions/servers_virtualNetworkRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DBforMariaDB.json#/resourceDefinitions/servers_securityAlertPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforMySQL.json#/resourceDefinitions/servers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforMySQL.json#/resourceDefinitions/servers_configurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforMySQL.json#/resourceDefinitions/servers_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforMySQL.json#/resourceDefinitions/servers_firewallRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforMySQL.json#/resourceDefinitions/servers_virtualNetworkRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforMySQL.json#/resourceDefinitions/servers_securityAlertPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforPostgreSQL.json#/resourceDefinitions/servers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforPostgreSQL.json#/resourceDefinitions/servers_configurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforPostgreSQL.json#/resourceDefinitions/servers_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforPostgreSQL.json#/resourceDefinitions/servers_firewallRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforPostgreSQL.json#/resourceDefinitions/servers_virtualNetworkRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01/Microsoft.DBforPostgreSQL.json#/resourceDefinitions/servers_securityAlertPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01-preview/Microsoft.DBforMySQL.json#/resourceDefinitions/servers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01-preview/Microsoft.DBforMySQL.json#/resourceDefinitions/servers_configurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01-preview/Microsoft.DBforMySQL.json#/resourceDefinitions/servers_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01-preview/Microsoft.DBforMySQL.json#/resourceDefinitions/servers_firewallRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01-preview/Microsoft.DBforPostgreSQL.json#/resourceDefinitions/servers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01-preview/Microsoft.DBforPostgreSQL.json#/resourceDefinitions/servers_configurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01-preview/Microsoft.DBforPostgreSQL.json#/resourceDefinitions/servers_databases" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-12-01-preview/Microsoft.DBforPostgreSQL.json#/resourceDefinitions/servers_firewallRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-05-01-preview/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-15/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-30/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/azureFirewalls" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings_connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers_inboundNatRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_connectionMonitors" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_packetCaptures" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/routeFilters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/routeFilters_routeFilterRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/virtualHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/virtualWans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways_vpnConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Network.json#/resourceDefinitions/vpnSites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/azureFirewalls" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings_connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers_inboundNatRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_connectionMonitors" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_packetCaptures" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/routeFilters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/routeFilters_routeFilterRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/virtualHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/virtualWans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways_vpnConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Network.json#/resourceDefinitions/vpnSites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/azureFirewalls" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings_connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers_inboundNatRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_connectionMonitors" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_packetCaptures" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/publicIPPrefixes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/routeFilters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/routeFilters_routeFilterRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies_serviceEndpointPolicyDefinitions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/virtualHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/virtualWans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways_vpnConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-07-01/Microsoft.Network.json#/resourceDefinitions/vpnSites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/ExpressRoutePorts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/ExpressRoutePorts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/ExpressRoutePorts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/ApplicationGatewayWebApplicationFirewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/ApplicationGatewayWebApplicationFirewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/azureFirewalls" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/bastionHosts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/ddosCustomPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings_connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/expressRouteGateways_expressRouteConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/ExpressRoutePorts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers_inboundNatRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/natGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces_tapConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/networkProfiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_connectionMonitors" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_packetCaptures" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/p2svpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/privateEndpoints" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/privateLinkServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/privateLinkServices_privateEndpointConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/publicIPPrefixes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/routeFilters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/routeFilters_routeFilterRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies_serviceEndpointPolicyDefinitions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/virtualHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkTaps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/virtualWans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/virtualWans_p2sVpnServerConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways_vpnConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-04-01/Microsoft.Network.json#/resourceDefinitions/vpnSites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/ApplicationGatewayWebApplicationFirewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/azureFirewalls" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/bastionHosts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/ddosCustomPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings_connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/expressRouteGateways_expressRouteConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/ExpressRoutePorts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/firewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/firewallPolicies_ruleGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers_inboundNatRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/natGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces_tapConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/networkProfiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_connectionMonitors" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_packetCaptures" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/p2svpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/privateEndpoints" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/privateLinkServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/privateLinkServices_privateEndpointConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/publicIPPrefixes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/routeFilters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/routeFilters_routeFilterRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies_serviceEndpointPolicyDefinitions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/virtualHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkTaps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/virtualWans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/virtualWans_p2sVpnServerConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways_vpnConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Network.json#/resourceDefinitions/vpnSites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/ApplicationGatewayWebApplicationFirewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/azureFirewalls" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/bastionHosts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/ddosCustomPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings_connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/expressRouteGateways_expressRouteConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/ExpressRoutePorts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/firewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/firewallPolicies_ruleGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers_inboundNatRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/natGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces_tapConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/networkProfiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_packetCaptures" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/p2svpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/privateEndpoints" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/privateLinkServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/privateLinkServices_privateEndpointConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/publicIPPrefixes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/routeFilters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/routeFilters_routeFilterRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies_serviceEndpointPolicyDefinitions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/virtualHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkTaps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/virtualRouters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/virtualRouters_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/virtualWans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/virtualWans_p2sVpnServerConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways_vpnConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-07-01/Microsoft.Network.json#/resourceDefinitions/vpnSites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/ApplicationGatewayWebApplicationFirewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/azureFirewalls" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/bastionHosts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/ddosCustomPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings_connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/expressRouteGateways_expressRouteConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/ExpressRoutePorts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/firewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/firewallPolicies_ruleGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers_inboundNatRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/natGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces_tapConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/networkProfiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_packetCaptures" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/p2svpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/privateEndpoints" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/privateLinkServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/privateLinkServices_privateEndpointConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/publicIPPrefixes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/routeFilters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/routeFilters_routeFilterRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies_serviceEndpointPolicyDefinitions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/virtualHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkTaps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/virtualRouters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/virtualRouters_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/virtualWans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways_vpnConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/vpnServerConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01/Microsoft.Network.json#/resourceDefinitions/vpnSites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/ApplicationGatewayWebApplicationFirewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/applicationSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/azureFirewalls" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/bastionHosts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/ddosCustomPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_peerings_connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/expressRouteGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/expressRouteGateways_expressRouteConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/ExpressRoutePorts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/firewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/firewallPolicies_ruleGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/ipGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers_inboundNatRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/natGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces_tapConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/networkProfiles" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups_securityRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/networkWatchers_packetCaptures" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/p2svpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/privateEndpoints" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/privateLinkServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/privateLinkServices_privateEndpointConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/publicIPPrefixes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/routeFilters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/routeFilters_routeFilterRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/routeTables_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/serviceEndpointPolicies_serviceEndpointPolicyDefinitions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/virtualHubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/virtualHubs_routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkTaps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/virtualRouters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/virtualRouters_peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/virtualWans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/vpnGateways_vpnConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/vpnServerConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Network.json#/resourceDefinitions/vpnSites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/natGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-02-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/ApplicationGatewayWebApplicationFirewallPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-12-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/ddosProtectionPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCrossConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/publicIPAddresses" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/loadBalancers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/networkSecurityGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/networkInterfaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/routeTables" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/expressRouteCircuits_authorizations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/ExpressRoutePorts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/ExpressRoutePorts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/applicationGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/connections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/localNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworkGateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_subnets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Network.json#/resourceDefinitions/virtualNetworks_virtualNetworkPeerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_A" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_AAAA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_CAA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_CNAME" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_MX" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_NS" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_PTR" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_SOA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_SRV" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Network.json#/resourceDefinitions/dnsZones_TXT" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.Network.json#/resourceDefinitions/privateDnsZones" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.Network.json#/resourceDefinitions/privateDnsZones_virtualNetworkLinks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.Network.json#/resourceDefinitions/privateDnsZones_A" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.Network.json#/resourceDefinitions/privateDnsZones_AAAA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.Network.json#/resourceDefinitions/privateDnsZones_CNAME" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.Network.json#/resourceDefinitions/privateDnsZones_MX" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.Network.json#/resourceDefinitions/privateDnsZones_PTR" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.Network.json#/resourceDefinitions/privateDnsZones_SOA" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.Network.json#/resourceDefinitions/privateDnsZones_SRV" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.Network.json#/resourceDefinitions/privateDnsZones_TXT" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-15-preview/Microsoft.DataMigration.json#/resourceDefinitions/services" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-15-preview/Microsoft.DataMigration.json#/resourceDefinitions/services_projects" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-15-privatepreview/Microsoft.DataMigration.json#/resourceDefinitions/services" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-11-15-privatepreview/Microsoft.DataMigration.json#/resourceDefinitions/services_projects" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-03-01/Microsoft.Insights.json#/resourceDefinitions/alertrules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-10-01/Microsoft.Insights.json#/resourceDefinitions/components_pricingPlans" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-31/Microsoft.Consumption.json#/resourceDefinitions/budgets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01/Microsoft.Insights.json#/resourceDefinitions/actionGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01/Microsoft.Insights.json#/resourceDefinitions/metricAlerts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.EventGrid.json#/resourceDefinitions/topics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01/Microsoft.EventGrid.json#/resourceDefinitions/eventSubscriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.EventGrid.json#/resourceDefinitions/topics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.EventGrid.json#/resourceDefinitions/eventSubscriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.EventGrid.json#/resourceDefinitions/domains" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.EventGrid.json#/resourceDefinitions/domains_topics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01/Microsoft.BatchAI.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01/Microsoft.BatchAI.json#/resourceDefinitions/fileServers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01/Microsoft.BatchAI.json#/resourceDefinitions/jobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-16/Microsoft.Insights.json#/resourceDefinitions/scheduledQueryRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-12-01/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_backupFabrics_protectionContainers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-12-01/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_backupFabrics_protectionContainers_protectedItems" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-12-01/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_backupPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-12-01/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_backupstorageconfig" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-07-01/Microsoft.RecoveryServices.json#/resourceDefinitions/vaults_backupFabrics_backupProtectionIntent" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Compute.json#/resourceDefinitions/disks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.Compute.json#/resourceDefinitions/snapshots" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-04-01/Microsoft.ContainerInstance.json#/resourceDefinitions/containerGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.ContainerInstance.json#/resourceDefinitions/containerGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.Galleries.json#/resourceDefinitions/galleries" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.Galleries.json#/resourceDefinitions/galleries_images" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.Galleries.json#/resourceDefinitions/galleries_images_versions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.json#/resourceDefinitions/images" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.json#/resourceDefinitions/availabilitySets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.json#/resourceDefinitions/virtualMachines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.json#/resourceDefinitions/virtualMachineScaleSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.json#/resourceDefinitions/disks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.json#/resourceDefinitions/snapshots" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.Extensions.json#/resourceDefinitions/virtualMachines_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Compute.Extensions.json#/resourceDefinitions/virtualMachineScaleSets_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Compute.json#/resourceDefinitions/images" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Compute.json#/resourceDefinitions/availabilitySets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Compute.json#/resourceDefinitions/virtualMachines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Compute.json#/resourceDefinitions/virtualMachineScaleSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Compute.Extensions.json#/resourceDefinitions/virtualMachines_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.Compute.Extensions.json#/resourceDefinitions/virtualMachineScaleSets_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.json#/resourceDefinitions/images" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.json#/resourceDefinitions/availabilitySets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.json#/resourceDefinitions/virtualMachines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.json#/resourceDefinitions/virtualMachineScaleSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.json#/resourceDefinitions/galleries_applications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.json#/resourceDefinitions/galleries_applications_versions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.json#/resourceDefinitions/hostGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.json#/resourceDefinitions/hostGroups_hosts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.Extensions.json#/resourceDefinitions/virtualMachines_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.Extensions.json#/resourceDefinitions/virtualMachineScaleSets_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.Galleries.json#/resourceDefinitions/galleries" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.Galleries.json#/resourceDefinitions/galleries_images" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Compute.Galleries.json#/resourceDefinitions/galleries_images_versions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-07-01-privatepreview/Microsoft.IoTCentral.json#/resourceDefinitions/IoTApps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01/Microsoft.IoTCentral.json#/resourceDefinitions/IoTApps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Maps.json#/resourceDefinitions/accounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.BatchAI.json#/resourceDefinitions/workspaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.BatchAI.json#/resourceDefinitions/workspaces_clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.BatchAI.json#/resourceDefinitions/workspaces_experiments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.BatchAI.json#/resourceDefinitions/workspaces_experiments_jobs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.BatchAI.json#/resourceDefinitions/workspaces_fileServers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01-preview/Microsoft.Insights.json#/resourceDefinitions/ProactiveDetectionConfigs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-07-01/Microsoft.ContainerService.json#/resourceDefinitions/containerServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-31/Microsoft.ContainerService.json#/resourceDefinitions/managedClusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-03-20/Microsoft.OperationalInsights.json#/resourceDefinitions/workspaces_savedSearches" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-03-20/Microsoft.OperationalInsights.json#/resourceDefinitions/workspaces_storageInsightConfigs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-11-01-preview/Microsoft.OperationalInsights.json#/resourceDefinitions/workspaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-11-01-preview/Microsoft.OperationalInsights.json#/resourceDefinitions/workspaces_dataSources" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-11-01-preview/Microsoft.OperationalInsights.json#/resourceDefinitions/workspaces_linkedServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01-preview/Microsoft.OperationalInsights.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-11-01-preview/Microsoft.OperationsManagement.json#/resourceDefinitions/ManagementConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-11-01-preview/Microsoft.OperationsManagement.json#/resourceDefinitions/solutions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01-preview/Microsoft.Peering.json#/resourceDefinitions/peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01-preview/Microsoft.Peering.json#/resourceDefinitions/peeringServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-08-01-preview/Microsoft.Peering.json#/resourceDefinitions/peeringServices_prefixes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01-preview/Microsoft.Peering.json#/resourceDefinitions/peerings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01-preview/Microsoft.Peering.json#/resourceDefinitions/peeringServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01-preview/Microsoft.Peering.json#/resourceDefinitions/peeringServices_prefixes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.StorSimple.json#/resourceDefinitions/managers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_accessControlRecords" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_bandwidthSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_backupPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_backupPolicies_schedules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_volumeContainers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_volumeContainers_volumes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_storageAccountCredentials" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_accessControlRecords" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_alertSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_backupScheduleGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_chapSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_fileservers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_fileservers_shares" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_iscsiservers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_devices_iscsiservers_disks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_extendedInformation" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_storageAccountCredentials" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-10-01/Microsoft.StorSimple.json#/resourceDefinitions/managers_storageDomains" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-01-01/Microsoft.AAD.json#/resourceDefinitions/domainServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-06-01/Microsoft.AAD.json#/resourceDefinitions/domainServices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-10-01/Microsoft.SignalRService.json#/resourceDefinitions/SignalR" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-15/Microsoft.NetApp.json#/resourceDefinitions/netAppAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-15/Microsoft.NetApp.json#/resourceDefinitions/netAppAccounts_capacityPools" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-15/Microsoft.NetApp.json#/resourceDefinitions/netAppAccounts_capacityPools_volumes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-15/Microsoft.NetApp.json#/resourceDefinitions/netAppAccounts_capacityPools_volumes_snapshots" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-01/Microsoft.NetApp.json#/resourceDefinitions/netAppAccounts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-01/Microsoft.NetApp.json#/resourceDefinitions/netAppAccounts_capacityPools" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-01/Microsoft.NetApp.json#/resourceDefinitions/netAppAccounts_capacityPools_volumes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-01/Microsoft.NetApp.json#/resourceDefinitions/netAppAccounts_capacityPools_volumes_snapshots" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-31-preview/Microsoft.ManagedIdentity.json#/resourceDefinitions/userAssignedIdentities" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-30/Microsoft.ManagedIdentity.json#/resourceDefinitions/userAssignedIdentities" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-03-01-preview/Microsoft.HDInsight.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-03-01-preview/Microsoft.HDInsight.json#/resourceDefinitions/clusters_applications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-03-01-preview/Microsoft.HDInsight.json#/resourceDefinitions/clusters_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.HDInsight.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.HDInsight.json#/resourceDefinitions/clusters_applications" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.HDInsight.json#/resourceDefinitions/clusters_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-06-01-preview/Microsoft.Security.json#/resourceDefinitions/jitNetworkAccessPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01-preview/Microsoft.Security.json#/resourceDefinitions/pricings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01-preview/Microsoft.Security.json#/resourceDefinitions/securityContacts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01-preview/Microsoft.Security.json#/resourceDefinitions/workspaceSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01-preview/Microsoft.Security.json#/resourceDefinitions/autoProvisioningSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01-preview/Microsoft.Security.json#/resourceDefinitions/advancedThreatProtectionSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-08-01-preview/Microsoft.Security.json#/resourceDefinitions/informationProtectionPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Security.json#/resourceDefinitions/pricings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Security.json#/resourceDefinitions/securityContacts" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Security.json#/resourceDefinitions/workspaceSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Security.json#/resourceDefinitions/autoProvisioningSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Security.json#/resourceDefinitions/advancedThreatProtectionSettings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.Security.json#/resourceDefinitions/informationProtectionPolicies" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-03-01/Microsoft.Insights.json#/resourceDefinitions/actionGroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ManagedServices.json#/resourceDefinitions/registrationAssignments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01-preview/Microsoft.ManagedServices.json#/resourceDefinitions/registrationDefinitions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.ManagedServices.json#/resourceDefinitions/registrationAssignments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.ManagedServices.json#/resourceDefinitions/registrationDefinitions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-09-01-preview/Microsoft.BareMetal.json#/resourceDefinitions/crayServers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.ContainerService.json#/resourceDefinitions/managedClusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.ContainerService.json#/resourceDefinitions/managedClusters_agentPools" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-03-01/Microsoft.Authorization.json#/resourceDefinitions/policyAssignments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Authorization.json#/resourceDefinitions/policyAssignments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-01-01/Microsoft.Authorization.json#/resourceDefinitions/policyAssignments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-06-01/Microsoft.Authorization.json#/resourceDefinitions/policyAssignments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-09-01/Microsoft.Authorization.json#/resourceDefinitions/policyAssignments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_AuthorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_queues" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_queues_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_topics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_topics_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_topics_subscriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_AuthorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_disasterRecoveryConfigs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_migrationConfigurations" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_networkRuleSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_queues" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_queues_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_topics" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_topics_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_topics_subscriptions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_topics_subscriptions_rules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01-preview/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01-preview/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_ipfilterrules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01-preview/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_networkrulesets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01-preview/Microsoft.ServiceBus.json#/resourceDefinitions/namespaces_virtualnetworkrules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-09-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-09-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_AuthorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-09-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_eventhubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-09-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_eventhubs_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-09-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_eventhubs_consumergroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_AuthorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_eventhubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_eventhubs_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-08-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_eventhubs_consumergroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_AuthorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_disasterRecoveryConfigs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_eventhubs" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_eventhubs_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_eventhubs_consumergroups" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.EventHub.json#/resourceDefinitions/namespaces_networkRuleSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01-preview/Microsoft.EventHub.json#/resourceDefinitions/clusters" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01-preview/Microsoft.EventHub.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01-preview/Microsoft.EventHub.json#/resourceDefinitions/namespaces_ipfilterrules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01-preview/Microsoft.EventHub.json#/resourceDefinitions/namespaces_networkRuleSets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-01-01-preview/Microsoft.EventHub.json#/resourceDefinitions/namespaces_virtualnetworkrules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Relay.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Relay.json#/resourceDefinitions/namespaces_AuthorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Relay.json#/resourceDefinitions/namespaces_HybridConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Relay.json#/resourceDefinitions/namespaces_HybridConnections_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Relay.json#/resourceDefinitions/namespaces_WcfRelays" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-07-01/Microsoft.Relay.json#/resourceDefinitions/namespaces_WcfRelays_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.Relay.json#/resourceDefinitions/namespaces" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.Relay.json#/resourceDefinitions/namespaces_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.Relay.json#/resourceDefinitions/namespaces_hybridConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.Relay.json#/resourceDefinitions/namespaces_hybridConnections_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.Relay.json#/resourceDefinitions/namespaces_wcfRelays" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-04-01/Microsoft.Relay.json#/resourceDefinitions/namespaces_wcfRelays_authorizationRules" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/hostingEnvironments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/hostingEnvironments_multiRolePools" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/hostingEnvironments_workerPools" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/serverfarms" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/serverfarms_virtualNetworkConnections_gateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/serverfarms_virtualNetworkConnections_routes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_config" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_domainOwnershipIdentifiers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_functions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_functions_keys" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_hostNameBindings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_hybridconnection" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_hybridConnectionNamespaces_relays" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_instances_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_migrate" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_networkConfig" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_premieraddons" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_privateAccess" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_publicCertificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_siteextensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_config" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_domainOwnershipIdentifiers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_functions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_functions_keys" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_hostNameBindings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_hybridconnection" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_hybridConnectionNamespaces_relays" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_instances_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_networkConfig" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_premieraddons" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_privateAccess" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_publicCertificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_siteextensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_sourcecontrols" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_virtualNetworkConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_virtualNetworkConnections_gateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_sourcecontrols" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_virtualNetworkConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-02-01/Microsoft.Web.json#/resourceDefinitions/sites_virtualNetworkConnections_gateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/certificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_config" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_domainOwnershipIdentifiers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_functions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_hostNameBindings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_hybridconnection" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_hybridConnectionNamespaces_relays" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_instances_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_migrate" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_networkConfig" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_premieraddons" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_privateAccess" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_publicCertificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_siteextensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_config" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_domainOwnershipIdentifiers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_functions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_hostNameBindings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_hybridconnection" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_hybridConnectionNamespaces_relays" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_instances_extensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_networkConfig" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_premieraddons" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_privateAccess" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_publicCertificates" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_siteextensions" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_sourcecontrols" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_virtualNetworkConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_slots_virtualNetworkConnections_gateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_sourcecontrols" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_virtualNetworkConnections" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-11-01/Microsoft.Web.json#/resourceDefinitions/sites_virtualNetworkConnections_gateways" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01-preview/Microsoft.DataFactory.json#/resourceDefinitions/factories" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01-preview/Microsoft.DataFactory.json#/resourceDefinitions/factories_datasets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01-preview/Microsoft.DataFactory.json#/resourceDefinitions/factories_integrationRuntimes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01-preview/Microsoft.DataFactory.json#/resourceDefinitions/factories_linkedservices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01-preview/Microsoft.DataFactory.json#/resourceDefinitions/factories_pipelines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01-preview/Microsoft.DataFactory.json#/resourceDefinitions/factories_triggers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DataFactory.json#/resourceDefinitions/factories" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DataFactory.json#/resourceDefinitions/factories_dataflows" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DataFactory.json#/resourceDefinitions/factories_datasets" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DataFactory.json#/resourceDefinitions/factories_integrationRuntimes" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DataFactory.json#/resourceDefinitions/factories_linkedservices" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DataFactory.json#/resourceDefinitions/factories_pipelines" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DataFactory.json#/resourceDefinitions/factories_triggers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-06-01/Microsoft.DataFactory.json#/resourceDefinitions/factories_triggers_rerunTriggers" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-01-preview/Microsoft.AppPlatform.json#/resourceDefinitions/Spring" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-01-preview/Microsoft.AppPlatform.json#/resourceDefinitions/Spring_apps" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-01-preview/Microsoft.AppPlatform.json#/resourceDefinitions/Spring_apps_bindings" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-01-preview/Microsoft.AppPlatform.json#/resourceDefinitions/Spring_apps_deployments" + } + ] + } + ] + }, + { + "allOf": [ + { + "$ref": "#/definitions/resourceBaseExternal" + }, + { + "oneOf": [ + { + "$ref": "https://schema.management.azure.com/schemas/2015-01-01/Sendgrid.Email.json#/resourceDefinitions/accounts" + } + ] + } + ] + }, + { + "allOf": [ + { + "$ref": "#/definitions/ARMResourceBase" + }, + { + "oneOf": [ + { + "$ref": "https://schema.management.azure.com/schemas/2015-01-01/Microsoft.Resources.json#/resourceDefinitions/deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2016-02-01/Microsoft.Resources.json#/resourceDefinitions/deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2018-05-01/Microsoft.Resources.json#/resourceDefinitions/deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2019-05-01/Microsoft.Resources.json#/resourceDefinitions/deployments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-01-01/Microsoft.Resources.json#/resourceDefinitions/links" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2015-01-01/Microsoft.Authorization.json#/resourceDefinitions/locks" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2014-10-01-preview/Microsoft.Authorization.json#/resourceDefinitions/roleAssignments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Authorization.json#/resourceDefinitions/roleAssignments" + }, + { + "$ref": "https://schema.management.azure.com/schemas/2017-09-01/Microsoft.Authorization.json#/resourceDefinitions/roleDefinitions" + } + ] + } + ] + } + ] + } + }, + "outputs": { + "type": "object", + "description": "Output parameter definitions", + "additionalProperties": { + "$ref": "#/definitions/output" + } + } + }, + "additionalProperties": false, + "required": [ + "$schema", + "contentVersion", + "resources" + ], + "definitions": { + "ARMResourceBase": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the resource" + }, + "type": { + "type": "string", + "description": "Resource type" + }, + "condition": { + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "https://schema.management.azure.com/schemas/common/definitions.json#/definitions/expression" + } + ], + "description": "Condition of the resource" + }, + "apiVersion": { + "type": "string", + "description": "API Version of the resource type, optional when apiProfile is used on the template" + }, + "dependsOn": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Collection of resources this resource depends on" + } + }, + "required": [ + "name", + "type" + ] + }, + "proxyResourceBase": { + "allOf": [ + { + "$ref": "#/definitions/ARMResourceBase" + }, + { + "properties": { + "location": { + "$ref": "#/definitions/resourceLocations", + "description": "Location to deploy resource to" + } + } + } + ] + }, + "resourceBase": { + "allOf": [ + { + "$ref": "#/definitions/ARMResourceBase" + }, + { + "properties": { + "location": { + "$ref": "#/definitions/resourceLocations", + "description": "Location to deploy resource to" + }, + "tags": { + "type": "object", + "description": "Name-value pairs to add to the resource" + }, + "copy": { + "$ref": "#/definitions/resourceCopy" + }, + "comments": { + "type": "string" + } + } + } + ] + }, + "resourceBaseExternal": { + "$ref": "#/definitions/resourceBase", + "required": [ + "plan" + ] + }, + "resourceSku": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the sku" + }, + "tier": { + "type": "string", + "description": "Tier of the sku" + }, + "size": { + "type": "string", + "description": "Size of the sku" + }, + "family": { + "type": "string", + "description": "Family of the sku" + }, + "capacity": { + "type": "integer", + "description": "Capacity of the sku" + } + }, + "required": [ + "name" + ] + }, + "resourceCopy": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the copy" + }, + "count": { + "oneOf": [ + { + "$ref": "https://schema.management.azure.com/schemas/common/definitions.json#/definitions/expression" + }, + { + "type": "integer" + } + ], + "description": "Count of the copy" + }, + "mode": { + "type": "string", + "enum": [ + "Parallel", + "Serial" + ], + "description": "The copy mode" + }, + "batchSize": { + "oneOf": [ + { + "$ref": "https://schema.management.azure.com/schemas/common/definitions.json#/definitions/expression" + }, + { + "type": "integer" + } + ], + "description": "The serial copy batch size" + } + } + }, + "resourceKind": { + "type": "string", + "maxLength": 64, + "pattern": "(^[a-zA-Z0-9_.()-]+$)", + "description": "Kind of resource" + }, + "resourcePlan": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the plan" + }, + "promotionCode": { + "type": "string", + "description": "Plan promotion code" + }, + "publisher": { + "type": "string", + "description": "Name of the publisher" + }, + "product": { + "type": "string", + "description": "Name of the product" + }, + "version": { + "type": "string", + "description": "Version of the product" + } + }, + "required": [ + "name" + ], + "description": "Plan of the resource" + }, + "resourceLocations": { + "anyOf": [ + { + "type": "string" + }, + { + "enum": [ + "East Asia", + "Southeast Asia", + "Central US", + "East US", + "East US 2", + "West US", + "North Central US", + "South Central US", + "North Europe", + "West Europe", + "Japan West", + "Japan East", + "Brazil South", + "Australia East", + "Australia Southeast", + "Central India", + "West India", + "South India", + "Canada Central", + "Canada East", + "West Central US", + "West US 2", + "UK South", + "UK West", + "Korea Central", + "Korea South", + "global" + ] + } + ] + }, + "functionNamespace": { + "type": "object", + "properties": { + "namespace": { + "type": "string", + "minLength": 1, + "description": "Function namespace" + }, + "members": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/functionMember" + }, + "description": "Function memebers" + } + } + }, + "functionMember": { + "type": "object", + "properties": { + "parameters": { + "type": "array", + "items": { + "$ref": "#/definitions/functionParameter" + }, + "description": "Function parameters" + }, + "output": { + "$ref": "#/definitions/functionOutput", + "description": "Function output" + } + } + }, + "functionParameter": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "description": "Function parameter name" + }, + "type": { + "$ref": "#/definitions/parameterTypes", + "description": "Type of function parameter value" + } + } + }, + "functionOutput": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/parameterTypes", + "description": "Type of function output value" + }, + "value": { + "$ref": "#/definitions/parameterValueTypes", + "description": "Value assigned for function output" + } + } + }, + "parameter": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/parameterTypes", + "description": "Type of input parameter" + }, + "defaultValue": { + "$ref": "#/definitions/parameterValueTypes", + "description": "Default value to be used if one is not provided" + }, + "allowedValues": { + "type": "array", + "description": "Value can only be one of these values" + }, + "metadata": { + "type": "object", + "description": "Metadata for the parameter, can be any valid JSON object" + }, + "minValue": { + "type": "integer", + "description": "Minimum value for the int type parameter" + }, + "maxValue": { + "type": "integer", + "description": "Maximum value for the int type parameter" + }, + "minLength": { + "type": "integer", + "description": "Minimum length for the string or array type parameter" + }, + "maxLength": { + "type": "integer", + "description": "Maximum length for the string or array type parameter" + } + }, + "required": [ + "type" + ], + "description": "Input parameter definitions" + }, + "output": { + "type": "object", + "properties": { + "condition": { + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "https://schema.management.azure.com/schemas/common/definitions.json#/definitions/expression" + } + ], + "description": "Condition of the output" + }, + "type": { + "$ref": "#/definitions/parameterTypes", + "description": "Type of output value" + }, + "value": { + "$ref": "#/definitions/parameterValueTypes", + "description": "Value assigned for output" + } + }, + "required": [ + "type", + "value" + ], + "description": "Set of output parameters" + }, + "parameterTypes": { + "enum": [ + "string", + "securestring", + "int", + "bool", + "object", + "secureObject", + "array" + ] + }, + "parameterValueTypes": { + "type": [ + "string", + "boolean", + "integer", + "number", + "object", + "array", + "null" + ] + }, + "keyVaultReference": { + "type": "object", + "properties": { + "keyVault": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "id" + ], + "additionalProperties": false + }, + "secretName": { + "type": "string", + "minLength": 1 + }, + "secretVersion": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "keyVault", + "secretName" + ], + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_field_if_other_fields_present.golden b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_field_if_other_fields_present.golden new file mode 100644 index 00000000000..d5d0ae95a5d --- /dev/null +++ b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_field_if_other_fields_present.golden @@ -0,0 +1,8 @@ +type +/* Generated from: https://test.test/schemas/2020-01-01/test.json */ +Test struct { + Tags struct { + OtherField string + additionalProperties map[string]float64 + } +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_field_if_other_fields_present.json b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_field_if_other_fields_present.json new file mode 100644 index 00000000000..63e74f353da --- /dev/null +++ b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_field_if_other_fields_present.json @@ -0,0 +1,21 @@ +{ + "$comment": "Here we check that if other properties are present, then 'additionalProperties' will be generated as a field", + + "id": "https://test.test/schemas/2020-01-01/test.json", + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Test", + "type": "object", + "properties": { + "tags": { + "type": "object", + "properties": { + "otherField": { + "type": "string" + } + }, + "additionalProperties": { + "type": "number" + } + } + } +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map[string]interface{}_if_unset_and_no_other_fields_present.golden b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map[string]interface{}_if_unset_and_no_other_fields_present.golden new file mode 100644 index 00000000000..54bed85e0f6 --- /dev/null +++ b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map[string]interface{}_if_unset_and_no_other_fields_present.golden @@ -0,0 +1,5 @@ +type +/* Generated from: https://test.test/schemas/2020-01-01/test.json */ +Test struct { + Tags map[string]interface{} +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map[string]interface{}_if_unset_and_no_other_fields_present.json b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map[string]interface{}_if_unset_and_no_other_fields_present.json new file mode 100644 index 00000000000..e43b3854e10 --- /dev/null +++ b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map[string]interface{}_if_unset_and_no_other_fields_present.json @@ -0,0 +1,13 @@ +{ + "$comment": "Here we check that if there are no other fields and 'additionalProperties' is not explicitly set, a map type of map[string]interface{} will be generated", + + "id": "https://test.test/schemas/2020-01-01/test.json", + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Test", + "type": "object", + "properties": { + "tags": { + "type": "object" + } + } +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map_type_if_no_other_fields_present.golden b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map_type_if_no_other_fields_present.golden new file mode 100644 index 00000000000..c8afba28c88 --- /dev/null +++ b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map_type_if_no_other_fields_present.golden @@ -0,0 +1,5 @@ +type +/* Generated from: https://test.test/schemas/2020-01-01/test.json */ +Test struct { + Tags map[string]float64 +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map_type_if_no_other_fields_present.json b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map_type_if_no_other_fields_present.json new file mode 100644 index 00000000000..8d88e9dac27 --- /dev/null +++ b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_map_type_if_no_other_fields_present.json @@ -0,0 +1,16 @@ +{ + "$comment": "Here we check that if 'additionalProperties' is set and there are no other fields, then the overall type will be a map type not a struct", + + "id": "https://test.test/schemas/2020-01-01/test.json", + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Test", + "type": "object", + "properties": { + "tags": { + "type": "object", + "additionalProperties": { + "type": "number" + } + } + } +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_set_to_'false'.golden b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_set_to_'false'.golden new file mode 100644 index 00000000000..b62d35c0e8d --- /dev/null +++ b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_set_to_'false'.golden @@ -0,0 +1,6 @@ +type +/* Generated from: https://test.test/schemas/2020-01-01/test.json */ +Test struct { + Tags struct { + } +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_set_to_'false'.json b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_set_to_'false'.json new file mode 100644 index 00000000000..c22a58b8456 --- /dev/null +++ b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_set_to_'false'.json @@ -0,0 +1,14 @@ +{ + "$comment": "Here we check that if 'additionalProperties' is explicitly set to 'false' (and there are no other fields) the generated struct will be empty", + + "id": "https://test.test/schemas/2020-01-01/test.json", + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Test", + "type": "object", + "properties": { + "tags": { + "type": "object", + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_unset_and_other_fields_present.golden b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_unset_and_other_fields_present.golden new file mode 100644 index 00000000000..f7b041cacbf --- /dev/null +++ b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_unset_and_other_fields_present.golden @@ -0,0 +1,7 @@ +type +/* Generated from: https://test.test/schemas/2020-01-01/test.json */ +Test struct { + Tags struct { + OtherField string + } +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_unset_and_other_fields_present.json b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_unset_and_other_fields_present.json new file mode 100644 index 00000000000..169ff7b0289 --- /dev/null +++ b/hack/generator/pkg/jsonast/testdata/AdditionalProperties/Generates_nothing_if_unset_and_other_fields_present.json @@ -0,0 +1,18 @@ +{ + "$comment": "Here we check that if there are other fields present and 'additionalProperties' is not explicitly set then nothing additional is generated (this is against spec but see 'additionalProperties' comments in jsonast)", + + "id": "https://test.test/schemas/2020-01-01/test.json", + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Test", + "type": "object", + "properties": { + "tags": { + "type": "object", + "properties": { + "otherField": { + "type": "string" + } + } + } + } +} \ No newline at end of file diff --git a/hack/generator/pkg/jsonast/versionOf_test.go b/hack/generator/pkg/jsonast/versionOf_test.go new file mode 100644 index 00000000000..66353cc3a33 --- /dev/null +++ b/hack/generator/pkg/jsonast/versionOf_test.go @@ -0,0 +1,24 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package jsonast + +import ( + "net/url" + "testing" + + . "github.com/onsi/gomega" +) + +func Test_ExtractObjectAndVersion(t *testing.T) { + g := NewGomegaWithT(t) + + url, err := url.Parse("https://schema.management.azure.com/schemas/2015-01-01/Microsoft.Resources.json#/resourceDefinitions/deployments") + g.Expect(err).To(BeNil()) + + version, err := versionOf(url) + g.Expect(version).To(Equal("2015-01-01")) + g.Expect(err).To(BeNil()) +} diff --git a/hack/generator/pkg/xcobra/context.go b/hack/generator/pkg/xcobra/context.go new file mode 100644 index 00000000000..40b1cda78c1 --- /dev/null +++ b/hack/generator/pkg/xcobra/context.go @@ -0,0 +1,62 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package xcobra + +import ( + "context" + "fmt" + "os" + "os/signal" + + "github.com/devigned/tab" + "github.com/spf13/cobra" +) + +type ( + // ErrorWithCode is an error that contains an os.Exit code + ErrorWithCode struct { + Code int + } +) + +func (ewc ErrorWithCode) Error() string { + return fmt.Sprintf("failed with error code: %d", ewc.Code) +} + +// NewErrorWithCode will return a new error with an os.Exit code +func NewErrorWithCode(code int) *ErrorWithCode { + return &ErrorWithCode{ + Code: code, + } +} + +// RunWithCtx will run a command which will respect os signals and propagate the context to children +func RunWithCtx(run func(ctx context.Context, cmd *cobra.Command, args []string) error) func(cmd *cobra.Command, args []string) { + ctx, cancel := context.WithCancel(context.Background()) + + // Wait for a signal to quit: + signalChan := make(chan os.Signal, 1) + signal.Notify(signalChan, os.Interrupt, os.Kill) + + go func() { + <-signalChan + cancel() + }() + + return func(cmd *cobra.Command, args []string) { + ctx, span := tab.StartSpan(ctx, cmd.Name()+".Run") + defer span.End() + defer cancel() + + var err error + cmd.PostRunE = func(c *cobra.Command, args []string) error { + defer exitWithCode(err) + return err + } + + err = run(ctx, cmd, args) + } +} diff --git a/hack/generator/pkg/xcobra/exit_handler.go b/hack/generator/pkg/xcobra/exit_handler.go new file mode 100644 index 00000000000..b8bf31c0773 --- /dev/null +++ b/hack/generator/pkg/xcobra/exit_handler.go @@ -0,0 +1,23 @@ +//+build !noexit + +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package xcobra + +import ( + "os" +) + +func exitWithCode(err error) { + if err == nil { + return + } + + if e, ok := err.(ErrorWithCode); ok { + os.Exit(e.Code) + } + os.Exit(1) +} diff --git a/hack/generator/pkg/xcobra/noop_handler.go b/hack/generator/pkg/xcobra/noop_handler.go new file mode 100644 index 00000000000..1cf931e9321 --- /dev/null +++ b/hack/generator/pkg/xcobra/noop_handler.go @@ -0,0 +1,12 @@ +//+build noexit + +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +package xcobra + +func exitWithCode(err error) { + // nop +} diff --git a/hack/tools/go.mod b/hack/tools/go.mod index f83a5739eeb..40ab701de24 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -3,6 +3,8 @@ module github.com/Azure/k8s-infra/hack/tools go 1.14 require ( + github.com/golangci/golangci-lint v1.21.0 // indirect + github.com/mitchellh/gox v1.0.1 // indirect k8s.io/code-generator v0.18.0-alpha.2.0.20200130061103-7dfd5e9157ef sigs.k8s.io/controller-tools v0.2.6-0.20200226180227-d6efdcdd90e2 sigs.k8s.io/kind v0.7.0 // indirect diff --git a/hack/tools/go.sum b/hack/tools/go.sum index b0de37f94de..5be220e9a42 100644 --- a/hack/tools/go.sum +++ b/hack/tools/go.sum @@ -298,6 +298,8 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/go-version v1.0.0 h1:21MVWPKDphxa7ineQQTrCU5brh7OuVVAzGOCnnCPtE8= +github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -385,6 +387,10 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5 github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= +github.com/mitchellh/gox v1.0.1 h1:x0jD3dcHk9a9xPSDN6YEL4xL6Qz0dvNYm8yZqui5chI= +github.com/mitchellh/gox v1.0.1/go.mod h1:ED6BioOGXMswlXa2zxfh/xdd5QhwYliBFn9V18Ap4z4= +github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= @@ -573,6 +579,7 @@ golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMx golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3 h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=