Repository: radius-project/radius

Issue:
Add support for different modes for the MongoDB Connector
## Overview of Feature Request
A new schema/data model for `connector` resources is needed as currently the discriminator `kind` is used to differentiate between different Dapr `connector` resources and this creates a conflict for differentiating between resources and recipe based `connectors`.

### Current State
A normal `connector` resource for a Redis cache `connector` contains the following schema:

```
resource redis 'Applications.Connector/redisCaches@2022-03-15-privatepreview' = {
  name: 'redis'
  location: 'global'
  properties: {
    environment: environment
    application: app.id
    resource: azureCacheId
  }
}
```

### Proposed State
This implementation proposes to introduce a different discriminator called `mode` which contains **3** mutually exclusive values:

- `resource`

For all resource based `connectors`

```
resource redis 'Applications.Connector/redisCaches@2022-03-15-privatepreview' = {
  name: 'redis'
  location: 'global'
  properties: {
    environment: environment
    application: app.id
    mode: 'resource'
    resource: azureCacheId
  }
}
```
properties can be overwritten in this mode. Ex: `host: 'foo'`

```
resource dbresource 'Applications.Connector/mongoDatabases@2022-03-15-privatepreview' = {
  name: 'db'
  location: 'global'
  properties: {
    mode: 'resource'
    environment: environment
    application: app.id
    resource: cosmosDatabase
    host: 'foo'
  }
}
```

- `recipe`

For all recipe based `connectors`

```
resource redis 'Applications.Connector/redisCaches@2022-03-15-privatepreview' = {
  name: 'redis'
  location: 'global'
  properties: {
    environment: environment
    application: app.id
    mode: 'recipe'
    recipe: {
      name: 'foo'
      parameters: {
        port: 6001
      }
    }
  }
}
```

- `values`
For all generic based `connectors`

```
resource redis 'Applications.Connector/redisCaches@2022-03-15-privatepreview' = {
  name: 'redis'
  location: 'global'
  properties: {
    mode: 'values'
    environment: environment
    application: app.id
    host: 'foo'
    port: 8080
    secrets: {
      connectionString: 'foo'
    }
  }
}
```


## Acceptance criteria

1. Schema/data model changes to the swagger files
2. Add necessary conversion changes
3. Add unit tests/E2E tests
4. Documentation is created for the changes.

## Tasks

- [x] radius-project/radius#4200
- [x] radius-project/core-team#1002
- [x] radius-project/radius#4306
- [x] radius-project/radius#4201
- [x] radius-project/radius#4202
- [x] radius-project/radius#4203
- [x] radius-project/radius#4170
- [x] radius-project/radius#4191
- [x] radius-project/radius#4193
- [x] radius-project/radius#4194
- [x] radius-project/radius#4208


## Scenario Link
https://github.com/project-radius/radius/issues/3542

## Discussion Video

https://microsoft-my.sharepoint.com/:v:/p/jasonviviano/EcKiB4a00b1Pr6ZuIvct2UIBhxObbPoSnHbOeHQHqTJokg

## Tracking Feature issue to enable this for Dapr connectors

- [x] radius-project/radius#4081

[AB#4260](https://dev.azure.com/azure-octo/e61041b4-555f-47ae-95b2-4f8ab480ea57/_workitems/edit/4260)

Hints from issue comments:

Solution patch:
diff --git a/hack/bicep-types-radius/generated/applications/applications.core/2022-03-15-privatepreview/types.json b/hack/bicep-types-radius/generated/applications/applications.core/2022-03-15-privatepreview/types.json
index 0efdfe9ab..38ca4fd8a 100644
--- a/hack/bicep-types-radius/generated/applications/applications.core/2022-03-15-privatepreview/types.json
+++ b/hack/bicep-types-radius/generated/applications/applications.core/2022-03-15-privatepreview/types.json
@@ -1 +1 @@
-[{"1":{"Kind":1}},{"1":{"Kind":2}},{"1":{"Kind":3}},{"1":{"Kind":4}},{"1":{"Kind":5}},{"1":{"Kind":6}},{"1":{"Kind":7}},{"1":{"Kind":8}},{"6":{"Value":"Applications.Core/environments"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/environments","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":8,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":9,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":22,"Flags":1,"Description":"Application environment properties"},"tags":{"Type":42,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"SystemData","Properties":{"createdBy":{"Type":4,"Flags":0,"Description":"The identity that created the resource."},"createdByType":{"Type":16,"Flags":0,"Description":"The type of identity that created the resource."},"createdAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource creation (UTC)."},"lastModifiedBy":{"Type":4,"Flags":0,"Description":"The identity that last modified the resource."},"lastModifiedByType":{"Type":21,"Flags":0,"Description":"The type of identity that created the resource."},"lastModifiedAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource last modification (UTC)"}}}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[12,13,14,15]}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[17,18,19,20]}},{"2":{"Name":"EnvironmentProperties","Properties":{"provisioningState":{"Type":30,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"compute":{"Type":31,"Flags":1,"Description":"Compute resource used by application environment resource."},"providers":{"Type":38,"Flags":0,"Description":"Cloud providers configuration"},"useDevRecipes":{"Type":2,"Flags":0,"Description":"Flag to use radius owned recipes."},"recipes":{"Type":41,"Flags":0,"Description":"Dictionary of <EnvironmentRecipeProperties>"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[23,24,25,26,27,28,29]}},{"7":{"Name":"EnvironmentCompute","Discriminator":"kind","BaseProperties":{"resourceId":{"Type":4,"Flags":0,"Description":"The resource id of the compute resource for application environment."},"identity":{"Type":32,"Flags":0}},"Elements":{"kubernetes":36}}},{"2":{"Name":"IdentitySettings","Properties":{"kind":{"Type":35,"Flags":1,"Description":"Configuration for supported external identity providers"},"oidcIssuer":{"Type":4,"Flags":0,"Description":"The URI for your compute platform's OIDC issuer"},"resource":{"Type":4,"Flags":0,"Description":"The resource ID of the provisioned identity"}}}},{"6":{"Value":"undefined"}},{"6":{"Value":"azure.com.workload"}},{"5":{"Elements":[33,34]}},{"2":{"Name":"KubernetesCompute","Properties":{"namespace":{"Type":4,"Flags":1,"Description":"The namespace to use for the environment."},"kind":{"Type":37,"Flags":1,"Description":"Type of compute resource."}}}},{"6":{"Value":"kubernetes"}},{"2":{"Name":"Providers","Properties":{"azure":{"Type":39,"Flags":0,"Description":"Azure cloud provider configuration"}}}},{"2":{"Name":"ProvidersAzure","Properties":{"scope":{"Type":4,"Flags":0,"Description":"Target scope for Azure resources to be deployed into.  For example: '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup'"}}}},{"2":{"Name":"EnvironmentRecipeProperties","Properties":{"linkType":{"Type":4,"Flags":1,"Description":"Type of the link this recipe can be consumed by. For example: 'Applications.Link/mongoDatabases'"},"templatePath":{"Type":4,"Flags":1,"Description":"Path to the template provided by the recipe. Currently only link to Azure Container Registry is supported."}}}},{"2":{"Name":"EnvironmentPropertiesRecipes","Properties":{},"AdditionalProperties":40}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/environments@2022-03-15-privatepreview","ScopeType":0,"Body":10}},{"6":{"Value":"Applications.Core/applications"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/applications","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":44,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":45,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":47,"Flags":1,"Description":"Application properties"},"tags":{"Type":56,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"ApplicationProperties","Properties":{"provisioningState":{"Type":55,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"environment":{"Type":4,"Flags":1,"Description":"The resource id of the environment linked to application."}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[48,49,50,51,52,53,54]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/applications@2022-03-15-privatepreview","ScopeType":0,"Body":46}},{"6":{"Value":"Applications.Core/httpRoutes"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/httpRoutes","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":58,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":59,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":61,"Flags":1,"Description":"HTTP Route properties"},"tags":{"Type":72,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"HttpRouteProperties","Properties":{"provisioningState":{"Type":69,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"hostname":{"Type":4,"Flags":0,"Description":"The internal hostname accepting traffic for the HTTP Route. Readonly."},"port":{"Type":3,"Flags":0,"Description":"The port number for the HTTP Route. Defaults to 80. Readonly."},"scheme":{"Type":4,"Flags":0,"Description":"The scheme used for traffic. Readonly."},"url":{"Type":4,"Flags":0,"Description":"A stable URL that that can be used to route traffic to a resource. Readonly."},"status":{"Type":70,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":0,"Description":"The resource id of the environment linked to the resource"},"application":{"Type":4,"Flags":1,"Description":"Specifies the resource id of the application"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[62,63,64,65,66,67,68]}},{"2":{"Name":"ResourceStatus","Properties":{"outputResources":{"Type":71,"Flags":0,"Description":"Array of AnyObject"}}}},{"3":{"ItemType":0}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/httpRoutes@2022-03-15-privatepreview","ScopeType":0,"Body":60}},{"6":{"Value":"Applications.Core/gateways"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/gateways","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":74,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":75,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":77,"Flags":1,"Description":"Gateway properties"},"tags":{"Type":89,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"GatewayProperties","Properties":{"provisioningState":{"Type":85,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"internal":{"Type":2,"Flags":0,"Description":"Sets Gateway to not be exposed externally (no public IP address associated). Defaults to false (exposed to internet)."},"hostname":{"Type":86,"Flags":0,"Description":"Declare hostname information for the Gateway. Leaving the hostname empty auto-assigns one: mygateway.myapp.PUBLICHOSTNAMEORIP.nip.io."},"routes":{"Type":88,"Flags":1,"Description":"Routes attached to this Gateway"},"url":{"Type":4,"Flags":2,"Description":"URL of the gateway resource. Readonly."},"status":{"Type":70,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":0,"Description":"The resource id of the environment linked to the resource"},"application":{"Type":4,"Flags":1,"Description":"Specifies the resource id of the application"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[78,79,80,81,82,83,84]}},{"2":{"Name":"GatewayPropertiesHostname","Properties":{"prefix":{"Type":4,"Flags":0,"Description":"Specify a prefix for the hostname: myhostname.myapp.PUBLICHOSTNAMEORIP.nip.io. Mutually exclusive with 'fullyQualifiedHostname' and will be overridden if both are defined."},"fullyQualifiedHostname":{"Type":4,"Flags":0,"Description":"Specify a fully-qualified domain name: myapp.mydomain.com. Mutually exclusive with 'prefix' and will take priority if both are defined."}}}},{"2":{"Name":"GatewayRoute","Properties":{"path":{"Type":4,"Flags":0,"Description":"The path to match the incoming request path on. Ex - /myservice."},"destination":{"Type":4,"Flags":0,"Description":"The HttpRoute to route to. Ex - myserviceroute.id."},"replacePrefix":{"Type":4,"Flags":0,"Description":"Optionally update the prefix when sending the request to the service. Ex - replacePrefix: '/' and path: '/myservice' will transform '/myservice/myroute' to '/myroute'"}}}},{"3":{"ItemType":87}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/gateways@2022-03-15-privatepreview","ScopeType":0,"Body":76}},{"6":{"Value":"Applications.Core/containers"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/containers","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":91,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":92,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":94,"Flags":1,"Description":"Container properties"},"tags":{"Type":150,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"ContainerProperties","Properties":{"provisioningState":{"Type":102,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"connections":{"Type":107,"Flags":0,"Description":"Dictionary of <ConnectionProperties>"},"container":{"Type":108,"Flags":1,"Description":"Definition of a container."},"identity":{"Type":32,"Flags":0},"extensions":{"Type":149,"Flags":0,"Description":"Extensions spec of the resource"},"status":{"Type":70,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":0,"Description":"The resource id of the environment linked to the resource"},"application":{"Type":4,"Flags":1,"Description":"Specifies the resource id of the application"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[95,96,97,98,99,100,101]}},{"2":{"Name":"ConnectionProperties","Properties":{"source":{"Type":4,"Flags":1,"Description":"The source of the connection"},"disableDefaultEnvVars":{"Type":2,"Flags":0},"iam":{"Type":104,"Flags":0,"Description":"The properties of IAM"}}}},{"2":{"Name":"IamProperties","Properties":{"kind":{"Type":105,"Flags":1,"Description":"The kind of IAM provider to configure"},"roles":{"Type":106,"Flags":0,"Description":"RBAC permissions to be assigned on the source resource"}}}},{"6":{"Value":"azure"}},{"3":{"ItemType":4}},{"2":{"Name":"ContainerPropertiesConnections","Properties":{},"AdditionalProperties":103}},{"2":{"Name":"Container","Properties":{"image":{"Type":4,"Flags":1,"Description":"The registry and image to download and run in your container"},"env":{"Type":109,"Flags":0,"Description":"Dictionary of <string>"},"ports":{"Type":116,"Flags":0,"Description":"Dictionary of <ContainerPort>"},"readinessProbe":{"Type":117,"Flags":0,"Description":"Properties for readiness/liveness probe"},"livenessProbe":{"Type":117,"Flags":0,"Description":"Properties for readiness/liveness probe"},"volumes":{"Type":136,"Flags":0,"Description":"Dictionary of <Volume>"},"command":{"Type":137,"Flags":0,"Description":"Entrypoint array. Overrides the container image's ENTRYPOINT"},"args":{"Type":138,"Flags":0,"Description":"Arguments to the entrypoint. Overrides the container image's CMD"},"workingDir":{"Type":4,"Flags":0,"Description":"Working directory for the container"}}}},{"2":{"Name":"ContainerEnv","Properties":{},"AdditionalProperties":4}},{"2":{"Name":"ContainerPort","Properties":{"containerPort":{"Type":3,"Flags":1,"Description":"The listening port number"},"protocol":{"Type":115,"Flags":0,"Description":"Protocol in use by the port"},"provides":{"Type":4,"Flags":0,"Description":"Specifies a route provided by this port"}}}},{"6":{"Value":"TCP"}},{"6":{"Value":"UDP"}},{"6":{"Value":"http"}},{"6":{"Value":"grpc"}},{"5":{"Elements":[111,112,113,114]}},{"2":{"Name":"ContainerPorts","Properties":{},"AdditionalProperties":110}},{"7":{"Name":"HealthProbeProperties","Discriminator":"kind","BaseProperties":{"initialDelaySeconds":{"Type":3,"Flags":0,"Description":"Initial delay in seconds before probing for readiness/liveness"},"failureThreshold":{"Type":3,"Flags":0,"Description":"Threshold number of times the probe fails after which a failure would be reported"},"periodSeconds":{"Type":3,"Flags":0,"Description":"Interval for the readiness/liveness probe in seconds"},"timeoutSeconds":{"Type":3,"Flags":0,"Description":"Number of seconds after which the readiness/liveness probe times out. Defaults to 5 second"}},"Elements":{"exec":118,"httpGet":120,"tcp":123}}},{"2":{"Name":"ExecHealthProbeProperties","Properties":{"command":{"Type":4,"Flags":1,"Description":"Command to execute to probe readiness/liveness"},"kind":{"Type":119,"Flags":1,"Description":"The HealthProbeProperties kind"}}}},{"6":{"Value":"exec"}},{"2":{"Name":"HttpGetHealthProbeProperties","Properties":{"containerPort":{"Type":3,"Flags":1,"Description":"The listening port number"},"path":{"Type":4,"Flags":1,"Description":"The route to make the HTTP request on"},"headers":{"Type":121,"Flags":0,"Description":"Custom HTTP headers to add to the get request"},"kind":{"Type":122,"Flags":1,"Description":"The HealthProbeProperties kind"}}}},{"2":{"Name":"HttpGetHealthProbePropertiesHeaders","Properties":{},"AdditionalProperties":4}},{"6":{"Value":"httpGet"}},{"2":{"Name":"TcpHealthProbeProperties","Properties":{"containerPort":{"Type":3,"Flags":1,"Description":"The listening port number"},"kind":{"Type":124,"Flags":1,"Description":"The HealthProbeProperties kind"}}}},{"6":{"Value":"tcp"}},{"7":{"Name":"Volume","Discriminator":"kind","BaseProperties":{"mountPath":{"Type":4,"Flags":0,"Description":"The path where the volume is mounted"}},"Elements":{"ephemeral":126,"persistent":131}}},{"2":{"Name":"EphemeralVolume","Properties":{"managedStore":{"Type":129,"Flags":1,"Description":"Backing store for the ephemeral volume"},"kind":{"Type":130,"Flags":1,"Description":"The Volume kind"}}}},{"6":{"Value":"memory"}},{"6":{"Value":"disk"}},{"5":{"Elements":[127,128]}},{"6":{"Value":"ephemeral"}},{"2":{"Name":"PersistentVolume","Properties":{"permission":{"Type":134,"Flags":0,"Description":"Container read/write access to the volume"},"source":{"Type":4,"Flags":1,"Description":"The source of the volume"},"kind":{"Type":135,"Flags":1,"Description":"The Volume kind"}}}},{"6":{"Value":"read"}},{"6":{"Value":"write"}},{"5":{"Elements":[132,133]}},{"6":{"Value":"persistent"}},{"2":{"Name":"ContainerVolumes","Properties":{},"AdditionalProperties":125}},{"3":{"ItemType":4}},{"3":{"ItemType":4}},{"7":{"Name":"Extension","Discriminator":"kind","BaseProperties":{},"Elements":{"daprSidecar":140,"manualScaling":147}}},{"2":{"Name":"DaprSidecarExtension","Properties":{"appPort":{"Type":3,"Flags":0,"Description":"The Dapr appPort. Specifies the internal listening port for the application to handle requests from the Dapr sidecar."},"appId":{"Type":4,"Flags":1,"Description":"The Dapr appId. Specifies the identifier used by Dapr for service invocation."},"config":{"Type":4,"Flags":0,"Description":"Specifies the Dapr configuration to use for the resource."},"protocol":{"Type":145,"Flags":0,"Description":"Protocol in use by the port"},"provides":{"Type":4,"Flags":0,"Description":"Specifies the resource id of a dapr.io.InvokeHttpRoute that can route traffic to this resource."},"kind":{"Type":146,"Flags":1,"Description":"Specifies the extensions of a resource."}}}},{"6":{"Value":"TCP"}},{"6":{"Value":"UDP"}},{"6":{"Value":"http"}},{"6":{"Value":"grpc"}},{"5":{"Elements":[141,142,143,144]}},{"6":{"Value":"daprSidecar"}},{"2":{"Name":"ManualScalingExtension","Properties":{"replicas":{"Type":3,"Flags":0,"Description":"Replica count."},"kind":{"Type":148,"Flags":1,"Description":"Specifies the extensions of a resource."}}}},{"6":{"Value":"manualScaling"}},{"3":{"ItemType":139}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/containers@2022-03-15-privatepreview","ScopeType":0,"Body":93}},{"6":{"Value":"Applications.Core/volumes"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/volumes","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":152,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":153,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":155,"Flags":1},"tags":{"Type":187,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"VolumeProperties","Discriminator":"kind","BaseProperties":{"provisioningState":{"Type":163,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"status":{"Type":70,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":0,"Description":"The resource id of the environment linked to the resource"},"application":{"Type":4,"Flags":1,"Description":"Specifies the resource id of the application"}},"Elements":{"azure.com.keyvault":164}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[156,157,158,159,160,161,162]}},{"2":{"Name":"AzureKeyVaultVolumeProperties","Properties":{"certificates":{"Type":177,"Flags":0,"Description":"The KeyVault certificates that this volume exposes"},"keys":{"Type":179,"Flags":0,"Description":"The KeyVault keys that this volume exposes"},"resource":{"Type":4,"Flags":1,"Description":"The ID of the keyvault to use for this volume resource"},"secrets":{"Type":185,"Flags":0,"Description":"The KeyVault secrets that this volume exposes"},"kind":{"Type":186,"Flags":1,"Description":"The volume kind"}}}},{"2":{"Name":"CertificateObjectProperties","Properties":{"alias":{"Type":4,"Flags":0,"Description":"File name when written to disk."},"encoding":{"Type":169,"Flags":0,"Description":"Encoding format. Default utf-8"},"format":{"Type":172,"Flags":0,"Description":"Certificate format. Default pem"},"name":{"Type":4,"Flags":1,"Description":"The name of the certificate"},"certType":{"Type":176,"Flags":0,"Description":"Certificate object type to be downloaded - the certificate itself, private key or public key of the certificate"},"version":{"Type":4,"Flags":0,"Description":"Certificate version"}}}},{"6":{"Value":"utf-8"}},{"6":{"Value":"hex"}},{"6":{"Value":"base64"}},{"5":{"Elements":[166,167,168]}},{"6":{"Value":"pem"}},{"6":{"Value":"pfx"}},{"5":{"Elements":[170,171]}},{"6":{"Value":"certificate"}},{"6":{"Value":"publickey"}},{"6":{"Value":"privatekey"}},{"5":{"Elements":[173,174,175]}},{"2":{"Name":"AzureKeyVaultVolumePropertiesCertificates","Properties":{},"AdditionalProperties":165}},{"2":{"Name":"KeyObjectProperties","Properties":{"alias":{"Type":4,"Flags":0,"Description":"File name when written to disk."},"name":{"Type":4,"Flags":1,"Description":"The name of the key"},"version":{"Type":4,"Flags":0,"Description":"Key version"}}}},{"2":{"Name":"AzureKeyVaultVolumePropertiesKeys","Properties":{},"AdditionalProperties":178}},{"2":{"Name":"SecretObjectProperties","Properties":{"alias":{"Type":4,"Flags":0,"Description":"File name when written to disk."},"encoding":{"Type":184,"Flags":0,"Description":"Encoding format. Default utf-8"},"name":{"Type":4,"Flags":1,"Description":"The name of the secret"},"version":{"Type":4,"Flags":0,"Description":"Secret version"}}}},{"6":{"Value":"utf-8"}},{"6":{"Value":"hex"}},{"6":{"Value":"base64"}},{"5":{"Elements":[181,182,183]}},{"2":{"Name":"AzureKeyVaultVolumePropertiesSecrets","Properties":{},"AdditionalProperties":180}},{"6":{"Value":"azure.com.keyvault"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/volumes@2022-03-15-privatepreview","ScopeType":0,"Body":154}}]
\ No newline at end of file
+[{"1":{"Kind":1}},{"1":{"Kind":2}},{"1":{"Kind":3}},{"1":{"Kind":4}},{"1":{"Kind":5}},{"1":{"Kind":6}},{"1":{"Kind":7}},{"1":{"Kind":8}},{"6":{"Value":"Applications.Core/environments"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/environments","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":8,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":9,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":22,"Flags":1,"Description":"Application environment properties"},"tags":{"Type":42,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"SystemData","Properties":{"createdBy":{"Type":4,"Flags":0,"Description":"The identity that created the resource."},"createdByType":{"Type":16,"Flags":0,"Description":"The type of identity that created the resource."},"createdAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource creation (UTC)."},"lastModifiedBy":{"Type":4,"Flags":0,"Description":"The identity that last modified the resource."},"lastModifiedByType":{"Type":21,"Flags":0,"Description":"The type of identity that created the resource."},"lastModifiedAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource last modification (UTC)"}}}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[12,13,14,15]}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[17,18,19,20]}},{"2":{"Name":"EnvironmentProperties","Properties":{"provisioningState":{"Type":30,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"compute":{"Type":31,"Flags":1,"Description":"Compute resource used by application environment resource."},"providers":{"Type":38,"Flags":0,"Description":"Cloud providers configuration"},"useDevRecipes":{"Type":2,"Flags":0,"Description":"Flag to use radius owned recipes."},"recipes":{"Type":41,"Flags":0,"Description":"Dictionary of <EnvironmentRecipeProperties>"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[23,24,25,26,27,28,29]}},{"7":{"Name":"EnvironmentCompute","Discriminator":"kind","BaseProperties":{"resourceId":{"Type":4,"Flags":0,"Description":"The resource id of the compute resource for application environment."},"identity":{"Type":32,"Flags":0}},"Elements":{"kubernetes":36}}},{"2":{"Name":"IdentitySettings","Properties":{"kind":{"Type":35,"Flags":1,"Description":"Configuration for supported external identity providers"},"oidcIssuer":{"Type":4,"Flags":0,"Description":"The URI for your compute platform's OIDC issuer"},"resource":{"Type":4,"Flags":0,"Description":"The resource ID of the provisioned identity"}}}},{"6":{"Value":"undefined"}},{"6":{"Value":"azure.com.workload"}},{"5":{"Elements":[33,34]}},{"2":{"Name":"KubernetesCompute","Properties":{"namespace":{"Type":4,"Flags":1,"Description":"The namespace to use for the environment."},"kind":{"Type":37,"Flags":1,"Description":"Type of compute resource."}}}},{"6":{"Value":"kubernetes"}},{"2":{"Name":"Providers","Properties":{"azure":{"Type":39,"Flags":0,"Description":"Azure cloud provider configuration"}}}},{"2":{"Name":"ProvidersAzure","Properties":{"scope":{"Type":4,"Flags":0,"Description":"Target scope for Azure resources to be deployed into.  For example: '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup'"}}}},{"2":{"Name":"EnvironmentRecipeProperties","Properties":{"linkType":{"Type":4,"Flags":1,"Description":"Type of the link this recipe can be consumed by. For example: 'Applications.Link/mongoDatabases'"},"templatePath":{"Type":4,"Flags":1,"Description":"Path to the template provided by the recipe. Currently only link to Azure Container Registry is supported."}}}},{"2":{"Name":"EnvironmentPropertiesRecipes","Properties":{},"AdditionalProperties":40}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/environments@2022-03-15-privatepreview","ScopeType":0,"Body":10}},{"6":{"Value":"Applications.Core/applications"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/applications","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":44,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":45,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":47,"Flags":1,"Description":"Application properties"},"tags":{"Type":56,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"ApplicationProperties","Properties":{"provisioningState":{"Type":55,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"environment":{"Type":4,"Flags":1,"Description":"The resource id of the environment linked to application."}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[48,49,50,51,52,53,54]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/applications@2022-03-15-privatepreview","ScopeType":0,"Body":46}},{"6":{"Value":"Applications.Core/httpRoutes"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/httpRoutes","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":58,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":59,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":61,"Flags":1,"Description":"HTTP Route properties"},"tags":{"Type":72,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"HttpRouteProperties","Properties":{"provisioningState":{"Type":69,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"hostname":{"Type":4,"Flags":0,"Description":"The internal hostname accepting traffic for the HTTP Route. Readonly."},"port":{"Type":3,"Flags":0,"Description":"The port number for the HTTP Route. Defaults to 80. Readonly."},"scheme":{"Type":4,"Flags":0,"Description":"The scheme used for traffic. Readonly."},"url":{"Type":4,"Flags":0,"Description":"A stable URL that that can be used to route traffic to a resource. Readonly."},"status":{"Type":70,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":0,"Description":"The resource id of the environment linked to the resource"},"application":{"Type":4,"Flags":1,"Description":"Specifies the resource id of the application"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[62,63,64,65,66,67,68]}},{"2":{"Name":"ResourceStatus","Properties":{"outputResources":{"Type":71,"Flags":0,"Description":"Array of AnyObject"}}}},{"3":{"ItemType":0}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/httpRoutes@2022-03-15-privatepreview","ScopeType":0,"Body":60}},{"6":{"Value":"Applications.Core/gateways"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/gateways","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":74,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":75,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":77,"Flags":1,"Description":"Gateway properties"},"tags":{"Type":89,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"GatewayProperties","Properties":{"provisioningState":{"Type":85,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"internal":{"Type":2,"Flags":0,"Description":"Sets Gateway to not be exposed externally (no public IP address associated). Defaults to false (exposed to internet)."},"hostname":{"Type":86,"Flags":0,"Description":"Declare hostname information for the Gateway. Leaving the hostname empty auto-assigns one: mygateway.myapp.PUBLICHOSTNAMEORIP.nip.io."},"routes":{"Type":88,"Flags":1,"Description":"Routes attached to this Gateway"},"url":{"Type":4,"Flags":2,"Description":"URL of the gateway resource. Readonly."},"status":{"Type":70,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":0,"Description":"The resource id of the environment linked to the resource"},"application":{"Type":4,"Flags":1,"Description":"Specifies the resource id of the application"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[78,79,80,81,82,83,84]}},{"2":{"Name":"GatewayPropertiesHostname","Properties":{"prefix":{"Type":4,"Flags":0,"Description":"Specify a prefix for the hostname: myhostname.myapp.PUBLICHOSTNAMEORIP.nip.io. Mutually exclusive with 'fullyQualifiedHostname' and will be overridden if both are defined."},"fullyQualifiedHostname":{"Type":4,"Flags":0,"Description":"Specify a fully-qualified domain name: myapp.mydomain.com. Mutually exclusive with 'prefix' and will take priority if both are defined."}}}},{"2":{"Name":"GatewayRoute","Properties":{"path":{"Type":4,"Flags":0,"Description":"The path to match the incoming request path on. Ex - /myservice."},"destination":{"Type":4,"Flags":0,"Description":"The HttpRoute to route to. Ex - myserviceroute.id."},"replacePrefix":{"Type":4,"Flags":0,"Description":"Optionally update the prefix when sending the request to the service. Ex - replacePrefix: '/' and path: '/myservice' will transform '/myservice/myroute' to '/myroute'"}}}},{"3":{"ItemType":87}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/gateways@2022-03-15-privatepreview","ScopeType":0,"Body":76}},{"6":{"Value":"Applications.Core/containers"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/containers","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":91,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":92,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":94,"Flags":1,"Description":"Container properties"},"tags":{"Type":150,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"ContainerProperties","Properties":{"provisioningState":{"Type":102,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"connections":{"Type":107,"Flags":0,"Description":"Dictionary of <ConnectionProperties>"},"container":{"Type":108,"Flags":1,"Description":"Definition of a container."},"identity":{"Type":32,"Flags":0},"extensions":{"Type":149,"Flags":0,"Description":"Extensions spec of the resource"},"status":{"Type":70,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":0,"Description":"The resource id of the environment linked to the resource"},"application":{"Type":4,"Flags":1,"Description":"Specifies the resource id of the application"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[95,96,97,98,99,100,101]}},{"2":{"Name":"ConnectionProperties","Properties":{"source":{"Type":4,"Flags":1,"Description":"The source of the connection"},"disableDefaultEnvVars":{"Type":2,"Flags":0},"iam":{"Type":104,"Flags":0,"Description":"The properties of IAM"}}}},{"2":{"Name":"IamProperties","Properties":{"kind":{"Type":105,"Flags":1,"Description":"The kind of IAM provider to configure"},"roles":{"Type":106,"Flags":0,"Description":"RBAC permissions to be assigned on the source resource"}}}},{"6":{"Value":"azure"}},{"3":{"ItemType":4}},{"2":{"Name":"ContainerPropertiesConnections","Properties":{},"AdditionalProperties":103}},{"2":{"Name":"Container","Properties":{"image":{"Type":4,"Flags":1,"Description":"The registry and image to download and run in your container"},"env":{"Type":109,"Flags":0,"Description":"Dictionary of <string>"},"ports":{"Type":116,"Flags":0,"Description":"Dictionary of <ContainerPort>"},"readinessProbe":{"Type":117,"Flags":0,"Description":"Properties for readiness/liveness probe"},"livenessProbe":{"Type":117,"Flags":0,"Description":"Properties for readiness/liveness probe"},"volumes":{"Type":136,"Flags":0,"Description":"Dictionary of <Volume>"},"command":{"Type":137,"Flags":0,"Description":"Entrypoint array. Overrides the container image's ENTRYPOINT"},"args":{"Type":138,"Flags":0,"Description":"Arguments to the entrypoint. Overrides the container image's CMD"},"workingDir":{"Type":4,"Flags":0,"Description":"Working directory for the container"}}}},{"2":{"Name":"ContainerEnv","Properties":{},"AdditionalProperties":4}},{"2":{"Name":"ContainerPort","Properties":{"containerPort":{"Type":3,"Flags":1,"Description":"The listening port number"},"protocol":{"Type":115,"Flags":0,"Description":"Protocol in use by the port"},"provides":{"Type":4,"Flags":0,"Description":"Specifies a route provided by this port"}}}},{"6":{"Value":"TCP"}},{"6":{"Value":"UDP"}},{"6":{"Value":"http"}},{"6":{"Value":"grpc"}},{"5":{"Elements":[111,112,113,114]}},{"2":{"Name":"ContainerPorts","Properties":{},"AdditionalProperties":110}},{"7":{"Name":"HealthProbeProperties","Discriminator":"kind","BaseProperties":{"initialDelaySeconds":{"Type":3,"Flags":0,"Description":"Initial delay in seconds before probing for readiness/liveness"},"failureThreshold":{"Type":3,"Flags":0,"Description":"Threshold number of times the probe fails after which a failure would be reported"},"periodSeconds":{"Type":3,"Flags":0,"Description":"Interval for the readiness/liveness probe in seconds"},"timeoutSeconds":{"Type":3,"Flags":0,"Description":"Number of seconds after which the readiness/liveness probe times out. Defaults to 5 seconds"}},"Elements":{"exec":118,"httpGet":120,"tcp":123}}},{"2":{"Name":"ExecHealthProbeProperties","Properties":{"command":{"Type":4,"Flags":1,"Description":"Command to execute to probe readiness/liveness"},"kind":{"Type":119,"Flags":1,"Description":"The HealthProbeProperties kind"}}}},{"6":{"Value":"exec"}},{"2":{"Name":"HttpGetHealthProbeProperties","Properties":{"containerPort":{"Type":3,"Flags":1,"Description":"The listening port number"},"path":{"Type":4,"Flags":1,"Description":"The route to make the HTTP request on"},"headers":{"Type":121,"Flags":0,"Description":"Custom HTTP headers to add to the get request"},"kind":{"Type":122,"Flags":1,"Description":"The HealthProbeProperties kind"}}}},{"2":{"Name":"HttpGetHealthProbePropertiesHeaders","Properties":{},"AdditionalProperties":4}},{"6":{"Value":"httpGet"}},{"2":{"Name":"TcpHealthProbeProperties","Properties":{"containerPort":{"Type":3,"Flags":1,"Description":"The listening port number"},"kind":{"Type":124,"Flags":1,"Description":"The HealthProbeProperties kind"}}}},{"6":{"Value":"tcp"}},{"7":{"Name":"Volume","Discriminator":"kind","BaseProperties":{"mountPath":{"Type":4,"Flags":0,"Description":"The path where the volume is mounted"}},"Elements":{"ephemeral":126,"persistent":131}}},{"2":{"Name":"EphemeralVolume","Properties":{"managedStore":{"Type":129,"Flags":1,"Description":"Backing store for the ephemeral volume"},"kind":{"Type":130,"Flags":1,"Description":"The Volume kind"}}}},{"6":{"Value":"memory"}},{"6":{"Value":"disk"}},{"5":{"Elements":[127,128]}},{"6":{"Value":"ephemeral"}},{"2":{"Name":"PersistentVolume","Properties":{"permission":{"Type":134,"Flags":0,"Description":"Container read/write access to the volume"},"source":{"Type":4,"Flags":1,"Description":"The source of the volume"},"kind":{"Type":135,"Flags":1,"Description":"The Volume kind"}}}},{"6":{"Value":"read"}},{"6":{"Value":"write"}},{"5":{"Elements":[132,133]}},{"6":{"Value":"persistent"}},{"2":{"Name":"ContainerVolumes","Properties":{},"AdditionalProperties":125}},{"3":{"ItemType":4}},{"3":{"ItemType":4}},{"7":{"Name":"Extension","Discriminator":"kind","BaseProperties":{},"Elements":{"daprSidecar":140,"manualScaling":147}}},{"2":{"Name":"DaprSidecarExtension","Properties":{"appPort":{"Type":3,"Flags":0,"Description":"The Dapr appPort. Specifies the internal listening port for the application to handle requests from the Dapr sidecar."},"appId":{"Type":4,"Flags":1,"Description":"The Dapr appId. Specifies the identifier used by Dapr for service invocation."},"config":{"Type":4,"Flags":0,"Description":"Specifies the Dapr configuration to use for the resource."},"protocol":{"Type":145,"Flags":0,"Description":"Protocol in use by the port"},"provides":{"Type":4,"Flags":0,"Description":"Specifies the resource id of a dapr.io.InvokeHttpRoute that can route traffic to this resource."},"kind":{"Type":146,"Flags":1,"Description":"Specifies the extensions of a resource."}}}},{"6":{"Value":"TCP"}},{"6":{"Value":"UDP"}},{"6":{"Value":"http"}},{"6":{"Value":"grpc"}},{"5":{"Elements":[141,142,143,144]}},{"6":{"Value":"daprSidecar"}},{"2":{"Name":"ManualScalingExtension","Properties":{"replicas":{"Type":3,"Flags":0,"Description":"Replica count."},"kind":{"Type":148,"Flags":1,"Description":"Specifies the extensions of a resource."}}}},{"6":{"Value":"manualScaling"}},{"3":{"ItemType":139}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/containers@2022-03-15-privatepreview","ScopeType":0,"Body":93}},{"6":{"Value":"Applications.Core/volumes"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Core/volumes","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":152,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":153,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":155,"Flags":1},"tags":{"Type":187,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"VolumeProperties","Discriminator":"kind","BaseProperties":{"provisioningState":{"Type":163,"Flags":2,"Description":"Provisioning state of the resource at the time the operation was called."},"status":{"Type":70,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":0,"Description":"The resource id of the environment linked to the resource"},"application":{"Type":4,"Flags":1,"Description":"Specifies the resource id of the application"}},"Elements":{"azure.com.keyvault":164}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[156,157,158,159,160,161,162]}},{"2":{"Name":"AzureKeyVaultVolumeProperties","Properties":{"certificates":{"Type":177,"Flags":0,"Description":"The KeyVault certificates that this volume exposes"},"keys":{"Type":179,"Flags":0,"Description":"The KeyVault keys that this volume exposes"},"resource":{"Type":4,"Flags":1,"Description":"The ID of the keyvault to use for this volume resource"},"secrets":{"Type":185,"Flags":0,"Description":"The KeyVault secrets that this volume exposes"},"kind":{"Type":186,"Flags":1,"Description":"The volume kind"}}}},{"2":{"Name":"CertificateObjectProperties","Properties":{"alias":{"Type":4,"Flags":0,"Description":"File name when written to disk."},"encoding":{"Type":169,"Flags":0,"Description":"Encoding format. Default utf-8"},"format":{"Type":172,"Flags":0,"Description":"Certificate format. Default pem"},"name":{"Type":4,"Flags":1,"Description":"The name of the certificate"},"certType":{"Type":176,"Flags":0,"Description":"Certificate object type to be downloaded - the certificate itself, private key or public key of the certificate"},"version":{"Type":4,"Flags":0,"Description":"Certificate version"}}}},{"6":{"Value":"utf-8"}},{"6":{"Value":"hex"}},{"6":{"Value":"base64"}},{"5":{"Elements":[166,167,168]}},{"6":{"Value":"pem"}},{"6":{"Value":"pfx"}},{"5":{"Elements":[170,171]}},{"6":{"Value":"certificate"}},{"6":{"Value":"publickey"}},{"6":{"Value":"privatekey"}},{"5":{"Elements":[173,174,175]}},{"2":{"Name":"AzureKeyVaultVolumePropertiesCertificates","Properties":{},"AdditionalProperties":165}},{"2":{"Name":"KeyObjectProperties","Properties":{"alias":{"Type":4,"Flags":0,"Description":"File name when written to disk."},"name":{"Type":4,"Flags":1,"Description":"The name of the key"},"version":{"Type":4,"Flags":0,"Description":"Key version"}}}},{"2":{"Name":"AzureKeyVaultVolumePropertiesKeys","Properties":{},"AdditionalProperties":178}},{"2":{"Name":"SecretObjectProperties","Properties":{"alias":{"Type":4,"Flags":0,"Description":"File name when written to disk."},"encoding":{"Type":184,"Flags":0,"Description":"Encoding format. Default utf-8"},"name":{"Type":4,"Flags":1,"Description":"The name of the secret"},"version":{"Type":4,"Flags":0,"Description":"Secret version"}}}},{"6":{"Value":"utf-8"}},{"6":{"Value":"hex"}},{"6":{"Value":"base64"}},{"5":{"Elements":[181,182,183]}},{"2":{"Name":"AzureKeyVaultVolumePropertiesSecrets","Properties":{},"AdditionalProperties":180}},{"6":{"Value":"azure.com.keyvault"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Core/volumes@2022-03-15-privatepreview","ScopeType":0,"Body":154}}]
\ No newline at end of file
diff --git a/hack/bicep-types-radius/generated/applications/applications.core/2022-03-15-privatepreview/types.md b/hack/bicep-types-radius/generated/applications/applications.core/2022-03-15-privatepreview/types.md
index 53b01ac37..004c2dc99 100644
--- a/hack/bicep-types-radius/generated/applications/applications.core/2022-03-15-privatepreview/types.md
+++ b/hack/bicep-types-radius/generated/applications/applications.core/2022-03-15-privatepreview/types.md
@@ -142,7 +142,7 @@
 * **failureThreshold**: int: Threshold number of times the probe fails after which a failure would be reported
 * **initialDelaySeconds**: int: Initial delay in seconds before probing for readiness/liveness
 * **periodSeconds**: int: Interval for the readiness/liveness probe in seconds
-* **timeoutSeconds**: int: Number of seconds after which the readiness/liveness probe times out. Defaults to 5 second
+* **timeoutSeconds**: int: Number of seconds after which the readiness/liveness probe times out. Defaults to 5 seconds
 ### ExecHealthProbeProperties
 #### Properties
 * **command**: string (Required): Command to execute to probe readiness/liveness
diff --git a/hack/bicep-types-radius/generated/applications/applications.link/2022-03-15-privatepreview/types.json b/hack/bicep-types-radius/generated/applications/applications.link/2022-03-15-privatepreview/types.json
index d0442d697..f267776ed 100644
--- a/hack/bicep-types-radius/generated/applications/applications.link/2022-03-15-privatepreview/types.json
+++ b/hack/bicep-types-radius/generated/applications/applications.link/2022-03-15-privatepreview/types.json
@@ -1 +1 @@
-[{"1":{"Kind":1}},{"1":{"Kind":2}},{"1":{"Kind":3}},{"1":{"Kind":4}},{"1":{"Kind":5}},{"1":{"Kind":6}},{"1":{"Kind":7}},{"1":{"Kind":8}},{"6":{"Value":"Applications.Link/mongoDatabases"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/mongoDatabases","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":8,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":9,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":22,"Flags":1,"Description":"MongoDatabase link properties"},"tags":{"Type":35,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"SystemData","Properties":{"createdBy":{"Type":4,"Flags":0,"Description":"The identity that created the resource."},"createdByType":{"Type":16,"Flags":0,"Description":"The type of identity that created the resource."},"createdAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource creation (UTC)."},"lastModifiedBy":{"Type":4,"Flags":0,"Description":"The identity that last modified the resource."},"lastModifiedByType":{"Type":21,"Flags":0,"Description":"The type of identity that created the resource."},"lastModifiedAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource last modification (UTC)"}}}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[12,13,14,15]}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[17,18,19,20]}},{"2":{"Name":"MongoDatabaseProperties","Properties":{"secrets":{"Type":23,"Flags":4,"Description":"The secret values for the given MongoDatabase resource"},"provisioningState":{"Type":31,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"resource":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID of a supported resource with Mongo API to use for this link"},"host":{"Type":4,"Flags":0,"Description":"Host name of the target Mongo database"},"port":{"Type":3,"Flags":0,"Description":"Port value of the target Mongo database"},"database":{"Type":4,"Flags":2,"Description":"Database name of the target Mongo database"},"recipe":{"Type":32,"Flags":0,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"status":{"Type":33,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}}}},{"2":{"Name":"MongoDatabaseSecrets","Properties":{"username":{"Type":4,"Flags":4,"Description":"Username to use when connecting to the target Mongo database"},"password":{"Type":4,"Flags":4,"Description":"Password to use when connecting to the target Mongo database"},"connectionString":{"Type":4,"Flags":4,"Description":"Connection string used to connect to the target Mongo database"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[24,25,26,27,28,29,30]}},{"2":{"Name":"Recipe","Properties":{"name":{"Type":4,"Flags":1,"Description":"The name of the recipe within the environment to use"},"parameters":{"Type":0,"Flags":0,"Description":"Any object"}}}},{"2":{"Name":"ResourceStatus","Properties":{"outputResources":{"Type":34,"Flags":0,"Description":"Array of AnyObject"}}}},{"3":{"ItemType":0}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/mongoDatabases@2022-03-15-privatepreview","ScopeType":0,"Body":10}},{"6":{"Value":"Applications.Link/daprPubSubBrokers"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/daprPubSubBrokers","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":37,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":38,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":40,"Flags":1,"Description":"DaprPubSubBroker link properties"},"tags":{"Type":53,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"DaprPubSubBrokerProperties","Discriminator":"kind","BaseProperties":{"provisioningState":{"Type":48,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"topic":{"Type":4,"Flags":0,"Description":"Topic name of the Azure ServiceBus resource"},"recipe":{"Type":32,"Flags":0,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"status":{"Type":33,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"},"componentName":{"Type":4,"Flags":2,"Description":"The name of the Dapr component object. Use this value in your code when interacting with the Dapr client to use the Dapr component."}},"Elements":{"generic":49,"pubsub.azure.servicebus":51}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[41,42,43,44,45,46,47]}},{"2":{"Name":"DaprPubSubGenericResourceProperties","Properties":{"metadata":{"Type":0,"Flags":1,"Description":"Any object"},"type":{"Type":4,"Flags":1,"Description":"Dapr PubSub type. These strings match the format used by Dapr Kubernetes configuration format."},"version":{"Type":4,"Flags":1,"Description":"Dapr component version"},"kind":{"Type":50,"Flags":1,"Description":"The DaprPubSubProperties kind"}}}},{"6":{"Value":"generic"}},{"2":{"Name":"DaprPubSubAzureServiceBusResourceProperties","Properties":{"resource":{"Type":4,"Flags":1,"Description":"PubSub resource"},"kind":{"Type":52,"Flags":1,"Description":"The DaprPubSubProperties kind"}}}},{"6":{"Value":"pubsub.azure.servicebus"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/daprPubSubBrokers@2022-03-15-privatepreview","ScopeType":0,"Body":39}},{"6":{"Value":"Applications.Link/sqlDatabases"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/sqlDatabases","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":55,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":56,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":58,"Flags":1,"Description":"SQLDatabase link properties"},"tags":{"Type":73,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"SQLDatabaseProperties","Discriminator":"mode","BaseProperties":{"provisioningState":{"Type":66,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"status":{"Type":33,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}},"Elements":{"recipe":67,"resource":69,"values":71}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[59,60,61,62,63,64,65]}},{"2":{"Name":"RecipeSQLDatabaseProperties","Properties":{"recipe":{"Type":32,"Flags":1,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"database":{"Type":4,"Flags":0,"Description":"The name of the SQL database."},"server":{"Type":4,"Flags":0,"Description":"The fully qualified domain name of the SQL database."},"mode":{"Type":68,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"recipe"}},{"2":{"Name":"ResourceSQLDatabaseProperties","Properties":{"resource":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID of a supported resource with SQL API to use for this link"},"database":{"Type":4,"Flags":0,"Description":"The name of the SQL database."},"server":{"Type":4,"Flags":0,"Description":"The fully qualified domain name of the SQL database."},"mode":{"Type":70,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"resource"}},{"2":{"Name":"ValuesSQLDatabaseProperties","Properties":{"database":{"Type":4,"Flags":1,"Description":"The name of the SQL database."},"server":{"Type":4,"Flags":1,"Description":"The fully qualified domain name of the SQL database."},"mode":{"Type":72,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"values"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/sqlDatabases@2022-03-15-privatepreview","ScopeType":0,"Body":57}},{"6":{"Value":"Applications.Link/redisCaches"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/redisCaches","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":75,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":76,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":78,"Flags":1,"Description":"RedisCache link properties"},"tags":{"Type":88,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"RedisCacheProperties","Properties":{"secrets":{"Type":79,"Flags":4,"Description":"The secret values for the given RedisCache resource"},"provisioningState":{"Type":87,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"resource":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID of a supported resource with Redis API to use for this link"},"host":{"Type":4,"Flags":0,"Description":"The host name of the target redis cache"},"port":{"Type":3,"Flags":0,"Description":"The port value of the target redis cache"},"username":{"Type":4,"Flags":2,"Description":"The username for redis"},"recipe":{"Type":32,"Flags":0,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"status":{"Type":33,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}}}},{"2":{"Name":"RedisCacheSecrets","Properties":{"connectionString":{"Type":4,"Flags":4,"Description":"The connection string used to connect to the redis cache"},"password":{"Type":4,"Flags":4,"Description":"The password for this Redis instance"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[80,81,82,83,84,85,86]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/redisCaches@2022-03-15-privatepreview","ScopeType":0,"Body":77}},{"6":{"Value":"Applications.Link/rabbitMQMessageQueues"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/rabbitMQMessageQueues","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":90,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":91,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":93,"Flags":1,"Description":"RabbitMQMessageQueue link properties"},"tags":{"Type":103,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"RabbitMQMessageQueueProperties","Properties":{"secrets":{"Type":94,"Flags":4,"Description":"The secret values for the given RabbitMQMessageQueue resource"},"provisioningState":{"Type":102,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"queue":{"Type":4,"Flags":1,"Description":"The name of the queue"},"recipe":{"Type":32,"Flags":0,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"status":{"Type":33,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}}}},{"2":{"Name":"RabbitMQSecrets","Properties":{"connectionString":{"Type":4,"Flags":4,"Description":"The connection string used to connect to this RabbitMQ instance"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[95,96,97,98,99,100,101]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/rabbitMQMessageQueues@2022-03-15-privatepreview","ScopeType":0,"Body":92}},{"6":{"Value":"Applications.Link/daprSecretStores"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/daprSecretStores","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":105,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":106,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":108,"Flags":1,"Description":"DaprSecretStore link properties"},"tags":{"Type":122,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"DaprSecretStoreProperties","Discriminator":"mode","BaseProperties":{"provisioningState":{"Type":116,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"status":{"Type":33,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"},"componentName":{"Type":4,"Flags":2,"Description":"The name of the Dapr component object. Use this value in your code when interacting with the Dapr client to use the Dapr component."}},"Elements":{"recipe":117,"values":119}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[109,110,111,112,113,114,115]}},{"2":{"Name":"RecipeDaprSecretStoreProperties","Properties":{"recipe":{"Type":32,"Flags":1,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"type":{"Type":4,"Flags":0,"Description":"Dapr Secret Store type. These strings match the types defined in Dapr Component format: https://docs.dapr.io/reference/components-reference/supported-secret-stores/"},"version":{"Type":4,"Flags":0,"Description":"Dapr component version"},"metadata":{"Type":0,"Flags":0,"Description":"Any object"},"mode":{"Type":118,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe' or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"recipe"}},{"2":{"Name":"ValuesDaprSecretStoreProperties","Properties":{"type":{"Type":4,"Flags":1,"Description":"Dapr Secret Store type. These strings match the types defined in Dapr Component format: https://docs.dapr.io/reference/components-reference/supported-secret-stores/"},"version":{"Type":4,"Flags":1,"Description":"Dapr component version"},"metadata":{"Type":0,"Flags":1,"Description":"Any object"},"kind":{"Type":120,"Flags":1,"Description":"Radius kind for Dapr Secret Store"},"mode":{"Type":121,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe' or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"generic"}},{"6":{"Value":"values"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/daprSecretStores@2022-03-15-privatepreview","ScopeType":0,"Body":107}},{"6":{"Value":"Applications.Link/daprInvokeHttpRoutes"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/daprInvokeHttpRoutes","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":124,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":125,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":127,"Flags":1,"Description":"DaprInvokeHttpRoute link properties"},"tags":{"Type":136,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"DaprInvokeHttpRouteProperties","Properties":{"provisioningState":{"Type":135,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"appId":{"Type":4,"Flags":1,"Description":"The Dapr appId used for the route"},"recipe":{"Type":32,"Flags":0,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"status":{"Type":33,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[128,129,130,131,132,133,134]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/daprInvokeHttpRoutes@2022-03-15-privatepreview","ScopeType":0,"Body":126}},{"6":{"Value":"Applications.Link/daprStateStores"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/daprStateStores","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":138,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":139,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":141,"Flags":1,"Description":"DaprStateStore link properties"},"tags":{"Type":160,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"DaprStateStoreProperties","Discriminator":"mode","BaseProperties":{"provisioningState":{"Type":149,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"status":{"Type":33,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"},"componentName":{"Type":4,"Flags":2,"Description":"The name of the Dapr component object. Use this value in your code when interacting with the Dapr client to use the Dapr component."}},"Elements":{"recipe":150,"resource":152,"values":157}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[142,143,144,145,146,147,148]}},{"2":{"Name":"RecipeDaprStateStoreProperties","Properties":{"metadata":{"Type":0,"Flags":0,"Description":"Any object"},"type":{"Type":4,"Flags":0,"Description":"Dapr StateStore type. These strings match the format used by Dapr Kubernetes configuration format."},"version":{"Type":4,"Flags":0,"Description":"Dapr component version"},"resource":{"Type":4,"Flags":0,"Description":"The resource id of the Azure SQL Database or Azure Table Storage the daprStateStore resource is connected to."},"recipe":{"Type":32,"Flags":1,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"mode":{"Type":151,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe', build via 'resource' or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"recipe"}},{"2":{"Name":"ResourceDaprStateStoreResourceProperties","Properties":{"kind":{"Type":155,"Flags":1,"Description":"The Dapr StateStore kind"},"metadata":{"Type":0,"Flags":0,"Description":"Any object"},"type":{"Type":4,"Flags":0,"Description":"Dapr StateStore type. These strings match the format used by Dapr Kubernetes configuration format."},"version":{"Type":4,"Flags":0,"Description":"Dapr component version"},"resource":{"Type":4,"Flags":1,"Description":"The resource id of the Azure SQL Database or Azure Table Storage the daprStateStore resource is connected to."},"mode":{"Type":156,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe', build via 'resource' or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"state.sqlserver"}},{"6":{"Value":"state.azure.tablestorage"}},{"5":{"Elements":[153,154]}},{"6":{"Value":"resource"}},{"2":{"Name":"ValuesDaprStateStoreResourceProperties","Properties":{"kind":{"Type":158,"Flags":1,"Description":"The Dapr StateStore kind"},"metadata":{"Type":0,"Flags":1,"Description":"Any object"},"type":{"Type":4,"Flags":1,"Description":"Dapr StateStore type. These strings match the format used by Dapr Kubernetes configuration format."},"version":{"Type":4,"Flags":1,"Description":"Dapr component version"},"resource":{"Type":4,"Flags":0,"Description":"The resource id of the Azure SQL Database or Azure Table Storage the daprStateStore resource is connected to."},"mode":{"Type":159,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe', build via 'resource' or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"generic"}},{"6":{"Value":"values"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/daprStateStores@2022-03-15-privatepreview","ScopeType":0,"Body":140}},{"6":{"Value":"Applications.Link/extenders"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/extenders","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":162,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":163,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":165,"Flags":1,"Description":"Extender link properties"},"tags":{"Type":175,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"ExtenderProperties","Properties":{"secrets":{"Type":166,"Flags":4,"Description":"The secret values for the given Extender resource"},"provisioningState":{"Type":174,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"status":{"Type":33,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}},"AdditionalProperties":0}},{"2":{"Name":"ExtenderSecrets","Properties":{},"AdditionalProperties":0}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[167,168,169,170,171,172,173]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/extenders@2022-03-15-privatepreview","ScopeType":0,"Body":164}},{"8":{"Name":"listSecrets","ResourceType":"Applications.Link/mongoDatabases","ApiVersion":"2022-03-15-privatepreview","Output":23}},{"8":{"Name":"listSecrets","ResourceType":"Applications.Link/redisCaches","ApiVersion":"2022-03-15-privatepreview","Output":79}},{"8":{"Name":"listSecrets","ResourceType":"Applications.Link/rabbitMQMessageQueues","ApiVersion":"2022-03-15-privatepreview","Output":94}},{"2":{"Name":"ExtenderSecrets","Properties":{},"AdditionalProperties":0}},{"8":{"Name":"listSecrets","ResourceType":"Applications.Link/extenders","ApiVersion":"2022-03-15-privatepreview","Output":180}}]
\ No newline at end of file
+[{"1":{"Kind":1}},{"1":{"Kind":2}},{"1":{"Kind":3}},{"1":{"Kind":4}},{"1":{"Kind":5}},{"1":{"Kind":6}},{"1":{"Kind":7}},{"1":{"Kind":8}},{"6":{"Value":"Applications.Link/mongoDatabases"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/mongoDatabases","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":8,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":9,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":22,"Flags":1,"Description":"Mongo database link properties"},"tags":{"Type":41,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"SystemData","Properties":{"createdBy":{"Type":4,"Flags":0,"Description":"The identity that created the resource."},"createdByType":{"Type":16,"Flags":0,"Description":"The type of identity that created the resource."},"createdAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource creation (UTC)."},"lastModifiedBy":{"Type":4,"Flags":0,"Description":"The identity that last modified the resource."},"lastModifiedByType":{"Type":21,"Flags":0,"Description":"The type of identity that created the resource."},"lastModifiedAt":{"Type":4,"Flags":0,"Description":"The timestamp of resource last modification (UTC)"}}}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[12,13,14,15]}},{"6":{"Value":"User"}},{"6":{"Value":"Application"}},{"6":{"Value":"ManagedIdentity"}},{"6":{"Value":"Key"}},{"5":{"Elements":[17,18,19,20]}},{"7":{"Name":"MongoDatabaseProperties","Discriminator":"mode","BaseProperties":{"provisioningState":{"Type":30,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"secrets":{"Type":31,"Flags":0,"Description":"The secret values for the given Mongo database resource"},"status":{"Type":32,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}},"Elements":{"recipe":34,"resource":37,"values":39}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[23,24,25,26,27,28,29]}},{"2":{"Name":"MongoDatabaseSecrets","Properties":{"username":{"Type":4,"Flags":0,"Description":"Username to use when connecting to the target Mongo database"},"password":{"Type":4,"Flags":0,"Description":"Password to use when connecting to the target Mongo database"},"connectionString":{"Type":4,"Flags":0,"Description":"Connection string used to connect to the target Mongo database"}}}},{"2":{"Name":"ResourceStatus","Properties":{"outputResources":{"Type":33,"Flags":0,"Description":"Array of AnyObject"}}}},{"3":{"ItemType":0}},{"2":{"Name":"RecipeMongoDatabaseProperties","Properties":{"host":{"Type":4,"Flags":0,"Description":"Host name of the target Mongo database"},"port":{"Type":3,"Flags":0,"Description":"Port value of the target Mongo database"},"database":{"Type":4,"Flags":2,"Description":"Database name of the target Mongo database"},"recipe":{"Type":35,"Flags":1,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"mode":{"Type":36,"Flags":1,"Description":"How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"2":{"Name":"Recipe","Properties":{"name":{"Type":4,"Flags":1,"Description":"The name of the recipe within the environment to use"},"parameters":{"Type":0,"Flags":0,"Description":"Any object"}}}},{"6":{"Value":"recipe"}},{"2":{"Name":"ResourceMongoDatabaseProperties","Properties":{"host":{"Type":4,"Flags":0,"Description":"Host name of the target Mongo database"},"port":{"Type":3,"Flags":0,"Description":"Port value of the target Mongo database"},"database":{"Type":4,"Flags":2,"Description":"Database name of the target Mongo database"},"resource":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID of a supported resource with Mongo API to use for this link"},"mode":{"Type":38,"Flags":1,"Description":"How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"resource"}},{"2":{"Name":"ValuesMongoDatabaseProperties","Properties":{"host":{"Type":4,"Flags":1,"Description":"Host name of the target Mongo database"},"port":{"Type":3,"Flags":1,"Description":"Port value of the target Mongo database"},"database":{"Type":4,"Flags":2,"Description":"Database name of the target Mongo database"},"mode":{"Type":40,"Flags":1,"Description":"How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"values"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/mongoDatabases@2022-03-15-privatepreview","ScopeType":0,"Body":10}},{"6":{"Value":"Applications.Link/daprPubSubBrokers"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/daprPubSubBrokers","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":43,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":44,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":46,"Flags":1,"Description":"DaprPubSubBroker link properties"},"tags":{"Type":59,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"DaprPubSubBrokerProperties","Discriminator":"kind","BaseProperties":{"provisioningState":{"Type":54,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"topic":{"Type":4,"Flags":0,"Description":"Topic name of the Azure ServiceBus resource"},"recipe":{"Type":35,"Flags":0,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"status":{"Type":32,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"},"componentName":{"Type":4,"Flags":2,"Description":"The name of the Dapr component object. Use this value in your code when interacting with the Dapr client to use the Dapr component."}},"Elements":{"generic":55,"pubsub.azure.servicebus":57}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[47,48,49,50,51,52,53]}},{"2":{"Name":"DaprPubSubGenericResourceProperties","Properties":{"metadata":{"Type":0,"Flags":1,"Description":"Any object"},"type":{"Type":4,"Flags":1,"Description":"Dapr PubSub type. These strings match the format used by Dapr Kubernetes configuration format."},"version":{"Type":4,"Flags":1,"Description":"Dapr component version"},"kind":{"Type":56,"Flags":1,"Description":"The DaprPubSubProperties kind"}}}},{"6":{"Value":"generic"}},{"2":{"Name":"DaprPubSubAzureServiceBusResourceProperties","Properties":{"resource":{"Type":4,"Flags":1,"Description":"PubSub resource"},"kind":{"Type":58,"Flags":1,"Description":"The DaprPubSubProperties kind"}}}},{"6":{"Value":"pubsub.azure.servicebus"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/daprPubSubBrokers@2022-03-15-privatepreview","ScopeType":0,"Body":45}},{"6":{"Value":"Applications.Link/sqlDatabases"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/sqlDatabases","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":61,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":62,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":64,"Flags":1,"Description":"SQLDatabase link properties"},"tags":{"Type":79,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"SQLDatabaseProperties","Discriminator":"mode","BaseProperties":{"provisioningState":{"Type":72,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"status":{"Type":32,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}},"Elements":{"recipe":73,"resource":75,"values":77}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[65,66,67,68,69,70,71]}},{"2":{"Name":"RecipeSQLDatabaseProperties","Properties":{"recipe":{"Type":35,"Flags":1,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"database":{"Type":4,"Flags":0,"Description":"The name of the SQL database."},"server":{"Type":4,"Flags":0,"Description":"The fully qualified domain name of the SQL database."},"mode":{"Type":74,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"recipe"}},{"2":{"Name":"ResourceSQLDatabaseProperties","Properties":{"resource":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID of a supported resource with SQL API to use for this link"},"database":{"Type":4,"Flags":0,"Description":"The name of the SQL database."},"server":{"Type":4,"Flags":0,"Description":"The fully qualified domain name of the SQL database."},"mode":{"Type":76,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"resource"}},{"2":{"Name":"ValuesSQLDatabaseProperties","Properties":{"database":{"Type":4,"Flags":1,"Description":"The name of the SQL database."},"server":{"Type":4,"Flags":1,"Description":"The fully qualified domain name of the SQL database."},"mode":{"Type":78,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"values"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/sqlDatabases@2022-03-15-privatepreview","ScopeType":0,"Body":63}},{"6":{"Value":"Applications.Link/redisCaches"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/redisCaches","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":81,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":82,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":84,"Flags":1,"Description":"RedisCache link properties"},"tags":{"Type":94,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"RedisCacheProperties","Properties":{"secrets":{"Type":85,"Flags":4,"Description":"The secret values for the given RedisCache resource"},"provisioningState":{"Type":93,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"resource":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID of a supported resource with Redis API to use for this link"},"host":{"Type":4,"Flags":0,"Description":"The host name of the target redis cache"},"port":{"Type":3,"Flags":0,"Description":"The port value of the target redis cache"},"username":{"Type":4,"Flags":2,"Description":"The username for redis"},"recipe":{"Type":35,"Flags":0,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"status":{"Type":32,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}}}},{"2":{"Name":"RedisCacheSecrets","Properties":{"connectionString":{"Type":4,"Flags":4,"Description":"The connection string used to connect to the redis cache"},"password":{"Type":4,"Flags":4,"Description":"The password for this Redis instance"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[86,87,88,89,90,91,92]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/redisCaches@2022-03-15-privatepreview","ScopeType":0,"Body":83}},{"6":{"Value":"Applications.Link/rabbitMQMessageQueues"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/rabbitMQMessageQueues","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":96,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":97,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":99,"Flags":1,"Description":"RabbitMQMessageQueue link properties"},"tags":{"Type":109,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"RabbitMQMessageQueueProperties","Properties":{"secrets":{"Type":100,"Flags":4,"Description":"The secret values for the given RabbitMQMessageQueue resource"},"provisioningState":{"Type":108,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"queue":{"Type":4,"Flags":1,"Description":"The name of the queue"},"recipe":{"Type":35,"Flags":0,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"status":{"Type":32,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}}}},{"2":{"Name":"RabbitMQSecrets","Properties":{"connectionString":{"Type":4,"Flags":4,"Description":"The connection string used to connect to this RabbitMQ instance"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[101,102,103,104,105,106,107]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/rabbitMQMessageQueues@2022-03-15-privatepreview","ScopeType":0,"Body":98}},{"6":{"Value":"Applications.Link/daprSecretStores"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/daprSecretStores","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":111,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":112,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":114,"Flags":1,"Description":"DaprSecretStore link properties"},"tags":{"Type":128,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"DaprSecretStoreProperties","Discriminator":"mode","BaseProperties":{"provisioningState":{"Type":122,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"status":{"Type":32,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"},"componentName":{"Type":4,"Flags":2,"Description":"The name of the Dapr component object. Use this value in your code when interacting with the Dapr client to use the Dapr component."}},"Elements":{"recipe":123,"values":125}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[115,116,117,118,119,120,121]}},{"2":{"Name":"RecipeDaprSecretStoreProperties","Properties":{"recipe":{"Type":35,"Flags":1,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"type":{"Type":4,"Flags":0,"Description":"Dapr Secret Store type. These strings match the types defined in Dapr Component format: https://docs.dapr.io/reference/components-reference/supported-secret-stores/"},"version":{"Type":4,"Flags":0,"Description":"Dapr component version"},"metadata":{"Type":0,"Flags":0,"Description":"Any object"},"mode":{"Type":124,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe' or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"recipe"}},{"2":{"Name":"ValuesDaprSecretStoreProperties","Properties":{"type":{"Type":4,"Flags":1,"Description":"Dapr Secret Store type. These strings match the types defined in Dapr Component format: https://docs.dapr.io/reference/components-reference/supported-secret-stores/"},"version":{"Type":4,"Flags":1,"Description":"Dapr component version"},"metadata":{"Type":0,"Flags":1,"Description":"Any object"},"kind":{"Type":126,"Flags":1,"Description":"Radius kind for Dapr Secret Store"},"mode":{"Type":127,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe' or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"generic"}},{"6":{"Value":"values"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/daprSecretStores@2022-03-15-privatepreview","ScopeType":0,"Body":113}},{"6":{"Value":"Applications.Link/daprInvokeHttpRoutes"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/daprInvokeHttpRoutes","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":130,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":131,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":133,"Flags":1,"Description":"DaprInvokeHttpRoute link properties"},"tags":{"Type":142,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"DaprInvokeHttpRouteProperties","Properties":{"provisioningState":{"Type":141,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"appId":{"Type":4,"Flags":1,"Description":"The Dapr appId used for the route"},"recipe":{"Type":35,"Flags":0,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"status":{"Type":32,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[134,135,136,137,138,139,140]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/daprInvokeHttpRoutes@2022-03-15-privatepreview","ScopeType":0,"Body":132}},{"6":{"Value":"Applications.Link/daprStateStores"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/daprStateStores","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":144,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":145,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":147,"Flags":1,"Description":"DaprStateStore link properties"},"tags":{"Type":166,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"7":{"Name":"DaprStateStoreProperties","Discriminator":"mode","BaseProperties":{"provisioningState":{"Type":155,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"status":{"Type":32,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"},"componentName":{"Type":4,"Flags":2,"Description":"The name of the Dapr component object. Use this value in your code when interacting with the Dapr client to use the Dapr component."}},"Elements":{"recipe":156,"resource":158,"values":163}}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[148,149,150,151,152,153,154]}},{"2":{"Name":"RecipeDaprStateStoreProperties","Properties":{"metadata":{"Type":0,"Flags":0,"Description":"Any object"},"type":{"Type":4,"Flags":0,"Description":"Dapr StateStore type. These strings match the format used by Dapr Kubernetes configuration format."},"version":{"Type":4,"Flags":0,"Description":"Dapr component version"},"resource":{"Type":4,"Flags":0,"Description":"The resource id of the Azure SQL Database or Azure Table Storage the daprStateStore resource is connected to."},"recipe":{"Type":35,"Flags":1,"Description":"The recipe used to automatically deploy underlying infrastructure for a link"},"mode":{"Type":157,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe', build via 'resource' or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"recipe"}},{"2":{"Name":"ResourceDaprStateStoreResourceProperties","Properties":{"kind":{"Type":161,"Flags":1,"Description":"The Dapr StateStore kind"},"metadata":{"Type":0,"Flags":0,"Description":"Any object"},"type":{"Type":4,"Flags":0,"Description":"Dapr StateStore type. These strings match the format used by Dapr Kubernetes configuration format."},"version":{"Type":4,"Flags":0,"Description":"Dapr component version"},"resource":{"Type":4,"Flags":1,"Description":"The resource id of the Azure SQL Database or Azure Table Storage the daprStateStore resource is connected to."},"mode":{"Type":162,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe', build via 'resource' or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"state.sqlserver"}},{"6":{"Value":"state.azure.tablestorage"}},{"5":{"Elements":[159,160]}},{"6":{"Value":"resource"}},{"2":{"Name":"ValuesDaprStateStoreResourceProperties","Properties":{"kind":{"Type":164,"Flags":1,"Description":"The Dapr StateStore kind"},"metadata":{"Type":0,"Flags":1,"Description":"Any object"},"type":{"Type":4,"Flags":1,"Description":"Dapr StateStore type. These strings match the format used by Dapr Kubernetes configuration format."},"version":{"Type":4,"Flags":1,"Description":"Dapr component version"},"resource":{"Type":4,"Flags":0,"Description":"The resource id of the Azure SQL Database or Azure Table Storage the daprStateStore resource is connected to."},"mode":{"Type":165,"Flags":1,"Description":"How to build the link. Options are to build automatically via 'recipe', build via 'resource' or build manually via 'values'. Selection determines which set of fields to additionally require."}}}},{"6":{"Value":"generic"}},{"6":{"Value":"values"}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/daprStateStores@2022-03-15-privatepreview","ScopeType":0,"Body":146}},{"6":{"Value":"Applications.Link/extenders"}},{"6":{"Value":"2022-03-15-privatepreview"}},{"2":{"Name":"Applications.Link/extenders","Properties":{"id":{"Type":4,"Flags":10,"Description":"The resource id"},"name":{"Type":4,"Flags":9,"Description":"The resource name"},"type":{"Type":168,"Flags":10,"Description":"The resource type"},"apiVersion":{"Type":169,"Flags":10,"Description":"The resource api version"},"systemData":{"Type":11,"Flags":2,"Description":"Metadata pertaining to creation and last modification of the resource."},"properties":{"Type":171,"Flags":1,"Description":"Extender link properties"},"tags":{"Type":181,"Flags":0,"Description":"Resource tags."},"location":{"Type":4,"Flags":1,"Description":"The geo-location where the resource lives"}}}},{"2":{"Name":"ExtenderProperties","Properties":{"secrets":{"Type":172,"Flags":4,"Description":"The secret values for the given Extender resource"},"provisioningState":{"Type":180,"Flags":2,"Description":"Provisioning state of the link at the time the operation was called"},"status":{"Type":32,"Flags":2,"Description":"Status of a resource."},"environment":{"Type":4,"Flags":1,"Description":"Fully qualified resource ID for the environment that the link is linked to"},"application":{"Type":4,"Flags":0,"Description":"Fully qualified resource ID for the application that the link is consumed by"}},"AdditionalProperties":0}},{"2":{"Name":"ExtenderSecrets","Properties":{},"AdditionalProperties":0}},{"6":{"Value":"Succeeded"}},{"6":{"Value":"Failed"}},{"6":{"Value":"Canceled"}},{"6":{"Value":"Accepted"}},{"6":{"Value":"Updating"}},{"6":{"Value":"Deleting"}},{"6":{"Value":"Provisioning"}},{"5":{"Elements":[173,174,175,176,177,178,179]}},{"2":{"Name":"TrackedResourceTags","Properties":{},"AdditionalProperties":4}},{"4":{"Name":"Applications.Link/extenders@2022-03-15-privatepreview","ScopeType":0,"Body":170}},{"8":{"Name":"listSecrets","ResourceType":"Applications.Link/mongoDatabases","ApiVersion":"2022-03-15-privatepreview","Output":31}},{"8":{"Name":"listSecrets","ResourceType":"Applications.Link/redisCaches","ApiVersion":"2022-03-15-privatepreview","Output":85}},{"8":{"Name":"listSecrets","ResourceType":"Applications.Link/rabbitMQMessageQueues","ApiVersion":"2022-03-15-privatepreview","Output":100}},{"2":{"Name":"ExtenderSecrets","Properties":{},"AdditionalProperties":0}},{"8":{"Name":"listSecrets","ResourceType":"Applications.Link/extenders","ApiVersion":"2022-03-15-privatepreview","Output":186}}]
\ No newline at end of file
diff --git a/hack/bicep-types-radius/generated/applications/applications.link/2022-03-15-privatepreview/types.md b/hack/bicep-types-radius/generated/applications/applications.link/2022-03-15-privatepreview/types.md
index 627687fe9..dca0e1219 100644
--- a/hack/bicep-types-radius/generated/applications/applications.link/2022-03-15-privatepreview/types.md
+++ b/hack/bicep-types-radius/generated/applications/applications.link/2022-03-15-privatepreview/types.md
@@ -67,7 +67,7 @@
 * **id**: string (ReadOnly, DeployTimeConstant): The resource id
 * **location**: string (Required): The geo-location where the resource lives
 * **name**: string (Required, DeployTimeConstant): The resource name
-* **properties**: [MongoDatabaseProperties](#mongodatabaseproperties) (Required): MongoDatabase link properties
+* **properties**: [MongoDatabaseProperties](#mongodatabaseproperties) (Required): Mongo database link properties
 * **systemData**: [SystemData](#systemdata) (ReadOnly): Metadata pertaining to creation and last modification of the resource.
 * **tags**: [TrackedResourceTags](#trackedresourcetags): Resource tags.
 * **type**: 'Applications.Link/mongoDatabases' (ReadOnly, DeployTimeConstant): The resource type
@@ -283,23 +283,43 @@
 * **Additional Properties Type**: string
 
 ## MongoDatabaseProperties
-### Properties
+* **Discriminator**: mode
+
+### Base Properties
 * **application**: string: Fully qualified resource ID for the application that the link is consumed by
-* **database**: string (ReadOnly): Database name of the target Mongo database
 * **environment**: string (Required): Fully qualified resource ID for the environment that the link is linked to
-* **host**: string: Host name of the target Mongo database
-* **port**: int: Port value of the target Mongo database
 * **provisioningState**: 'Accepted' | 'Canceled' | 'Deleting' | 'Failed' | 'Provisioning' | 'Succeeded' | 'Updating' (ReadOnly): Provisioning state of the link at the time the operation was called
-* **recipe**: [Recipe](#recipe): The recipe used to automatically deploy underlying infrastructure for a link
-* **resource**: string: Fully qualified resource ID of a supported resource with Mongo API to use for this link
-* **secrets**: [MongoDatabaseSecrets](#mongodatabasesecrets) (WriteOnly): The secret values for the given MongoDatabase resource
+* **secrets**: [MongoDatabaseSecrets](#mongodatabasesecrets): The secret values for the given Mongo database resource
 * **status**: [ResourceStatus](#resourcestatus) (ReadOnly): Status of a resource.
+### RecipeMongoDatabaseProperties
+#### Properties
+* **database**: string (ReadOnly): Database name of the target Mongo database
+* **host**: string: Host name of the target Mongo database
+* **mode**: 'recipe' (Required): How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require.
+* **port**: int: Port value of the target Mongo database
+* **recipe**: [Recipe](#recipe) (Required): The recipe used to automatically deploy underlying infrastructure for a link
+
+### ResourceMongoDatabaseProperties
+#### Properties
+* **database**: string (ReadOnly): Database name of the target Mongo database
+* **host**: string: Host name of the target Mongo database
+* **mode**: 'resource' (Required): How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require.
+* **port**: int: Port value of the target Mongo database
+* **resource**: string (Required): Fully qualified resource ID of a supported resource with Mongo API to use for this link
+
+### ValuesMongoDatabaseProperties
+#### Properties
+* **database**: string (ReadOnly): Database name of the target Mongo database
+* **host**: string (Required): Host name of the target Mongo database
+* **mode**: 'values' (Required): How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require.
+* **port**: int (Required): Port value of the target Mongo database
+
 
 ## MongoDatabaseSecrets
 ### Properties
-* **connectionString**: string (WriteOnly): Connection string used to connect to the target Mongo database
-* **password**: string (WriteOnly): Password to use when connecting to the target Mongo database
-* **username**: string (WriteOnly): Username to use when connecting to the target Mongo database
+* **connectionString**: string: Connection string used to connect to the target Mongo database
+* **password**: string: Password to use when connecting to the target Mongo database
+* **username**: string: Username to use when connecting to the target Mongo database
 
 ## TrackedResourceTags
 ### Properties
@@ -384,9 +404,9 @@
 
 ## MongoDatabaseSecrets
 ### Properties
-* **connectionString**: string (WriteOnly): Connection string used to connect to the target Mongo database
-* **password**: string (WriteOnly): Password to use when connecting to the target Mongo database
-* **username**: string (WriteOnly): Username to use when connecting to the target Mongo database
+* **connectionString**: string: Connection string used to connect to the target Mongo database
+* **password**: string: Password to use when connecting to the target Mongo database
+* **username**: string: Username to use when connecting to the target Mongo database
 
 ## RedisCacheSecrets
 ### Properties
diff --git a/hack/bicep-types-radius/generated/index.json b/hack/bicep-types-radius/generated/index.json
index 659595a48..c59fd23ee 100644
--- a/hack/bicep-types-radius/generated/index.json
+++ b/hack/bicep-types-radius/generated/index.json
@@ -1 +1 @@
-{"Resources":{"Applications.Core/environments@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":43},"Applications.Core/applications@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":57},"Applications.Core/httpRoutes@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":73},"Applications.Core/gateways@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":90},"Applications.Core/containers@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":151},"Applications.Core/volumes@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":188},"Applications.Link/mongoDatabases@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":36},"Applications.Link/daprPubSubBrokers@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":54},"Applications.Link/sqlDatabases@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":74},"Applications.Link/redisCaches@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":89},"Applications.Link/rabbitMQMessageQueues@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":104},"Applications.Link/daprSecretStores@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":123},"Applications.Link/daprInvokeHttpRoutes@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":137},"Applications.Link/daprStateStores@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":161},"Applications.Link/extenders@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":176}},"Functions":{"applications.link/mongodatabases":{"2022-03-15-privatepreview":[{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":177}]},"applications.link/rediscaches":{"2022-03-15-privatepreview":[{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":178}]},"applications.link/rabbitmqmessagequeues":{"2022-03-15-privatepreview":[{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":179}]},"applications.link/extenders":{"2022-03-15-privatepreview":[{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":181}]}}}
\ No newline at end of file
+{"Resources":{"Applications.Core/environments@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":43},"Applications.Core/applications@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":57},"Applications.Core/httpRoutes@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":73},"Applications.Core/gateways@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":90},"Applications.Core/containers@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":151},"Applications.Core/volumes@2022-03-15-privatepreview":{"RelativePath":"applications/applications.core/2022-03-15-privatepreview/types.json","Index":188},"Applications.Link/mongoDatabases@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":42},"Applications.Link/daprPubSubBrokers@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":60},"Applications.Link/sqlDatabases@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":80},"Applications.Link/redisCaches@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":95},"Applications.Link/rabbitMQMessageQueues@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":110},"Applications.Link/daprSecretStores@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":129},"Applications.Link/daprInvokeHttpRoutes@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":143},"Applications.Link/daprStateStores@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":167},"Applications.Link/extenders@2022-03-15-privatepreview":{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":182}},"Functions":{"applications.link/mongodatabases":{"2022-03-15-privatepreview":[{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":183}]},"applications.link/rediscaches":{"2022-03-15-privatepreview":[{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":184}]},"applications.link/rabbitmqmessagequeues":{"2022-03-15-privatepreview":[{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":185}]},"applications.link/extenders":{"2022-03-15-privatepreview":[{"RelativePath":"applications/applications.link/2022-03-15-privatepreview/types.json","Index":187}]}}}
\ No newline at end of file
diff --git a/pkg/corerp/api/v20220315privatepreview/zz_generated_models.go b/pkg/corerp/api/v20220315privatepreview/zz_generated_models.go
index 0049b701c..89f17444f 100644
--- a/pkg/corerp/api/v20220315privatepreview/zz_generated_models.go
+++ b/pkg/corerp/api/v20220315privatepreview/zz_generated_models.go
@@ -494,7 +494,7 @@ type ExecHealthProbeProperties struct {
 	// Interval for the readiness/liveness probe in seconds
 	PeriodSeconds *float32 `json:"periodSeconds,omitempty"`
 
-	// Number of seconds after which the readiness/liveness probe times out. Defaults to 5 second
+	// Number of seconds after which the readiness/liveness probe times out. Defaults to 5 seconds
 	TimeoutSeconds *float32 `json:"timeoutSeconds,omitempty"`
 }
 
@@ -659,7 +659,7 @@ type HTTPGetHealthProbeProperties struct {
 	// Interval for the readiness/liveness probe in seconds
 	PeriodSeconds *float32 `json:"periodSeconds,omitempty"`
 
-	// Number of seconds after which the readiness/liveness probe times out. Defaults to 5 second
+	// Number of seconds after which the readiness/liveness probe times out. Defaults to 5 seconds
 	TimeoutSeconds *float32 `json:"timeoutSeconds,omitempty"`
 }
 
@@ -782,7 +782,7 @@ type HealthProbeProperties struct {
 	// Interval for the readiness/liveness probe in seconds
 	PeriodSeconds *float32 `json:"periodSeconds,omitempty"`
 
-	// Number of seconds after which the readiness/liveness probe times out. Defaults to 5 second
+	// Number of seconds after which the readiness/liveness probe times out. Defaults to 5 seconds
 	TimeoutSeconds *float32 `json:"timeoutSeconds,omitempty"`
 }
 
@@ -964,7 +964,7 @@ type TCPHealthProbeProperties struct {
 	// Interval for the readiness/liveness probe in seconds
 	PeriodSeconds *float32 `json:"periodSeconds,omitempty"`
 
-	// Number of seconds after which the readiness/liveness probe times out. Defaults to 5 second
+	// Number of seconds after which the readiness/liveness probe times out. Defaults to 5 seconds
 	TimeoutSeconds *float32 `json:"timeoutSeconds,omitempty"`
 }
 
diff --git a/pkg/linkrp/api/v20220315privatepreview/mongodatabase_conversion.go b/pkg/linkrp/api/v20220315privatepreview/mongodatabase_conversion.go
index 966673b4c..56ea58bcb 100644
--- a/pkg/linkrp/api/v20220315privatepreview/mongodatabase_conversion.go
+++ b/pkg/linkrp/api/v20220315privatepreview/mongodatabase_conversion.go
@@ -6,6 +6,8 @@
 package v20220315privatepreview
 
 import (
+	"fmt"
+
 	"github.com/project-radius/radius/pkg/armrpc/api/conv"
 	v1 "github.com/project-radius/radius/pkg/armrpc/api/v1"
 	"github.com/project-radius/radius/pkg/linkrp/datamodel"
@@ -14,39 +16,6 @@ import (
 	"github.com/Azure/go-autorest/autorest/to"
 )
 
-// ConvertTo converts from the versioned MongoDatabaseResponse resource to version-agnostic datamodel.
-func (src *MongoDatabaseResponseResource) ConvertTo() (conv.DataModelInterface, error) {
-	converted := &datamodel.MongoDatabaseResponse{
-		BaseResource: v1.BaseResource{
-			TrackedResource: v1.TrackedResource{
-				ID:       to.String(src.ID),
-				Name:     to.String(src.Name),
-				Type:     to.String(src.Type),
-				Location: to.String(src.Location),
-				Tags:     to.StringMap(src.Tags),
-			},
-			InternalMetadata: v1.InternalMetadata{
-				UpdatedAPIVersion: Version,
-			},
-		},
-		Properties: datamodel.MongoDatabaseResponseProperties{
-			BasicResourceProperties: rp.BasicResourceProperties{
-				Environment: to.String(src.Properties.Environment),
-				Application: to.String(src.Properties.Application),
-			},
-			ProvisioningState: toProvisioningStateDataModel(src.Properties.ProvisioningState),
-			Resource:          to.String(src.Properties.Resource),
-			Host:              to.String(src.Properties.Host),
-			Port:              to.Int32(src.Properties.Port),
-			Database:          to.String(src.Properties.Database),
-		},
-	}
-	if src.Properties.Recipe != nil {
-		converted.Properties.Recipe = toRecipeDataModel(src.Properties.Recipe)
-	}
-	return converted, nil
-}
-
 // ConvertTo converts from the versioned MongoDatabase resource to version-agnostic datamodel.
 func (src *MongoDatabaseResource) ConvertTo() (conv.DataModelInterface, error) {
 	converted := &datamodel.MongoDatabase{
@@ -63,63 +32,69 @@ func (src *MongoDatabaseResource) ConvertTo() (conv.DataModelInterface, error) {
 			},
 		},
 		Properties: datamodel.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Environment: to.String(src.Properties.Environment),
-					Application: to.String(src.Properties.Application),
-				},
-				ProvisioningState: toProvisioningStateDataModel(src.Properties.ProvisioningState),
-				Resource:          to.String(src.Properties.Resource),
-				Host:              to.String(src.Properties.Host),
-				Port:              to.Int32(src.Properties.Port),
-				Database:          to.String(src.Properties.Database),
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Environment: to.String(src.Properties.GetMongoDatabaseProperties().Environment),
+				Application: to.String(src.Properties.GetMongoDatabaseProperties().Application),
 			},
+			ProvisioningState: toProvisioningStateDataModel(src.Properties.GetMongoDatabaseProperties().ProvisioningState),
 		},
 	}
-	if src.Properties.Secrets != nil {
-		converted.Properties.Secrets = datamodel.MongoDatabaseSecrets{
-			ConnectionString: to.String(src.Properties.Secrets.ConnectionString),
-			Username:         to.String(src.Properties.Secrets.Username),
-			Password:         to.String(src.Properties.Secrets.Password),
+	switch v := src.Properties.(type) {
+	case *ResourceMongoDatabaseProperties:
+		if v.Resource == nil {
+			return &datamodel.MongoDatabase{}, conv.NewClientErrInvalidRequest(fmt.Sprintf("resource is a required property for mode %q", datamodel.LinkModeResource))
 		}
-	}
-	if src.Properties.Recipe != nil {
-		converted.Properties.Recipe = toRecipeDataModel(src.Properties.Recipe)
+		converted.Properties.Resource = to.String(v.Resource)
+		converted.Properties.Host = to.String(v.Host)
+		converted.Properties.Port = to.Int32(v.Port)
+		converted.Properties.Database = to.String(v.Database)
+		if v.Secrets != nil {
+			converted.Properties.Secrets = datamodel.MongoDatabaseSecrets{
+				ConnectionString: to.String(v.Secrets.ConnectionString),
+				Username:         to.String(v.Secrets.Username),
+				Password:         to.String(v.Secrets.Password),
+			}
+		}
+		converted.Properties.Mode = datamodel.LinkModeResource
+	case *ValuesMongoDatabaseProperties:
+		if v.Host == nil || v.Port == nil {
+			return &datamodel.MongoDatabase{}, conv.NewClientErrInvalidRequest(fmt.Sprintf("host and port are required properties for mode %q", datamodel.LinkModeValues))
+		}
+		converted.Properties.Host = to.String(v.Host)
+		converted.Properties.Port = to.Int32(v.Port)
+		converted.Properties.Database = to.String(v.Database)
+		if v.Secrets != nil {
+			converted.Properties.Secrets = datamodel.MongoDatabaseSecrets{
+				ConnectionString: to.String(v.Secrets.ConnectionString),
+				Username:         to.String(v.Secrets.Username),
+				Password:         to.String(v.Secrets.Password),
+			}
+		}
+		converted.Properties.Mode = datamodel.LinkModeValues
+	case *RecipeMongoDatabaseProperties:
+		if v.Recipe == nil {
+			return &datamodel.MongoDatabase{}, conv.NewClientErrInvalidRequest(fmt.Sprintf("recipe is a required property for mode %q", datamodel.LinkModeRecipe))
+		}
+		converted.Properties.MongoDatabaseRecipeProperties = datamodel.MongoDatabaseRecipeProperties{
+			Recipe: toRecipeDataModel(v.Recipe),
+		}
+		converted.Properties.Host = to.String(v.Host)
+		converted.Properties.Port = to.Int32(v.Port)
+		converted.Properties.Database = to.String(v.Database)
+		converted.Properties.Mode = datamodel.LinkModeRecipe
+		if v.Secrets != nil {
+			converted.Properties.Secrets = datamodel.MongoDatabaseSecrets{
+				ConnectionString: to.String(v.Secrets.ConnectionString),
+				Username:         to.String(v.Secrets.Username),
+				Password:         to.String(v.Secrets.Password),
+			}
+		}
+	default:
+		return datamodel.MongoDatabase{}, conv.NewClientErrInvalidRequest(fmt.Sprintf("Unsupported mode %s", *src.Properties.GetMongoDatabaseProperties().Mode))
 	}
 	return converted, nil
 }
 
-// ConvertFrom converts from version-agnostic datamodel to the versioned MongoDatabaseResponse resource.
-func (dst *MongoDatabaseResponseResource) ConvertFrom(src conv.DataModelInterface) error {
-	mongo, ok := src.(*datamodel.MongoDatabaseResponse)
-	if !ok {
-		return conv.ErrInvalidModelConversion
-	}
-
-	dst.ID = to.StringPtr(mongo.ID)
-	dst.Name = to.StringPtr(mongo.Name)
-	dst.Type = to.StringPtr(mongo.Type)
-	dst.SystemData = fromSystemDataModel(mongo.SystemData)
-	dst.Location = to.StringPtr(mongo.Location)
-	dst.Tags = *to.StringMapPtr(mongo.Tags)
-	dst.Properties = &MongoDatabaseResponseProperties{
-		Status: &ResourceStatus{
-			OutputResources: rp.BuildExternalOutputResources(mongo.Properties.Status.OutputResources),
-		},
-		ProvisioningState: fromProvisioningStateDataModel(mongo.Properties.ProvisioningState),
-		Environment:       to.StringPtr(mongo.Properties.Environment),
-		Application:       to.StringPtr(mongo.Properties.Application),
-		Resource:          to.StringPtr(mongo.Properties.Resource),
-		Host:              to.StringPtr(mongo.Properties.Host),
-		Port:              to.Int32Ptr(mongo.Properties.Port),
-		Database:          to.StringPtr(mongo.Properties.Database),
-	}
-	if mongo.Properties.Recipe.Name != "" {
-		dst.Properties.Recipe = fromRecipeDataModel(mongo.Properties.Recipe)
-	}
-	return nil
-}
-
 // ConvertFrom converts from version-agnostic datamodel to the versioned MongoDatabase resource.
 func (dst *MongoDatabaseResource) ConvertFrom(src conv.DataModelInterface) error {
 	mongo, ok := src.(*datamodel.MongoDatabase)
@@ -133,27 +108,57 @@ func (dst *MongoDatabaseResource) ConvertFrom(src conv.DataModelInterface) error
 	dst.SystemData = fromSystemDataModel(mongo.SystemData)
 	dst.Location = to.StringPtr(mongo.Location)
 	dst.Tags = *to.StringMapPtr(mongo.Tags)
-	dst.Properties = &MongoDatabaseProperties{
-		Status: &ResourceStatus{
-			OutputResources: rp.BuildExternalOutputResources(mongo.Properties.Status.OutputResources),
-		},
-		ProvisioningState: fromProvisioningStateDataModel(mongo.Properties.ProvisioningState),
-		Environment:       to.StringPtr(mongo.Properties.Environment),
-		Application:       to.StringPtr(mongo.Properties.Application),
-		Resource:          to.StringPtr(mongo.Properties.Resource),
-		Host:              to.StringPtr(mongo.Properties.Host),
-		Port:              to.Int32Ptr(mongo.Properties.Port),
-		Database:          to.StringPtr(mongo.Properties.Database),
-	}
-	if mongo.Properties.Recipe.Name != "" {
-		dst.Properties.Recipe = fromRecipeDataModel(mongo.Properties.Recipe)
-	}
-	if (mongo.Properties.Secrets != datamodel.MongoDatabaseSecrets{}) {
-		dst.Properties.Secrets = &MongoDatabaseSecrets{
-			ConnectionString: to.StringPtr(mongo.Properties.Secrets.ConnectionString),
-			Username:         to.StringPtr(mongo.Properties.Secrets.Username),
-			Password:         to.StringPtr(mongo.Properties.Secrets.Password),
+
+	switch mongo.Properties.Mode {
+	case datamodel.LinkModeResource:
+		var mode MongoDatabasePropertiesMode
+		mode = MongoDatabasePropertiesModeResource
+		dst.Properties = &ResourceMongoDatabaseProperties{
+			Mode:     &mode,
+			Resource: to.StringPtr(mongo.Properties.MongoDatabaseResourceProperties.Resource),
+			Host:     to.StringPtr(mongo.Properties.Host),
+			Port:     to.Int32Ptr(mongo.Properties.Port),
+			Database: to.StringPtr(mongo.Properties.Database),
+			Status: &ResourceStatus{
+				OutputResources: rp.BuildExternalOutputResources(mongo.Properties.Status.OutputResources),
+			},
+			ProvisioningState: fromProvisioningStateDataModel(mongo.Properties.ProvisioningState),
+			Environment:       to.StringPtr(mongo.Properties.Environment),
+			Application:       to.StringPtr(mongo.Properties.Application),
+		}
+	case datamodel.LinkModeValues:
+		var mode MongoDatabasePropertiesMode
+		mode = MongoDatabasePropertiesModeValues
+		dst.Properties = &ValuesMongoDatabaseProperties{
+			Mode:     &mode,
+			Host:     to.StringPtr(mongo.Properties.Host),
+			Port:     to.Int32Ptr(mongo.Properties.Port),
+			Database: to.StringPtr(mongo.Properties.Database),
+			Status: &ResourceStatus{
+				OutputResources: rp.BuildExternalOutputResources(mongo.Properties.Status.OutputResources),
+			},
+			ProvisioningState: fromProvisioningStateDataModel(mongo.Properties.ProvisioningState),
+			Environment:       to.StringPtr(mongo.Properties.Environment),
+			Application:       to.StringPtr(mongo.Properties.Application),
+		}
+	case datamodel.LinkModeRecipe:
+		var mode MongoDatabasePropertiesMode
+		mode = MongoDatabasePropertiesModeRecipe
+		dst.Properties = &RecipeMongoDatabaseProperties{
+			Mode:     &mode,
+			Recipe:   fromRecipeDataModel(mongo.Properties.Recipe),
+			Host:     to.StringPtr(mongo.Properties.Host),
+			Port:     to.Int32Ptr(mongo.Properties.Port),
+			Database: to.StringPtr(mongo.Properties.Database),
+			Status: &ResourceStatus{
+				OutputResources: rp.BuildExternalOutputResources(mongo.Properties.Status.OutputResources),
+			},
+			ProvisioningState: fromProvisioningStateDataModel(mongo.Properties.ProvisioningState),
+			Environment:       to.StringPtr(mongo.Properties.Environment),
+			Application:       to.StringPtr(mongo.Properties.Application),
 		}
+	default:
+		return fmt.Errorf("Unsupported mode %s", mongo.Properties.Mode)
 	}
 
 	return nil
diff --git a/pkg/linkrp/api/v20220315privatepreview/zz_generated_constants.go b/pkg/linkrp/api/v20220315privatepreview/zz_generated_constants.go
index fbcb9a425..56d818f14 100644
--- a/pkg/linkrp/api/v20220315privatepreview/zz_generated_constants.go
+++ b/pkg/linkrp/api/v20220315privatepreview/zz_generated_constants.go
@@ -86,6 +86,25 @@ func PossibleDaprStateStorePropertiesModeValues() []DaprStateStorePropertiesMode
 	}
 }
 
+// MongoDatabasePropertiesMode - How to build the Mongo database link. Options are to build automatically via 'recipe' or
+// 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require.
+type MongoDatabasePropertiesMode string
+
+const (
+	MongoDatabasePropertiesModeRecipe MongoDatabasePropertiesMode = "recipe"
+	MongoDatabasePropertiesModeResource MongoDatabasePropertiesMode = "resource"
+	MongoDatabasePropertiesModeValues MongoDatabasePropertiesMode = "values"
+)
+
+// PossibleMongoDatabasePropertiesModeValues returns the possible values for the MongoDatabasePropertiesMode const type.
+func PossibleMongoDatabasePropertiesModeValues() []MongoDatabasePropertiesMode {
+	return []MongoDatabasePropertiesMode{	
+		MongoDatabasePropertiesModeRecipe,
+		MongoDatabasePropertiesModeResource,
+		MongoDatabasePropertiesModeValues,
+	}
+}
+
 // ProvisioningState - Provisioning state of the link at the time the operation was called
 type ProvisioningState string
 
diff --git a/pkg/linkrp/api/v20220315privatepreview/zz_generated_models.go b/pkg/linkrp/api/v20220315privatepreview/zz_generated_models.go
index 96cffed30..3a14daf27 100644
--- a/pkg/linkrp/api/v20220315privatepreview/zz_generated_models.go
+++ b/pkg/linkrp/api/v20220315privatepreview/zz_generated_models.go
@@ -630,41 +630,39 @@ type ExtendersClientListSecretsOptions struct {
 	// placeholder for future optional parameters
 }
 
-// MongoDatabaseList - Object that includes an array of MongoDatabase and a possible link for next set
+// MongoDatabaseList - Object that includes an array of Mongo database and a possible link for next set
 type MongoDatabaseList struct {
-	// The link used to fetch the next page of MongoDatabase list.
+	// The link used to fetch the next page of Mongo database list.
 	NextLink *string `json:"nextLink,omitempty"`
 
-	// List of MongoDatabase resources
-	Value []*MongoDatabaseResponseResource `json:"value,omitempty"`
+	// List of Mongo database resources
+	Value []*MongoDatabaseResource `json:"value,omitempty"`
 }
 
-// MongoDatabaseProperties - MongoDatabase link properties
+// MongoDatabasePropertiesClassification provides polymorphic access to related types.
+// Call the interface's GetMongoDatabaseProperties() method to access the common type.
+// Use a type switch to determine the concrete type.  The possible types are:
+// - *MongoDatabaseProperties, *RecipeMongoDatabaseProperties, *ResourceMongoDatabaseProperties, *ValuesMongoDatabaseProperties
+type MongoDatabasePropertiesClassification interface {
+	// GetMongoDatabaseProperties returns the MongoDatabaseProperties content of the underlying type.
+	GetMongoDatabaseProperties() *MongoDatabaseProperties
+}
+
+// MongoDatabaseProperties - Mongo database link properties
 type MongoDatabaseProperties struct {
 	// REQUIRED; Fully qualified resource ID for the environment that the link is linked to
 	Environment *string `json:"environment,omitempty"`
 
+	// REQUIRED; How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build
+// manually via 'values'. Selection determines which set of fields to additionally require.
+	Mode *MongoDatabasePropertiesMode `json:"mode,omitempty"`
+
 	// Fully qualified resource ID for the application that the link is consumed by
 	Application *string `json:"application,omitempty"`
 
-	// Host name of the target Mongo database
-	Host *string `json:"host,omitempty"`
-
-	// Port value of the target Mongo database
-	Port *int32 `json:"port,omitempty"`
-
-	// The recipe used to automatically deploy underlying infrastructure for the mongodatabase link
-	Recipe *Recipe `json:"recipe,omitempty"`
-
-	// Fully qualified resource ID of a supported resource with Mongo API to use for this link
-	Resource *string `json:"resource,omitempty"`
-
 	// Secrets values provided for the resource
 	Secrets *MongoDatabaseSecrets `json:"secrets,omitempty"`
 
-	// READ-ONLY; Database name of the target Mongo database
-	Database *string `json:"database,omitempty" azure:"ro"`
-
 	// READ-ONLY; Provisioning state of the mongo database link at the time the operation was called
 	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
 
@@ -672,67 +670,16 @@ type MongoDatabaseProperties struct {
 	Status *ResourceStatus `json:"status,omitempty" azure:"ro"`
 }
 
+// GetMongoDatabaseProperties implements the MongoDatabasePropertiesClassification interface for type MongoDatabaseProperties.
+func (m *MongoDatabaseProperties) GetMongoDatabaseProperties() *MongoDatabaseProperties { return m }
+
 // MongoDatabaseResource - MongoDatabase link
 type MongoDatabaseResource struct {
 	// REQUIRED; The geo-location where the resource lives
 	Location *string `json:"location,omitempty"`
 
-	// REQUIRED; MongoDatabase link properties
-	Properties *MongoDatabaseProperties `json:"properties,omitempty"`
-
-	// Resource tags.
-	Tags map[string]*string `json:"tags,omitempty"`
-
-	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
-	ID *string `json:"id,omitempty" azure:"ro"`
-
-	// READ-ONLY; The name of the resource
-	Name *string `json:"name,omitempty" azure:"ro"`
-
-	// READ-ONLY; Metadata pertaining to creation and last modification of the resource.
-	SystemData *SystemData `json:"systemData,omitempty" azure:"ro"`
-
-	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
-	Type *string `json:"type,omitempty" azure:"ro"`
-}
-
-// MongoDatabaseResponseProperties - MongoDatabase link properties
-type MongoDatabaseResponseProperties struct {
-	// REQUIRED; Fully qualified resource ID for the environment that the link is linked to
-	Environment *string `json:"environment,omitempty"`
-
-	// Fully qualified resource ID for the application that the link is consumed by
-	Application *string `json:"application,omitempty"`
-
-	// Host name of the target Mongo database
-	Host *string `json:"host,omitempty"`
-
-	// Port value of the target Mongo database
-	Port *int32 `json:"port,omitempty"`
-
-	// The recipe used to automatically deploy underlying infrastructure for the mongodatabase link
-	Recipe *Recipe `json:"recipe,omitempty"`
-
-	// Fully qualified resource ID of a supported resource with Mongo API to use for this link
-	Resource *string `json:"resource,omitempty"`
-
-	// READ-ONLY; Database name of the target Mongo database
-	Database *string `json:"database,omitempty" azure:"ro"`
-
-	// READ-ONLY; Provisioning state of the mongo database link at the time the operation was called
-	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
-
-	// READ-ONLY; Status of the resource
-	Status *ResourceStatus `json:"status,omitempty" azure:"ro"`
-}
-
-// MongoDatabaseResponseResource - MongoDatabase link
-type MongoDatabaseResponseResource struct {
-	// REQUIRED; The geo-location where the resource lives
-	Location *string `json:"location,omitempty"`
-
-	// REQUIRED; MongoDatabase link properties
-	Properties *MongoDatabaseResponseProperties `json:"properties,omitempty"`
+	// REQUIRED; Mongo database link properties
+	Properties MongoDatabasePropertiesClassification `json:"properties,omitempty"`
 
 	// Resource tags.
 	Tags map[string]*string `json:"tags,omitempty"`
@@ -750,7 +697,7 @@ type MongoDatabaseResponseResource struct {
 	Type *string `json:"type,omitempty" azure:"ro"`
 }
 
-// MongoDatabaseSecrets - The secret values for the given MongoDatabase resource
+// MongoDatabaseSecrets - The secret values for the given Mongo database resource
 type MongoDatabaseSecrets struct {
 	// Connection string used to connect to the target Mongo database
 	ConnectionString *string `json:"connectionString,omitempty"`
@@ -1029,6 +976,51 @@ func (r *RecipeDaprStateStoreProperties) GetDaprStateStoreProperties() *DaprStat
 	}
 }
 
+type RecipeMongoDatabaseProperties struct {
+	// REQUIRED; Fully qualified resource ID for the environment that the link is linked to
+	Environment *string `json:"environment,omitempty"`
+
+	// REQUIRED; How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build
+// manually via 'values'. Selection determines which set of fields to additionally require.
+	Mode *MongoDatabasePropertiesMode `json:"mode,omitempty"`
+
+	// REQUIRED; The recipe used to automatically deploy underlying infrastructure for the mongodatabase link
+	Recipe *Recipe `json:"recipe,omitempty"`
+
+	// Fully qualified resource ID for the application that the link is consumed by
+	Application *string `json:"application,omitempty"`
+
+	// Host name of the target Mongo database
+	Host *string `json:"host,omitempty"`
+
+	// Port value of the target Mongo database
+	Port *int32 `json:"port,omitempty"`
+
+	// Secrets values provided for the resource
+	Secrets *MongoDatabaseSecrets `json:"secrets,omitempty"`
+
+	// READ-ONLY; Database name of the target Mongo database
+	Database *string `json:"database,omitempty" azure:"ro"`
+
+	// READ-ONLY; Provisioning state of the mongo database link at the time the operation was called
+	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
+
+	// READ-ONLY; Status of the resource
+	Status *ResourceStatus `json:"status,omitempty" azure:"ro"`
+}
+
+// GetMongoDatabaseProperties implements the MongoDatabasePropertiesClassification interface for type RecipeMongoDatabaseProperties.
+func (r *RecipeMongoDatabaseProperties) GetMongoDatabaseProperties() *MongoDatabaseProperties {
+	return &MongoDatabaseProperties{
+		ProvisioningState: r.ProvisioningState,
+		Mode: r.Mode,
+		Secrets: r.Secrets,
+		Status: r.Status,
+		Environment: r.Environment,
+		Application: r.Application,
+	}
+}
+
 type RecipeSQLDatabaseProperties struct {
 	// REQUIRED; Fully qualified resource ID for the environment that the link is linked to
 	Environment *string `json:"environment,omitempty"`
@@ -1282,6 +1274,51 @@ func (r *ResourceDaprStateStoreResourceProperties) GetDaprStateStoreProperties()
 	}
 }
 
+type ResourceMongoDatabaseProperties struct {
+	// REQUIRED; Fully qualified resource ID for the environment that the link is linked to
+	Environment *string `json:"environment,omitempty"`
+
+	// REQUIRED; How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build
+// manually via 'values'. Selection determines which set of fields to additionally require.
+	Mode *MongoDatabasePropertiesMode `json:"mode,omitempty"`
+
+	// REQUIRED; Fully qualified resource ID of a supported resource with Mongo API to use for this link
+	Resource *string `json:"resource,omitempty"`
+
+	// Fully qualified resource ID for the application that the link is consumed by
+	Application *string `json:"application,omitempty"`
+
+	// Host name of the target Mongo database
+	Host *string `json:"host,omitempty"`
+
+	// Port value of the target Mongo database
+	Port *int32 `json:"port,omitempty"`
+
+	// Secrets values provided for the resource
+	Secrets *MongoDatabaseSecrets `json:"secrets,omitempty"`
+
+	// READ-ONLY; Database name of the target Mongo database
+	Database *string `json:"database,omitempty" azure:"ro"`
+
+	// READ-ONLY; Provisioning state of the mongo database link at the time the operation was called
+	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
+
+	// READ-ONLY; Status of the resource
+	Status *ResourceStatus `json:"status,omitempty" azure:"ro"`
+}
+
+// GetMongoDatabaseProperties implements the MongoDatabasePropertiesClassification interface for type ResourceMongoDatabaseProperties.
+func (r *ResourceMongoDatabaseProperties) GetMongoDatabaseProperties() *MongoDatabaseProperties {
+	return &MongoDatabaseProperties{
+		ProvisioningState: r.ProvisioningState,
+		Mode: r.Mode,
+		Secrets: r.Secrets,
+		Status: r.Status,
+		Environment: r.Environment,
+		Application: r.Application,
+	}
+}
+
 type ResourceSQLDatabaseProperties struct {
 	// REQUIRED; Fully qualified resource ID for the environment that the link is linked to
 	Environment *string `json:"environment,omitempty"`
@@ -1544,6 +1581,48 @@ func (v *ValuesDaprStateStoreResourceProperties) GetDaprStateStoreProperties() *
 	}
 }
 
+type ValuesMongoDatabaseProperties struct {
+	// REQUIRED; Fully qualified resource ID for the environment that the link is linked to
+	Environment *string `json:"environment,omitempty"`
+
+	// REQUIRED; Host name of the target Mongo database
+	Host *string `json:"host,omitempty"`
+
+	// REQUIRED; How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build
+// manually via 'values'. Selection determines which set of fields to additionally require.
+	Mode *MongoDatabasePropertiesMode `json:"mode,omitempty"`
+
+	// REQUIRED; Port value of the target Mongo database
+	Port *int32 `json:"port,omitempty"`
+
+	// Fully qualified resource ID for the application that the link is consumed by
+	Application *string `json:"application,omitempty"`
+
+	// Secrets values provided for the resource
+	Secrets *MongoDatabaseSecrets `json:"secrets,omitempty"`
+
+	// READ-ONLY; Database name of the target Mongo database
+	Database *string `json:"database,omitempty" azure:"ro"`
+
+	// READ-ONLY; Provisioning state of the mongo database link at the time the operation was called
+	ProvisioningState *ProvisioningState `json:"provisioningState,omitempty" azure:"ro"`
+
+	// READ-ONLY; Status of the resource
+	Status *ResourceStatus `json:"status,omitempty" azure:"ro"`
+}
+
+// GetMongoDatabaseProperties implements the MongoDatabasePropertiesClassification interface for type ValuesMongoDatabaseProperties.
+func (v *ValuesMongoDatabaseProperties) GetMongoDatabaseProperties() *MongoDatabaseProperties {
+	return &MongoDatabaseProperties{
+		ProvisioningState: v.ProvisioningState,
+		Mode: v.Mode,
+		Secrets: v.Secrets,
+		Status: v.Status,
+		Environment: v.Environment,
+		Application: v.Application,
+	}
+}
+
 type ValuesSQLDatabaseProperties struct {
 	// REQUIRED; The name of the SQL database.
 	Database *string `json:"database,omitempty"`
diff --git a/pkg/linkrp/api/v20220315privatepreview/zz_generated_models_serde.go b/pkg/linkrp/api/v20220315privatepreview/zz_generated_models_serde.go
index 2e85da201..99815082e 100644
--- a/pkg/linkrp/api/v20220315privatepreview/zz_generated_models_serde.go
+++ b/pkg/linkrp/api/v20220315privatepreview/zz_generated_models_serde.go
@@ -1109,13 +1109,9 @@ func (m *MongoDatabaseList) UnmarshalJSON(data []byte) error {
 func (m MongoDatabaseProperties) MarshalJSON() ([]byte, error) {
 	objectMap := make(map[string]interface{})
 	populate(objectMap, "application", m.Application)
-	populate(objectMap, "database", m.Database)
 	populate(objectMap, "environment", m.Environment)
-	populate(objectMap, "host", m.Host)
-	populate(objectMap, "port", m.Port)
+	objectMap["mode"] = m.Mode
 	populate(objectMap, "provisioningState", m.ProvisioningState)
-	populate(objectMap, "recipe", m.Recipe)
-	populate(objectMap, "resource", m.Resource)
 	populate(objectMap, "secrets", m.Secrets)
 	populate(objectMap, "status", m.Status)
 	return json.Marshal(objectMap)
@@ -1133,27 +1129,15 @@ func (m *MongoDatabaseProperties) UnmarshalJSON(data []byte) error {
 		case "application":
 				err = unpopulate(val, "Application", &m.Application)
 				delete(rawMsg, key)
-		case "database":
-				err = unpopulate(val, "Database", &m.Database)
-				delete(rawMsg, key)
 		case "environment":
 				err = unpopulate(val, "Environment", &m.Environment)
 				delete(rawMsg, key)
-		case "host":
-				err = unpopulate(val, "Host", &m.Host)
-				delete(rawMsg, key)
-		case "port":
-				err = unpopulate(val, "Port", &m.Port)
+		case "mode":
+				err = unpopulate(val, "Mode", &m.Mode)
 				delete(rawMsg, key)
 		case "provisioningState":
 				err = unpopulate(val, "ProvisioningState", &m.ProvisioningState)
 				delete(rawMsg, key)
-		case "recipe":
-				err = unpopulate(val, "Recipe", &m.Recipe)
-				delete(rawMsg, key)
-		case "resource":
-				err = unpopulate(val, "Resource", &m.Resource)
-				delete(rawMsg, key)
 		case "secrets":
 				err = unpopulate(val, "Secrets", &m.Secrets)
 				delete(rawMsg, key)
@@ -1200,117 +1184,7 @@ func (m *MongoDatabaseResource) UnmarshalJSON(data []byte) error {
 				err = unpopulate(val, "Name", &m.Name)
 				delete(rawMsg, key)
 		case "properties":
-				err = unpopulate(val, "Properties", &m.Properties)
-				delete(rawMsg, key)
-		case "systemData":
-				err = unpopulate(val, "SystemData", &m.SystemData)
-				delete(rawMsg, key)
-		case "tags":
-				err = unpopulate(val, "Tags", &m.Tags)
-				delete(rawMsg, key)
-		case "type":
-				err = unpopulate(val, "Type", &m.Type)
-				delete(rawMsg, key)
-		}
-		if err != nil {
-			return fmt.Errorf("unmarshalling type %T: %v", m, err)
-		}
-	}
-	return nil
-}
-
-// MarshalJSON implements the json.Marshaller interface for type MongoDatabaseResponseProperties.
-func (m MongoDatabaseResponseProperties) MarshalJSON() ([]byte, error) {
-	objectMap := make(map[string]interface{})
-	populate(objectMap, "application", m.Application)
-	populate(objectMap, "database", m.Database)
-	populate(objectMap, "environment", m.Environment)
-	populate(objectMap, "host", m.Host)
-	populate(objectMap, "port", m.Port)
-	populate(objectMap, "provisioningState", m.ProvisioningState)
-	populate(objectMap, "recipe", m.Recipe)
-	populate(objectMap, "resource", m.Resource)
-	populate(objectMap, "status", m.Status)
-	return json.Marshal(objectMap)
-}
-
-// UnmarshalJSON implements the json.Unmarshaller interface for type MongoDatabaseResponseProperties.
-func (m *MongoDatabaseResponseProperties) UnmarshalJSON(data []byte) error {
-	var rawMsg map[string]json.RawMessage
-	if err := json.Unmarshal(data, &rawMsg); err != nil {
-		return fmt.Errorf("unmarshalling type %T: %v", m, err)
-	}
-	for key, val := range rawMsg {
-		var err error
-		switch key {
-		case "application":
-				err = unpopulate(val, "Application", &m.Application)
-				delete(rawMsg, key)
-		case "database":
-				err = unpopulate(val, "Database", &m.Database)
-				delete(rawMsg, key)
-		case "environment":
-				err = unpopulate(val, "Environment", &m.Environment)
-				delete(rawMsg, key)
-		case "host":
-				err = unpopulate(val, "Host", &m.Host)
-				delete(rawMsg, key)
-		case "port":
-				err = unpopulate(val, "Port", &m.Port)
-				delete(rawMsg, key)
-		case "provisioningState":
-				err = unpopulate(val, "ProvisioningState", &m.ProvisioningState)
-				delete(rawMsg, key)
-		case "recipe":
-				err = unpopulate(val, "Recipe", &m.Recipe)
-				delete(rawMsg, key)
-		case "resource":
-				err = unpopulate(val, "Resource", &m.Resource)
-				delete(rawMsg, key)
-		case "status":
-				err = unpopulate(val, "Status", &m.Status)
-				delete(rawMsg, key)
-		}
-		if err != nil {
-			return fmt.Errorf("unmarshalling type %T: %v", m, err)
-		}
-	}
-	return nil
-}
-
-// MarshalJSON implements the json.Marshaller interface for type MongoDatabaseResponseResource.
-func (m MongoDatabaseResponseResource) MarshalJSON() ([]byte, error) {
-	objectMap := make(map[string]interface{})
-	populate(objectMap, "id", m.ID)
-	populate(objectMap, "location", m.Location)
-	populate(objectMap, "name", m.Name)
-	populate(objectMap, "properties", m.Properties)
-	populate(objectMap, "systemData", m.SystemData)
-	populate(objectMap, "tags", m.Tags)
-	populate(objectMap, "type", m.Type)
-	return json.Marshal(objectMap)
-}
-
-// UnmarshalJSON implements the json.Unmarshaller interface for type MongoDatabaseResponseResource.
-func (m *MongoDatabaseResponseResource) UnmarshalJSON(data []byte) error {
-	var rawMsg map[string]json.RawMessage
-	if err := json.Unmarshal(data, &rawMsg); err != nil {
-		return fmt.Errorf("unmarshalling type %T: %v", m, err)
-	}
-	for key, val := range rawMsg {
-		var err error
-		switch key {
-		case "id":
-				err = unpopulate(val, "ID", &m.ID)
-				delete(rawMsg, key)
-		case "location":
-				err = unpopulate(val, "Location", &m.Location)
-				delete(rawMsg, key)
-		case "name":
-				err = unpopulate(val, "Name", &m.Name)
-				delete(rawMsg, key)
-		case "properties":
-				err = unpopulate(val, "Properties", &m.Properties)
+				m.Properties, err = unmarshalMongoDatabasePropertiesClassification(val)
 				delete(rawMsg, key)
 		case "systemData":
 				err = unpopulate(val, "SystemData", &m.SystemData)
@@ -1783,6 +1657,69 @@ func (r *RecipeDaprStateStoreProperties) UnmarshalJSON(data []byte) error {
 	return nil
 }
 
+// MarshalJSON implements the json.Marshaller interface for type RecipeMongoDatabaseProperties.
+func (r RecipeMongoDatabaseProperties) MarshalJSON() ([]byte, error) {
+	objectMap := make(map[string]interface{})
+	populate(objectMap, "application", r.Application)
+	populate(objectMap, "database", r.Database)
+	populate(objectMap, "environment", r.Environment)
+	populate(objectMap, "host", r.Host)
+	objectMap["mode"] = MongoDatabasePropertiesModeRecipe
+	populate(objectMap, "port", r.Port)
+	populate(objectMap, "provisioningState", r.ProvisioningState)
+	populate(objectMap, "recipe", r.Recipe)
+	populate(objectMap, "secrets", r.Secrets)
+	populate(objectMap, "status", r.Status)
+	return json.Marshal(objectMap)
+}
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type RecipeMongoDatabaseProperties.
+func (r *RecipeMongoDatabaseProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return fmt.Errorf("unmarshalling type %T: %v", r, err)
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "application":
+				err = unpopulate(val, "Application", &r.Application)
+				delete(rawMsg, key)
+		case "database":
+				err = unpopulate(val, "Database", &r.Database)
+				delete(rawMsg, key)
+		case "environment":
+				err = unpopulate(val, "Environment", &r.Environment)
+				delete(rawMsg, key)
+		case "host":
+				err = unpopulate(val, "Host", &r.Host)
+				delete(rawMsg, key)
+		case "mode":
+				err = unpopulate(val, "Mode", &r.Mode)
+				delete(rawMsg, key)
+		case "port":
+				err = unpopulate(val, "Port", &r.Port)
+				delete(rawMsg, key)
+		case "provisioningState":
+				err = unpopulate(val, "ProvisioningState", &r.ProvisioningState)
+				delete(rawMsg, key)
+		case "recipe":
+				err = unpopulate(val, "Recipe", &r.Recipe)
+				delete(rawMsg, key)
+		case "secrets":
+				err = unpopulate(val, "Secrets", &r.Secrets)
+				delete(rawMsg, key)
+		case "status":
+				err = unpopulate(val, "Status", &r.Status)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return fmt.Errorf("unmarshalling type %T: %v", r, err)
+		}
+	}
+	return nil
+}
+
 // MarshalJSON implements the json.Marshaller interface for type RecipeSQLDatabaseProperties.
 func (r RecipeSQLDatabaseProperties) MarshalJSON() ([]byte, error) {
 	objectMap := make(map[string]interface{})
@@ -2226,6 +2163,69 @@ func (r *ResourceDaprStateStoreResourceProperties) UnmarshalJSON(data []byte) er
 	return nil
 }
 
+// MarshalJSON implements the json.Marshaller interface for type ResourceMongoDatabaseProperties.
+func (r ResourceMongoDatabaseProperties) MarshalJSON() ([]byte, error) {
+	objectMap := make(map[string]interface{})
+	populate(objectMap, "application", r.Application)
+	populate(objectMap, "database", r.Database)
+	populate(objectMap, "environment", r.Environment)
+	populate(objectMap, "host", r.Host)
+	objectMap["mode"] = MongoDatabasePropertiesModeResource
+	populate(objectMap, "port", r.Port)
+	populate(objectMap, "provisioningState", r.ProvisioningState)
+	populate(objectMap, "resource", r.Resource)
+	populate(objectMap, "secrets", r.Secrets)
+	populate(objectMap, "status", r.Status)
+	return json.Marshal(objectMap)
+}
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type ResourceMongoDatabaseProperties.
+func (r *ResourceMongoDatabaseProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return fmt.Errorf("unmarshalling type %T: %v", r, err)
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "application":
+				err = unpopulate(val, "Application", &r.Application)
+				delete(rawMsg, key)
+		case "database":
+				err = unpopulate(val, "Database", &r.Database)
+				delete(rawMsg, key)
+		case "environment":
+				err = unpopulate(val, "Environment", &r.Environment)
+				delete(rawMsg, key)
+		case "host":
+				err = unpopulate(val, "Host", &r.Host)
+				delete(rawMsg, key)
+		case "mode":
+				err = unpopulate(val, "Mode", &r.Mode)
+				delete(rawMsg, key)
+		case "port":
+				err = unpopulate(val, "Port", &r.Port)
+				delete(rawMsg, key)
+		case "provisioningState":
+				err = unpopulate(val, "ProvisioningState", &r.ProvisioningState)
+				delete(rawMsg, key)
+		case "resource":
+				err = unpopulate(val, "Resource", &r.Resource)
+				delete(rawMsg, key)
+		case "secrets":
+				err = unpopulate(val, "Secrets", &r.Secrets)
+				delete(rawMsg, key)
+		case "status":
+				err = unpopulate(val, "Status", &r.Status)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return fmt.Errorf("unmarshalling type %T: %v", r, err)
+		}
+	}
+	return nil
+}
+
 // MarshalJSON implements the json.Marshaller interface for type ResourceSQLDatabaseProperties.
 func (r ResourceSQLDatabaseProperties) MarshalJSON() ([]byte, error) {
 	objectMap := make(map[string]interface{})
@@ -2653,6 +2653,65 @@ func (v *ValuesDaprStateStoreResourceProperties) UnmarshalJSON(data []byte) erro
 	return nil
 }
 
+// MarshalJSON implements the json.Marshaller interface for type ValuesMongoDatabaseProperties.
+func (v ValuesMongoDatabaseProperties) MarshalJSON() ([]byte, error) {
+	objectMap := make(map[string]interface{})
+	populate(objectMap, "application", v.Application)
+	populate(objectMap, "database", v.Database)
+	populate(objectMap, "environment", v.Environment)
+	populate(objectMap, "host", v.Host)
+	objectMap["mode"] = MongoDatabasePropertiesModeValues
+	populate(objectMap, "port", v.Port)
+	populate(objectMap, "provisioningState", v.ProvisioningState)
+	populate(objectMap, "secrets", v.Secrets)
+	populate(objectMap, "status", v.Status)
+	return json.Marshal(objectMap)
+}
+
+// UnmarshalJSON implements the json.Unmarshaller interface for type ValuesMongoDatabaseProperties.
+func (v *ValuesMongoDatabaseProperties) UnmarshalJSON(data []byte) error {
+	var rawMsg map[string]json.RawMessage
+	if err := json.Unmarshal(data, &rawMsg); err != nil {
+		return fmt.Errorf("unmarshalling type %T: %v", v, err)
+	}
+	for key, val := range rawMsg {
+		var err error
+		switch key {
+		case "application":
+				err = unpopulate(val, "Application", &v.Application)
+				delete(rawMsg, key)
+		case "database":
+				err = unpopulate(val, "Database", &v.Database)
+				delete(rawMsg, key)
+		case "environment":
+				err = unpopulate(val, "Environment", &v.Environment)
+				delete(rawMsg, key)
+		case "host":
+				err = unpopulate(val, "Host", &v.Host)
+				delete(rawMsg, key)
+		case "mode":
+				err = unpopulate(val, "Mode", &v.Mode)
+				delete(rawMsg, key)
+		case "port":
+				err = unpopulate(val, "Port", &v.Port)
+				delete(rawMsg, key)
+		case "provisioningState":
+				err = unpopulate(val, "ProvisioningState", &v.ProvisioningState)
+				delete(rawMsg, key)
+		case "secrets":
+				err = unpopulate(val, "Secrets", &v.Secrets)
+				delete(rawMsg, key)
+		case "status":
+				err = unpopulate(val, "Status", &v.Status)
+				delete(rawMsg, key)
+		}
+		if err != nil {
+			return fmt.Errorf("unmarshalling type %T: %v", v, err)
+		}
+	}
+	return nil
+}
+
 // MarshalJSON implements the json.Marshaller interface for type ValuesSQLDatabaseProperties.
 func (v ValuesSQLDatabaseProperties) MarshalJSON() ([]byte, error) {
 	objectMap := make(map[string]interface{})
diff --git a/pkg/linkrp/api/v20220315privatepreview/zz_generated_mongodatabases_client.go b/pkg/linkrp/api/v20220315privatepreview/zz_generated_mongodatabases_client.go
index 23411bdc0..a883aac2e 100644
--- a/pkg/linkrp/api/v20220315privatepreview/zz_generated_mongodatabases_client.go
+++ b/pkg/linkrp/api/v20220315privatepreview/zz_generated_mongodatabases_client.go
@@ -55,11 +55,11 @@ pl: pl,
 	return client, nil
 }
 
-// CreateOrUpdate - Creates or updates a MongoDatabase resource
+// CreateOrUpdate - Creates or updates a Mongo database resource
 // If the operation fails it returns an *azcore.ResponseError type.
 // Generated from API version 2022-03-15-privatepreview
-// mongoDatabaseName - The name of the MongoDatabase link resource
-// mongoDatabaseParameters - mongoDatabase create parameters
+// mongoDatabaseName - The name of the Mongo database link resource
+// mongoDatabaseParameters - Mongo database create parameters
 // options - MongoDatabasesClientCreateOrUpdateOptions contains the optional parameters for the MongoDatabasesClient.CreateOrUpdate
 // method.
 func (client *MongoDatabasesClient) CreateOrUpdate(ctx context.Context, mongoDatabaseName string, mongoDatabaseParameters MongoDatabaseResource, options *MongoDatabasesClientCreateOrUpdateOptions) (MongoDatabasesClientCreateOrUpdateResponse, error) {
@@ -99,16 +99,16 @@ func (client *MongoDatabasesClient) createOrUpdateCreateRequest(ctx context.Cont
 // createOrUpdateHandleResponse handles the CreateOrUpdate response.
 func (client *MongoDatabasesClient) createOrUpdateHandleResponse(resp *http.Response) (MongoDatabasesClientCreateOrUpdateResponse, error) {
 	result := MongoDatabasesClientCreateOrUpdateResponse{}
-	if err := runtime.UnmarshalAsJSON(resp, &result.MongoDatabaseResponseResource); err != nil {
+	if err := runtime.UnmarshalAsJSON(resp, &result.MongoDatabaseResource); err != nil {
 		return MongoDatabasesClientCreateOrUpdateResponse{}, err
 	}
 	return result, nil
 }
 
-// Delete - Deletes an existing mongoDatabase resource
+// Delete - Deletes an existing mongo database resource
 // If the operation fails it returns an *azcore.ResponseError type.
 // Generated from API version 2022-03-15-privatepreview
-// mongoDatabaseName - The name of the MongoDatabase link resource
+// mongoDatabaseName - The name of the Mongo database link resource
 // options - MongoDatabasesClientDeleteOptions contains the optional parameters for the MongoDatabasesClient.Delete method.
 func (client *MongoDatabasesClient) Delete(ctx context.Context, mongoDatabaseName string, options *MongoDatabasesClientDeleteOptions) (MongoDatabasesClientDeleteResponse, error) {
 	req, err := client.deleteCreateRequest(ctx, mongoDatabaseName, options)
@@ -144,10 +144,10 @@ func (client *MongoDatabasesClient) deleteCreateRequest(ctx context.Context, mon
 	return req, nil
 }
 
-// Get - Retrieves information about a mongoDatabases resource
+// Get - Retrieves information about a Mongo database resource
 // If the operation fails it returns an *azcore.ResponseError type.
 // Generated from API version 2022-03-15-privatepreview
-// mongoDatabaseName - The name of the MongoDatabase link resource
+// mongoDatabaseName - The name of the Mongo database link resource
 // options - MongoDatabasesClientGetOptions contains the optional parameters for the MongoDatabasesClient.Get method.
 func (client *MongoDatabasesClient) Get(ctx context.Context, mongoDatabaseName string, options *MongoDatabasesClientGetOptions) (MongoDatabasesClientGetResponse, error) {
 	req, err := client.getCreateRequest(ctx, mongoDatabaseName, options)
@@ -186,13 +186,13 @@ func (client *MongoDatabasesClient) getCreateRequest(ctx context.Context, mongoD
 // getHandleResponse handles the Get response.
 func (client *MongoDatabasesClient) getHandleResponse(resp *http.Response) (MongoDatabasesClientGetResponse, error) {
 	result := MongoDatabasesClientGetResponse{}
-	if err := runtime.UnmarshalAsJSON(resp, &result.MongoDatabaseResponseResource); err != nil {
+	if err := runtime.UnmarshalAsJSON(resp, &result.MongoDatabaseResource); err != nil {
 		return MongoDatabasesClientGetResponse{}, err
 	}
 	return result, nil
 }
 
-// NewListByRootScopePager - Lists information about all mongoDatabases resources in the given root scope
+// NewListByRootScopePager - Lists information about all Mongo database resources in the given root scope
 // Generated from API version 2022-03-15-privatepreview
 // options - MongoDatabasesClientListByRootScopeOptions contains the optional parameters for the MongoDatabasesClient.ListByRootScope
 // method.
@@ -248,10 +248,10 @@ func (client *MongoDatabasesClient) listByRootScopeHandleResponse(resp *http.Res
 	return result, nil
 }
 
-// ListSecrets - Lists secrets values for the specified MongoDatabase resource
+// ListSecrets - Lists secrets values for the specified Mongo database resource
 // If the operation fails it returns an *azcore.ResponseError type.
 // Generated from API version 2022-03-15-privatepreview
-// mongoDatabaseName - The name of the MongoDatabase link resource
+// mongoDatabaseName - The name of the Mongo database link resource
 // options - MongoDatabasesClientListSecretsOptions contains the optional parameters for the MongoDatabasesClient.ListSecrets
 // method.
 func (client *MongoDatabasesClient) ListSecrets(ctx context.Context, mongoDatabaseName string, options *MongoDatabasesClientListSecretsOptions) (MongoDatabasesClientListSecretsResponse, error) {
diff --git a/pkg/linkrp/api/v20220315privatepreview/zz_generated_polymorphic_helpers.go b/pkg/linkrp/api/v20220315privatepreview/zz_generated_polymorphic_helpers.go
index cfd283b69..7c88c5aae 100644
--- a/pkg/linkrp/api/v20220315privatepreview/zz_generated_polymorphic_helpers.go
+++ b/pkg/linkrp/api/v20220315privatepreview/zz_generated_polymorphic_helpers.go
@@ -73,6 +73,28 @@ func unmarshalDaprStateStorePropertiesClassification(rawMsg json.RawMessage) (Da
 	return b, json.Unmarshal(rawMsg, b)
 }
 
+func unmarshalMongoDatabasePropertiesClassification(rawMsg json.RawMessage) (MongoDatabasePropertiesClassification, error) {
+	if rawMsg == nil {
+		return nil, nil
+	}
+	var m map[string]interface{}
+	if err := json.Unmarshal(rawMsg, &m); err != nil {
+		return nil, err
+	}
+	var b MongoDatabasePropertiesClassification
+	switch m["mode"] {
+	case string(MongoDatabasePropertiesModeRecipe):
+		b = &RecipeMongoDatabaseProperties{}
+	case string(MongoDatabasePropertiesModeResource):
+		b = &ResourceMongoDatabaseProperties{}
+	case string(MongoDatabasePropertiesModeValues):
+		b = &ValuesMongoDatabaseProperties{}
+	default:
+		b = &MongoDatabaseProperties{}
+	}
+	return b, json.Unmarshal(rawMsg, b)
+}
+
 func unmarshalSQLDatabasePropertiesClassification(rawMsg json.RawMessage) (SQLDatabasePropertiesClassification, error) {
 	if rawMsg == nil {
 		return nil, nil
diff --git a/pkg/linkrp/api/v20220315privatepreview/zz_generated_response_types.go b/pkg/linkrp/api/v20220315privatepreview/zz_generated_response_types.go
index 13c2148a6..e04efd457 100644
--- a/pkg/linkrp/api/v20220315privatepreview/zz_generated_response_types.go
+++ b/pkg/linkrp/api/v20220315privatepreview/zz_generated_response_types.go
@@ -117,7 +117,7 @@ type ExtendersClientListSecretsResponse struct {
 
 // MongoDatabasesClientCreateOrUpdateResponse contains the response from method MongoDatabasesClient.CreateOrUpdate.
 type MongoDatabasesClientCreateOrUpdateResponse struct {
-	MongoDatabaseResponseResource
+	MongoDatabaseResource
 }
 
 // MongoDatabasesClientDeleteResponse contains the response from method MongoDatabasesClient.Delete.
@@ -127,7 +127,7 @@ type MongoDatabasesClientDeleteResponse struct {
 
 // MongoDatabasesClientGetResponse contains the response from method MongoDatabasesClient.Get.
 type MongoDatabasesClientGetResponse struct {
-	MongoDatabaseResponseResource
+	MongoDatabaseResource
 }
 
 // MongoDatabasesClientListByRootScopeResponse contains the response from method MongoDatabasesClient.ListByRootScope.
diff --git a/pkg/linkrp/datamodel/converter/mongodatabase_converter.go b/pkg/linkrp/datamodel/converter/mongodatabase_converter.go
index 2d2a75efd..e96cce535 100644
--- a/pkg/linkrp/datamodel/converter/mongodatabase_converter.go
+++ b/pkg/linkrp/datamodel/converter/mongodatabase_converter.go
@@ -26,18 +26,6 @@ func MongoDatabaseDataModelToVersioned(model *datamodel.MongoDatabase, version s
 	}
 }
 
-// MongoDatabaseResponseDataModelToVersioned converts version agnostic MongoDatabaseResponse datamodel to versioned model and the model doesnt include secrets.
-func MongoDatabaseResponseDataModelToVersioned(model *datamodel.MongoDatabaseResponse, version string) (conv.VersionedModelInterface, error) {
-	switch version {
-	case v20220315privatepreview.Version:
-		versioned := &v20220315privatepreview.MongoDatabaseResponseResource{}
-		err := versioned.ConvertFrom(model)
-		return versioned, err
-	default:
-		return nil, v1.ErrUnsupportedAPIVersion
-	}
-}
-
 // MongoDatabaseDataModelToVersioned converts versioned MongoDatabase model to datamodel.
 func MongoDatabaseDataModelFromVersioned(content []byte, version string) (*datamodel.MongoDatabase, error) {
 	switch version {
diff --git a/pkg/linkrp/datamodel/linkmetadata.go b/pkg/linkrp/datamodel/linkmetadata.go
index 7621a938a..23c6d5f4e 100644
--- a/pkg/linkrp/datamodel/linkmetadata.go
+++ b/pkg/linkrp/datamodel/linkmetadata.go
@@ -47,3 +47,11 @@ type LinkRecipe struct {
 	// Parameters are key/value parameters to pass into the recipe at deployment
 	Parameters map[string]interface{} `json:"parameters,omitempty"`
 }
+
+type LinkMode string
+
+const (
+	LinkModeRecipe   LinkMode = "recipe"
+	LinkModeResource LinkMode = "resource"
+	LinkModeValues   LinkMode = "values"
+)
diff --git a/pkg/linkrp/datamodel/mongodatabase.go b/pkg/linkrp/datamodel/mongodatabase.go
index 6b147875c..60647ff79 100644
--- a/pkg/linkrp/datamodel/mongodatabase.go
+++ b/pkg/linkrp/datamodel/mongodatabase.go
@@ -21,38 +21,15 @@ type MongoDatabase struct {
 	Properties MongoDatabaseProperties `json:"properties"`
 }
 
-type MongoDatabaseResponse struct {
-	v1.BaseResource
-
-	// Properties is the properties of the resource.
-	Properties MongoDatabaseResponseProperties `json:"properties"`
-
-	// LinkMetadata represents internal DataModel properties common to all link types.
-	LinkMetadata
-}
-
-func (mongo MongoDatabase) ResourceTypeName() string {
-	return "Applications.Link/mongoDatabases"
-}
-
-func (mongo MongoDatabaseResponse) ResourceTypeName() string {
-	return "Applications.Link/mongoDatabases"
-}
-
 // MongoDatabaseProperties represents the properties of MongoDatabase resource.
-type MongoDatabaseResponseProperties struct {
+type MongoDatabaseProperties struct {
 	rp.BasicResourceProperties
+	MongoDatabaseResourceProperties
+	MongoDatabaseRecipeProperties
+	MongoDatabaseValuesProperties
+	Secrets           MongoDatabaseSecrets `json:"secrets,omitempty"`
 	ProvisioningState v1.ProvisioningState `json:"provisioningState,omitempty"`
-	Resource          string               `json:"resource,omitempty"`
-	Host              string               `json:"host,omitempty"`
-	Port              int32                `json:"port,omitempty"`
-	Database          string               `json:"database,omitempty"`
-	Recipe            LinkRecipe           `json:"recipe,omitempty"`
-}
-
-type MongoDatabaseProperties struct {
-	MongoDatabaseResponseProperties
-	Secrets MongoDatabaseSecrets `json:"secrets,omitempty"`
+	Mode              LinkMode             `json:"mode"`
 }
 
 // Secrets values consisting of secrets provided for the resource
@@ -69,3 +46,21 @@ func (mongoSecrets MongoDatabaseSecrets) IsEmpty() bool {
 func (mongoSecrets MongoDatabaseSecrets) ResourceTypeName() string {
 	return "Applications.Link/mongoDatabases"
 }
+
+func (mongo MongoDatabase) ResourceTypeName() string {
+	return "Applications.Link/mongoDatabases"
+}
+
+type MongoDatabaseValuesProperties struct {
+	Host     string `json:"host,omitempty"`
+	Port     int32  `json:"port,omitempty"`
+	Database string `json:"database,omitempty"`
+}
+
+type MongoDatabaseResourceProperties struct {
+	Resource string `json:"resource,omitempty"`
+}
+
+type MongoDatabaseRecipeProperties struct {
+	Recipe LinkRecipe `json:"recipe,omitempty"`
+}
diff --git a/pkg/linkrp/frontend/controller/mongodatabases/createorupdatemongodatabase.go b/pkg/linkrp/frontend/controller/mongodatabases/createorupdatemongodatabase.go
index 606b7df36..3d056c45d 100644
--- a/pkg/linkrp/frontend/controller/mongodatabases/createorupdatemongodatabase.go
+++ b/pkg/linkrp/frontend/controller/mongodatabases/createorupdatemongodatabase.go
@@ -102,13 +102,13 @@ func (mongo *CreateOrUpdateMongoDatabase) Run(ctx context.Context, w http.Respon
 		return nil, err
 	}
 
-	mongoResponse := &datamodel.MongoDatabaseResponse{}
+	mongoResponse := &datamodel.MongoDatabase{}
 	err = savedResource.As(mongoResponse)
 	if err != nil {
 		return nil, err
 	}
 
-	versioned, err := converter.MongoDatabaseResponseDataModelToVersioned(mongoResponse, serviceCtx.APIVersion)
+	versioned, err := converter.MongoDatabaseDataModelToVersioned(mongoResponse, serviceCtx.APIVersion)
 	if err != nil {
 		return nil, err
 	}
diff --git a/pkg/linkrp/frontend/controller/mongodatabases/getmongodatabase.go b/pkg/linkrp/frontend/controller/mongodatabases/getmongodatabase.go
index 59c5ffaee..25f87bfe4 100644
--- a/pkg/linkrp/frontend/controller/mongodatabases/getmongodatabase.go
+++ b/pkg/linkrp/frontend/controller/mongodatabases/getmongodatabase.go
@@ -33,7 +33,7 @@ func NewGetMongoDatabase(opts ctrl.Options) (ctrl.Controller, error) {
 func (mongo *GetMongoDatabase) Run(ctx context.Context, w http.ResponseWriter, req *http.Request) (rest.Response, error) {
 	serviceCtx := v1.ARMRequestContextFromContext(ctx)
 
-	existingResource := &datamodel.MongoDatabaseResponse{}
+	existingResource := &datamodel.MongoDatabase{}
 	_, err := mongo.GetResource(ctx, serviceCtx.ResourceID.String(), existingResource)
 	if err != nil {
 		if errors.Is(&store.ErrNotFound{}, err) {
@@ -42,6 +42,6 @@ func (mongo *GetMongoDatabase) Run(ctx context.Context, w http.ResponseWriter, r
 		return nil, err
 	}
 
-	versioned, _ := converter.MongoDatabaseResponseDataModelToVersioned(existingResource, serviceCtx.APIVersion)
+	versioned, _ := converter.MongoDatabaseDataModelToVersioned(existingResource, serviceCtx.APIVersion)
 	return rest.NewOKResponse(versioned), nil
 }
diff --git a/pkg/linkrp/frontend/controller/mongodatabases/listmongodatabases.go b/pkg/linkrp/frontend/controller/mongodatabases/listmongodatabases.go
index f43d51529..7a457b667 100644
--- a/pkg/linkrp/frontend/controller/mongodatabases/listmongodatabases.go
+++ b/pkg/linkrp/frontend/controller/mongodatabases/listmongodatabases.go
@@ -53,12 +53,12 @@ func (mongo *ListMongoDatabases) createPaginatedList(ctx context.Context, req *h
 
 	items := []interface{}{}
 	for _, item := range result.Items {
-		dm := &datamodel.MongoDatabaseResponse{}
+		dm := &datamodel.MongoDatabase{}
 		if err := item.As(dm); err != nil {
 			return nil, err
 		}
 
-		versioned, err := converter.MongoDatabaseResponseDataModelToVersioned(dm, serviceCtx.APIVersion)
+		versioned, err := converter.MongoDatabaseDataModelToVersioned(dm, serviceCtx.APIVersion)
 		if err != nil {
 			return nil, err
 		}
diff --git a/pkg/linkrp/renderers/mongodatabases/renderer.go b/pkg/linkrp/renderers/mongodatabases/renderer.go
index da8c0b650..f605435db 100644
--- a/pkg/linkrp/renderers/mongodatabases/renderer.go
+++ b/pkg/linkrp/renderers/mongodatabases/renderer.go
@@ -39,23 +39,22 @@ func (r Renderer) Render(ctx context.Context, dm conv.DataModelInterface, option
 		return renderers.RendererOutput{}, err
 	}
 
-	if resource.Properties.Recipe.Name != "" {
+	switch resource.Properties.Mode {
+	case datamodel.LinkModeRecipe:
 		rendererOutput, err := RenderAzureRecipe(resource, options)
 		if err != nil {
 			return renderers.RendererOutput{}, err
 		}
-
 		return rendererOutput, nil
-	} else if resource.Properties.Resource != "" {
+	case datamodel.LinkModeResource:
 		// Source resource identifier is provided
 		// Currently only Azure resources are supported with non empty resource id
 		rendererOutput, err := RenderAzureResource(resource.Properties)
 		if err != nil {
 			return renderers.RendererOutput{}, err
 		}
-
 		return rendererOutput, nil
-	} else {
+	case datamodel.LinkModeValues:
 		return renderers.RendererOutput{
 			Resources: []outputresource.OutputResource{},
 			ComputedValues: map[string]renderers.ComputedValueReference{
@@ -65,6 +64,8 @@ func (r Renderer) Render(ctx context.Context, dm conv.DataModelInterface, option
 			},
 			SecretValues: getProvidedSecretValues(resource.Properties),
 		}, nil
+	default:
+		return renderers.RendererOutput{}, conv.NewClientErrInvalidRequest(fmt.Sprintf("unsupported mode %s", resource.Properties.Mode))
 	}
 }
 
@@ -208,6 +209,5 @@ func buildSecretValueReferenceForAzure(properties datamodel.MongoDatabasePropert
 			},
 		}
 	}
-
 	return secretValues
 }
diff --git a/swagger/specification/applications/resource-manager/Applications.Core/preview/2022-03-15-privatepreview/containers.json b/swagger/specification/applications/resource-manager/Applications.Core/preview/2022-03-15-privatepreview/containers.json
index 7e0a1a707..b4adf424b 100644
--- a/swagger/specification/applications/resource-manager/Applications.Core/preview/2022-03-15-privatepreview/containers.json
+++ b/swagger/specification/applications/resource-manager/Applications.Core/preview/2022-03-15-privatepreview/containers.json
@@ -410,7 +410,7 @@
           "type": "number"
         },
         "timeoutSeconds": {
-          "description": "Number of seconds after which the readiness/liveness probe times out. Defaults to 5 second",
+          "description": "Number of seconds after which the readiness/liveness probe times out. Defaults to 5 seconds",
           "type": "number"
         }
       },
diff --git a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesGet.json b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesGet.json
index 6e85c92e1..fcac6c984 100644
--- a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesGet.json
+++ b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesGet.json
@@ -14,6 +14,7 @@
           "provisioningState": "Succeeded",
           "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
           "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+          "mode":"resource",
           "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db",
           "database": "mongo0"
         }
diff --git a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesList.json b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesList.json
index 64d6f0f79..247d2d5e8 100644
--- a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesList.json
+++ b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesList.json
@@ -14,6 +14,7 @@
             "properties": {
               "provisioningState": "Succeeded",
               "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+              "mode": "resource",
               "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db",
               "database": "mongo0"
             }
@@ -26,6 +27,7 @@
               "provisioningState": "Succeeded",
               "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
               "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+              "mode":"values",
               "host": "testAccount1.mongo.cosmos.azure.com",
               "port": 10255,
               "database": "mongo0",
@@ -35,6 +37,23 @@
                 "connectionString": "mongodb://testUser:testPassword@testAccount1.mongo.cosmos.azure.com:10255"
               }
             }
+          },
+          {
+            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup1/providers/Applications.Link/mongoDatabases/mongo1",
+            "name": "mongo1",
+            "type": "Applications.Link/mongoDatabases",
+            "properties": {
+              "provisioningState": "Succeeded",
+              "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+              "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+              "mode":"recipe",
+              "recipe": {
+                "name": "cosmosdb",
+                "parameters":{
+                  "foo":"bar"
+                }
+              }
+            }
           }
         ],
         "nextLink": "https://serviceRoot/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Link/mongoDatabases?api-version=2022-01-25-privatepreview&$skiptoken=X'12345'"
diff --git a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesListByRootScope.json b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesListByRootScope.json
index 6634c65bc..bd95acd7d 100644
--- a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesListByRootScope.json
+++ b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesListByRootScope.json
@@ -15,6 +15,7 @@
               "provisioningState": "Succeeded",
               "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
               "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+              "mode": "resource",
               "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db",
               "database": "mongo0"
             }
@@ -27,6 +28,7 @@
               "provisioningState": "Succeeded",
               "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
               "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+              "mode":"values",
               "host": "testAccount1.mongo.cosmos.azure.com",
               "port": 10255,
               "database": "mongo0",
@@ -36,6 +38,23 @@
                 "connectionString": "mongodb://testUser:testPassword@testAccount1.mongo.cosmos.azure.com:10255"
               }
             }
+          },
+          {
+            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup1/providers/Applications.Link/mongoDatabases/mongo1",
+            "name": "mongo1",
+            "type": "Applications.Link/mongoDatabases",
+            "properties": {
+              "provisioningState": "Succeeded",
+              "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+              "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+              "mode":"recipe",
+              "recipe": {
+                "name": "cosmosdb",
+                "parameters":{
+                  "foo":"bar"
+                }
+              }
+            }
           }
         ],
         "nextLink": "https://serviceRoot/00000000-0000-0000-0000-000000000000/providers/Applications.Link/mongoDatabases?api-version=2022-03-15-privatepreview&$skiptoken=X'12345'"
diff --git a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPutRecipe.json b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPutRecipe.json
new file mode 100644
index 000000000..d820b7335
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPutRecipe.json
@@ -0,0 +1,42 @@
+{
+  "parameters": {
+    "rootScope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup",
+    "mongoDatabaseName": "mongo0",
+    "api-version": "2022-03-15-privatepreview",
+    "MongoDatabaseResource": {
+      "location": "West US",
+      "properties": {
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+        "mode": "recipe",
+        "recipe": {
+          "name": "cosmosdb",
+          "parameters":{
+            "foo":"bar"
+          }
+        }
+      }
+    }
+  },
+  "responses": {
+    "200": {
+      "body": {
+        "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Link/mongoDatabases/mongo0",
+        "name": "mongo0",
+        "type": "Applications.Link/mongoDatabases",
+        "properties": {
+          "provisioningState": "Succeeded",
+          "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+          "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+          "mode": "recipe",
+          "recipe": {
+            "name": "cosmosdb",
+            "parameters":{
+              "foo":"bar"
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPut.json b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPutResource.json
similarity index 82%
rename from swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPut.json
rename to swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPutResource.json
index 8126632d1..f8724d06f 100644
--- a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPut.json
+++ b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPutResource.json
@@ -8,6 +8,7 @@
       "properties": {
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+        "mode": "resource",
         "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db"
       }
     }
@@ -22,13 +23,8 @@
           "provisioningState": "Succeeded",
           "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
           "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
-          "host": "testAccount1.mongo.cosmos.azure.com",
-          "port": 10255,
-          "secrets": {
-            "username": "testUser",
-            "password": "testPassword",
-            "connectionString": "mongodb://testUser:testPassword@testAccount1.mongo.cosmos.azure.com:10255"
-          }
+          "mode":"resource",
+          "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db"
         }
       }
     }
diff --git a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPutValues.json b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPutValues.json
new file mode 100644
index 000000000..95faae677
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/MongoDatabasesPutValues.json
@@ -0,0 +1,41 @@
+{
+  "parameters": {
+    "rootScope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup",
+    "mongoDatabaseName": "mongo0",
+    "api-version": "2022-03-15-privatepreview",
+    "MongoDatabaseResource": {
+      "location": "West US",
+      "properties": {
+        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+        "mode":"values",
+        "host": "testAccount1.mongo.cosmos.azure.com",
+        "port": 10255,
+        "database": "mongo0",
+        "secrets": {
+          "username": "testUser",
+          "password": "testPassword",
+          "connectionString": "mongodb://testUser:testPassword@testAccount1.mongo.cosmos.azure.com:10255"
+        }
+      }
+    }
+  },
+  "responses": {
+    "200": {
+      "body": {
+        "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Link/mongoDatabases/mongo0",
+        "name": "mongo0",
+        "type": "Applications.Link/mongoDatabases",
+        "properties": {
+          "provisioningState": "Succeeded",
+          "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+          "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+          "mode":"values",
+          "host": "testAccount1.mongo.cosmos.azure.com",
+          "port": 10255,
+          "database": "mongo0"
+        }
+      }
+    }
+  }
+}
diff --git a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/RedisCachesPutRecipe.json b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/RedisCachesPutRecipe.json
new file mode 100644
index 000000000..6be936fe8
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/RedisCachesPutRecipe.json
@@ -0,0 +1,43 @@
+{
+    "parameters": {
+      "rootScope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup",
+      "redisCacheName": "redis0",
+      "api-version": "2022-03-15-privatepreview",
+      "RedisCacheResource": {
+        "location": "West US",
+        "properties": {
+          "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+          "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+          "mode": "recipe",
+          "recipe": {
+            "name": "redis",
+            "parameters": {
+              "port": 2334
+            }
+          } 
+        }
+      }
+    },
+    "responses": {
+      "200": {
+        "body": {
+          "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Link/redisCaches/redis0",
+          "name": "redis0",
+          "type": "Applications.Link/redisCaches",
+          "properties": {
+            "provisioningState": "Succeeded",
+            "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+            "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+            "mode": "recipe",
+            "recipe": {
+              "name": "redis",
+              "parameters": {
+                "port": 2334
+              }
+            } 
+          }
+        }
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/RedisCachesPutResource.json b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/RedisCachesPutResource.json
new file mode 100644
index 000000000..b544a3602
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/RedisCachesPutResource.json
@@ -0,0 +1,33 @@
+{
+    "parameters": {
+      "rootScope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup",
+      "redisCacheName": "redis0",
+      "api-version": "2022-03-15-privatepreview",
+      "RedisCacheResource": {
+        "location": "West US",
+        "properties": {
+          "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+          "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+          "mode": "resource",
+          "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Cache/Redis/testCache"
+        }
+      }
+    },
+    "responses": {
+      "200": {
+        "body": {
+          "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Link/redisCaches/redis0",
+          "name": "redis0",
+          "type": "Applications.Link/redisCaches",
+          "properties": {
+            "provisioningState": "Succeeded",
+            "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+            "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+            "mode": "resource",
+            "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Microsoft.Cache/Redis/testCache"
+          }
+        }
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/RedisCachesPutValues.json b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/RedisCachesPutValues.json
new file mode 100644
index 000000000..322373372
--- /dev/null
+++ b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/examples/RedisCachesPutValues.json
@@ -0,0 +1,41 @@
+{
+    "parameters": {
+      "rootScope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup",
+      "redisCacheName": "redis0",
+      "api-version": "2022-03-15-privatepreview",
+      "RedisCacheResource": {
+        "location": "West US",
+        "properties": {
+          "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+          "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+          "mode": "values",
+          "host":"myrediscache.redis.cache.windows.net",
+          "port":"6380",
+          "username": "username",
+          "secrets": {
+            "password": "testPassword",
+            "connectionString": "test-connection-string"
+          }
+        }
+      }
+    },
+    "responses": {
+      "200": {
+        "body": {
+          "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Link/redisCaches/redis0",
+          "name": "redis0",
+          "type": "Applications.Link/redisCaches",
+          "properties": {
+            "provisioningState": "Succeeded",
+            "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/applications/testApplication",
+            "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testGroup/providers/Applications.Core/environments/env0",
+            "mode": "values",
+            "host":"myrediscache.redis.cache.windows.net",
+            "port":"6380",
+            "username": "username"
+          }
+        }
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/mongoDatabases.json b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/mongoDatabases.json
index c616fd804..e6d7fc99f 100644
--- a/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/mongoDatabases.json
+++ b/swagger/specification/applications/resource-manager/Applications.Link/preview/2022-03-15-privatepreview/mongoDatabases.json
@@ -36,7 +36,7 @@
   "paths": {
     "/{rootScope}/providers/Applications.Link/mongoDatabases": {
       "get": {
-        "description": "Lists information about all mongoDatabases resources in the given root scope",
+        "description": "Lists information about all Mongo database resources in the given root scope",
         "operationId": "MongoDatabases_ListByRootScope",
         "produces": [
           "application/json"
@@ -59,7 +59,7 @@
         ],
         "responses": {
           "200": {
-            "description": "List of MongoDatabase resources",
+            "description": "List of Mongo database resources",
             "schema": {
               "$ref": "#/definitions/MongoDatabaseList"
             }
@@ -79,7 +79,7 @@
     },
     "/{rootScope}/providers/Applications.Link/mongoDatabases/{mongoDatabaseName}": {
       "get": {
-        "description": "Retrieves information about a mongoDatabases resource",
+        "description": "Retrieves information about a Mongo database resource",
         "operationId": "MongoDatabases_Get",
         "produces": [
           "application/json"
@@ -105,9 +105,9 @@
         ],
         "responses": {
           "200": {
-            "description": "MongoDatabase resource",
+            "description": "Mongo database resource",
             "schema": {
-              "$ref": "#/definitions/MongoDatabaseResponseResource"
+              "$ref": "#/definitions/MongoDatabaseResource"
             }
           },
           "default": {
@@ -119,14 +119,20 @@
         }
       },
       "put": {
-        "description": "Creates or updates a MongoDatabase resource",
+        "description": "Creates or updates a Mongo database resource",
         "operationId": "MongoDatabases_CreateOrUpdate",
         "produces": [
           "application/json"
         ],
         "x-ms-examples": {
-          "MongoDatabasesPut": {
-            "$ref": "./examples/MongoDatabasesPut.json"
+          "MongoDatabasesPutResource": {
+            "$ref": "./examples/MongoDatabasesPutResource.json"
+          },
+          "MongoDatabasesPutRecipe": {
+            "$ref": "./examples/MongoDatabasesPutRecipe.json"
+          },
+          "MongoDatabasesPutValues": {
+            "$ref": "./examples/MongoDatabasesPutValues.json"
           }
         },
         "tags": [
@@ -144,7 +150,7 @@
           },
           {
             "name": "MongoDatabaseParameters",
-            "description": "mongoDatabase create parameters",
+            "description": "Mongo database create parameters",
             "in": "body",
             "required": true,
             "schema": {
@@ -154,15 +160,15 @@
         ],
         "responses": {
           "200": {
-            "description": "The request was successful; response contains the mongoDatabase resource",
+            "description": "The request was successful; response contains the Mongo database resource",
             "schema": {
-              "$ref": "#/definitions/MongoDatabaseResponseResource"
+              "$ref": "#/definitions/MongoDatabaseResource"
             }
           },
           "201": {
             "description": "The request was successful, resource will be updated asynchronously",
             "schema": {
-              "$ref": "#/definitions/MongoDatabaseResponseResource"
+              "$ref": "#/definitions/MongoDatabaseResource"
             }
           },
           "default": {
@@ -174,7 +180,7 @@
         }
       },
       "delete": {
-        "description": "Deletes an existing mongoDatabase resource",
+        "description": "Deletes an existing mongo database resource",
         "operationId": "MongoDatabases_Delete",
         "produces": [
           "application/json"
@@ -200,13 +206,13 @@
         ],
         "responses": {
           "200": {
-            "description": "The MongoDatabase link was successfully deleted."
+            "description": "The Mongo database link was successfully deleted."
           },
           "202": {
-            "description": "The MongoDatabase link will be deleted asynchronously."
+            "description": "The Mongo database link will be deleted asynchronously."
           },
           "204": {
-            "description": "The MongoDatabase link does not exist."
+            "description": "The Mongo database link does not exist."
           },
           "default": {
             "description": "Error response describing the reason for operation failure",
@@ -219,7 +225,7 @@
     },
     "/{rootScope}/providers/Applications.Link/mongoDatabases/{mongoDatabaseName}/listSecrets": {
       "post": {
-        "description": "Lists secrets values for the specified MongoDatabase resource",
+        "description": "Lists secrets values for the specified Mongo database resource",
         "operationId": "MongoDatabases_listSecrets",
         "produces": [
           "application/json"
@@ -262,18 +268,18 @@
   },
   "definitions": {
     "MongoDatabaseList": {
-      "description": "Object that includes an array of MongoDatabase and a possible link for next set",
+      "description": "Object that includes an array of Mongo database and a possible link for next set",
       "type": "object",
       "properties": {
         "value": {
-          "description": "List of MongoDatabase resources",
+          "description": "List of Mongo database resources",
           "type": "array",
           "items": {
-            "$ref": "#/definitions/MongoDatabaseResponseResource"
+            "$ref": "#/definitions/MongoDatabaseResource"
           }
         },
         "nextLink": {
-          "description": "The link used to fetch the next page of MongoDatabase list.",
+          "description": "The link used to fetch the next page of Mongo database list.",
           "type": "string"
         }
       }
@@ -299,40 +305,29 @@
         }
       }
     },
-    "MongoDatabaseResponseResource": {
-      "description": "MongoDatabase link",
-      "type": "object",
+    "ResourceMongoDatabaseProperties": {
+      "additionalProperties": false,
       "allOf": [
         {
-          "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/TrackedResource"
+          "$ref": "#/definitions/MongoDatabaseProperties"
         }
       ],
-      "required": [
-        "properties"
-      ],
-      "properties": {
-        "systemData": {
-          "$ref": "../../../../../common-types/resource-management/v2/types.json#/definitions/systemData"
+      "properties": { 
+        "host": {
+          "description": "Host name of the target Mongo database",
+          "type": "string"
         },
-        "properties": {
-          "x-ms-client-flatten": true,
-          "$ref": "#/definitions/MongoDatabaseResponseProperties"
-        }
-      }
-    },
-    "MongoDatabaseResponseProperties": {
-      "description": "MongoDatabase link properties",
-      "type": "object",
-      "allOf": [
-        {
-          "$ref": "global.json#/definitions/BasicResourceProperties"
-        }
-      ],
-      "properties": {
-        "provisioningState": {
+        "port": {
+          "description": "Port value of the target Mongo database",
+          "type": "integer",
+          "example": [
+            27017
+          ]
+        },
+        "database": {
+          "description": "Database name of the target Mongo database",
           "readOnly": true,
-          "$ref": "global.json#/definitions/ProvisioningState",
-          "description": "Provisioning state of the mongo database link at the time the operation was called"
+          "type": "string"
         },
         "resource": {
           "description": "Fully qualified resource ID of a supported resource with Mongo API to use for this link",
@@ -340,7 +335,22 @@
           "example": [
             "account::mongodb.id"
           ]
-        },
+        }
+      },
+      "required": [
+        "resource"
+      ],
+      "type": "object",
+      "x-ms-discriminator-value": "resource"
+    },
+    "RecipeMongoDatabaseProperties": {
+      "additionalProperties": false,
+      "allOf": [
+        {
+          "$ref": "#/definitions/MongoDatabaseProperties"
+        }
+      ],
+      "properties": { 
         "host": {
           "description": "Host name of the target Mongo database",
           "type": "string"
@@ -354,8 +364,8 @@
         },
         "database": {
           "description": "Database name of the target Mongo database",
-          "type": "string",
-          "readOnly": true
+          "readOnly": true,
+          "type": "string"
         },
         "recipe": {
           "description": "The recipe used to automatically deploy underlying infrastructure for the mongodatabase link",
@@ -364,31 +374,86 @@
         }
       },
       "required": [
-        "environment"
-      ]
+        "recipe"
+      ],
+      "type": "object",
+      "x-ms-discriminator-value": "recipe"
+    },
+    "ValuesMongoDatabaseProperties": {
+      "additionalProperties": false,
+      "allOf": [
+        {
+          "$ref": "#/definitions/MongoDatabaseProperties"
+        }
+      ],
+      "properties": {
+        "host": {
+          "description": "Host name of the target Mongo database",
+          "type": "string"
+        },
+        "port": {
+          "description": "Port value of the target Mongo database",
+          "type": "integer",
+          "example": [
+            27017
+          ]
+        },
+        "database": {
+          "description": "Database name of the target Mongo database",
+          "readOnly": true,
+          "type": "string"
+        }
+      },
+      "required": [
+        "host",
+        "port"
+      ],
+      "type": "object",
+      "x-ms-discriminator-value": "values"
     },
     "MongoDatabaseProperties": {
-      "description": "MongoDatabase link properties",
+      "description": "Mongo database link properties",
       "type": "object",
       "allOf": [
         {
-          "$ref": "#/definitions/MongoDatabaseResponseProperties"
+          "$ref": "global.json#/definitions/BasicResourceProperties"
         }
       ],
+      "discriminator": "mode",
       "properties": {
+        "provisioningState": {
+          "readOnly": true,
+          "$ref": "global.json#/definitions/ProvisioningState",
+          "description": "Provisioning state of the mongo database link at the time the operation was called"
+        },
+        "mode" : {
+          "description": "How to build the Mongo database link. Options are to build automatically via 'recipe' or 'resource', or build manually via 'values'. Selection determines which set of fields to additionally require.",
+          "type": "string",
+          "enum": [
+            "resource",
+            "recipe",
+            "values"
+          ] 
+        },
         "secrets": {
+          "x-ms-secret": true,
           "type": "object",
           "description": "Secrets values provided for the resource",
           "$ref": "#/definitions/MongoDatabaseSecrets"
         }
-      }
+      },
+      "required": [
+        "environment",
+        "mode"
+      ]
     },
     "MongoDatabaseListSecretsResult": {
-      "description": "The secret values for the given MongoDatabase resource",
+      "description": "The secret values for the given Mongo database resource",
       "$ref": "#/definitions/MongoDatabaseSecrets"
     },
     "MongoDatabaseSecrets": {
-      "description": "The secret values for the given MongoDatabase resource",
+      "description": "The secret values for the given Mongo database resource",
+      "type": "object",
       "properties": {
         "username": {
           "description": "Username to use when connecting to the target Mongo database",
@@ -407,7 +472,7 @@
   },
   "parameters": {
     "MongoDatabaseNameParameter": {
-      "description": "The name of the MongoDatabase link resource",
+      "description": "The name of the Mongo database link resource",
       "name": "mongoDatabaseName",
       "in": "path",
       "required": true,



Test patch:
diff --git a/pkg/corerp/backend/deployment/deployment_test.go b/pkg/corerp/backend/deployment/deployment_test.go
index 6cfc0f5b3..4494d3cd9 100644
--- a/pkg/corerp/backend/deployment/deployment_test.go
+++ b/pkg/corerp/backend/deployment/deployment_test.go
@@ -22,6 +22,7 @@ import (
 	"github.com/project-radius/radius/pkg/corerp/renderers"
 	"github.com/project-radius/radius/pkg/corerp/renderers/container"
 	radiustesting "github.com/project-radius/radius/pkg/corerp/testing"
+	dm "github.com/project-radius/radius/pkg/linkrp/datamodel"
 	linkrp_dm "github.com/project-radius/radius/pkg/linkrp/datamodel"
 	linkrp_r "github.com/project-radius/radius/pkg/linkrp/renderers"
 	"github.com/project-radius/radius/pkg/linkrp/renderers/mongodatabases"
@@ -177,12 +178,11 @@ func buildMongoDBLinkWithRecipe() linkrp_dm.MongoDatabase {
 			},
 		},
 		Properties: linkrp_dm.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: linkrp_dm.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
-					Environment: "/subscriptions/test-subscription/resourceGroups/test-resource-group/providers/Applications.Core/environments/env0",
-				},
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
+				Environment: "/subscriptions/test-subscription/resourceGroups/test-resource-group/providers/Applications.Core/environments/env0",
 			},
+			Mode: dm.LinkModeRecipe,
 		},
 		LinkMetadata: linkrp_dm.LinkMetadata{
 			RecipeData: linkrp_dm.RecipeData{
@@ -384,11 +384,10 @@ func Test_Render(t *testing.T) {
 				},
 			},
 			Properties: linkrp_dm.MongoDatabaseProperties{
-				MongoDatabaseResponseProperties: linkrp_dm.MongoDatabaseResponseProperties{
-					BasicResourceProperties: rp.BasicResourceProperties{
-						Environment: "/subscriptions/test-subscription/resourceGroups/test-resource-group/providers/Applications.Core/environments/env0",
-					},
+				BasicResourceProperties: rp.BasicResourceProperties{
+					Environment: "/subscriptions/test-subscription/resourceGroups/test-resource-group/providers/Applications.Core/environments/env0",
 				},
+				Mode: dm.LinkModeValues,
 			},
 		}
 		mr := store.Object{
diff --git a/pkg/linkrp/api/v20220315privatepreview/mongodatabase_conversion_test.go b/pkg/linkrp/api/v20220315privatepreview/mongodatabase_conversion_test.go
index d6c77c0e8..a7d9bef49 100644
--- a/pkg/linkrp/api/v20220315privatepreview/mongodatabase_conversion_test.go
+++ b/pkg/linkrp/api/v20220315privatepreview/mongodatabase_conversion_test.go
@@ -12,7 +12,6 @@ import (
 
 	"github.com/project-radius/radius/pkg/armrpc/api/conv"
 	"github.com/project-radius/radius/pkg/linkrp/datamodel"
-	"github.com/project-radius/radius/pkg/rp/outputresource"
 	"github.com/stretchr/testify/require"
 )
 
@@ -50,44 +49,44 @@ func TestMongoDatabase_ConvertVersionedToDataModel(t *testing.T) {
 		require.Equal(t, "Applications.Link/mongoDatabases", convertedResource.Type)
 		require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", convertedResource.Properties.Application)
 		require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", convertedResource.Properties.Environment)
+		require.Equal(t, "2022-03-15-privatepreview", convertedResource.InternalMetadata.UpdatedAPIVersion)
 		require.Equal(t, "testAccount1.mongo.cosmos.azure.com", convertedResource.Properties.Host)
 		require.Equal(t, int32(10255), convertedResource.Properties.Port)
-		require.Equal(t, "2022-03-15-privatepreview", convertedResource.InternalMetadata.UpdatedAPIVersion)
 		if payload == "mongodatabaseresource_recipe.json" {
 			require.Equal(t, "cosmosdb", convertedResource.Properties.Recipe.Name)
 			require.Equal(t, "bar", convertedResource.Properties.Recipe.Parameters["foo"])
-		} else {
-			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db", convertedResource.Properties.Resource)
 		}
 	}
 }
 
-func TestMongoDatabaseResponse_ConvertVersionedToDataModel(t *testing.T) {
-	// arrange
-	rawPayload := loadTestData("mongodatabaseresource.json")
-	versionedResource := &MongoDatabaseResource{}
-	err := json.Unmarshal(rawPayload, versionedResource)
-	require.NoError(t, err)
-
-	// act
-	dm, err := versionedResource.ConvertTo()
-
-	// assert
-	require.NoError(t, err)
-	convertedResource := dm.(*datamodel.MongoDatabase)
-	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Link/mongoDatabases/mongo0", convertedResource.ID)
-	require.Equal(t, "mongo0", convertedResource.Name)
-	require.Equal(t, "Applications.Link/mongoDatabases", convertedResource.Type)
-	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", convertedResource.Properties.Application)
-	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", convertedResource.Properties.Environment)
-	require.Equal(t, "", convertedResource.Properties.Resource)
-	require.Equal(t, "testAccount1.mongo.cosmos.azure.com", convertedResource.Properties.Host)
-	require.Equal(t, int32(10255), convertedResource.Properties.Port)
-	require.Equal(t, "2022-03-15-privatepreview", convertedResource.InternalMetadata.UpdatedAPIVersion)
-	require.Equal(t, []outputresource.OutputResource(nil), convertedResource.Properties.Status.OutputResources)
-	require.Equal(t, "test-connection-string", convertedResource.Properties.Secrets.ConnectionString)
-	require.Equal(t, "testUser", convertedResource.Properties.Secrets.Username)
-	require.Equal(t, "testPassword", convertedResource.Properties.Secrets.Password)
+func TestMongoDatabase_ConvertVersionedToDataModel_InvalidRequest(t *testing.T) {
+	testset := []string{"mongodatabaseresource_invalidmode.json", "mongodatabaseresource_invalidmode2.json", "mongodatabaseresource_invalidmode3.json"}
+	for _, payload := range testset {
+		// arrange
+		rawPayload := loadTestData(payload)
+		versionedResource := &MongoDatabaseResource{}
+		err := json.Unmarshal(rawPayload, versionedResource)
+		require.NoError(t, err)
+		var expectedErr conv.ErrClientRP
+		if payload == "mongodatabaseresource_invalidmode.json" {
+			expectedErr.Code = "BadRequest"
+			expectedErr.Message = "Unsupported mode abc"
+		}
+		if payload == "mongodatabaseresource_invalidmode2.json" {
+			expectedErr.Code = "BadRequest"
+			expectedErr.Message = "resource is a required property for mode \"resource\""
+		}
+		if payload == "mongodatabaseresource_invalidmode3.json" {
+			expectedErr.Code = "BadRequest"
+			expectedErr.Message = "recipe is a required property for mode \"recipe\""
+		}
+		if payload == "mongodatabaseresource_invalidmode4.json" {
+			expectedErr.Code = "BadRequest"
+			expectedErr.Message = "rhost and port are required properties for mode \"values\""
+		}
+		_, err = versionedResource.ConvertTo()
+		require.Equal(t, &expectedErr, err)
+	}
 }
 
 func TestMongoDatabase_ConvertDataModelToVersioned(t *testing.T) {
@@ -108,50 +107,27 @@ func TestMongoDatabase_ConvertDataModelToVersioned(t *testing.T) {
 		require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Link/mongoDatabases/mongo0", *versionedResource.ID)
 		require.Equal(t, "mongo0", *versionedResource.Name)
 		require.Equal(t, "Applications.Link/mongoDatabases", *versionedResource.Type)
-		require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", *versionedResource.Properties.Application)
-		require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", *versionedResource.Properties.Environment)
-		require.Equal(t, "testAccount1.mongo.cosmos.azure.com", *versionedResource.Properties.Host)
-		require.Equal(t, int32(10255), *versionedResource.Properties.Port)
-		if payload == "mongodatabaseresourcedatamodel.json" {
-			require.Equal(t, "test-connection-string", *versionedResource.Properties.Secrets.ConnectionString)
-			require.Equal(t, "testUser", *versionedResource.Properties.Secrets.Username)
-			require.Equal(t, "testPassword", *versionedResource.Properties.Secrets.Password)
-			require.Equal(t, "AzureCosmosAccount", versionedResource.Properties.Status.OutputResources[0]["LocalID"])
-			require.Equal(t, "azure", versionedResource.Properties.Status.OutputResources[0]["Provider"])
-		} else if payload == "mongodatabaseresourcedatamodel_recipe.json" {
-			require.Equal(t, "cosmosdb", *versionedResource.Properties.Recipe.Name)
-			require.Equal(t, "bar", versionedResource.Properties.Recipe.Parameters["foo"])
-		} else {
-			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db", *versionedResource.Properties.Resource)
+		require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", *versionedResource.Properties.GetMongoDatabaseProperties().Application)
+		require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", *versionedResource.Properties.GetMongoDatabaseProperties().Environment)
+		switch v := versionedResource.Properties.(type) {
+		case *ResourceMongoDatabaseProperties:
+			require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db", *v.Resource)
+			require.Equal(t, "testAccount1.mongo.cosmos.azure.com", *v.Host)
+			require.Equal(t, int32(10255), *v.Port)
+		case *RecipeMongoDatabaseProperties:
+			require.Equal(t, "testAccount1.mongo.cosmos.azure.com", *v.Host)
+			require.Equal(t, int32(10255), *v.Port)
+			require.Equal(t, "cosmosdb", *v.Recipe.Name)
+			require.Equal(t, "bar", v.Recipe.Parameters["foo"])
+		case *ValuesMongoDatabaseProperties:
+			require.Equal(t, "testAccount1.mongo.cosmos.azure.com", *v.Host)
+			require.Equal(t, int32(10255), *v.Port)
+			require.Equal(t, "AzureCosmosAccount", v.Status.OutputResources[0]["LocalID"])
+			require.Equal(t, "azure", v.Status.OutputResources[0]["Provider"])
 		}
 	}
 }
 
-func TestMongoDatabaseResponse_ConvertDataModelToVersioned(t *testing.T) {
-	// arrange
-	rawPayload := loadTestData("mongodatabaseresponseresourcedatamodel.json")
-	resource := &datamodel.MongoDatabase{}
-	err := json.Unmarshal(rawPayload, resource)
-	require.NoError(t, err)
-
-	// act
-	versionedResource := &MongoDatabaseResource{}
-	err = versionedResource.ConvertFrom(resource)
-
-	// assert
-	require.NoError(t, err)
-	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Link/mongoDatabases/mongo0", *versionedResource.ID)
-	require.Equal(t, "mongo0", *versionedResource.Name)
-	require.Equal(t, "Applications.Link/mongoDatabases", resource.Type)
-	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication", *versionedResource.Properties.Application)
-	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0", *versionedResource.Properties.Environment)
-	require.Equal(t, "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db", *versionedResource.Properties.Resource)
-	require.Equal(t, "testAccount1.mongo.cosmos.azure.com", *versionedResource.Properties.Host)
-	require.Equal(t, int32(10255), *versionedResource.Properties.Port)
-	require.Equal(t, "AzureCosmosAccount", versionedResource.Properties.Status.OutputResources[0]["LocalID"])
-	require.Equal(t, "azure", versionedResource.Properties.Status.OutputResources[0]["Provider"])
-}
-
 func TestMongoDatabase_ConvertFromValidation(t *testing.T) {
 	validationTests := []struct {
 		src conv.DataModelInterface
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource-invalid.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource-invalid.json
index 0a5524fa5..ecb8ef6a0 100644
--- a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource-invalid.json
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource-invalid.json
@@ -3,6 +3,7 @@
     "name": "mongo0",
     "type": "Applications.Link/mongoDatabases",
     "properties": {
+        "mode": "resource",
         "resource": 12345
     }
 }
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource.json
index eb3835ec3..54c548430 100644
--- a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource.json
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource.json
@@ -14,6 +14,7 @@
         },
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "mode": "values",
         "host": "testAccount1.mongo.cosmos.azure.com",
         "port": 10255,
         "secrets": {
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource2.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource2.json
index 30a6ce145..5be1b97c1 100644
--- a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource2.json
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource2.json
@@ -5,6 +5,7 @@
     "properties": {
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "mode": "resource",
         "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db",
         "host": "testAccount1.mongo.cosmos.azure.com",
         "port": 10255
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode.json
new file mode 100644
index 000000000..a6c3ff72f
--- /dev/null
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode.json
@@ -0,0 +1,8 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Link/mongoDatabases/mongo0",
+    "name": "mongo0",
+    "type": "Applications.Link/mongoDatabases",
+    "properties": {
+        "mode": "abc"
+    }
+}
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode2.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode2.json
new file mode 100644
index 000000000..3783c03a1
--- /dev/null
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode2.json
@@ -0,0 +1,8 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Link/mongoDatabases/mongo0",
+    "name": "mongo0",
+    "type": "Applications.Link/mongoDatabases",
+    "properties": {
+        "mode": "resource"
+    }
+}
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode3.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode3.json
new file mode 100644
index 000000000..551e91c72
--- /dev/null
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode3.json
@@ -0,0 +1,8 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Link/mongoDatabases/mongo0",
+    "name": "mongo0",
+    "type": "Applications.Link/mongoDatabases",
+    "properties": {
+        "mode": "recipe"
+    }
+}
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode4.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode4.json
new file mode 100644
index 000000000..521ab82af
--- /dev/null
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_invalidmode4.json
@@ -0,0 +1,8 @@
+{
+    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Link/mongoDatabases/mongo0",
+    "name": "mongo0",
+    "type": "Applications.Link/mongoDatabases",
+    "properties": {
+        "mode": "values"
+    }
+}
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_recipe.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_recipe.json
index 0addee4cd..3d64b3318 100644
--- a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_recipe.json
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresource_recipe.json
@@ -5,13 +5,14 @@
     "properties": {
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
-        "host": "testAccount1.mongo.cosmos.azure.com",
-        "port": 10255,
+        "mode": "recipe",
         "recipe": {
             "name": "cosmosdb",
             "parameters":{
               "foo":"bar"
             }
-        }
+        },
+        "host": "testAccount1.mongo.cosmos.azure.com",
+        "port": 10255
     }
 }
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel.json
index 0e4c71d15..6246ddb40 100644
--- a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel.json
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel.json
@@ -25,6 +25,7 @@
         },
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
+        "mode": "values",
         "host": "testAccount1.mongo.cosmos.azure.com",
         "port": 10255,
         "secrets": {
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel2.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel2.json
index f74d94d75..9f294c40b 100644
--- a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel2.json
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel2.json
@@ -16,6 +16,7 @@
     "properties": {
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
+        "mode": "resource",
         "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db",
         "host": "testAccount1.mongo.cosmos.azure.com",
         "port": 10255
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel_recipe.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel_recipe.json
index b155af1ae..24872fd45 100644
--- a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel_recipe.json
+++ b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresourcedatamodel_recipe.json
@@ -16,13 +16,14 @@
     "properties": {
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
-        "host": "testAccount1.mongo.cosmos.azure.com",
-        "port": 10255,
+        "mode": "recipe",
         "recipe": {
             "name": "cosmosdb",
             "parameters":{
               "foo":"bar"
             }
-          }
+          },
+        "host": "testAccount1.mongo.cosmos.azure.com",
+        "port": 10255
     }
 }
diff --git a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresponseresourcedatamodel.json b/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresponseresourcedatamodel.json
deleted file mode 100644
index f9bfe4ba3..000000000
--- a/pkg/linkrp/api/v20220315privatepreview/testdata/mongodatabaseresponseresourcedatamodel.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Link/mongoDatabases/mongo0",
-    "name": "mongo0",
-    "type": "Applications.Link/mongoDatabases",
-    "systemData": {
-        "createdBy": "fakeid@live.com",
-        "createdByType": "User",
-        "createdAt": "2021-09-24T19:09:54.2403864Z",
-        "lastModifiedBy": "fakeid@live.com",
-        "lastModifiedByType": "User",
-        "lastModifiedAt": "2021-09-24T20:09:54.2403864Z"
-    },
-    "tags": {
-        "env": "dev"
-    },
-    "properties": {
-        "status": {
-            "outputResources": [{
-              "LocalID": "AzureCosmosAccount",
-              "ResourceType": {
-                "Type": "azure.cosmosdb.mongo",
-                "Provider": "azure"
-              }
-            }]
-        },
-        "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
-        "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
-        "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db",
-        "host": "testAccount1.mongo.cosmos.azure.com",
-        "port": 10255
-    }
-}
diff --git a/pkg/linkrp/datamodel/converter/mongodatabase_converter_test.go b/pkg/linkrp/datamodel/converter/mongodatabase_converter_test.go
index 8569cec85..897d9e508 100644
--- a/pkg/linkrp/datamodel/converter/mongodatabase_converter_test.go
+++ b/pkg/linkrp/datamodel/converter/mongodatabase_converter_test.go
@@ -100,42 +100,6 @@ func TestMongoDatabaseDataModelFromVersioned(t *testing.T) {
 	}
 }
 
-func TestMongoDatabaseResponseDataModelToVersioned(t *testing.T) {
-	testset := []struct {
-		dataModelFile string
-		apiVersion    string
-		apiModelType  interface{}
-		err           error
-	}{
-		{
-			"../../api/v20220315privatepreview/testdata/mongodatabaseresponseresourcedatamodel.json",
-			"2022-03-15-privatepreview",
-			&v20220315privatepreview.MongoDatabaseResponseResource{},
-			nil,
-		},
-		{
-			"",
-			"unsupported",
-			nil,
-			v1.ErrUnsupportedAPIVersion,
-		},
-	}
-
-	for _, tc := range testset {
-		t.Run(tc.apiVersion, func(t *testing.T) {
-			c := loadTestData(tc.dataModelFile)
-			dm := &datamodel.MongoDatabaseResponse{}
-			_ = json.Unmarshal(c, dm)
-			am, err := MongoDatabaseResponseDataModelToVersioned(dm, tc.apiVersion)
-			if tc.err != nil {
-				require.ErrorAs(t, tc.err, &err)
-			} else {
-				require.NoError(t, err)
-				require.IsType(t, tc.apiModelType, am)
-			}
-		})
-	}
-}
 func TestMongoDatabaseSecretsDataModelToVersioned(t *testing.T) {
 	testset := []struct {
 		dataModelFile string
diff --git a/pkg/linkrp/frontend/controller/mongodatabases/createorupdatemongodatabase_test.go b/pkg/linkrp/frontend/controller/mongodatabases/createorupdatemongodatabase_test.go
index 3b2e6576c..27e4188f8 100644
--- a/pkg/linkrp/frontend/controller/mongodatabases/createorupdatemongodatabase_test.go
+++ b/pkg/linkrp/frontend/controller/mongodatabases/createorupdatemongodatabase_test.go
@@ -99,7 +99,7 @@ func TestCreateOrUpdateMongoDatabase_20220315PrivatePreview(t *testing.T) {
 			require.Equal(t, testcase.expectedStatusCode, w.Result().StatusCode)
 
 			if !testcase.shouldFail {
-				actualOutput := &v20220315privatepreview.MongoDatabaseResponseResource{}
+				actualOutput := &v20220315privatepreview.MongoDatabaseResource{}
 				_ = json.Unmarshal(w.Body.Bytes(), actualOutput)
 				require.Equal(t, expectedOutput, actualOutput)
 
@@ -178,7 +178,7 @@ func TestCreateOrUpdateMongoDatabase_20220315PrivatePreview(t *testing.T) {
 			require.Equal(t, testcase.expectedStatusCode, w.Result().StatusCode)
 
 			if !testcase.shouldFail {
-				actualOutput := &v20220315privatepreview.MongoDatabaseResponseResource{}
+				actualOutput := &v20220315privatepreview.MongoDatabaseResource{}
 				_ = json.Unmarshal(w.Body.Bytes(), actualOutput)
 				require.Equal(t, expectedOutput, actualOutput)
 
diff --git a/pkg/linkrp/frontend/controller/mongodatabases/getmongodatabase_test.go b/pkg/linkrp/frontend/controller/mongodatabases/getmongodatabase_test.go
index 23847d33b..8b8ed65d4 100644
--- a/pkg/linkrp/frontend/controller/mongodatabases/getmongodatabase_test.go
+++ b/pkg/linkrp/frontend/controller/mongodatabases/getmongodatabase_test.go
@@ -82,7 +82,7 @@ func TestGetMongoDatabase_20220315PrivatePreview(t *testing.T) {
 		_ = resp.Apply(ctx, w, req)
 		require.Equal(t, 200, w.Result().StatusCode)
 
-		actualOutput := &v20220315privatepreview.MongoDatabaseResponseResource{}
+		actualOutput := &v20220315privatepreview.MongoDatabaseResource{}
 		_ = json.Unmarshal(w.Body.Bytes(), actualOutput)
 
 		require.Equal(t, expectedOutput, actualOutput)
diff --git a/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_datamodel.json b/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_datamodel.json
index 8fe58e667..1f11501e4 100644
--- a/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_datamodel.json
+++ b/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_datamodel.json
@@ -25,6 +25,7 @@
         "provisioningState": "Succeeded",
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "mode": "resource",
         "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db",
         "host": "testAccount1.mongo.cosmos.azure.com",
         "port": 10255,
diff --git a/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_input.json b/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_input.json
index 8bddb1b4b..5fe51dd8f 100644
--- a/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_input.json
+++ b/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_input.json
@@ -3,6 +3,7 @@
     "properties": {
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "mode": "resource",
         "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db",
         "host": "testAccount1.mongo.cosmos.azure.com",
         "port": 10255,
diff --git a/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_input_diff_app.json b/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_input_diff_app.json
index 4e89f19d0..7baea960c 100644
--- a/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_input_diff_app.json
+++ b/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_input_diff_app.json
@@ -3,6 +3,7 @@
     "properties": {
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/invalid",
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "mode": "resource",
         "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db",
         "host": "testAccount1.mongo.cosmos.azure.com",
         "port": 10255,
diff --git a/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_output.json b/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_output.json
index 91ae8aa23..da707619e 100644
--- a/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_output.json
+++ b/pkg/linkrp/frontend/controller/mongodatabases/testdata/20220315privatepreview_output.json
@@ -12,14 +12,10 @@
         },
         "application": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/testApplication",
         "environment": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/environments/env0",
+        "mode": "resource",
         "resource": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Microsoft.DocumentDB/databaseAccounts/testAccount/mongodbDatabases/db",
         "host": "testAccount1.mongo.cosmos.azure.com",
         "port": 10255,
-        "secrets": {
-          "username": "testUser",
-          "password": "testPassword",
-          "connectionString": "mongodb://testUser:testPassword@testAccount1.mongo.cosmos.azure.com:10255"
-        },
         "provisioningState": "Succeeded",
         "database": "db"
     },
diff --git a/pkg/linkrp/frontend/controller/mongodatabases/v20220315privatepreview_test.go b/pkg/linkrp/frontend/controller/mongodatabases/v20220315privatepreview_test.go
index ee72c6bfc..fdd783522 100644
--- a/pkg/linkrp/frontend/controller/mongodatabases/v20220315privatepreview_test.go
+++ b/pkg/linkrp/frontend/controller/mongodatabases/v20220315privatepreview_test.go
@@ -31,7 +31,7 @@ func getTestModels20220315privatepreview() (input *v20220315privatepreview.Mongo
 	return input, dataModel, output
 }
 
-func getTestModelsForGetAndListApis20220315privatepreview() (input *v20220315privatepreview.MongoDatabaseResource, dataModel *datamodel.MongoDatabase, output *v20220315privatepreview.MongoDatabaseResponseResource) {
+func getTestModelsForGetAndListApis20220315privatepreview() (input *v20220315privatepreview.MongoDatabaseResource, dataModel *datamodel.MongoDatabase, output *v20220315privatepreview.MongoDatabaseResource) {
 	rawInput := radiustesting.ReadFixture("20220315privatepreview_input.json")
 	input = &v20220315privatepreview.MongoDatabaseResource{}
 	_ = json.Unmarshal(rawInput, input)
@@ -41,7 +41,7 @@ func getTestModelsForGetAndListApis20220315privatepreview() (input *v20220315pri
 	_ = json.Unmarshal(rawDataModel, dataModel)
 
 	rawExpectedOutput := radiustesting.ReadFixture("20220315privatepreview_output.json")
-	output = &v20220315privatepreview.MongoDatabaseResponseResource{}
+	output = &v20220315privatepreview.MongoDatabaseResource{}
 	_ = json.Unmarshal(rawExpectedOutput, output)
 
 	return input, dataModel, output
diff --git a/pkg/linkrp/frontend/deployment/deploymentprocessor_test.go b/pkg/linkrp/frontend/deployment/deploymentprocessor_test.go
index dff3c7dec..6630c8e54 100644
--- a/pkg/linkrp/frontend/deployment/deploymentprocessor_test.go
+++ b/pkg/linkrp/frontend/deployment/deploymentprocessor_test.go
@@ -73,11 +73,9 @@ func buildInputResourceMongo(mode string) (testResource datamodel.MongoDatabase)
 			},
 		},
 		Properties: datamodel.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Application: applicationID,
-					Environment: envID,
-				},
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: applicationID,
+				Environment: envID,
 			},
 		},
 	}
@@ -396,10 +394,8 @@ func Test_Render(t *testing.T) {
 				},
 			},
 			Properties: datamodel.MongoDatabaseProperties{
-				MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-					BasicResourceProperties: rp.BasicResourceProperties{
-						Environment: "invalid-id",
-					},
+				BasicResourceProperties: rp.BasicResourceProperties{
+					Environment: "invalid-id",
 				},
 			},
 		}
@@ -435,11 +431,11 @@ func Test_Render(t *testing.T) {
 				},
 			},
 			Properties: datamodel.MongoDatabaseProperties{
-				MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-					BasicResourceProperties: rp.BasicResourceProperties{
-						Application: applicationID,
-						Environment: envID,
-					},
+				BasicResourceProperties: rp.BasicResourceProperties{
+					Application: applicationID,
+					Environment: envID,
+				},
+				MongoDatabaseResourceProperties: datamodel.MongoDatabaseResourceProperties{
 					Resource: cosmosMongoID,
 				},
 			},
@@ -460,10 +456,8 @@ func Test_Render(t *testing.T) {
 				},
 			},
 			Properties: datamodel.MongoDatabaseProperties{
-				MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-					BasicResourceProperties: rp.BasicResourceProperties{
-						Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/env/test-env",
-					},
+				BasicResourceProperties: rp.BasicResourceProperties{
+					Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/env/test-env",
 				},
 			},
 		}
diff --git a/pkg/linkrp/renderers/mongodatabases/renderer_test.go b/pkg/linkrp/renderers/mongodatabases/renderer_test.go
index 41ca9a358..bc76dbf47 100644
--- a/pkg/linkrp/renderers/mongodatabases/renderer_test.go
+++ b/pkg/linkrp/renderers/mongodatabases/renderer_test.go
@@ -43,11 +43,12 @@ func Test_Render_Success(t *testing.T) {
 			},
 		},
 		Properties: datamodel.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
-					Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
-				},
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
+				Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
+			},
+			Mode: datamodel.LinkModeResource,
+			MongoDatabaseResourceProperties: datamodel.MongoDatabaseResourceProperties{
 				Resource: "/subscriptions/test-sub/resourceGroups/test-group/providers/Microsoft.DocumentDB/databaseAccounts/test-account/mongodbDatabases/test-database",
 			},
 		},
@@ -119,11 +120,14 @@ func Test_Render_UserSpecifiedSecrets(t *testing.T) {
 			},
 		},
 		Properties: datamodel.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
-					Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
-				},
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
+				Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
+			},
+			Mode: datamodel.LinkModeValues,
+			MongoDatabaseValuesProperties: datamodel.MongoDatabaseValuesProperties{
+				Host: "testAccount1.mongo.cosmos.azure.com",
+				Port: 1234,
 			},
 			Secrets: datamodel.MongoDatabaseSecrets{
 				Username:         userName,
@@ -152,33 +156,6 @@ func Test_Render_UserSpecifiedSecrets(t *testing.T) {
 	require.Equal(t, expectedSecretValues, output.SecretValues)
 }
 
-func Test_Render_NoResourceSpecified(t *testing.T) {
-	ctx := context.Background()
-	renderer := Renderer{}
-
-	mongoDBResource := datamodel.MongoDatabase{
-		BaseResource: v1.BaseResource{
-			TrackedResource: v1.TrackedResource{
-				ID:   "/subscriptions/testSub/resourceGroups/testGroup/providers/Applications.Link/mongoDatabases/mongo0",
-				Name: "mongo0",
-				Type: "Applications.Link/mongoDatabases",
-			},
-		},
-		Properties: datamodel.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
-					Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
-				},
-			},
-		},
-	}
-
-	output, err := renderer.Render(ctx, &mongoDBResource, renderers.RenderOptions{})
-	require.NoError(t, err)
-	require.Equal(t, 0, len(output.Resources))
-}
-
 func Test_Render_InvalidResourceModel(t *testing.T) {
 	ctx := context.Background()
 	renderer := Renderer{}
@@ -216,11 +193,12 @@ func Test_Render_InvalidSourceResourceIdentifier(t *testing.T) {
 			},
 		},
 		Properties: datamodel.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
-					Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
-				},
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
+				Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
+			},
+			Mode: datamodel.LinkModeResource,
+			MongoDatabaseResourceProperties: datamodel.MongoDatabaseResourceProperties{
 				Resource: "//subscriptions/test-sub/resourceGroups/test-group/providers/Microsoft.DocumentDB/databaseAccounts/test-account/mongodbDatabases/test-database",
 			},
 		},
@@ -245,11 +223,12 @@ func Test_Render_InvalidResourceType(t *testing.T) {
 			},
 		},
 		Properties: datamodel.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
-					Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
-				},
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
+				Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
+			},
+			Mode: datamodel.LinkModeResource,
+			MongoDatabaseResourceProperties: datamodel.MongoDatabaseResourceProperties{
 				Resource: "/subscriptions/test-sub/resourceGroups/test-group/providers/Microsoft.SomethingElse/databaseAccounts/test-account/mongodbDatabases/test-database",
 			},
 		},
@@ -274,11 +253,12 @@ func Test_Render_InvalidApplicationID(t *testing.T) {
 			},
 		},
 		Properties: datamodel.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Application: "invalid-app-id",
-					Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
-				},
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: "invalid-app-id",
+				Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
+			},
+			Mode: datamodel.LinkModeResource,
+			MongoDatabaseResourceProperties: datamodel.MongoDatabaseResourceProperties{
 				Resource: "/subscriptions/test-sub/resourceGroups/test-group/Microsoft.DocumentDB/databaseAccounts/test-account/mongodbDatabases/test-database",
 			},
 		},
@@ -290,6 +270,65 @@ func Test_Render_InvalidApplicationID(t *testing.T) {
 	require.Equal(t, "failed to parse application from the property: 'invalid-app-id' is not a valid resource id", err.(*conv.ErrClientRP).Message)
 }
 
+func Test_Render_NoResourceSpecified(t *testing.T) {
+	ctx := context.Background()
+	renderer := Renderer{}
+
+	mongoDBResource := datamodel.MongoDatabase{
+		BaseResource: v1.BaseResource{
+			TrackedResource: v1.TrackedResource{
+				ID:   "/subscriptions/testSub/resourceGroups/testGroup/providers/Applications.Link/mongoDatabases/mongo0",
+				Name: "mongo0",
+				Type: "Applications.Link/mongoDatabases",
+			},
+		},
+		Properties: datamodel.MongoDatabaseProperties{
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
+				Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
+			},
+			Mode: datamodel.LinkModeResource,
+		},
+	}
+	expectedErr := &conv.ErrClientRP{
+		Code:    "BadRequest",
+		Message: "the 'resource' field must be a valid resource id",
+	}
+
+	_, err := renderer.Render(ctx, &mongoDBResource, renderers.RenderOptions{})
+	require.Equal(t, expectedErr, err)
+}
+
+func Test_Render_InvalidMode(t *testing.T) {
+	ctx := context.Background()
+	renderer := Renderer{}
+
+	mongoDBResource := datamodel.MongoDatabase{
+		BaseResource: v1.BaseResource{
+			TrackedResource: v1.TrackedResource{
+				ID:   "/subscriptions/testSub/resourceGroups/testGroup/providers/Applications.Link/mongoDatabases/mongo0",
+				Name: "mongo0",
+				Type: "Applications.Link/mongoDatabases",
+			},
+		},
+		Properties: datamodel.MongoDatabaseProperties{
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
+				Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
+			},
+			Mode: "abcd",
+			MongoDatabaseResourceProperties: datamodel.MongoDatabaseResourceProperties{
+				Resource: "/subscriptions/test-sub/resourceGroups/test-group/Microsoft.DocumentDB/databaseAccounts/test-account/mongodbDatabases/test-database",
+			},
+		},
+	}
+
+	_, err := renderer.Render(ctx, &mongoDBResource, renderers.RenderOptions{})
+	require.Error(t, err)
+	require.Equal(t, v1.CodeInvalid, err.(*conv.ErrClientRP).Code)
+	require.Equal(t, "unsupported mode abcd", err.(*conv.ErrClientRP).Message)
+}
+
 func Test_Render_Recipe_Success(t *testing.T) {
 	ctx := context.Background()
 	renderer := Renderer{}
@@ -303,11 +342,12 @@ func Test_Render_Recipe_Success(t *testing.T) {
 			},
 		},
 		Properties: datamodel.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
-					Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
-				},
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
+				Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
+			},
+			Mode: datamodel.LinkModeRecipe,
+			MongoDatabaseRecipeProperties: datamodel.MongoDatabaseRecipeProperties{
 				Recipe: datamodel.LinkRecipe{
 					Name: "mongodb",
 				},
@@ -385,11 +425,12 @@ func Test_Render_Recipe_InvalidLinkType(t *testing.T) {
 			},
 		},
 		Properties: datamodel.MongoDatabaseProperties{
-			MongoDatabaseResponseProperties: datamodel.MongoDatabaseResponseProperties{
-				BasicResourceProperties: rp.BasicResourceProperties{
-					Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
-					Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
-				},
+			BasicResourceProperties: rp.BasicResourceProperties{
+				Application: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
+				Environment: "/subscriptions/test-sub/resourceGroups/test-group/providers/Applications.Core/environments/env0",
+			},
+			Mode: datamodel.LinkModeRecipe,
+			MongoDatabaseRecipeProperties: datamodel.MongoDatabaseRecipeProperties{
 				Recipe: datamodel.LinkRecipe{
 					Name: "mongodb",
 				},
diff --git a/test/functional/corerp/resources/testdata/corerp-resources-mongodb-recipe.bicep b/test/functional/corerp/resources/testdata/corerp-resources-mongodb-recipe.bicep
index 3308487c5..b50b6bf55 100644
--- a/test/functional/corerp/resources/testdata/corerp-resources-mongodb-recipe.bicep
+++ b/test/functional/corerp/resources/testdata/corerp-resources-mongodb-recipe.bicep
@@ -67,6 +67,7 @@ resource recipedb 'Applications.Link/mongoDatabases@2022-03-15-privatepreview' =
   properties: {
     application: app.id
     environment: env.id
+    mode: 'recipe'
     recipe: {
       name: 'mongodb'
     }
diff --git a/test/functional/corerp/resources/testdata/corerp-resources-mongodb-user-secrets.bicep b/test/functional/corerp/resources/testdata/corerp-resources-mongodb-user-secrets.bicep
index ff40248b2..f377130d3 100644
--- a/test/functional/corerp/resources/testdata/corerp-resources-mongodb-user-secrets.bicep
+++ b/test/functional/corerp/resources/testdata/corerp-resources-mongodb-user-secrets.bicep
@@ -75,6 +75,9 @@ resource mongo 'Applications.Link/mongoDatabases@2022-03-15-privatepreview' = {
   properties: {
     application: app.id
     environment: environment
+    mode: 'values'
+    host: mongoRoute.properties.hostname
+    port: mongoRoute.properties.port
     secrets: {
       connectionString: 'mongodb://${username}:${password}@${mongoRoute.properties.hostname}:${mongoRoute.properties.port}'
       username: username
diff --git a/test/functional/corerp/resources/testdata/corerp-resources-mongodb.bicep b/test/functional/corerp/resources/testdata/corerp-resources-mongodb.bicep
index 77f5601cd..5bb0311a0 100644
--- a/test/functional/corerp/resources/testdata/corerp-resources-mongodb.bicep
+++ b/test/functional/corerp/resources/testdata/corerp-resources-mongodb.bicep
@@ -41,6 +41,7 @@ resource db 'Applications.Link/mongoDatabases@2022-03-15-privatepreview' = {
   properties: {
     application: app.id
     environment: environment
+    mode: 'resource'
     resource: account::dbinner.id
   }
 }