diff --git a/powershell/llcsharp/model/model-class-json.ts b/powershell/llcsharp/model/model-class-json.ts index 0bb3ebc820..25ff325813 100644 --- a/powershell/llcsharp/model/model-class-json.ts +++ b/powershell/llcsharp/model/model-class-json.ts @@ -389,16 +389,15 @@ export class NewJsonSerializableClass extends Class { yield If(Not(json.check), Return(dotnet.Null)); yield '// Polymorphic type -- select the appropriate constructor using the discriminator'; /** go thru the list of polymorphic values for the discriminator, and call the target class's constructor for that */ - // skip-for-time-being - // if ($this.schema.discriminator) { - // yield Switch(toExpression(`json.StringProperty("${$this.schema.discriminator.propertyName}")`), function* () { - // for (const { key, value } of items(d)) { - // yield TerminalCase(`"${key}"`, function* () { - // yield Return(value.new(json)); - // }); - // } - // }); - // } + if ($this.schema.discriminator) { + yield Switch(toExpression(`json.StringProperty("${$this.schema.discriminator.property.serializedName}")`), function* () { + for (const { key, value } of items(d)) { + yield TerminalCase(`"${key}"`, function* () { + yield Return(value.new(json)); + }); + } + }); + } yield Return($this.new(json, toExpression($excludes.substring(1)))); } else { // just tell it to create the instance (providing that it's a JSonObject) diff --git a/powershell/llcsharp/model/model-class.ts b/powershell/llcsharp/model/model-class.ts index 7a962bd436..ecacf58282 100644 --- a/powershell/llcsharp/model/model-class.ts +++ b/powershell/llcsharp/model/model-class.ts @@ -905,11 +905,11 @@ export class NewModelClass extends Class implements NewEnhancedTypeDeclaration { // we'll add a deserializer factory method a bit later.. } - if (this.schema.language.csharp?.discriminatorValue) { + if (this.schema.discriminatorValue) { // we have a discriminator value, and we should tell our parent who we are so that they can build a proper deserializer method. // um. just how do we *really* know which allOf is polymorphic? // that's really sad. - for (const { key: eachAllOfIndex, value: eachAllOfValue } of items(this.schema.parents?.immediate)) { + for (const { key: eachAllOfIndex, value: eachAllOfValue } of items(this.schema.parents?.all)) { const parentSchema = eachAllOfValue; const aState = this.state.path('allOf', eachAllOfIndex); @@ -922,7 +922,7 @@ export class NewModelClass extends Class implements NewEnhancedTypeDeclaration { this.parentModelClasses.push(parentClass); // tell that parent who we are. - parentClass.addDiscriminator(this.schema.language.csharp.discriminatorValue, this); + parentClass.addDiscriminator(this.schema.discriminatorValue, this); } } } diff --git a/powershell/llcsharp/schema/schema-resolver.ts b/powershell/llcsharp/schema/schema-resolver.ts index 6a9faa67be..b8ddd1006e 100644 --- a/powershell/llcsharp/schema/schema-resolver.ts +++ b/powershell/llcsharp/schema/schema-resolver.ts @@ -181,7 +181,7 @@ export class NewSchemaDefinitionResolver { } return this.add(schema, new NewObjectImplementation(schema)); } - case SchemaType.SealedChoice: + case SchemaType.Choice: case SchemaType.String: { return new NewString(schema, required); @@ -226,7 +226,7 @@ export class NewSchemaDefinitionResolver { state.error(`Unsupported constant type. Schema '${schema.language.csharp?.name}' is declared with invalid type '${schema.type}'`, message.UnknownJsonType); throw new Error('Unknown Model. Fatal.'); } - case SchemaType.Choice: + case SchemaType.SealedChoice: return new NewEnumImplementation(schema, required); case undefined: if (schema.extensions && schema.extensions['x-ms-enum']) { diff --git a/powershell/plugins/plugin-create-inline-properties.ts b/powershell/plugins/plugin-create-inline-properties.ts index 84656151f9..c3fa126184 100644 --- a/powershell/plugins/plugin-create-inline-properties.ts +++ b/powershell/plugins/plugin-create-inline-properties.ts @@ -128,7 +128,7 @@ function createVirtualProperties(schema: ObjectSchema, stack: Array, thr originalContainingSchema: virtualProperty.originalContainingSchema, description: virtualProperty.description, alias: [], - required: virtualProperty.required, //|| !!values(schema.required).first(each => !!each && !!each.toLowerCase && each.toLowerCase() === virtualProperty.property.details.default.name.toLowerCase()), + required: virtualProperty.required || !!values(>virtualProperty.originalContainingSchema.properties).first(each => !!each && !!each.required && !!each.serializedName && each.serializedName.toLowerCase() === virtualProperty.property.language.default.name.toLowerCase()), sharedWith: virtualProperty.sharedWith, }; // add it to the list of virtual properties that share this property. @@ -190,7 +190,7 @@ function createVirtualProperties(schema: ObjectSchema, stack: Array, thr description: property.summary || '', originalContainingSchema: schema, alias: [], - required: property.language.default.required, + required: !!property.required, }; virtualProperties.owned.push(privateProperty); @@ -268,7 +268,7 @@ function createVirtualProperties(schema: ObjectSchema, stack: Array, thr description: property.summary || '', originalContainingSchema: schema, alias: [], - required: property.language.default.required + required: !!property.required }); } diff --git a/powershell/utils/schema.ts b/powershell/utils/schema.ts index c4117d84a6..b5ccf61d85 100644 --- a/powershell/utils/schema.ts +++ b/powershell/utils/schema.ts @@ -130,11 +130,9 @@ export interface SchemaDetails extends ImplementationDetails { // } // } -export function getPolymorphicBases(schema: Schema): Array { +export function getPolymorphicBases(schema: ObjectSchema): Array { // are any of my parents polymorphic directly, or any of their parents? - // skip-for-time-being - // return [...values(schema).where(parent => parent.discriminator ? true : false), ...values(schema.allOf).selectMany(getPolymorphicBases)]; - return []; + return [...values(schema.parents?.all).where(parent => (parent).discriminator ? true : false)]; } export function getAllProperties(schema: Schema): Array { diff --git a/tests-upgrade/Configuration.json b/tests-upgrade/Configuration.json index 19d490b195..f74ae0b382 100644 --- a/tests-upgrade/Configuration.json +++ b/tests-upgrade/Configuration.json @@ -9,6 +9,7 @@ "basic-response-multioperation", "basic-spec-required", "basic-spec-root", + "basic-polymorphism", "component-definitions-combined", "component-definitions-local", "component-multiparam", diff --git a/tests-upgrade/basic-polymorphism/readme.md b/tests-upgrade/basic-polymorphism/readme.md new file mode 100644 index 0000000000..cd6b9c0ac2 --- /dev/null +++ b/tests-upgrade/basic-polymorphism/readme.md @@ -0,0 +1,10 @@ +### AutoRest Configuration +> see https://aka.ms/autorest + +``` yaml +require: + - $(this-folder)/../readme.azure.noprofile.md +input-file: + - $(this-folder)/swagger.json + +``` diff --git a/tests-upgrade/basic-polymorphism/swagger.json b/tests-upgrade/basic-polymorphism/swagger.json new file mode 100644 index 0000000000..2f2c6269b4 --- /dev/null +++ b/tests-upgrade/basic-polymorphism/swagger.json @@ -0,0 +1,1599 @@ +{ + "swagger": "2.0", + "info": { + "title": "TimeSeriesInsightsClient", + "description": "Time Series Insights client", + "version": "2018-08-15-preview" + }, + "host": "management.azure.com", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "security": [ + { + "azure_auth": [ + "user_impersonation" + ] + } + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "flow": "implicit", + "description": "Azure Active Directory OAuth2 Flow", + "scopes": { + "user_impersonation": "impersonate your user account" + } + } + }, + "paths": { + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.TimeSeriesInsights/environments/{environmentName}": { + "put": { + "tags": [ + "Environments" + ], + "operationId": "Environments_CreateOrUpdate", + "x-ms-examples": { + "EnvironmentsCreate": { + "$ref": "./examples/EnvironmentsCreate.json" + } + }, + "x-ms-long-running-operation": true, + "description": "Create or update an environment in the specified subscription and resource group.", + "parameters": [ + { + "$ref": "#/parameters/SubscriptionIdParameter" + }, + { + "$ref": "#/parameters/ResourceGroupNameParameter" + }, + { + "name": "environmentName", + "in": "path", + "required": true, + "type": "string", + "pattern": "^[-\\w\\._\\(\\)]+$", + "minLength": 1, + "maxLength": 90, + "description": "Name of the environment" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "name": "parameters", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EnvironmentCreateOrUpdateParameters" + }, + "description": "Parameters for creating an environment resource." + } + ], + "responses": { + "200": { + "description": "The existing environment definition was successfully updated.", + "schema": { + "$ref": "#/definitions/EnvironmentResource" + } + }, + "201": { + "description": "The environment create request was accepted. Environment provisioning is an asynchronous operation. You can periodically get your environment definition and monitor progress via the provisioningState property.", + "schema": { + "$ref": "#/definitions/EnvironmentResource" + } + }, + "404": { + "description": "The subscription or resource group could not be found." + }, + "default": { + "description": "HTTP 400 (Bad Request): The given environment request body is invalid; See the error code and message in the response for details.", + "schema": { + "$ref": "#/definitions/CloudError" + } + } + } + }, + "get": { + "tags": [ + "Environments" + ], + "operationId": "Environments_Get", + "x-ms-examples": { + "EnvironmentsGet": { + "$ref": "./examples/EnvironmentsGet.json" + } + }, + "description": "Gets the environment with the specified name in the specified subscription and resource group.", + "parameters": [ + { + "$ref": "#/parameters/SubscriptionIdParameter" + }, + { + "$ref": "#/parameters/ResourceGroupNameParameter" + }, + { + "$ref": "#/parameters/EnvironmentNameParameter" + }, + { + "$ref": "#/parameters/ExpandParameter" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + } + ], + "responses": { + "200": { + "description": "The environment definition was successfully retrieved and is in the response. If you are polling for the completion of a provisioning or scale operation, you can check its status via the provisioningState property.", + "schema": { + "$ref": "#/definitions/EnvironmentResource" + } + }, + "default": { + "description": "HTTP 404 (Not Found): The subscription, resource group, or environment could not be found.", + "schema": { + "$ref": "#/definitions/CloudError" + } + } + } + } + } + }, + "definitions": { + "OperationListResult": { + "description": "Result of the request to list Time Series Insights operations. It contains a list of operations and a URL link to get the next set of results.", + "properties": { + "value": { + "description": "List of Time Series Insights operations supported by the Microsoft.TimeSeriesInsights resource provider.", + "type": "array", + "readOnly": true, + "items": { + "$ref": "#/definitions/Operation" + } + }, + "nextLink": { + "description": "URL to get the next set of operation list results if there are any.", + "type": "string", + "readOnly": true + } + } + }, + "Operation": { + "description": "A Time Series Insights REST API operation", + "type": "object", + "properties": { + "name": { + "description": "The name of the operation being performed on this particular object.", + "type": "string", + "readOnly": true + }, + "display": { + "description": "Contains the localized display information for this particular operation / action.", + "readOnly": true, + "properties": { + "provider": { + "description": "The localized friendly form of the resource provider name.", + "type": "string", + "readOnly": true + }, + "resource": { + "description": "The localized friendly form of the resource type related to this action/operation.", + "type": "string", + "readOnly": true + }, + "operation": { + "description": "The localized friendly name for the operation.", + "type": "string", + "readOnly": true + }, + "description": { + "description": "The localized friendly description for the operation.", + "type": "string", + "readOnly": true + } + } + } + } + }, + "Resource": { + "properties": { + "id": { + "readOnly": true, + "type": "string", + "description": "Resource Id" + }, + "name": { + "readOnly": true, + "type": "string", + "description": "Resource name" + }, + "type": { + "readOnly": true, + "type": "string", + "description": "Resource type" + } + }, + "description": "Time Series Insights resource", + "x-ms-azure-resource": true + }, + "TrackedResource": { + "properties": { + "location": { + "type": "string", + "description": "Resource location", + "x-ms-mutability": [ + "read", + "create" + ] + }, + "tags": { + "type": "string", + "description": "Resource tags" + } + }, + "allOf": [ + { + "$ref": "#/definitions/Resource" + } + ], + "required": [ + "location" + ], + "description": "Time Series Insights resource that is tracked by Azure Resource Manager." + }, + "ResourceProperties": { + "properties": { + "provisioningState": { + "$ref": "#/definitions/ProvisioningState", + "description": "Provisioning state of the resource." + }, + "creationTime": { + "readOnly": true, + "type": "string", + "format": "date-time", + "description": "The time the resource was created." + } + }, + "description": "Properties that are common to all tracked resources." + }, + "ProvisioningState": { + "readOnly": true, + "type": "string", + "description": "Provisioning state of the resource.", + "enum": [ + "Accepted", + "Creating", + "Updating", + "Succeeded", + "Failed", + "Deleting" + ], + "x-ms-enum": { + "name": "ProvisioningState", + "modelAsString": false + } + }, + "Sku": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of this SKU.", + "enum": [ + "S1", + "S2", + "P1", + "L1" + ], + "x-ms-enum": { + "name": "SkuName", + "modelAsString": false + } + }, + "capacity": { + "format": "int32", + "type": "integer", + "description": "The capacity of the sku. For standard environments, this value can be changed to support scale out of environments after they have been created.", + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "name", + "capacity" + ], + "description": "The sku determines the type of environment, either standard (S1 or S2) or long-term (L1). For standard environments the sku determines the capacity of the environment, the ingress rate, and the billing rate." + }, + "WarmStoreConfigurationProperties": { + "type": "object", + "properties": { + "dataRetention": { + "type": "string", + "description": "ISO8601 timespan specifying the number of days the environment's events will be available for query from the warm store." + } + }, + "required": [ + "dataRetention" + ], + "description": "The warm store configuration provides the details to create a warm store cache that will retain a copy of the environment's data available for faster query." + }, + "LongTermStorageConfigurationInput": { + "type": "object", + "properties": { + "accountName": { + "type": "string", + "description": "The name of the storage account that will hold the environment's long term data." + }, + "managementKey": { + "type": "string", + "description": "The value of the management key that grants the Time Series Insights service write access to the storage account. This property is not shown in environment responses." + } + }, + "required": [ + "accountName", + "managementKey" + ], + "description": "The storage configuration provides the connection details that allows the Time Series Insights service to connect to the customer storage account that is used to store the environment's data." + }, + "LongTermStorageConfigurationOutput": { + "type": "object", + "properties": { + "accountName": { + "type": "string", + "description": "The name of the storage account that will hold the environment's long term data." + } + }, + "required": [ + "accountName" + ], + "description": "The storage configuration provides the non-secret connection details about the customer storage account that is used to store the environment's data." + }, + "LongTermStorageConfigurationMutableProperties": { + "type": "object", + "properties": { + "managementKey": { + "type": "string", + "description": "The value of the management key that grants the Time Series Insights service write access to the storage account. This property is not shown in environment responses." + } + }, + "required": [ + "managementKey" + ], + "description": "The storage configuration provides the connection details that allows the Time Series Insights service to connect to the customer storage account that is used to store the environment's data." + }, + "CreateOrUpdateTrackedResourceProperties": { + "properties": { + "location": { + "type": "string", + "description": "The location of the resource.", + "x-ms-mutability": [ + "read", + "create" + ] + }, + "tags": { + "type": "string", + "description": "Key-value pairs of additional properties for the resource." + } + }, + "required": [ + "location" + ], + "description": "Properties required to create any resource tracked by Azure Resource Manager." + }, + "EnvironmentCreateOrUpdateParameters": { + "discriminator": "kind", + "properties": { + "kind": { + "type": "string", + "description": "The kind of the environment.", + "enum": [ + "Standard", + "LongTerm" + ], + "x-ms-enum": { + "name": "Kind", + "modelAsString": false + } + }, + "sku": { + "$ref": "#/definitions/Sku", + "description": "The sku determines the type of environment, either standard (S1 or S2) or long-term (L1). For standard environments the sku determines the capacity of the environment, the ingress rate, and the billing rate." + } + }, + "required": [ + "kind", + "sku" + ], + "allOf": [ + { + "$ref": "#/definitions/CreateOrUpdateTrackedResourceProperties" + } + ], + "description": "Parameters supplied to the CreateOrUpdate Environment operation." + }, + "StandardEnvironmentCreateOrUpdateParameters": { + "x-ms-discriminator-value": "Standard", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/StandardEnvironmentCreationProperties" + } + }, + "required": [ + "properties" + ], + "allOf": [ + { + "$ref": "#/definitions/EnvironmentCreateOrUpdateParameters" + } + ], + "description": "Parameters supplied to the Create or Update Environment operation for a standard environment." + }, + "LongTermEnvironmentCreateOrUpdateParameters": { + "x-ms-discriminator-value": "LongTerm", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/LongTermEnvironmentCreationProperties" + } + }, + "required": [ + "properties" + ], + "allOf": [ + { + "$ref": "#/definitions/EnvironmentCreateOrUpdateParameters" + } + ], + "description": "Parameters supplied to the Create or Update Environment operation for a long-term environment." + }, + "EnvironmentUpdateParameters": { + "type": "object", + "properties": { + "tags": { + "type": "string", + "description": "Key-value pairs of additional properties for the environment." + } + }, + "description": "Parameters supplied to the Update Environment operation." + }, + "StandardEnvironmentUpdateParameters": { + "type": "object", + "properties": { + "sku": { + "$ref": "#/definitions/Sku", + "description": "The sku of the environment." + }, + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/StandardEnvironmentMutableProperties", + "description": "Properties of the standard environment." + } + }, + "allOf": [ + { + "$ref": "#/definitions/EnvironmentUpdateParameters" + } + ], + "description": "Parameters supplied to the Update Environment operation to update a standard environment." + }, + "LongTermEnvironmentUpdateParameters": { + "type": "object", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/LongTermEnvironmentMutableProperties", + "description": "Properties of the long-term environment." + } + }, + "allOf": [ + { + "$ref": "#/definitions/EnvironmentUpdateParameters" + } + ], + "description": "Parameters supplied to the Update Environment operation to update a long-term environment." + }, + "EnvironmentListResponse": { + "properties": { + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/EnvironmentResource" + }, + "description": "Result of the List Environments operation." + } + }, + "description": "The response of the List Environments operation." + }, + "EnvironmentResource": { + "type": "object", + "discriminator": "kind", + "properties": { + "sku": { + "$ref": "#/definitions/Sku", + "description": "The sku determines the type of environment, either standard (S1 or S2) or long-term (L1). For standard environments the sku determines the capacity of the environment, the ingress rate, and the billing rate." + }, + "kind": { + "type": "string", + "description": "The kind of the environment.", + "enum": [ + "Standard", + "LongTerm" + ] + } + }, + "required": [ + "kind", + "sku" + ], + "allOf": [ + { + "$ref": "#/definitions/TrackedResource" + } + ], + "description": "An environment is a set of time-series data available for query, and is the top level Azure Time Series Insights resource." + }, + "StandardEnvironmentResource": { + "x-ms-discriminator-value": "Standard", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/StandardEnvironmentResourceProperties" + } + }, + "required": [ + "properties" + ], + "allOf": [ + { + "$ref": "#/definitions/EnvironmentResource" + } + ], + "description": "An environment is a set of time-series data available for query, and is the top level Azure Time Series Insights resource. Standard environments have data retention limits." + }, + "LongTermEnvironmentResource": { + "x-ms-discriminator-value": "LongTerm", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/LongTermEnvironmentResourceProperties" + } + }, + "required": [ + "properties" + ], + "allOf": [ + { + "$ref": "#/definitions/EnvironmentResource" + } + ], + "description": "An environment is a set of time-series data available for query, and is the top level Azure Time Series Insights resource. LongTerm environments do not have set data retention limits." + }, + "StandardEnvironmentCreationProperties": { + "properties": { + "dataRetentionTime": { + "type": "string", + "description": "ISO8601 timespan specifying the minimum number of days the environment's events will be available for query." + }, + "storageLimitExceededBehavior": { + "type": "string", + "description": "The behavior the Time Series Insights service should take when the environment's capacity has been exceeded. If \"PauseIngress\" is specified, new events will not be read from the event source. If \"PurgeOldData\" is specified, new events will continue to be read and old events will be deleted from the environment. The default behavior is PurgeOldData.", + "enum": [ + "PurgeOldData", + "PauseIngress" + ], + "x-ms-enum": { + "name": "StorageLimitExceededBehavior", + "modelAsString": false + } + }, + "partitionKeyProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/TimeSeriesIdProperty" + }, + "description": "The list of event properties which will be used to partition data in the environment." + } + }, + "required": [ + "dataRetentionTime" + ], + "description": "Properties used to create a standard environment." + }, + "LongTermEnvironmentCreationProperties": { + "properties": { + "timeSeriesIdProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/TimeSeriesIdProperty" + }, + "description": "The list of event properties which will be used to define the environment's time series id." + }, + "storageConfiguration": { + "$ref": "#/definitions/LongTermStorageConfigurationInput", + "description": "The storage configuration provides the connection details that allows the Time Series Insights service to connect to the customer storage account that is used to store the environment's data." + }, + "warmStoreConfiguration": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/WarmStoreConfigurationProperties", + "description": "The warm store configuration provides the details to create a warm store cache that will retain a copy of the environment's data available for faster query." + } + }, + "required": [ + "timeSeriesIdProperties", + "storageConfiguration" + ], + "description": "Properties used to create a long-term environment." + }, + "EnvironmentResourceProperties": { + "properties": { + "dataAccessId": { + "readOnly": true, + "type": "string", + "description": "An id used to access the environment data, e.g. to query the environment's events or upload reference data for the environment." + }, + "dataAccessFqdn": { + "readOnly": true, + "type": "string", + "description": "The fully qualified domain name used to access the environment data, e.g. to query the environment's events or upload reference data for the environment." + }, + "status": { + "$ref": "#/definitions/EnvironmentStatus", + "description": "An object that represents the status of the environment, and its internal state in the Time Series Insights service." + } + }, + "allOf": [ + { + "$ref": "#/definitions/ResourceProperties" + } + ], + "description": "Properties of the environment." + }, + "StandardEnvironmentResourceProperties": { + "allOf": [ + { + "$ref": "#/definitions/StandardEnvironmentCreationProperties" + }, + { + "$ref": "#/definitions/EnvironmentResourceProperties" + } + ], + "required": [ + "dataRetentionTime" + ], + "description": "Properties of the standard environment." + }, + "LongTermEnvironmentResourceProperties": { + "properties": { + "timeSeriesIdProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/TimeSeriesIdProperty" + }, + "description": "The list of event properties which will be used to define the environment's time series id." + }, + "storageConfiguration": { + "$ref": "#/definitions/LongTermStorageConfigurationOutput", + "description": "The storage configuration provides the connection details that allows the Time Series Insights service to connect to the customer storage account that is used to store the environment's data." + }, + "warmStoreConfiguration": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/WarmStoreConfigurationProperties", + "description": "The warm store configuration provides the details to create a warm store cache that will retain a copy of the environment's data available for faster query." + } + }, + "required": [ + "timeSeriesIdProperties", + "storageConfiguration" + ], + "allOf": [ + { + "$ref": "#/definitions/EnvironmentResourceProperties" + } + ], + "description": "Properties of the long-term environment." + }, + "StandardEnvironmentMutableProperties": { + "description": "An object that represents a set of mutable standard environment resource properties.", + "type": "object", + "properties": { + "dataRetentionTime": { + "type": "string", + "description": "ISO8601 timespan specifying the minimum number of days the environment's events will be available for query." + }, + "storageLimitExceededBehavior": { + "type": "string", + "description": "The behavior the Time Series Insights service should take when the environment's capacity has been exceeded. If \"PauseIngress\" is specified, new events will not be read from the event source. If \"PurgeOldData\" is specified, new events will continue to be read and old events will be deleted from the environment. The default behavior is PurgeOldData.", + "enum": [ + "PurgeOldData", + "PauseIngress" + ], + "x-ms-enum": { + "name": "StorageLimitExceededBehavior", + "modelAsString": false + } + }, + "partitionKeyProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/TimeSeriesIdProperty" + }, + "description": "The list of event properties which will be used to partition data in the environment." + } + } + }, + "LongTermEnvironmentMutableProperties": { + "description": "An object that represents a set of mutable long-term environment resource properties.", + "type": "object", + "properties": { + "storageConfiguration": { + "$ref": "#/definitions/LongTermStorageConfigurationMutableProperties", + "description": "The storage configuration provides the connection details that allows the Time Series Insights service to connect to the customer storage account that is used to store the environment's data." + }, + "warmStoreConfiguration": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/WarmStoreConfigurationProperties", + "description": "The warm store configuration provides the details to create a warm store cache that will retain a copy of the environment's data available for faster query." + } + } + }, + "TimeSeriesIdProperty": { + "properties": { + "name": { + "type": "string", + "description": "The name of the property." + }, + "type": { + "type": "string", + "description": "The type of the property.", + "enum": [ + "String", + "123" + ], + "x-ms-enum": { + "name": "PropertyType", + "modelAsString": false + } + } + }, + "description": "The structure of the property that a time series id can have. An environment can have multiple such properties." + }, + "EnvironmentStatus": { + "readOnly": true, + "type": "object", + "description": "An object that represents the status of the environment, and its internal state in the Time Series Insights service.", + "properties": { + "ingress": { + "$ref": "#/definitions/IngressEnvironmentStatus", + "description": "An object that represents the status of ingress on an environment." + }, + "warmStorage": { + "$ref": "#/definitions/WarmStorageEnvironmentStatus", + "description": "An object that represents the status of warm storage on an environment." + } + } + }, + "IngressEnvironmentStatus": { + "readOnly": true, + "type": "object", + "description": "An object that represents the status of ingress on an environment.", + "properties": { + "state": { + "type": "string", + "description": "This string represents the state of ingress operations on an environment. It can be \"Disabled\", \"Ready\", \"Running\", \"Paused\" or \"Unknown\"", + "enum": [ + "Disabled", + "Ready", + "Running", + "Paused", + "Unknown" + ], + "x-ms-enum": { + "name": "IngressState", + "modelAsString": false + } + }, + "stateDetails": { + "$ref": "#/definitions/EnvironmentStateDetails", + "description": "An object that contains the details about an environment's state." + } + } + }, + "EnvironmentStateDetails": { + "readOnly": true, + "type": "object", + "description": "An object that contains the details about an environment's state.", + "properties": { + "code": { + "type": "string", + "description": "Contains the code that represents the reason of an environment being in a particular state. Can be used to programmatically handle specific cases." + }, + "message": { + "type": "string", + "description": "A message that describes the state in detail." + } + } + }, + "WarmStorageEnvironmentStatus": { + "readOnly": true, + "type": "object", + "description": "An object that represents the status of warm storage on an environment.", + "properties": { + "propertiesUsage": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/WarmStoragePropertiesUsage", + "description": "An object that contains the status of warm storage properties usage." + } + } + }, + "WarmStoragePropertiesUsage": { + "readOnly": true, + "type": "object", + "description": "An object that contains the status of warm storage properties usage.", + "properties": { + "state": { + "type": "string", + "description": "This string represents the state of warm storage properties usage. It can be \"Ok\", \"Error\", \"Unknown\".", + "enum": [ + "Ok", + "Error", + "Unknown" + ], + "x-ms-enum": { + "name": "WarmStoragePropertiesState", + "modelAsString": false + } + }, + "stateDetails": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/WarmStoragePropertiesUsageStateDetails", + "description": "An object that contains the details about warm storage properties usage state." + } + } + }, + "WarmStoragePropertiesUsageStateDetails": { + "readOnly": true, + "type": "object", + "description": "An object that contains the details about warm storage properties usage state.", + "properties": { + "currentCount": { + "format": "int32", + "type": "integer", + "description": "A value that represents the number of properties used by the environment for S1/S2 SKU and number of properties used by Warm Store for PAYG SKU", + "minimum": 1, + "maximum": 10 + }, + "maxCount": { + "format": "int32", + "type": "integer", + "description": "A value that represents the maximum number of properties used allowed by the environment for S1/S2 SKU and maximum number of properties allowed by Warm Store for PAYG SKU.", + "minimum": 1, + "maximum": 10 + } + } + }, + "EventSourceCreateOrUpdateParameters": { + "discriminator": "kind", + "properties": { + "kind": { + "type": "string", + "description": "The kind of the event source.", + "enum": [ + "Microsoft.EventHub", + "Microsoft.IoTHub" + ], + "x-ms-enum": { + "name": "Kind", + "modelAsString": false + } + } + }, + "required": [ + "kind" + ], + "allOf": [ + { + "$ref": "#/definitions/CreateOrUpdateTrackedResourceProperties" + } + ], + "description": "Parameters supplied to the Create or Update Event Source operation." + }, + "EventHubEventSourceCreateOrUpdateParameters": { + "x-ms-discriminator-value": "Microsoft.EventHub", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/EventHubEventSourceCreationProperties" + } + }, + "required": [ + "properties" + ], + "allOf": [ + { + "$ref": "#/definitions/EventSourceCreateOrUpdateParameters" + } + ], + "description": "Parameters supplied to the Create or Update Event Source operation for an EventHub event source." + }, + "IoTHubEventSourceCreateOrUpdateParameters": { + "x-ms-discriminator-value": "Microsoft.IoTHub", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/IoTHubEventSourceCreationProperties" + } + }, + "required": [ + "properties" + ], + "allOf": [ + { + "$ref": "#/definitions/EventSourceCreateOrUpdateParameters" + } + ], + "description": "Parameters supplied to the Create or Update Event Source operation for an IoTHub event source." + }, + "EventSourceUpdateParameters": { + "type": "object", + "properties": { + "tags": { + "type": "string", + "description": "Key-value pairs of additional properties for the event source." + } + }, + "description": "Parameters supplied to the Update Event Source operation." + }, + "EventHubEventSourceUpdateParameters": { + "type": "object", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/EventHubEventSourceMutableProperties", + "description": "Properties of the EventHub event source." + } + }, + "allOf": [ + { + "$ref": "#/definitions/EventSourceUpdateParameters" + } + ], + "description": "Parameters supplied to the Update Event Source operation to update an EventHub event source." + }, + "IoTHubEventSourceUpdateParameters": { + "type": "object", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/IoTHubEventSourceMutableProperties", + "description": "Properties of the IoTHub event source." + } + }, + "allOf": [ + { + "$ref": "#/definitions/EventSourceUpdateParameters" + } + ], + "description": "Parameters supplied to the Update Event Source operation to update an IoTHub event source." + }, + "EventSourceListResponse": { + "properties": { + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/EventSourceResource" + }, + "description": "Result of the List EventSources operation." + } + }, + "description": "The response of the List EventSources operation." + }, + "EventSourceResource": { + "type": "object", + "discriminator": "kind", + "properties": { + "kind": { + "type": "string", + "description": "The kind of the event source.", + "enum": [ + "Microsoft.EventHub", + "Microsoft.IoTHub" + ] + } + }, + "required": [ + "kind" + ], + "allOf": [ + { + "$ref": "#/definitions/TrackedResource" + } + ], + "description": "An environment receives data from one or more event sources. Each event source has associated connection info that allows the Time Series Insights ingress pipeline to connect to and pull data from the event source" + }, + "EventHubEventSourceResource": { + "x-ms-discriminator-value": "Microsoft.EventHub", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/EventHubEventSourceResourceProperties" + } + }, + "required": [ + "properties" + ], + "allOf": [ + { + "$ref": "#/definitions/EventSourceResource" + } + ], + "description": "An event source that receives its data from an Azure EventHub." + }, + "IoTHubEventSourceResource": { + "x-ms-discriminator-value": "Microsoft.IotHub", + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/IoTHubEventSourceResourceProperties" + } + }, + "required": [ + "properties" + ], + "allOf": [ + { + "$ref": "#/definitions/EventSourceResource" + } + ], + "description": "An event source that receives its data from an Azure IoTHub." + }, + "EventSourceCommonProperties": { + "properties": { + "timestampPropertyName": { + "type": "string", + "description": "The event property that will be used as the event source's timestamp. If a value isn't specified for timestampPropertyName, or if null or empty-string is specified, the event creation time will be used." + } + }, + "allOf": [ + { + "$ref": "#/definitions/ResourceProperties" + } + ], + "description": "Properties of the event source." + }, + "AzureEventSourceProperties": { + "properties": { + "eventSourceResourceId": { + "type": "string", + "description": "The resource id of the event source in Azure Resource Manager." + } + }, + "allOf": [ + { + "$ref": "#/definitions/EventSourceCommonProperties" + } + ], + "required": [ + "eventSourceResourceId" + ], + "description": "Properties of an event source that reads events from an event broker in Azure." + }, + "EventHubEventSourceCommonProperties": { + "properties": { + "serviceBusNamespace": { + "type": "string", + "description": "The name of the service bus that contains the event hub." + }, + "eventHubName": { + "type": "string", + "description": "The name of the event hub." + }, + "consumerGroupName": { + "type": "string", + "description": "The name of the event hub's consumer group that holds the partitions from which events will be read." + }, + "keyName": { + "type": "string", + "description": "The name of the SAS key that grants the Time Series Insights service access to the event hub. The shared access policies for this key must grant 'Listen' permissions to the event hub." + } + }, + "allOf": [ + { + "$ref": "#/definitions/AzureEventSourceProperties" + } + ], + "required": [ + "serviceBusNamespace", + "eventHubName", + "consumerGroupName", + "keyName" + ], + "description": "Properties of the EventHub event source." + }, + "EventHubEventSourceCreationProperties": { + "properties": { + "sharedAccessKey": { + "type": "string", + "description": "The value of the shared access key that grants the Time Series Insights service read access to the event hub. This property is not shown in event source responses." + } + }, + "allOf": [ + { + "$ref": "#/definitions/EventHubEventSourceCommonProperties" + } + ], + "required": [ + "sharedAccessKey" + ], + "description": "Properties of the EventHub event source that are required on create or update requests." + }, + "EventHubEventSourceResourceProperties": { + "allOf": [ + { + "$ref": "#/definitions/EventHubEventSourceCommonProperties" + } + ], + "properties": { + "sss": { + "type": "string" + } + }, + "description": "Properties of the EventHub event source resource." + }, + "IoTHubEventSourceCommonProperties": { + "properties": { + "iotHubName": { + "type": "string", + "description": "The name of the iot hub." + }, + "consumerGroupName": { + "type": "string", + "description": "The name of the iot hub's consumer group that holds the partitions from which events will be read." + }, + "keyName": { + "type": "string", + "description": "The name of the Shared Access Policy key that grants the Time Series Insights service access to the iot hub. This shared access policy key must grant 'service connect' permissions to the iot hub." + } + }, + "allOf": [ + { + "$ref": "#/definitions/AzureEventSourceProperties" + } + ], + "required": [ + "iotHubName", + "consumerGroupName", + "keyName" + ], + "description": "Properties of the IoTHub event source." + }, + "IoTHubEventSourceCreationProperties": { + "properties": { + "sharedAccessKey": { + "type": "string", + "description": "The value of the Shared Access Policy key that grants the Time Series Insights service read access to the iot hub. This property is not shown in event source responses." + } + }, + "allOf": [ + { + "$ref": "#/definitions/IoTHubEventSourceCommonProperties" + } + ], + "required": [ + "sharedAccessKey" + ], + "description": "Properties of the IoTHub event source that are required on create or update requests." + }, + "IoTHubEventSourceResourceProperties": { + "allOf": [ + { + "$ref": "#/definitions/IoTHubEventSourceCommonProperties" + } + ], + "properties": { + "name": { + "type": "boolean" + } + }, + "description": "Properties of the IoTHub event source resource." + }, + "LocalTimestamp": { + "description": "An object that represents the local timestamp property. It contains the format of local timestamp that needs to be used and the corresponding timezone offset information. If a value isn't specified for localTimestamp, or if null, then the local timestamp will not be ingressed with the events.", + "type": "object", + "properties": { + "format": { + "description": "An enum that represents the format of the local timestamp property that needs to be set.", + "type": "string", + "enum": [ + "Embedded", + "Iana", + "TimeSpan" + ], + "x-ms-enum": { + "name": "LocalTimestampFormat", + "modelAsString": false + } + }, + "timeZoneOffset": { + "description": "An object that represents the offset information for the local timestamp format specified. Should not be specified for LocalTimestampFormat - Embedded.", + "type": "object", + "properties": { + "propertyName": { + "type": "string", + "description": "The event property that will be contain the offset information to calculate the local timestamp. When the LocalTimestampFormat is Iana, the property name will contain the name of the column which contains IANA Timezone Name (eg: Americas/Los Angeles). When LocalTimestampFormat is Timespan, it contains the name of property which contains values representing the offset (eg: P1D or 1.00:00:00)" + } + } + } + } + }, + "EventSourceMutableProperties": { + "description": "An object that represents a set of mutable event source resource properties.", + "type": "object", + "properties": { + "timestampPropertyName": { + "type": "string", + "description": "The event property that will be used as the event source's timestamp. If a value isn't specified for timestampPropertyName, or if null or empty-string is specified, the event creation time will be used." + }, + "localTimestamp": { + "$ref": "#/definitions/LocalTimestamp", + "description": "An object that represents the local timestamp property. It contains the format of local timestamp that needs to be used and the corresponding timezone offset information. If a value isn't specified for localTimestamp, or if null, then the local timestamp will not be ingressed with the events." + } + } + }, + "EventHubEventSourceMutableProperties": { + "description": "An object that represents a set of mutable EventHub event source resource properties.", + "type": "object", + "properties": { + "sharedAccessKey": { + "type": "string", + "description": "The value of the shared access key that grants the Time Series Insights service read access to the event hub. This property is not shown in event source responses." + } + }, + "allOf": [ + { + "$ref": "#/definitions/EventSourceMutableProperties" + } + ] + }, + "IoTHubEventSourceMutableProperties": { + "description": "An object that represents a set of mutable IoTHub event source resource properties.", + "type": "object", + "properties": { + "sharedAccessKey": { + "type": "string", + "description": "The value of the shared access key that grants the Time Series Insights service read access to the iot hub. This property is not shown in event source responses." + } + }, + "allOf": [ + { + "$ref": "#/definitions/EventSourceMutableProperties" + } + ] + }, + "ReferenceDataSetCreateOrUpdateParameters": { + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/ReferenceDataSetCreationProperties" + } + }, + "required": [ + "properties" + ], + "allOf": [ + { + "$ref": "#/definitions/CreateOrUpdateTrackedResourceProperties" + } + ] + }, + "ReferenceDataSetUpdateParameters": { + "type": "object", + "properties": { + "tags": { + "type": "string", + "description": "Key-value pairs of additional properties for the reference data set." + } + }, + "description": "Parameters supplied to the Update Reference Data Set operation." + }, + "ReferenceDataSetListResponse": { + "properties": { + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceDataSetResource" + }, + "description": "Result of the List Reference Data Sets operation." + } + }, + "description": "The response of the List Reference Data Sets operation." + }, + "ReferenceDataSetResource": { + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/ReferenceDataSetResourceProperties" + } + }, + "allOf": [ + { + "$ref": "#/definitions/TrackedResource" + } + ], + "description": "A reference data set provides metadata about the events in an environment. Metadata in the reference data set will be joined with events as they are read from event sources. The metadata that makes up the reference data set is uploaded or modified through the Time Series Insights data plane APIs." + }, + "ReferenceDataSetCreationProperties": { + "properties": { + "keyProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceDataSetKeyProperty" + }, + "description": "The list of key properties for the reference data set." + }, + "dataStringComparisonBehavior": { + "type": "string", + "description": "The reference data set key comparison behavior can be set using this property. By default, the value is 'Ordinal' - which means case sensitive key comparison will be performed while joining reference data with events or while adding new reference data. When 'OrdinalIgnoreCase' is set, case insensitive comparison will be used.", + "enum": [ + "Ordinal", + "OrdinalIgnoreCase" + ], + "x-ms-enum": { + "name": "DataStringComparisonBehavior", + "modelAsString": false + } + } + }, + "required": [ + "keyProperties" + ], + "description": "Properties used to create a reference data set." + }, + "ReferenceDataSetResourceProperties": { + "allOf": [ + { + "$ref": "#/definitions/ReferenceDataSetCreationProperties" + }, + { + "$ref": "#/definitions/ResourceProperties" + } + ], + "required": [ + "keyProperties" + ], + "description": "Properties of the reference data set." + }, + "ReferenceDataSetKeyProperty": { + "properties": { + "name": { + "type": "string", + "description": "The name of the key property." + }, + "type": { + "type": "string", + "description": "The type of the key property.", + "enum": [ + "String", + "Double", + "Bool", + "DateTime" + ], + "x-ms-enum": { + "name": "ReferenceDataKeyPropertyType", + "modelAsString": false + } + } + }, + "description": "A key property for the reference data set. A reference data set can have multiple key properties." + }, + "AccessPolicyCreateOrUpdateParameters": { + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/AccessPolicyResourceProperties" + } + }, + "required": [ + "properties" + ] + }, + "AccessPolicyUpdateParameters": { + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/AccessPolicyMutableProperties" + } + } + }, + "AccessPolicyListResponse": { + "properties": { + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/AccessPolicyResource" + }, + "description": "Result of the List access policies operation." + } + }, + "description": "The response of the List access policies operation." + }, + "AccessPolicyResource": { + "properties": { + "properties": { + "x-ms-client-flatten": true, + "$ref": "#/definitions/AccessPolicyResourceProperties" + } + }, + "allOf": [ + { + "$ref": "#/definitions/Resource" + } + ], + "description": "An access policy is used to grant users and applications access to the environment. Roles are assigned to service principals in Azure Active Directory. These roles define the actions the principal can perform through the Time Series Insights data plane APIs." + }, + "AccessPolicyResourceProperties": { + "properties": { + "principalObjectId": { + "type": "string", + "description": "The objectId of the principal in Azure Active Directory." + }, + "description": { + "type": "string", + "description": "An description of the access policy." + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "description": "A role defining the data plane operations that a principal can perform on a Time Series Insights client.", + "enum": [ + "Reader", + "Contributor" + ], + "x-ms-enum": { + "name": "AccessPolicyRole", + "modelAsString": false + } + }, + "description": "The list of roles the principal is assigned on the environment." + } + } + }, + "AccessPolicyMutableProperties": { + "description": "An object that represents a set of mutable access policy resource properties.", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "An description of the access policy." + }, + "roles": { + "type": "array", + "items": { + "type": "string", + "description": "A role defining the data plane operations that a principal can perform on a Time Series Insights client.", + "enum": [ + "Reader", + "Contributor" + ], + "x-ms-enum": { + "name": "AccessPolicyRole", + "modelAsString": false + } + }, + "description": "The list of roles the principal is assigned on the environment." + } + } + }, + "CloudError": { + "type": "object", + "properties": { + "error": { + "$ref": "#/definitions/CloudErrorBody", + "description": "Describes a particular API error with an error code and a message." + } + }, + "description": "Contains information about an API error.", + "x-ms-external": true + }, + "CloudErrorBody": { + "type": "object", + "description": "Describes a particular API error with an error code and a message.", + "properties": { + "code": { + "type": "string", + "description": "An error code that describes the error condition more precisely than an HTTP status code. Can be used to programmatically handle specific error cases." + }, + "message": { + "type": "string", + "description": "A message that describes the error in detail and provides debugging information." + }, + "target": { + "type": "string", + "description": "The target of the particular error (for example, the name of the property in error)." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/CloudErrorBody", + "description": "Describes a particular API error with an error code and a message." + }, + "description": "Contains nested errors that are related to this error." + } + }, + "x-ms-external": true + } + }, + "parameters": { + "SubscriptionIdParameter": { + "name": "subscriptionId", + "in": "path", + "description": "Azure Subscription ID.", + "required": true, + "type": "string" + }, + "ApiVersionParameter": { + "name": "api-version", + "in": "query", + "required": true, + "type": "string", + "description": "Version of the API to be used with the client request." + }, + "ExpandParameter": { + "name": "expand", + "in": "query", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Setting expand=status will include the status of the internal services of the environment in the Time Series Insights service." + }, + "ResourceGroupNameParameter": { + "name": "resourceGroupName", + "in": "path", + "required": true, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Name of an Azure Resource group." + }, + "EnvironmentNameParameter": { + "name": "environmentName", + "in": "path", + "required": true, + "type": "string", + "description": "The name of the Time Series Insights environment associated with the specified resource group.", + "x-ms-parameter-location": "method" + }, + "EventSourceNameParameter": { + "name": "eventSourceName", + "in": "path", + "required": true, + "type": "string", + "description": "The name of the Time Series Insights event source associated with the specified environment.", + "x-ms-parameter-location": "method" + }, + "ReferenceDataSetNameParameter": { + "name": "referenceDataSetName", + "in": "path", + "required": true, + "type": "string", + "description": "The name of the Time Series Insights reference data set associated with the specified environment.", + "x-ms-parameter-location": "method" + }, + "AccessPolicyNameParameter": { + "name": "accessPolicyName", + "in": "path", + "required": true, + "type": "string", + "description": "The name of the Time Series Insights access policy associated with the specified environment.", + "x-ms-parameter-location": "method" + } + } +} \ No newline at end of file