diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/containerregistry.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/containerregistry.json new file mode 100644 index 000000000000..711ad07777ff --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/containerregistry.json @@ -0,0 +1,2676 @@ +{ + "swagger": "2.0", + "info": { + "title": "Azure Container Registry", + "description": "Metadata API definition for the Azure Container Registry runtime", + "version": "2019-08-15-preview" + }, + "x-ms-parameterized-host": { + "hostTemplate": "{url}", + "useSchemePrefix": false, + "positionInOperation": "first", + "parameters": [ + { + "$ref": "#/parameters/Url" + } + ] + }, + "securityDefinitions": { + "registry_auth": { + "type": "basic" + }, + "registry_oauth2": { + "type": "apiKey", + "in": "header", + "name": "Authorization" + } + }, + "security": [ + { + "registry_auth": [], + "registry_oauth2": [] + } + ], + "tags": [ + { + "name": "v2", + "description": "Root API" + }, + { + "name": "Manifest", + "description": "Everything about manifests" + }, + { + "name": "Tag", + "description": "Everything about tags" + }, + { + "name": "Layer", + "description": "Everything about layers" + }, + { + "name": "Repository", + "description": "Everything about repository" + }, + { + "name": "AcrRepository", + "description": "ACR APIs related to repositories" + }, + { + "name": "AcrManifest", + "description": "ACR APIs related to manifests" + }, + { + "name": "AcrTag", + "description": "ACR APIs related to tags" + } + ], + "schemes": [ + "https" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v2/": { + "get": { + "tags": [ + "v2" + ], + "description": "Tells whether this Docker Registry instance supports Docker Registry HTTP API v2", + "operationId": "V2Support_Check", + "x-ms-examples": { + "Check Docker Registry V2 Support": { + "$ref": "./examples/GetDockerRegistryV2Support.json" + } + }, + "responses": { + "200": { + "description": "Successful response. API v2 supported" + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/v2/{name}/manifests/{reference}": { + "get": { + "tags": [ + "Manifest" + ], + "description": "Get the manifest identified by `name` and `reference` where `reference` can be a tag or digest.", + "x-ms-examples": { + "Get manifest": { + "$ref": "./examples/GetManifest.json" + } + }, + "operationId": "Manifests_Get", + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/ImageReference" + }, + { + "name": "accept", + "in": "header", + "description": "Accept header string delimited by comma. For example, application/vnd.docker.distribution.manifest.v2+json", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns the requested manifest file in a larger combined group", + "schema": { + "$ref": "#/definitions/ManifestWrapper" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "put": { + "tags": [ + "Manifest" + ], + "x-ms-long-running-operation": false, + "description": "Put the manifest identified by `name` and `reference` where `reference` can be a tag or digest.", + "x-ms-examples": { + "Put manifest": { + "$ref": "./examples/CreateManifest.json" + } + }, + "consumes": [ + "application/vnd.docker.distribution.manifest.v2+json" + ], + "operationId": "Manifests_Create", + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/ImageReference" + }, + { + "$ref": "#/parameters/ManifestBody" + } + ], + "responses": { + "201": { + "description": "The manifest is updated", + "schema": {}, + "headers": { + "Docker-Content-Digest": { + "type": "string", + "description": "Identifies the docker upload uuid for the current request." + }, + "Location": { + "type": "string", + "description": "The canonical location url of the uploaded manifest." + }, + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "The length of the requested blob content." + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "delete": { + "tags": [ + "Manifest" + ], + "description": "Delete the manifest identified by `name` and `reference`. Note that a manifest can _only_ be deleted by `digest`.", + "x-ms-examples": { + "Delete manifest": { + "$ref": "./examples/DeleteManifest.json" + } + }, + "operationId": "Manifests_Delete", + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/ImageReference" + } + ], + "responses": { + "202": { + "description": "The manifest has been deleted" + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/v2/{name}/blobs/{digest}": { + "get": { + "produces": [ + "application/octet-stream" + ], + "tags": [ + "Layer" + ], + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/Digest" + } + ], + "x-ms-examples": { + "Get a blob from digest": { + "$ref": "./examples/GetBlob.json" + } + }, + "description": "Retrieve the blob from the registry identified by digest.", + "operationId": "Blob_Get", + "responses": { + "200": { + "description": "The blob identified by digest is available. The blob content will be present in the body of the response.", + "schema": { + "description": "blob binary data", + "type": "file", + "format": "file" + }, + "headers": { + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "The length of the requested blob content." + }, + "Docker-Content-Digest": { + "description": "Digest of the targeted content for the request.", + "type": "string" + } + } + }, + "307": { + "description": "The blob identified by digest is available at the provided location.", + "headers": { + "Location": { + "type": "string", + "description": "The location where the layer should be accessible." + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "head": { + "tags": [ + "Layer" + ], + "description": "Same as GET, except only the headers are returned.", + "operationId": "Blob_Check", + "x-ms-examples": { + "Head for a Blob Chunk": { + "$ref": "./examples/CheckBlob.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/Digest" + } + ], + "responses": { + "200": { + "description": "The blob identified by digest is available. The blob content will be present in the body of the response.", + "headers": { + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "The length of the requested blob content." + }, + "Docker-Content-Digest": { + "description": "Digest of the targeted content for the request.", + "type": "string" + } + } + }, + "307": { + "description": "The blob identified by digest is available at the provided location.", + "headers": { + "Location": { + "type": "string", + "description": "The location where the layer should be accessible." + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "delete": { + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/Digest" + } + ], + "description": "Removes an already uploaded blob.", + "produces": [ + "application/octet-stream" + ], + "tags": [ + "Layer" + ], + "operationId": "Blob_Delete", + "x-ms-examples": { + "Delete a blob": { + "$ref": "./examples/DeleteBlob.json" + } + }, + "responses": { + "202": { + "description": "The blob identified by digest is available. The blob content will be present in the body of the response.", + "schema": { + "description": "blob binary data", + "type": "file", + "format": "file" + }, + "headers": { + "Docker-Content-Digest": { + "description": "Digest of the targeted content for the request.", + "type": "string" + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/v2/{name}/blobs/uploads/": { + "post": { + "tags": [ + "Layer" + ], + "description": "Mount a blob identified by the `mount` parameter from another repository.", + "operationId": "Blob_Mount", + "x-ms-examples": { + "Mount a blob from repository": { + "$ref": "./examples/MountBlob.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/From" + }, + { + "$ref": "#/parameters/Mount" + } + ], + "responses": { + "201": { + "description": "The blob has been created in the registry and is available at the provided location.", + "headers": { + "Location": { + "description": "Provided location for blob", + "type": "string" + }, + "Docker-Upload-UUID": { + "description": "Identifies the docker upload uuid for the current request.", + "type": "string" + }, + "Docker-Content-Digest": { + "description": "Digest of the targeted content for the request.", + "type": "string" + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/{nextBlobUuidLink}": { + "get": { + "tags": [ + "Layer" + ], + "parameters": [ + { + "$ref": "#/parameters/NextLink" + } + ], + "description": "Retrieve status of upload identified by uuid. The primary purpose of this endpoint is to resolve the current status of a resumable upload.", + "operationId": "Blob_GetStatus", + "x-ms-examples": { + "Get blob status": { + "$ref": "./examples/GetBlobStatus.json" + } + }, + "responses": { + "204": { + "description": "The upload is known and in progress. The last received offset is available in the Range header.", + "headers": { + "Range": { + "description": "Range indicating the current progress of the upload.", + "type": "string" + }, + "Docker-Upload-UUID": { + "description": "Identifies the docker upload uuid for the current request.", + "type": "string" + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "patch": { + "security": [ + { + "registry_auth": [], + "registry_oauth2": [] + } + ], + "tags": [ + "Layer" + ], + "description": "Upload a stream of data without completing the upload.", + "operationId": "Blob_Upload", + "x-ms-examples": { + "Upload Blob": { + "$ref": "./examples/UploadBlob.json" + } + }, + "consumes": [ + "application/octet-stream" + ], + "parameters": [ + { + "$ref": "#/parameters/RawData" + }, + { + "$ref": "#/parameters/NextLink" + } + ], + "responses": { + "202": { + "description": "The stream of data has been accepted and the current progress is available in the range header. The updated upload location is available in the Location header.", + "headers": { + "Location": { + "description": "Provided location for blob", + "type": "string" + }, + "Range": { + "description": "Range indicating the current progress of the upload.", + "type": "string" + }, + "Docker-Upload-UUID": { + "description": "Identifies the docker upload uuid for the current request.", + "type": "string" + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "put": { + "tags": [ + "Layer" + ], + "consumes": [ + "application/octet-stream" + ], + "description": "Complete the upload, providing all the data in the body, if necessary. A request without a body will just complete the upload with previously uploaded content.", + "operationId": "Blob_EndUpload", + "x-ms-examples": { + "End a blob upload": { + "$ref": "./examples/EndBlobUpload.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/BlobQueryDigest" + }, + { + "$ref": "#/parameters/RawDataOptional" + }, + { + "$ref": "#/parameters/NextLink" + } + ], + "responses": { + "201": { + "description": "The upload has been completed and accepted by the registry.", + "headers": { + "Location": { + "description": "Provided location for blob", + "type": "string" + }, + "Range": { + "description": "Range indicating the current progress of the upload.", + "type": "string" + }, + "Docker-Content-Digest": { + "description": "Digest of the targeted content for the request.", + "type": "string" + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "delete": { + "tags": [ + "Layer" + ], + "parameters": [ + { + "$ref": "#/parameters/NextLink" + } + ], + "description": "Cancel outstanding upload processes, releasing associated resources. If this is not called, the unfinished uploads will eventually timeout.", + "operationId": "Blob_CancelUpload", + "x-ms-examples": { + "End a blob upload": { + "$ref": "./examples/CancelBlobUpload.json" + } + }, + "responses": { + "204": { + "description": "The upload has been successfully deleted." + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/acr/v1/_catalog": { + "get": { + "tags": [ + "AcrRepository" + ], + "description": "List repositories", + "operationId": "Repository_GetList", + "x-ms-examples": { + "Get repositories in a registry": { + "$ref": "./examples/GetRepositoryList.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/QueryLast" + }, + { + "$ref": "#/parameters/QueryNum" + } + ], + "responses": { + "200": { + "headers": { + "Link": { + "description": "next paginated result", + "type": "string" + } + }, + "description": "Returns a list of repositories", + "schema": { + "$ref": "#/definitions/Repositories" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/acr/v1/{name}": { + "get": { + "tags": [ + "AcrRepository", + "AcrMetadata" + ], + "description": "Get repository attributes", + "operationId": "Repository_GetAttributes", + "x-ms-examples": { + "Get details of repository": { + "$ref": "./examples/GetRepositoryAttributes.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + } + ], + "responses": { + "200": { + "description": "Returns a list of attributes", + "schema": { + "$ref": "#/definitions/RepositoryAttributes" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "delete": { + "tags": [ + "AcrRepository" + ], + "description": "Delete the repository identified by `name`", + "operationId": "Repository_Delete", + "x-ms-examples": { + "Delete a repository": { + "$ref": "./examples/DeleteAcrRepository.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + } + ], + "responses": { + "202": { + "description": "The repository is deleted", + "schema": { + "$ref": "#/definitions/DeletedRepository" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "patch": { + "tags": [ + "AcrRepository", + "AcrMetadata" + ], + "description": "Update the attribute identified by `name` where `reference` is the name of the repository.", + "operationId": "Repository_UpdateAttributes", + "x-ms-examples": { + "Update repository attributes": { + "$ref": "./examples/UpdateRepositoryAttributes.json" + } + }, + "consumes": [ + "application/json" + ], + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "name": "value", + "in": "body", + "description": "Repository attribute value", + "required": false, + "schema": { + "$ref": "#/definitions/ChangeableAttributes" + } + } + ], + "responses": { + "200": { + "description": "The attributes are updated" + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/acr/v1/{name}/_tags": { + "get": { + "tags": [ + "AcrTag", + "AcrMetadata" + ], + "description": "List tags of a repository", + "operationId": "Tag_GetList", + "x-ms-examples": { + "Get tags of a repository": { + "$ref": "./examples/GetTagList.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/QueryLast" + }, + { + "$ref": "#/parameters/QueryNum" + }, + { + "$ref": "#/parameters/QueryOrderBy" + }, + { + "$ref": "#/parameters/QueryDigest" + } + ], + "responses": { + "200": { + "description": "Tag details of a repository", + "schema": { + "$ref": "#/definitions/TagList" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/acr/v1/{name}/_tags/{reference}": { + "get": { + "tags": [ + "AcrTag", + "AcrMetadata" + ], + "description": "Get tag attributes by tag", + "operationId": "Tag_GetAttributes", + "x-ms-examples": { + "Get tag attributes": { + "$ref": "./examples/GetTagAttributes.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/TagReference" + } + ], + "responses": { + "200": { + "description": "Tag attributes", + "schema": { + "$ref": "#/definitions/TagAttributes" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "patch": { + "tags": [ + "AcrTag", + "AcrMetadata" + ], + "description": "Update tag attributes", + "operationId": "Tag_UpdateAttributes", + "consumes": [ + "application/json" + ], + "x-ms-examples": { + "Update attributes of a tag": { + "$ref": "./examples/UpdateTagAttributes.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/TagReference" + }, + { + "$ref": "#/parameters/RepoValue" + } + ], + "responses": { + "200": { + "description": "The attributes are updated" + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "delete": { + "tags": [ + "AcrTag", + "AcrMetadata" + ], + "description": "Delete tag", + "operationId": "Tag_Delete", + "consumes": [ + "application/json" + ], + "x-ms-examples": { + "Delete a tag": { + "$ref": "./examples/DeleteTag.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/TagReference" + } + ], + "responses": { + "202": { + "description": "The tag is deleted" + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/acr/v1/{name}/_manifests": { + "get": { + "tags": [ + "AcrManifest", + "AcrMetadata" + ], + "description": "List manifests of a repository", + "operationId": "Manifests_GetList", + "x-ms-examples": { + "Get list of available manifests": { + "$ref": "./examples/GetManifestList.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/QueryLast" + }, + { + "$ref": "#/parameters/QueryNum" + }, + { + "$ref": "#/parameters/QueryOrderBy" + } + ], + "responses": { + "200": { + "description": "Returns a list of manifests", + "schema": { + "$ref": "#/definitions/AcrManifests" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/acr/v1/{name}/_manifests/{reference}": { + "get": { + "tags": [ + "AcrManifest", + "AcrMetadata" + ], + "description": "Get manifest attributes", + "operationId": "Manifests_GetAttributes", + "x-ms-examples": { + "Get manifest attributes": { + "$ref": "./examples/GetManifestAttributes.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/ImageReference" + } + ], + "responses": { + "200": { + "description": "List of attributes", + "schema": { + "$ref": "#/definitions/ManifestAttributes" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "patch": { + "tags": [ + "AcrManifest", + "AcrMetadata" + ], + "description": "Update attributes of a manifest", + "operationId": "Manifests_UpdateAttributes", + "consumes": [ + "application/json" + ], + "x-ms-examples": { + "Update attributes of a manifest": { + "$ref": "./examples/UpdateManifestAttributes.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/ImageReference" + }, + { + "$ref": "#/parameters/RepoValue" + } + ], + "responses": { + "200": { + "description": "The attributes are updated" + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/oauth2/exchange": { + "post": { + "tags": [ + "AcrToken", + "RefreshToken" + ], + "description": "Exchange AAD tokens for an ACR refresh Token", + "operationId": "RefreshTokens_GetFromExchange", + "consumes": [ + "application/x-www-form-urlencoded" + ], + "parameters": [ + { + "$ref": "#/parameters/Grant_type" + }, + { + "$ref": "#/parameters/Service" + }, + { + "$ref": "#/parameters/Tenant" + }, + { + "$ref": "#/parameters/RefreshToken" + }, + { + "$ref": "#/parameters/AccessToken" + } + ], + "responses": { + "200": { + "description": "Refresh token acquired", + "schema": { + "$ref": "#/definitions/RefreshToken" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + }, + "security": [], + "x-ms-examples": { + "Exchange AAD Token for ACR Refresh": { + "$ref": "./examples/PostRefreshToken.json" + } + } + } + }, + "/oauth2/token": { + "post": { + "tags": [ + "AcrToken", + "AccessToken" + ], + "description": "Exchange ACR Refresh token for an ACR Access Token", + "operationId": "AccessTokens_Get", + "consumes": [ + "application/x-www-form-urlencoded" + ], + "parameters": [ + { + "name": "grant_type", + "in": "formData", + "description": "Grant type is expected to be refresh_token", + "required": true, + "type": "string", + "enum": [ + "refresh_token" + ] + }, + { + "$ref": "#/parameters/Service" + }, + { + "name": "scope", + "in": "formData", + "required": true, + "description": "Which is expected to be a valid scope, and can be specified more than once for multiple scope requests. You obtained this from the Www-Authenticate response header from the challenge.", + "type": "string" + }, + { + "name": "refresh_token", + "in": "formData", + "required": true, + "description": "Must be a valid ACR refresh token", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Access token acquired", + "schema": { + "$ref": "#/definitions/AccessToken" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + }, + "security": [], + "x-ms-examples": { + "Get Access Token with Refresh Token": { + "$ref": "./examples/PostAccessToken.json" + } + } + }, + "get": { + "tags": [ + "AcrToken", + "AccessToken", + "userLogin" + ], + "description": "Exchange Username, Password and Scope an ACR Access Token", + "operationId": "AccessTokens_GetFromLogin", + "parameters": [ + { + "name": "service", + "in": "query", + "required": true, + "description": "Indicates the name of your Azure container registry.", + "type": "string" + }, + { + "name": "scope", + "in": "query", + "required": true, + "description": "Expected to be a valid scope, and can be specified more than once for multiple scope requests. You can obtain this from the Www-Authenticate response header from the challenge.", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Access token acquired", + "schema": { + "$ref": "#/definitions/AccessToken" + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + }, + "security": [ + { + "registry_auth": [] + } + ], + "x-ms-examples": { + "Get Access Token with username and password": { + "$ref": "./examples/GetAccessToken.json" + } + } + } + } + }, + "x-ms-paths": { + "/v2/{name}/blobs/uploads/?mode=resumable": { + "post": { + "tags": [ + "Layer" + ], + "description": "Initiate a resumable blob upload with an empty request body.", + "operationId": "Blob_StartUpload", + "x-ms-examples": { + "Start a blob upload": { + "$ref": "./examples/StartBlobUpload.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ImageName" + } + ], + "responses": { + "202": { + "description": "The upload has been created. The Location header must be used to complete the upload. The response should be identical to a GET request on the contents of the returned Location header.", + "headers": { + "Location": { + "description": "Provided location for blob", + "type": "string" + }, + "Range": { + "description": "Range indicating the current progress of the upload.", + "type": "string" + }, + "Docker-Upload-UUID": { + "description": "Identifies the docker upload uuid for the current request.", + "type": "string" + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + }, + "/v2/{name}/blobs/{digest}?mode=chunk": { + "get": { + "produces": [ + "application/octet-stream" + ], + "tags": [ + "Layer" + ], + "description": "Retrieve the blob from the registry identified by `digest`. This endpoint may also support RFC7233 compliant range requests. Support can be detected by issuing a HEAD request. If the header `Accept-Range: bytes` is returned, range requests can be used to fetch partial content.", + "operationId": "Blob_GetChunk", + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/Digest" + }, + { + "$ref": "#/parameters/Range" + } + ], + "x-ms-examples": { + "Get a blob Chunk": { + "$ref": "./examples/GetBlobChunk.json" + } + }, + "responses": { + "206": { + "description": "The blob identified by digest is available. The specified chunk of blob content will be present in the body of the request.", + "schema": { + "description": "blob binary data", + "type": "file", + "format": "file" + }, + "headers": { + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "The length of the requested blob content." + }, + "Content-Range": { + "type": "string", + "description": "Content range of blob chunk." + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + }, + "head": { + "tags": [ + "Layer" + ], + "parameters": [ + { + "$ref": "#/parameters/ImageName" + }, + { + "$ref": "#/parameters/Digest" + }, + { + "$ref": "#/parameters/Range" + } + ], + "description": "Same as GET, except only the headers are returned.", + "operationId": "Blob_CheckChunk", + "x-ms-examples": { + "Get headers without blob Chunk": { + "$ref": "./examples/CheckBlobChunk.json" + } + }, + "responses": { + "200": { + "description": "The blob identified by digest is available. The specified chunk of blob content will be present in the body of the request.", + "headers": { + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "The length of the requested blob content." + }, + "Content-Range": { + "type": "string", + "description": "Content range of blob chunk." + } + } + }, + "default": { + "description": "ACR error response describing why the operation failed.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + } + } + } + }, + "definitions": { + "RepositoryAttributes": { + "type": "object", + "description": "Repository attributes", + "properties": { + "registry": { + "type": "string", + "description": "Registry name" + }, + "imageName": { + "type": "string", + "description": "Image name" + }, + "createdTime": { + "type": "string", + "description": "Image created time" + }, + "lastUpdateTime": { + "type": "string", + "description": "Image last update time" + }, + "manifestCount": { + "type": "integer", + "description": "Number of the manifests" + }, + "tagCount": { + "type": "integer", + "description": "Number of the tags" + }, + "changeableAttributes": { + "description": "Changeable attributes", + "$ref": "#/definitions/ChangeableAttributes" + } + }, + "example": { + "registry": "registryname.azurecr.io", + "changeableAttributes": { + "readEnabled": true, + "listEnabled": true, + "deleteEnabled": true, + "writeEnabled": true + }, + "imageName": "imageName", + "createdTime": "2018-09-07T16:30:46.6583219Z", + "tagCount": 6, + "manifestCount": 2, + "lastUpdateTime": "2018-09-07T16:30:46.6583219Z" + } + }, + "TagList": { + "description": "List of tag details", + "properties": { + "registry": { + "type": "string", + "description": "Registry name" + }, + "imageName": { + "type": "string", + "description": "Image name" + }, + "tags": { + "type": "array", + "description": "List of tag attribute details", + "items": { + "$ref": "#/definitions/TagAttributesBase" + } + } + }, + "example": { + "registry": "registry", + "imageName": "imageName", + "tags": [ + { + "changeableAttributes": { + "readEnabled": true, + "listEnabled": true, + "deleteEnabled": true, + "writeEnabled": true + }, + "name": "name", + "digest": "digest", + "createdTime": "createdTime", + "signed": true, + "lastUpdateTime": "lastUpdateTime" + }, + { + "changeableAttributes": { + "readEnabled": true, + "listEnabled": true, + "deleteEnabled": true, + "writeEnabled": true + }, + "name": "name", + "digest": "digest", + "createdTime": "createdTime", + "signed": true, + "lastUpdateTime": "lastUpdateTime" + } + ] + } + }, + "TagAttributes": { + "description": "Tag attributes", + "properties": { + "registry": { + "type": "string", + "description": "Registry name" + }, + "imageName": { + "type": "string", + "description": "Image name" + }, + "tag": { + "x-ms-client-name": "attributes", + "description": "List of tag attribute details", + "$ref": "#/definitions/TagAttributesBase" + } + }, + "example": { + "registry": "registry", + "imageName": "imageName", + "tag": { + "changeableAttributes": { + "readEnabled": true, + "listEnabled": true, + "deleteEnabled": true, + "writeEnabled": true + }, + "name": "name", + "digest": "digest", + "createdTime": "createdTime", + "signed": true, + "lastUpdateTime": "lastUpdateTime" + } + } + }, + "TagAttributesBase": { + "description": "Tag attribute details", + "properties": { + "name": { + "type": "string", + "description": "Tag name" + }, + "digest": { + "type": "string", + "description": "Tag digest" + }, + "createdTime": { + "type": "string", + "description": "Tag created time" + }, + "lastUpdateTime": { + "type": "string", + "description": "Tag last update time" + }, + "signed": { + "type": "boolean", + "description": "Is signed" + }, + "changeableAttributes": { + "$ref": "#/definitions/ChangeableAttributes", + "description": "Changeable attributes" + } + }, + "example": { + "changeableAttributes": { + "readEnabled": true, + "listEnabled": true, + "deleteEnabled": true, + "writeEnabled": true + }, + "name": "tagname", + "digest": "sha256:0873c923e00e0fd2ba78041bfb64a105e1ecb7678916d1f7776311e45bf5634b", + "createdTime": "2018-08-10T17:28:44.1082945Z", + "signed": true, + "lastUpdateTime": "2018-08-10T17:28:44.1082945Z" + } + }, + "AcrManifests": { + "description": "Manifest attributes", + "properties": { + "registry": { + "type": "string", + "description": "Registry name" + }, + "imageName": { + "type": "string", + "description": "Image name" + }, + "manifests": { + "x-ms-client-name": "ManifestsAttributes", + "type": "array", + "description": "List of manifests", + "items": { + "$ref": "#/definitions/ManifestAttributesBase", + "description": "Manifest details" + } + } + }, + "example": { + "registry": "registry", + "imageName": "imageName", + "manifests": [ + { + "changeableAttributes": { + "quarantineDetails": "quarantineDetails", + "readEnabled": true, + "quarantineState": "quarantineState", + "listEnabled": true, + "deleteEnabled": true, + "writeEnabled": true + }, + "os": "os", + "digest": "digest", + "imageSize": 2401606, + "createdTime": "createdTime", + "mediaType": "mediaType", + "configMediaType": "configMediaType", + "lastUpdateTime": "lastUpdateTime", + "architecture": "architecture", + "tags": [ + "tags", + "tags" + ] + }, + { + "changeableAttributes": { + "quarantineDetails": "quarantineDetails", + "readEnabled": true, + "quarantineState": "quarantineState", + "listEnabled": true, + "deleteEnabled": true, + "writeEnabled": true + }, + "os": "os", + "digest": "digest", + "imageSize": 2401606, + "createdTime": "createdTime", + "mediaType": "mediaType", + "configMediaType": "configMediaType", + "lastUpdateTime": "lastUpdateTime", + "architecture": "architecture", + "tags": [ + "tags", + "tags" + ] + } + ] + } + }, + "ManifestAttributes": { + "description": "Manifest attributes details", + "properties": { + "registry": { + "description": "Registry name", + "type": "string" + }, + "imageName": { + "description": "Image name", + "type": "string" + }, + "manifest": { + "x-ms-client-name": "attributes", + "description": "Manifest attributes", + "$ref": "#/definitions/ManifestAttributesBase" + } + }, + "example": { + "registry": "acrapi.azurecr-test.io", + "imageName": "nanoserver", + "manifest": { + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "imageSize": 2401606, + "createdTime": "2018-09-06T06:17:20.9983915Z", + "lastUpdateTime": "2018-09-06T06:17:20.9983915Z", + "architecture": "amd64", + "os": "windows", + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "configMediaType": "application/vnd.docker.container.image.v1+json", + "tags": [ + "4.7.2-20180905-nanoserver-1803" + ], + "changeableAttributes": { + "deleteEnabled": true, + "writeEnabled": true, + "readEnabled": true, + "listEnabled": true + } + } + } + }, + "ManifestAttributesBase": { + "type": "object", + "description": "Manifest details", + "properties": { + "digest": { + "type": "string", + "description": "Manifest" + }, + "imageSize": { + "type": "integer", + "format": "int64", + "description": "Image size" + }, + "createdTime": { + "type": "string", + "description": "Created time" + }, + "lastUpdateTime": { + "type": "string", + "description": "Last update time" + }, + "architecture": { + "type": "string", + "description": "CPU architecture" + }, + "os": { + "type": "string", + "description": "Operating system" + }, + "mediaType": { + "type": "string", + "description": "Media type" + }, + "configMediaType": { + "type": "string", + "description": "Config blob media type" + }, + "tags": { + "type": "array", + "description": "List of tags", + "items": { + "type": "string", + "description": "Tag name" + } + }, + "changeableAttributes": { + "$ref": "#/definitions/ChangeableAttributes", + "description": "Changeable attributes" + } + }, + "example": { + "changeableAttributes": { + "readEnabled": true, + "listEnabled": true, + "deleteEnabled": true, + "writeEnabled": true + }, + "os": "os", + "digest": "digest", + "imageSize": 2401606, + "createdTime": "createdTime", + "mediaType": "mediaType", + "configMediaType": "configMediaType", + "lastUpdateTime": "lastUpdateTime", + "architecture": "architecture", + "tags": [ + "tags", + "tags" + ] + } + }, + "RefreshToken": { + "type": "object", + "properties": { + "refresh_token": { + "description": "The refresh token to be used for generating access tokens", + "type": "string" + } + } + }, + "AccessToken": { + "type": "object", + "properties": { + "access_token": { + "description": "The access token for performing authenticated requests", + "type": "string" + } + } + }, + "AcrErrors": { + "description": "Acr error response describing why the operation failed", + "properties": { + "errors": { + "type": "array", + "description": "Array of detailed error", + "items": { + "$ref": "#/definitions/AcrErrorInfo" + } + } + } + }, + "RepositoryTags": { + "description": "Result of the request to list tags of the image", + "properties": { + "name": { + "type": "string", + "description": "Name of the image" + }, + "tags": { + "type": "array", + "description": "List of tags", + "items": { + "type": "string", + "description": "Tag name" + } + } + }, + "example": { + "name": "name", + "tags": [ + "tags", + "tags" + ] + } + }, + "ImageSignature": { + "description": "Signature of a signed manifest", + "properties": { + "header": { + "description": "A JSON web signature", + "$ref": "#/definitions/JWK" + }, + "signature": { + "type": "string", + "description": "A signature for the image manifest, signed by a libtrust private key" + }, + "protected": { + "type": "string", + "description": "The signed protected header" + } + }, + "example": { + "header": { + "jwk": { + "crv": "P-256", + "kid": "WGXM:EYWQ:DA53:LQUP:BCWG:5RDG:S3ZM:ETH7:VMQS:WWKZ:EWDG:V74Q", + "kty": "EC", + "x": "OxZ9k5BVjPZ7jb3BmBD4X0d8MVPJqfF4NeSe8reoqnY", + "y": "EaCqTe4-vYwhk7qU6Bs2-AeLGOVtCe_-IY2MdE0Vfyc" + }, + "alg": "ES256" + }, + "signature": "p73LfotMGD8nNXz2g9YX2XtSllb4GI5-b3vjqP5N0nkv8QXg-r5z_omGiVbOZE2BYG1X_4TIN23l1KSEqsXxOg", + "protected": "eyJmb3JtYXRMZW5ndGgiOjI5ODYsImZvcm1hdFRhaWwiOiJDbjAiLCJ0aW1lIjoiMjAxOC0wOS0yMFQyMzo0MTo1MloifQ" + } + }, + "JWK": { + "description": "A JSON web signature", + "properties": { + "jwk": { + "$ref": "#/definitions/JWKHeader" + }, + "alg": { + "type": "string", + "description": "The algorithm used to sign or encrypt the JWT" + } + } + }, + "JWKHeader": { + "description": "JSON web key parameter", + "properties": { + "crv": { + "type": "string", + "description": "crv value" + }, + "kid": { + "type": "string", + "description": "kid value" + }, + "kty": { + "type": "string", + "description": "kty value" + }, + "x": { + "type": "string", + "description": "x value" + }, + "y": { + "type": "string", + "description": "y value" + } + } + }, + "History": { + "description": "A list of unstructured historical data for v1 compatibility", + "properties": { + "v1Compatibility": { + "type": "string", + "description": "The raw v1 compatibility information" + } + }, + "example": { + "v1Compatibility": "v1 compatibility info" + } + }, + "Repositories": { + "description": "List of repositories", + "properties": { + "repositories": { + "type": "array", + "x-ms-client-name": "Names", + "description": "Repository names", + "items": { + "type": "string" + } + } + }, + "example": { + "repositories": [ + "production/alpine", + "testing/alpine" + ] + } + }, + "DeletedRepository": { + "description": "Deleted repository", + "properties": { + "manifestsDeleted": { + "type": "array", + "description": "SHA of the deleted image", + "items": { + "type": "string" + } + }, + "tagsDeleted": { + "type": "array", + "description": "Tag of the deleted image", + "items": { + "type": "string" + } + } + } + }, + "AcrErrorInfo": { + "description": "Error information", + "properties": { + "code": { + "description": "Error code", + "type": "string" + }, + "message": { + "type": "string", + "description": "Error message" + }, + "detail": { + "type": "object", + "description": "Error details" + } + } + }, + "FsLayer": { + "description": "Image layer information", + "properties": { + "blobSum": { + "type": "string", + "description": "SHA of an image layer" + } + }, + "example": { + "blobSum": "sha256:1f7d468f830cb0ed4beb8edc9438f18096e8c682e56a35242f60e6c61b718b30" + } + }, + "Descriptor": { + "description": "Docker V2 image layer descriptor including config and layers", + "properties": { + "mediaType": { + "type": "string", + "description": "Layer media type" + }, + "size": { + "type": "integer", + "format": "int64", + "description": "Layer size" + }, + "digest": { + "type": "string", + "description": "Layer digest" + }, + "urls": { + "type": "array", + "description": "Specifies a list of URIs from which this object may be downloaded.", + "items": { + "description": "Must conform to RFC 3986. Entries should use the http and https schemes, as defined in RFC 7230.", + "type": "string" + } + }, + "annotations": { + "$ref": "#/definitions/Annotations" + } + }, + "example": { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 2107098, + "digest": "sha256:5d20c808ce198565ff70b3ed23a991dd49afac45dece63474b27ce6ed036adc6" + } + }, + "ChangeableAttributes": { + "properties": { + "deleteEnabled": { + "type": "boolean", + "description": "Delete enabled" + }, + "writeEnabled": { + "type": "boolean", + "description": "Write enabled" + }, + "listEnabled": { + "type": "boolean", + "description": "List enabled" + }, + "readEnabled": { + "type": "boolean", + "description": "Read enabled" + } + }, + "example": { + "readEnabled": true, + "listEnabled": true, + "deleteEnabled": true, + "writeEnabled": true + } + }, + "TagAttributes_tag": { + "description": "Tag", + "properties": { + "signatureRecord": { + "description": "SignatureRecord value", + "type": "string" + } + }, + "example": { + "signatureRecord": "signatureRecord" + } + }, + "ManifestAttributes_manifest_references": { + "description": "Manifest attributes details", + "properties": { + "digest": { + "type": "string", + "description": "Manifest digest" + }, + "architecture": { + "type": "string", + "description": "CPU architecture" + }, + "os": { + "type": "string", + "description": "Operating system" + } + }, + "example": { + "os": "os", + "digest": "digest", + "architecture": "architecture" + } + }, + "ManifestAttributes_manifest": { + "description": "List of manifest attributes", + "properties": { + "references": { + "type": "array", + "description": "List of manifest attributes details", + "items": { + "$ref": "#/definitions/ManifestAttributes_manifest_references", + "description": "Manifest attributes details" + } + }, + "quarantineTag": { + "type": "string", + "description": "Quarantine tag name" + } + }, + "example": { + "quarantineTag": "quarantineTag", + "references": [ + { + "os": "os", + "digest": "digest", + "architecture": "architecture" + }, + { + "os": "os", + "digest": "digest", + "architecture": "architecture" + } + ] + } + }, + "ManifestChangeableAttributes": { + "description": "Changeable attributes", + "properties": { + "deleteEnabled": { + "type": "boolean", + "description": "Delete enabled" + }, + "writeEnabled": { + "type": "boolean", + "description": "Write enabled" + }, + "listEnabled": { + "type": "boolean", + "description": "List enabled" + }, + "readEnabled": { + "type": "boolean", + "description": "Read enabled" + }, + "quarantineState": { + "type": "string", + "description": "Quarantine state" + }, + "quarantineDetails": { + "type": "string", + "description": "Quarantine details" + } + }, + "example": { + "quarantineDetails": "quarantineDetails", + "readEnabled": true, + "quarantineState": "quarantineState", + "listEnabled": true, + "deleteEnabled": true, + "writeEnabled": true + } + }, + "Manifest": { + "description": "Returns the requested manifest file", + "properties": { + "schemaVersion": { + "type": "integer", + "description": "Schema version" + } + } + }, + "ManifestWrapper": { + "description": "Returns the requested manifest file", + "properties": { + "mediaType": { + "type": "string", + "description": "Media type for this Manifest" + }, + "manifests": { + "type": "array", + "description": "(ManifestList, OCIIndex) List of V2 image layer information", + "items": { + "$ref": "#/definitions/ManifestListAttributes" + } + }, + "config": { + "description": "(V2, OCI) Image config descriptor", + "$ref": "#/definitions/Descriptor" + }, + "layers": { + "type": "array", + "description": "(V2, OCI) List of V2 image layer information", + "items": { + "$ref": "#/definitions/Descriptor" + } + }, + "annotations": { + "description": "(OCI, OCIIndex) Additional metadata", + "$ref": "#/definitions/Annotations" + }, + "architecture": { + "type": "string", + "description": "(V1) CPU architecture" + }, + "name": { + "type": "string", + "description": "(V1) Image name" + }, + "tag": { + "type": "string", + "description": "(V1) Image tag" + }, + "fsLayers": { + "type": "array", + "description": "(V1) List of layer information", + "items": { + "$ref": "#/definitions/FsLayer" + } + }, + "history": { + "type": "array", + "description": "(V1) Image history", + "items": { + "$ref": "#/definitions/History" + } + }, + "signatures": { + "type": "array", + "description": "(V1) Image signature", + "items": { + "$ref": "#/definitions/ImageSignature" + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/Manifest" + } + ] + }, + "ManifestList": { + "x-ms-discriminator-value": "application/vnd.docker.distribution.manifest.list.v2+json", + "description": "Returns the requested Docker multi-arch-manifest file", + "properties": { + "mediaType": { + "type": "string", + "description": "Media type for this Manifest" + }, + "manifests": { + "type": "array", + "description": "List of V2 image layer information", + "items": { + "$ref": "#/definitions/ManifestListAttributes" + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/Manifest" + } + ] + }, + "ManifestListAttributes": { + "properties": { + "mediaType": { + "type": "string", + "description": "The MIME type of the referenced object. This will generally be application/vnd.docker.image.manifest.v2+json, but it could also be application/vnd.docker.image.manifest.v1+json" + }, + "size": { + "type": "integer", + "format": "int64", + "description": "The size in bytes of the object" + }, + "digest": { + "type": "string", + "description": "The digest of the content, as defined by the Registry V2 HTTP API Specification" + }, + "platform": { + "$ref": "#/definitions/Platform" + } + } + }, + "Platform": { + "description": "The platform object describes the platform which the image in the manifest runs on. A full list of valid operating system and architecture values are listed in the Go language documentation for $GOOS and $GOARCH", + "properties": { + "architecture": { + "type": "string", + "description": "Specifies the CPU architecture, for example amd64 or ppc64le." + }, + "os": { + "type": "string", + "description": "The os field specifies the operating system, for example linux or windows." + }, + "os.version": { + "type": "string", + "description": "The optional os.version field specifies the operating system version, for example 10.0.10586." + }, + "os.features": { + "type": "array", + "description": "The optional os.features field specifies an array of strings, each listing a required OS feature (for example on Windows win32k", + "items": { + "type": "string" + } + }, + "variant": { + "type": "string", + "description": "The optional variant field specifies a variant of the CPU, for example armv6l to specify a particular CPU variant of the ARM CPU." + }, + "features": { + "type": "array", + "description": "The optional features field specifies an array of strings, each listing a required CPU feature (for example sse4 or aes", + "items": { + "type": "string" + } + } + } + }, + "V2Manifest": { + "x-ms-discriminator-value": "application/vnd.docker.distribution.manifest.v2+json", + "description": "Returns the requested Docker V2 Manifest file", + "properties": { + "mediaType": { + "type": "string", + "description": "Media type for this Manifest" + }, + "config": { + "description": "V2 image config descriptor", + "$ref": "#/definitions/Descriptor" + }, + "layers": { + "type": "array", + "description": "List of V2 image layer information", + "items": { + "$ref": "#/definitions/Descriptor" + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/Manifest" + } + ], + "example": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 1512, + "digest": "sha256:6d1ef012b5674ad8a127ecfa9b5e6f5178d171b90ee462846974177fd9bdd39f" + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 2107098, + "digest": "sha256:5d20c808ce198565ff70b3ed23a991dd49afac45dece63474b27ce6ed036adc6" + } + ] + } + }, + "OCIManifest": { + "x-ms-discriminator-value": "application/vnd.oci.image.manifest.v1+json", + "description": "Returns the requested OCI Manifest file", + "properties": { + "config": { + "description": "V2 image config descriptor", + "$ref": "#/definitions/Descriptor" + }, + "layers": { + "type": "array", + "description": "List of V2 image layer information", + "items": { + "$ref": "#/definitions/Descriptor" + } + }, + "annotations": { + "$ref": "#/definitions/Annotations" + } + }, + "allOf": [ + { + "$ref": "#/definitions/Manifest" + } + ] + }, + "OCIIndex": { + "x-ms-discriminator-value": "application/vnd.oci.image.index.v1+json", + "description": "Returns the requested OCI index file", + "properties": { + "manifests": { + "type": "array", + "description": "List of OCI image layer information", + "items": { + "$ref": "#/definitions/ManifestListAttributes" + } + }, + "annotations": { + "$ref": "#/definitions/Annotations" + } + }, + "allOf": [ + { + "$ref": "#/definitions/Manifest" + } + ] + }, + "V1Manifest": { + "description": "Returns the requested V1 manifest file", + "x-ms-discriminator-value": "application/vnd.oci.image.manifest.v1+json", + "properties": { + "architecture": { + "type": "string", + "description": "CPU architecture" + }, + "name": { + "type": "string", + "description": "Image name" + }, + "tag": { + "type": "string", + "description": "Image tag" + }, + "fsLayers": { + "type": "array", + "description": "List of layer information", + "items": { + "$ref": "#/definitions/FsLayer" + } + }, + "history": { + "type": "array", + "description": "Image history", + "items": { + "$ref": "#/definitions/History" + } + }, + "signatures": { + "type": "array", + "description": "Image signature", + "items": { + "$ref": "#/definitions/ImageSignature" + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/Manifest" + } + ] + }, + "Annotations": { + "description": "Additional information provided through arbitrary metadata.", + "type": "object", + "x-nullable": true, + "additionalProperties": { + "type": "object" + }, + "properties": { + "org.opencontainers.image.created": { + "description": "Date and time on which the image was built (string, date-time as defined by https://tools.ietf.org/html/rfc3339#section-5.6)", + "type": "string", + "format": "date-time", + "x-ms-client-name": "Created" + }, + "org.opencontainers.image.authors": { + "description": "Contact details of the people or organization responsible for the image.", + "type": "string", + "x-ms-client-name": "Authors" + }, + "org.opencontainers.image.url": { + "description": "URL to find more information on the image.", + "type": "string", + "x-ms-client-name": "Url" + }, + "org.opencontainers.image.documentation": { + "description": "URL to get documentation on the image.", + "type": "string", + "x-ms-client-name": "Documentation" + }, + "org.opencontainers.image.source": { + "description": "URL to get source code for building the image.", + "type": "string", + "x-ms-client-name": "Source" + }, + "org.opencontainers.image.version": { + "description": "Version of the packaged software. The version MAY match a label or tag in the source code repository, may also be Semantic versioning-compatible", + "type": "string", + "x-ms-client-name": "Version" + }, + "org.opencontainers.image.revision": { + "description": "Source control revision identifier for the packaged software.", + "type": "string", + "x-ms-client-name": "Revision" + }, + "org.opencontainers.image.vendor": { + "description": "Name of the distributing entity, organization or individual.", + "type": "string", + "x-ms-client-name": "Vendor" + }, + "org.opencontainers.image.licenses": { + "description": "License(s) under which contained software is distributed as an SPDX License Expression.", + "type": "string", + "x-ms-client-name": "Licenses" + }, + "org.opencontainers.image.ref.name": { + "description": "Name of the reference for a target.", + "type": "string", + "x-ms-client-name": "Name" + }, + "org.opencontainers.image.title": { + "description": "Human-readable title of the image", + "type": "string", + "x-ms-client-name": "Title" + }, + "org.opencontainers.image.description": { + "description": "Human-readable description of the software packaged in the image", + "type": "string", + "x-ms-client-name": "Description" + } + } + } + }, + "parameters": { + "Url": { + "name": "url", + "x-ms-client-name": "loginUri", + "description": "Registry login URL", + "required": true, + "type": "string", + "in": "path", + "x-ms-skip-url-encoding": true, + "x-ms-parameter-location": "client" + }, + "ImageReference": { + "name": "reference", + "in": "path", + "description": "A tag or a digest, pointing to a specific image", + "required": true, + "type": "string", + "x-ms-parameter-location": "method" + }, + "ManifestReference": { + "name": "reference", + "in": "path", + "description": "Tag or digest of the target manifest", + "required": true, + "type": "string", + "x-ms-parameter-location": "method" + }, + "TagReference": { + "name": "reference", + "in": "path", + "description": "Tag name", + "required": true, + "type": "string", + "x-ms-parameter-location": "method" + }, + "Digest": { + "name": "digest", + "in": "path", + "description": "Digest of a BLOB", + "required": true, + "type": "string", + "x-ms-parameter-location": "method" + }, + "BlobQueryDigest": { + "name": "digest", + "in": "query", + "description": "Digest of a BLOB", + "required": true, + "type": "string", + "x-ms-parameter-location": "method" + }, + "RepoValue": { + "name": "value", + "in": "body", + "description": "Repository attribute value", + "required": false, + "schema": { + "$ref": "#/definitions/ChangeableAttributes" + }, + "x-ms-parameter-location": "method" + }, + "QueryOrderBy": { + "name": "orderby", + "in": "query", + "description": "orderby query parameter", + "required": false, + "type": "string", + "x-ms-parameter-location": "method" + }, + "QueryNum": { + "name": "n", + "in": "query", + "description": "query parameter for max number of items", + "required": false, + "type": "integer", + "x-ms-parameter-location": "method" + }, + "QueryLast": { + "name": "last", + "in": "query", + "description": "Query parameter for the last item in previous query. Result set will include values lexically after last.", + "required": false, + "type": "string", + "x-ms-parameter-location": "method" + }, + "QueryDigest": { + "name": "digest", + "in": "query", + "description": "filter by digest", + "required": false, + "type": "string", + "x-ms-parameter-location": "method" + }, + "Grant_type": { + "name": "grant_type", + "description": "Can take a value of access_token_refresh_token, or access_token, or refresh_token", + "type": "string", + "in": "formData", + "required": true, + "enum": [ + "access_token_refresh_token", + "access_token", + "refresh_token" + ], + "x-ms-parameter-location": "method" + }, + "Service": { + "name": "service", + "in": "formData", + "required": true, + "description": "Indicates the name of your Azure container registry.", + "type": "string", + "x-ms-parameter-location": "method" + }, + "Tenant": { + "name": "tenant", + "in": "formData", + "required": false, + "description": "AAD tenant associated to the AAD credentials.", + "type": "string", + "x-ms-parameter-location": "method" + }, + "Scope": { + "name": "scope", + "in": "formData", + "required": true, + "description": "Which is expected to be a valid scope, and can be specified more than once for multiple scope requests. You can obtain this from the Www-Authenticate response header from the challenge.", + "type": "string", + "x-ms-parameter-location": "method" + }, + "RefreshToken": { + "name": "refresh_token", + "in": "formData", + "required": false, + "description": "AAD refresh token, mandatory when grant_type is access_token_refresh_token or refresh_token", + "type": "string", + "x-ms-parameter-location": "method" + }, + "AccessToken": { + "name": "access_token", + "in": "formData", + "required": false, + "description": "AAD access token, mandatory when grant_type is access_token_refresh_token or access_token.", + "type": "string", + "x-ms-parameter-location": "method" + }, + "ImageName": { + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string", + "x-ms-parameter-location": "method" + }, + "ManifestBody": { + "description": "Manifest body, can take v1 or v2 values depending on accept header", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Manifest" + }, + "x-ms-parameter-location": "method" + }, + "RawData": { + "name": "value", + "description": "Raw data of blob", + "in": "body", + "schema": { + "type": "object", + "format": "file" + }, + "required": true, + "x-ms-parameter-location": "method" + }, + "RawDataOptional": { + "name": "value", + "description": "Optional raw data of blob", + "in": "body", + "schema": { + "type": "object", + "format": "file" + }, + "required": false, + "x-ms-parameter-location": "method" + }, + "From": { + "name": "from", + "type": "string", + "in": "query", + "description": "Name of the source repository.", + "required": true, + "x-ms-parameter-location": "method" + }, + "Mount": { + "name": "mount", + "description": "Digest of blob to mount from the source repository.", + "type": "string", + "in": "query", + "required": true, + "x-ms-parameter-location": "method" + }, + "Uuid": { + "name": "uuid", + "description": "A uuid identifying the upload.", + "type": "string", + "in": "path", + "required": true, + "x-ms-parameter-location": "method" + }, + "Content-Range": { + "name": "Content-Range", + "in": "header", + "description": "Range of bytes identifying the desired block of content represented by the body. Start must the end offset retrieved via status check plus one. Note that this is a non-standard use of the `Content-Range` header.", + "type": "string", + "required": true, + "x-ms-parameter-location": "method" + }, + "Range": { + "name": "Range", + "type": "string", + "description": "Format : bytes=-, HTTP Range header specifying blob chunk.", + "in": "header", + "required": true, + "x-ms-parameter-location": "method" + }, + "NoUploadCache": { + "description": "Acquired from NextLink", + "name": "_nouploadcache", + "in": "query", + "type": "boolean", + "required": false, + "x-ms-parameter-location": "method" + }, + "State": { + "description": "Acquired from NextLink", + "name": "_state", + "in": "query", + "type": "string", + "required": false, + "x-ms-parameter-location": "method" + }, + "NextLink": { + "name": "nextBlobUuidLink", + "x-ms-client-name": "location", + "type": "string", + "description": "Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) )", + "in": "path", + "required": true, + "x-ms-parameter-location": "method", + "x-ms-skip-url-encoding": true + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CancelBlobUpload.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CancelBlobUpload.json new file mode 100644 index 000000000000..1a32d216e7bd --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CancelBlobUpload.json @@ -0,0 +1,9 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9" + }, + "responses": { + "204": {} + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CheckBlob.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CheckBlob.json new file mode 100644 index 000000000000..519425f52232 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CheckBlob.json @@ -0,0 +1,19 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "prod/bash", + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + }, + "responses": { + "200": { + "headers": { + "Content-Length": 5635 + } + }, + "307": { + "headers": { + "Location": "https://csharpsdktest.azurecr.io/v2/prod/bash/blobs/sha256:3131d2b2b3352091117a3abe745d01a3fed472b7327c3183602247937800e3a6" + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CheckBlobChunk.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CheckBlobChunk.json new file mode 100644 index 000000000000..49fddb0cd1b9 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CheckBlobChunk.json @@ -0,0 +1,16 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "prod/bash", + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "Range": "bytes=0-299" + }, + "responses": { + "200": { + "headers": { + "Content-Length": "300", + "Content-Range": "bytes 0-299/5635" + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CreateManifest.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CreateManifest.json new file mode 100644 index 000000000000..9009925c6027 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/CreateManifest.json @@ -0,0 +1,18 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "hello-world", + "reference": "a20190628-081044z", + "payload": "{\"schemaVersion\":2,\"mediaType\":\"application/vnd.docker.distribution.manifest.v2+json\",\"config\":{\"mediaType\":\"application/vnd.docker.container.image.v1+json\",\"size\":1512,\"digest\":\"sha256:6d1ef012b5674ad8a127ecfa9b5e6f5178d171b90ee462846974177fd9bdd39f\"},\"layers\":[{\"mediaType\":\"application/vnd.docker.image.rootfs.diff.tar.gzip\",\"size\":2107098,\"digest\":\"sha256:5d20c808ce198565ff70b3ed23a991dd49afac45dece63474b27ce6ed036adc6\"}]}" + }, + "responses": { + "201": { + "headers": { + "Docker-Content-Digest": "sha256:15685c48490175b7dde62e6bfcfb54d9420c6495ea6404776e2facca3da93cd8", + "Location": "/v2/hello-world/manifests/sha256:15685c48490175b7dde62e6bfcfb54d9420c6495ea6404776e2facca3da93cd8", + "Content-Length": 0 + }, + "body": {} + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteAcrRepository.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteAcrRepository.json new file mode 100644 index 000000000000..8449e47855ec --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteAcrRepository.json @@ -0,0 +1,18 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "nanoserver" + }, + "responses": { + "202": { + "body": { + "manifestsDeleted": [ + "sha256:e31831d63f77a0a6d74ef5b16df619a50808dac842190d07ae24e8b520d159fa" + ], + "tagsDeleted": [ + "4.7.2-20180814-windowsservercore-1709" + ] + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteBlob.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteBlob.json new file mode 100644 index 000000000000..8852e49d5c19 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteBlob.json @@ -0,0 +1,12 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "prod/bash", + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + }, + "responses": { + "202": { + "body": "" + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteManifest.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteManifest.json new file mode 100644 index 000000000000..50afe0bd523e --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteManifest.json @@ -0,0 +1,10 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "alpine", + "reference": "3.7" + }, + "responses": { + "202": {} + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteTag.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteTag.json new file mode 100644 index 000000000000..fec441eeaf12 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/DeleteTag.json @@ -0,0 +1,10 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "nanoserver", + "reference": "4.7.2-20180905-nanoserver-1803" + }, + "responses": { + "202": {} + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/EndBlobUpload.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/EndBlobUpload.json new file mode 100644 index 000000000000..82f0c9c35538 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/EndBlobUpload.json @@ -0,0 +1,16 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", + "digest": "sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e", + "value": "usuallyEmpty" + }, + "responses": { + "201": { + "headers": { + "Location": "/v2/blobland/blobs/sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e", + "Docker-Content-Digest": "sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e" + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetAccessToken.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetAccessToken.json new file mode 100644 index 000000000000..416fd08ca49b --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetAccessToken.json @@ -0,0 +1,14 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "service": "someregistry.azurecr.io", + "scope": "registry:catalog:*" + }, + "responses": { + "200": { + "body": { + "access_token": "eyJ0eXAiOiJKJhbGcigdCI6IkN0ZlFaOExlLTMejlnIiwidGlkIjoiNzbmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetBlob.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetBlob.json new file mode 100644 index 000000000000..b50eee9da47c --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetBlob.json @@ -0,0 +1,20 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "prod/bash", + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + }, + "responses": { + "200": { + "body": "eyJhcmNoaXRlY3R1cmUiOiJhbWQ2NCIsImNvbmZpZyI6eyJIb3N0bmFtZSI6IiIsIkRvbWFpbm5hbWUiOiIiLCJVc2VyIjoiIiwiQXR0YWNoU3RkaW4iOmZhbHNlLCJBdHRhY2hTdGRvdXQiOmZhbHNlLCJBdHRhY2hTdGRlcnIiOmZhbHNlLCJUdHkiOmZhbHNlLCJPcGVuU3RkaW4iOmZhbHNlLCJTdGRpbk9uY2UiOmZhbHNlLCJFbnYiOlsiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCJfQkFTSF9HUEdfS0VZPTdDMDEzNUZCMDg4QUFGNkM2NkM2NTBCOUJCNTg2OUYwNjRFQTc0QUIiLCJfQkFTSF9WRVJTSU9OPTUuMCIsIl9CQVNIX1BBVENIX0xFVkVMPTAiLCJfQkFTSF9MQVRFU1RfUEFUQ0g9NyJdLCJDbWQiOlsiYmFzaCJdLCJBcmdzRXNjYXBlZCI6dHJ1ZSwiSW1hZ2UiOiJzaGEyNTY6MzhhZDJmYmM5ZjljMGE4N2RmZTBhMmIxOWJkY2E5NGJlNDVmNDY2M2Y3M2ZkMDlmZWZlZTQ5MmFmZDJjMDE0NCIsIlZvbHVtZXMiOm51bGwsIldvcmtpbmdEaXIiOiIiLCJFbnRyeXBvaW50IjpbImRvY2tlci1lbnRyeXBvaW50LnNoIl0sIk9uQnVpbGQiOm51bGwsIkxhYmVscyI6bnVsbH0sImNvbnRhaW5lciI6IjRiMDU0NmZhNDlkZjVkY2FlZDViNjYzNzE3ZjQ0MmNlZjcxYTFiOTVjMGZmYjQyYzhjNWNlNzIzMWI5MGMwMjYiLCJjb250YWluZXJfY29uZmlnIjp7Ikhvc3RuYW1lIjoiNGIwNTQ2ZmE0OWRmIiwiRG9tYWlubmFtZSI6IiIsIlVzZXIiOiIiLCJBdHRhY2hTdGRpbiI6ZmFsc2UsIkF0dGFjaFN0ZG91dCI6ZmFsc2UsIkF0dGFjaFN0ZGVyciI6ZmFsc2UsIlR0eSI6ZmFsc2UsIk9wZW5TdGRpbiI6ZmFsc2UsIlN0ZGluT25jZSI6ZmFsc2UsIkVudiI6WyJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsIl9CQVNIX0dQR19LRVk9N0MwMTM1RkIwODhBQUY2QzY2QzY1MEI5QkI1ODY5RjA2NEVBNzRBQiIsIl9CQVNIX1ZFUlNJT049NS4wIiwiX0JBU0hfUEFUQ0hfTEVWRUw9MCIsIl9CQVNIX0xBVEVTVF9QQVRDSD03Il0sIkNtZCI6WyIvYmluL3NoIiwiLWMiLCIjKG5vcCkgIiwiQ01EIFtcImJhc2hcIl0iXSwiQXJnc0VzY2FwZWQiOnRydWUsIkltYWdlIjoic2hhMjU2OjM4YWQyZmJjOWY5YzBhODdkZmUwYTJiMTliZGNhOTRiZTQ1ZjQ2NjNmNzNmZDA5ZmVmZWU0OTJhZmQyYzAxNDQiLCJWb2x1bWVzIjpudWxsLCJXb3JraW5nRGlyIjoiIiwiRW50cnlwb2ludCI6WyJkb2NrZXItZW50cnlwb2ludC5zaCJdLCJPbkJ1aWxkIjpudWxsLCJMYWJlbHMiOnt9fSwiY3JlYXRlZCI6IjIwMTktMDctMTNUMDE6MTY6MDYuNTI3NTE1OTAyWiIsImRvY2tlcl92ZXJzaW9uIjoiMTguMDYuMS1jZSIsImhpc3RvcnkiOlt7ImNyZWF0ZWQiOiIyMDE5LTA3LTExVDIyOjIwOjUyLjEzOTcwOTM1NVoiLCJjcmVhdGVkX2J5IjoiL2Jpbi9zaCAtYyAjKG5vcCkgQUREIGZpbGU6MGViNWVhMzU3NDFkMjNmZTM5Y2JhYzI0NWIzYTVkODQ4NTZlZDYzODRmNGZmMDdkNDk2MzY5ZWU2ZDk2MGJhZCBpbiAvICJ9LHsiY3JlYXRlZCI6IjIwMTktMDctMTFUMjI6MjA6NTIuMzc1Mjg2NDA0WiIsImNyZWF0ZWRfYnkiOiIvYmluL3NoIC1jICMobm9wKSAgQ01EIFtcIi9iaW4vc2hcIl0iLCJlbXB0eV9sYXllciI6dHJ1ZX0seyJjcmVhdGVkIjoiMjAxOS0wNy0xM1QwMToxNToxMy41Njc2Njk4MTJaIiwiY3JlYXRlZF9ieSI6Ii9iaW4vc2ggLWMgIyhub3ApICBFTlYgX0JBU0hfR1BHX0tFWT03QzAxMzVGQjA4OEFBRjZDNjZDNjUwQjlCQjU4NjlGMDY0RUE3NEFCIiwiZW1wdHlfbGF5ZXIiOnRydWV9LHsiY3JlYXRlZCI6IjIwMTktMDctMTNUMDE6MTU6MTMuNzQ1NjUyMDk4WiIsImNyZWF0ZWRfYnkiOiIvYmluL3NoIC1jICMobm9wKSAgRU5WIF9CQVNIX1ZFUlNJT049NS4wIiwiZW1wdHlfbGF5ZXIiOnRydWV9LHsiY3JlYXRlZCI6IjIwMTktMDctMTNUMDE6MTU6MTMuOTQwNDU1NDE5WiIsImNyZWF0ZWRfYnkiOiIvYmluL3NoIC1jICMobm9wKSAgRU5WIF9CQVNIX1BBVENIX0xFVkVMPTAiLCJlbXB0eV9sYXllciI6dHJ1ZX0seyJjcmVhdGVkIjoiMjAxOS0wNy0xM1QwMToxNToxNC4wOTkzMDAwNzVaIiwiY3JlYXRlZF9ieSI6Ii9iaW4vc2ggLWMgIyhub3ApICBFTlYgX0JBU0hfTEFURVNUX1BBVENIPTciLCJlbXB0eV9sYXllciI6dHJ1ZX0seyJjcmVhdGVkIjoiMjAxOS0wNy0xM1QwMToxNjowNS45Mjg0MjkyNjJaIiwiY3JlYXRlZF9ieSI6Ii9iaW4vc2ggLWMgc2V0IC1ldXg7IFx0XHRhcGsgYWRkIC0tbm8tY2FjaGUgLS12aXJ0dWFsIC5idWlsZC1kZXBzIFx0XHRiaXNvbiBcdFx0Y29yZXV0aWxzIFx0XHRkcGtnLWRldiBkcGtnIFx0XHRnY2MgXHRcdGdudXBnIFx0XHRsaWJjLWRldiBcdFx0bWFrZSBcdFx0bmN1cnNlcy1kZXYgXHRcdHBhdGNoIFx0XHR0YXIgXHQ7IFx0XHR2ZXJzaW9uPVwiJF9CQVNIX1ZFUlNJT05cIjsgXHRpZiBbIFwiJF9CQVNIX1BBVENIX0xFVkVMXCIgLWd0IDAgXTsgdGhlbiBcdFx0dmVyc2lvbj1cIiR2ZXJzaW9uLiRfQkFTSF9QQVRDSF9MRVZFTFwiOyBcdGZpOyBcdHdnZXQgLU8gYmFzaC50YXIuZ3ogXCJodHRwczovL2Z0cC5nbnUub3JnL2dudS9iYXNoL2Jhc2gtJHZlcnNpb24udGFyLmd6XCI7IFx0d2dldCAtTyBiYXNoLnRhci5nei5zaWcgXCJodHRwczovL2Z0cC5nbnUub3JnL2dudS9iYXNoL2Jhc2gtJHZlcnNpb24udGFyLmd6LnNpZ1wiOyBcdFx0aWYgWyBcIiRfQkFTSF9MQVRFU1RfUEFUQ0hcIiAtZ3QgXCIkX0JBU0hfUEFUQ0hfTEVWRUxcIiBdOyB0aGVuIFx0XHRta2RpciAtcCBiYXNoLXBhdGNoZXM7IFx0XHRmaXJzdD1cIiQocHJpbnRmICclMDNkJyBcIiQoKCBfQkFTSF9QQVRDSF9MRVZFTCArIDEgKSlcIilcIjsgXHRcdGxhc3Q9XCIkKHByaW50ZiAnJTAzZCcgXCIkX0JBU0hfTEFURVNUX1BBVENIXCIpXCI7IFx0XHRmb3IgcGF0Y2ggaW4gJChzZXEgLXcgXCIkZmlyc3RcIiBcIiRsYXN0XCIpOyBkbyBcdFx0XHR1cmw9XCJodHRwczovL2Z0cC5nbnUub3JnL2dudS9iYXNoL2Jhc2gtJF9CQVNIX1ZFUlNJT04tcGF0Y2hlcy9iYXNoJHtfQkFTSF9WRVJTSU9OLy8uL30tJHBhdGNoXCI7IFx0XHRcdHdnZXQgLU8gXCJiYXNoLXBhdGNoZXMvJHBhdGNoXCIgXCIkdXJsXCI7IFx0XHRcdHdnZXQgLU8gXCJiYXNoLXBhdGNoZXMvJHBhdGNoLnNpZ1wiIFwiJHVybC5zaWdcIjsgXHRcdGRvbmU7IFx0Zmk7IFx0XHRleHBvcnQgR05VUEdIT01FPVwiJChta3RlbXAgLWQpXCI7IFx0Z3BnIC0tYmF0Y2ggLS1rZXlzZXJ2ZXIgaGEucG9vbC5za3Mta2V5c2VydmVycy5uZXQgLS1yZWN2LWtleXMgXCIkX0JBU0hfR1BHX0tFWVwiOyBcdGdwZyAtLWJhdGNoIC0tdmVyaWZ5IGJhc2gudGFyLmd6LnNpZyBiYXNoLnRhci5nejsgXHRncGdjb25mIC0ta2lsbCBhbGw7IFx0cm0gYmFzaC50YXIuZ3ouc2lnOyBcdGlmIFsgLWQgYmFzaC1wYXRjaGVzIF07IHRoZW4gXHRcdGZvciBzaWcgaW4gYmFzaC1wYXRjaGVzLyouc2lnOyBkbyBcdFx0XHRwPVwiJHtzaWclLnNpZ31cIjsgXHRcdFx0Z3BnIC0tYmF0Y2ggLS12ZXJpZnkgXCIkc2lnXCIgXCIkcFwiOyBcdFx0XHRybSBcIiRzaWdcIjsgXHRcdGRvbmU7IFx0Zmk7IFx0cm0gLXJmIFwiJEdOVVBHSE9NRVwiOyBcdFx0bWtkaXIgLXAgL3Vzci9zcmMvYmFzaDsgXHR0YXIgXHRcdC0tZXh0cmFjdCBcdFx0LS1maWxlPWJhc2gudGFyLmd6IFx0XHQtLXN0cmlwLWNvbXBvbmVudHM9MSBcdFx0LS1kaXJlY3Rvcnk9L3Vzci9zcmMvYmFzaCBcdDsgXHRybSBiYXNoLnRhci5nejsgXHRcdGlmIFsgLWQgYmFzaC1wYXRjaGVzIF07IHRoZW4gXHRcdGZvciBwIGluIGJhc2gtcGF0Y2hlcy8qOyBkbyBcdFx0XHRwYXRjaCBcdFx0XHRcdC0tZGlyZWN0b3J5PS91c3Ivc3JjL2Jhc2ggXHRcdFx0XHQtLWlucHV0PVwiJChyZWFkbGluayAtZiBcIiRwXCIpXCIgXHRcdFx0XHQtLXN0cmlwPTAgXHRcdFx0OyBcdFx0XHRybSBcIiRwXCI7IFx0XHRkb25lOyBcdFx0cm1kaXIgYmFzaC1wYXRjaGVzOyBcdGZpOyBcdFx0Y2QgL3Vzci9zcmMvYmFzaDsgXHRnbnVBcmNoPVwiJChkcGtnLWFyY2hpdGVjdHVyZSAtLXF1ZXJ5IERFQl9CVUlMRF9HTlVfVFlQRSlcIjsgXHQuL2NvbmZpZ3VyZSBcdFx0LS1idWlsZD1cIiRnbnVBcmNoXCIgXHRcdC0tZW5hYmxlLXJlYWRsaW5lIFx0XHQtLXdpdGgtY3Vyc2VzIFx0XHQtLXdpdGhvdXQtYmFzaC1tYWxsb2MgXHR8fCB7IFx0XHRjYXQgXHUwMDNlXHUwMDI2MiBjb25maWcubG9nOyBcdFx0ZmFsc2U7IFx0fTsgXHRtYWtlIC1qIFwiJChucHJvYylcIjsgXHRtYWtlIGluc3RhbGw7IFx0Y2QgLzsgXHRybSAtciAvdXNyL3NyYy9iYXNoOyBcdFx0cm0gLXIgXHRcdC91c3IvbG9jYWwvc2hhcmUvZG9jL2Jhc2gvKi5odG1sIFx0XHQvdXNyL2xvY2FsL3NoYXJlL2luZm8gXHRcdC91c3IvbG9jYWwvc2hhcmUvbG9jYWxlIFx0XHQvdXNyL2xvY2FsL3NoYXJlL21hbiBcdDsgXHRcdHJ1bkRlcHM9XCIkKCBcdFx0c2NhbmVsZiAtLW5lZWRlZCAtLW5vYmFubmVyIC0tZm9ybWF0ICclbiNwJyAtLXJlY3Vyc2l2ZSAvdXNyL2xvY2FsIFx0XHRcdHwgdHIgJywnICdcXG4nIFx0XHRcdHwgc29ydCAtdSBcdFx0XHR8IGF3ayAnc3lzdGVtKFwiWyAtZSAvdXNyL2xvY2FsL2xpYi9cIiAkMSBcIiBdXCIpID09IDAgeyBuZXh0IH0geyBwcmludCBcInNvOlwiICQxIH0nIFx0KVwiOyBcdGFwayBhZGQgLS1uby1jYWNoZSAtLXZpcnR1YWwgLmJhc2gtcnVuZGVwcyAkcnVuRGVwczsgXHRhcGsgZGVsIC5idWlsZC1kZXBzOyBcdFx0WyBcIiQod2hpY2ggYmFzaClcIiA9ICcvdXNyL2xvY2FsL2Jpbi9iYXNoJyBdOyBcdGJhc2ggLS12ZXJzaW9uOyBcdFsgXCIkKGJhc2ggLWMgJ2VjaG8gXCIke0JBU0hfVkVSU0lPTiUlW14wLTkuXSp9XCInKVwiID0gXCIke19CQVNIX1ZFUlNJT04lJS0qfS4kX0JBU0hfTEFURVNUX1BBVENIXCIgXTsifSx7ImNyZWF0ZWQiOiIyMDE5LTA3LTEzVDAxOjE2OjA2LjE2NDEyODQxMloiLCJjcmVhdGVkX2J5IjoiL2Jpbi9zaCAtYyAjKG5vcCkgQ09QWSBmaWxlOjY1MWIzYmViZWJhOGJlOTE2MmM1NmIzZWI1NjExOTk5MDUyMzVmM2UxYzc4MTEyMzJiNmM5ZjQ4YWMzMzM2NTEgaW4gL3Vzci9sb2NhbC9iaW4vICJ9LHsiY3JlYXRlZCI6IjIwMTktMDctMTNUMDE6MTY6MDYuMzE5Mzc1ODg0WiIsImNyZWF0ZWRfYnkiOiIvYmluL3NoIC1jICMobm9wKSAgRU5UUllQT0lOVCBbXCJkb2NrZXItZW50cnlwb2ludC5zaFwiXSIsImVtcHR5X2xheWVyIjp0cnVlfSx7ImNyZWF0ZWQiOiIyMDE5LTA3LTEzVDAxOjE2OjA2LjUyNzUxNTkwMloiLCJjcmVhdGVkX2J5IjoiL2Jpbi9zaCAtYyAjKG5vcCkgIENNRCBbXCJiYXNoXCJdIiwiZW1wdHlfbGF5ZXIiOnRydWV9XSwib3MiOiJsaW51eCIsInJvb3RmcyI6eyJ0eXBlIjoibGF5ZXJzIiwiZGlmZl9pZHMiOlsic2hhMjU2OjFiZmVlYmQ2NTMyM2I4ZGRmNWJkNmE1MWNjNzA5N2I3Mjc4OGJjOTgyZTlhYjMyODBkNTNkM2M2MTNhZGZmYTciLCJzaGEyNTY6NDgzYzk4MGFjNmFiZjYzZmM0ZDcyNjJiMTdhMTk1NGQ2MjI2NmRhYzMwMjliNWJlMzg0ZDAzYjM5MjI5ODAzZSIsInNoYTI1Njo1ZjVmOTNhOTMzMDUyMTBhOTZjYzQxN2Y1NzlkNzBhNDk2YmJmMGRiOGU4MGVhMWU5NDM2NjgyYzM3OWYyNWQ5Il19fQ==", + "headers": { + "Content-Length": 5635 + } + }, + "307": { + "headers": { + "Location": "https://csharpsdktest.azurecr.io/v2/prod/bash/blobs/sha256:3131d2b2b3352091117a3abe745d01a3fed472b7327c3183602247937800e3a6" + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetBlobChunk.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetBlobChunk.json new file mode 100644 index 000000000000..12671ea6b036 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetBlobChunk.json @@ -0,0 +1,17 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "prod/bash", + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "Range": "bytes=0-299" + }, + "responses": { + "206": { + "body": "eyJhcmNoaXRlY3R1cmUiOiJhbWQ2NCIsImNvbmZpZyI6eyJIb3N0bmFtZSI6IiIsIkRvbWFpbm5hbWUiOiIiLCJVc2VyIjoiIiwiQXR0YWNoU3RkaW4iOmZhbHNlLCJBdHRhY2hTdGRvdXQiOmZhbHNlLCJBdHRhY2hTdGRlcnIiOmZhbHNlLCJUdHkiOmZhbHNlLCJPcGVuU3RkaW4iOmZhbHNlLCJTdGRpbk9uY2UiOmZhbHNlLCJFbnYiOlsiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCJfQkFTSF9HUEdfS0VZPTdDMDEzNUZCMDg4QUFGNkM2NkM2NTBCOUJC", + "headers": { + "Content-Length": "300", + "Content-Range": "bytes 0-299/5635" + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetBlobStatus.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetBlobStatus.json new file mode 100644 index 000000000000..03da3ca3fcd9 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetBlobStatus.json @@ -0,0 +1,14 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9" + }, + "responses": { + "204": { + "headers": { + "Range": "0-0", + "Docker-Upload-Uuid": "2b28c60d-d296-44b7-b2b4-1f01c63195c6" + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetDockerRegistryV2Support.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetDockerRegistryV2Support.json new file mode 100644 index 000000000000..181e2eec438e --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetDockerRegistryV2Support.json @@ -0,0 +1,8 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io" + }, + "responses": { + "200": {} + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetManifest.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetManifest.json new file mode 100644 index 000000000000..2768e76d6a0d --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetManifest.json @@ -0,0 +1,48 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "hello-world-dangling", + "reference": "20190628-033033z", + "accept": "application/vnd.docker.distribution.manifest.v2+json" + }, + "responses": { + "200": { + "body": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 5824, + "digest": "sha256:691fbc2d44fff48357bba69ab0505b9bf12b2b250a925a84a0b8e8e7eed390b2" + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 2014658, + "digest": "sha256:a073c86ecf9e0f29180e80e9638d4c741970695851ea48247276c32c57e40282" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 19778035, + "digest": "sha256:0e28711eb56d78f1e3dfde1807eba529d1346222bcd07d1cb1e436a18a0388bd" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 1074044, + "digest": "sha256:e460dd483fddb555911f7ed188c319fd97542c60e36843dcb1c5d753f733e1fa" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 5827, + "digest": "sha256:6aa301222093bfb8cf424ccb387f59e2c9510c3a30cca7fbcf8c954f88e6600c" + }, + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 568, + "digest": "sha256:9c5d80083a57d565f684e0155707204d497a5ad965279f92927452f15dae17e6" + } + ] + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetManifestAttributes.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetManifestAttributes.json new file mode 100644 index 000000000000..a8163814b8c1 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetManifestAttributes.json @@ -0,0 +1,34 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "nanoserver", + "reference": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086" + }, + "responses": { + "200": { + "body": { + "registry": "acrapi.azurecr-test.io", + "imageName": "nanoserver", + "manifest": { + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "imageSize": 2401606, + "createdTime": "2018-09-06T06:17:20.9983915Z", + "lastUpdateTime": "2018-09-06T06:17:20.9983915Z", + "architecture": "amd64", + "os": "windows", + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "configMediaType": "application/vnd.docker.container.image.v1+json", + "tags": [ + "4.7.2-20180905-nanoserver-1803" + ], + "changeableAttributes": { + "deleteEnabled": true, + "writeEnabled": true, + "readEnabled": true, + "listEnabled": true + } + } + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetManifestList.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetManifestList.json new file mode 100644 index 000000000000..08eaec214eca --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetManifestList.json @@ -0,0 +1,54 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "nanoserver" + }, + "responses": { + "200": { + "body": { + "registry": "acrapi.azurecr-test.io", + "imageName": "nanoserver", + "manifests": [ + { + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "imageSize": 2401606, + "createdTime": "2018-09-06T06:17:20.9983915Z", + "lastUpdateTime": "2018-09-06T06:17:20.9983915Z", + "architecture": "amd64", + "os": "windows", + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "configMediaType": "application/vnd.docker.container.image.v1+json", + "tags": [ + "4.7.2-20180905-nanoserver-1803" + ], + "changeableAttributes": { + "deleteEnabled": true, + "writeEnabled": true, + "readEnabled": true, + "listEnabled": true + } + }, + { + "digest": "sha256:7af5cd1dde3e8f5c2c9103860afa4ca871a6075373b6564b0e7b1b47866dab52", + "imageSize": 4135121, + "createdTime": "2018-09-07T16:30:46.5651701Z", + "lastUpdateTime": "2018-09-07T16:30:46.5651701Z", + "architecture": "amd64", + "os": "windows", + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "configMediaType": "application/vnd.docker.container.image.v1+json", + "tags": [ + "4.7.2-20180906-nanoserver-1803" + ], + "changeableAttributes": { + "deleteEnabled": true, + "writeEnabled": true, + "readEnabled": true, + "listEnabled": true + } + } + ] + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetRepositoryAttributes.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetRepositoryAttributes.json new file mode 100644 index 000000000000..c6791683bfd2 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetRepositoryAttributes.json @@ -0,0 +1,24 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "nanoserver" + }, + "responses": { + "200": { + "body": { + "registry": "acrapi.azurecr-test.io", + "imageName": "nanoserver", + "createdTime": "2018-09-06T06:17:20.9531248Z", + "lastUpdateTime": "2018-09-07T16:30:46.6583219Z", + "manifestCount": 2, + "tagCount": 2, + "changeableAttributes": { + "deleteEnabled": true, + "writeEnabled": true, + "readEnabled": true, + "listEnabled": true + } + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetRepositoryList.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetRepositoryList.json new file mode 100644 index 000000000000..4b6864e0ea95 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetRepositoryList.json @@ -0,0 +1,15 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io" + }, + "responses": { + "200": { + "body": { + "repositories": [ + "production/alpine", + "testing/alpine" + ] + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetTagAttributes.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetTagAttributes.json new file mode 100644 index 000000000000..ed58c44d6f71 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetTagAttributes.json @@ -0,0 +1,28 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "test/bash", + "reference": "sha256:eabe547f78d4c18c708dd97ec3166cf7464cc651f1cbb67e7afas407405b7ad7b6" + }, + "responses": { + "200": { + "body": { + "registry": "acrapi.azurecr-test.io", + "imageName": "test/bash", + "tag": { + "name": "tagName", + "digest": "sha256:eabe547f78d4c18c708dd97ec3166cf7464cc651f1cbb67e70d407405b7ad7b6", + "createdTime": "2018-10-05T20:54:24.1286047Z", + "lastUpdateTime": "2018-10-05T20:54:24.1286047Z", + "signed": false, + "changeableAttributes": { + "deleteEnabled": true, + "writeEnabled": false, + "readEnabled": true, + "listEnabled": true + } + } + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetTagList.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetTagList.json new file mode 100644 index 000000000000..e5342cd2295f --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/GetTagList.json @@ -0,0 +1,42 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "nanoserver" + }, + "responses": { + "200": { + "body": { + "registry": "acrapi.azurecr-test.io", + "imageName": "nanoserver", + "tags": [ + { + "name": "4.7.2-20180905-nanoserver-1803", + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "createdTime": "2018-09-06T06:17:21.0856539Z", + "lastUpdateTime": "2018-09-06T06:17:21.0856539Z", + "signed": false, + "changeableAttributes": { + "deleteEnabled": true, + "writeEnabled": true, + "readEnabled": true, + "listEnabled": true + } + }, + { + "name": "4.7.2-20180906-nanoserver-1803", + "digest": "sha256:7af5cd1dde3e8f5c2c9103860afa4ca871a6075373b6564b0e7b1b47866dab52", + "createdTime": "2018-09-06T16:30:43.3860166Z", + "lastUpdateTime": "2018-09-07T16:30:46.7022734Z", + "signed": false, + "changeableAttributes": { + "deleteEnabled": true, + "writeEnabled": true, + "readEnabled": true, + "listEnabled": true + } + } + ] + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/MountBlob.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/MountBlob.json new file mode 100644 index 000000000000..45623b98265b --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/MountBlob.json @@ -0,0 +1,16 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "newimage", + "mount": "prod/bash", + "from": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + }, + "responses": { + "201": { + "headers": { + "Location": "/v2/somethingnew/blobs/sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "Docker-Content-Digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/PostAccessToken.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/PostAccessToken.json new file mode 100644 index 000000000000..a4e6293133b5 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/PostAccessToken.json @@ -0,0 +1,16 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "grant_type": "refresh_token", + "service": "someregistry.azurecr.io", + "scope": "registry:catalog:*", + "refresh_token": "eyJ0eXAiOiJKJhbGci1dCI6IkN0ZlFDOExlLTMejlnIiwidGlkIjoiNzJmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." + }, + "responses": { + "200": { + "body": { + "access_token": "eyJ0eXAiOiJKJhbGcigdCI6IkN0ZlFaOExlLTMejlnIiwidGlkIjoiNzbmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/PostRefreshToken.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/PostRefreshToken.json new file mode 100644 index 000000000000..768ca1680ba1 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/PostRefreshToken.json @@ -0,0 +1,16 @@ +{ + "parameters": { + "grant_type": "access_token", + "url": "acrapi.azurecr-test.io", + "service": "someregistry.azurecr.io", + "tenant": "02f900bf-86f1-31af-p1ab-2b7cd0nndb47", + "accessToken": "eyJ0eXAiOiJKJhbGci1dCI6IkN0ZlFDOExlLTMejlnIiwidGlkIjoiNzJmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." + }, + "responses": { + "200": { + "body": { + "refresh_token": "eyJ0eXAiOiJKJhbGcigdCI6IkN0ZlFaOExlLTMejlnIiwidGlkIjoiNzbmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/StartBlobUpload.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/StartBlobUpload.json new file mode 100644 index 000000000000..38d70c467e5f --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/StartBlobUpload.json @@ -0,0 +1,15 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "newimg" + }, + "responses": { + "202": { + "headers": { + "Location": "/v2/blobland/blobs/uploads/f6d3451c-3352-43ff-b67c-fd0cfc793066?_nouploadcache=false&_state=iWTaVpaWiz23JTt8ZsYFPEU5JwLOFgdumWOmqGxIYGt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiJmNmQzNDUxYy0zMzUyLTQzZmYtYjY3Yy1mZDBjZmM3OTMwNjYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NTQuNTM1MDQ5ODY1WiJ9", + "Range": "0-0", + "Docker-Upload-Uuid": "f6d3451c-3352-43ff-b67c-fd0cfc793066" + } + } + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UpdateManifestAttributes.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UpdateManifestAttributes.json new file mode 100644 index 000000000000..4c25514ab2f2 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UpdateManifestAttributes.json @@ -0,0 +1,11 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "nanoserver", + "reference": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "value": "{\"writeEnabled\": false}" + }, + "responses": { + "200": {} + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UpdateRepositoryAttributes.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UpdateRepositoryAttributes.json new file mode 100644 index 000000000000..14a61f118d0f --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UpdateRepositoryAttributes.json @@ -0,0 +1,12 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "nanoserver", + "value": { + "writeEnabled": false + } + }, + "responses": { + "200": {} + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UpdateTagAttributes.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UpdateTagAttributes.json new file mode 100644 index 000000000000..16e13e3c4ec2 --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UpdateTagAttributes.json @@ -0,0 +1,11 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "name": "nanoserver", + "reference": "4.7.2-20180905-nanoserver-1803", + "value": "{\"writeEnabled\": false}" + }, + "responses": { + "200": {} + } +} diff --git a/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UploadBlob.json b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UploadBlob.json new file mode 100644 index 000000000000..7add0750729c --- /dev/null +++ b/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2019-08-15/examples/UploadBlob.json @@ -0,0 +1,16 @@ +{ + "parameters": { + "url": "acrapi.azurecr-test.io", + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", + "value": "U29tZXRoaW5nRWxzZQ==" + }, + "responses": { + "202": { + "headers": { + "Location": "/v2/blobland/blobs/uploads/f6d3451c-3352-43ff-b67c-fd0cfc793066?_nouploadcache=false&_state=9G2t2KQOw-ANeo5TrnwVb5OeAUIe0NaEJ2jxwLT6Y1J7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiJmNmQzNDUxYy0zMzUyLTQzZmYtYjY3Yy1mZDBjZmM3OTMwNjYiLCJPZmZzZXQiOjEzLCJTdGFydGVkQXQiOiIyMDE5LTA4LTI3VDIzOjUyOjU0WiJ9", + "Range": "0-12", + "Docker-Upload-Uuid": "f6d3451c-3352-43ff-b67c-fd0cfc793066" + } + } + } +} diff --git a/specification/containerregistry/data-plane/readme.go.md b/specification/containerregistry/data-plane/readme.go.md index 97ef4154aa73..f82d86b06f25 100644 --- a/specification/containerregistry/data-plane/readme.go.md +++ b/specification/containerregistry/data-plane/readme.go.md @@ -8,6 +8,13 @@ go: namespace: containerregistry clear-output-folder: true add-credentials: true + + # Non standard header use, still awaiting checks here + directive: + - remove-operation: UploadBlobChunkSpecified + - remove-operation: UploadBlobChunk + - remove-model: UploadBlobChunkSpecifiedHeaders + - remove-model: UploadBlobChunkHeaders ``` ### Go multi-api diff --git a/specification/containerregistry/data-plane/readme.md b/specification/containerregistry/data-plane/readme.md index 2ad5a15737c2..06899780f84f 100644 --- a/specification/containerregistry/data-plane/readme.md +++ b/specification/containerregistry/data-plane/readme.md @@ -26,7 +26,23 @@ These are the global settings for the ContainerRegistry API. ``` yaml # common openapi-type: data-plane -tag: package-2019-07 +tag: package-2019-08 +``` +### Tag: package-2019-08 + +These settings apply only when `--tag=package-2019-08` is specified on the command line. + +``` yaml $(tag) == 'package-2019-08' +input-file: +- Microsoft.ContainerRegistry/preview/2019-08-15/containerregistry.json +# This override adds support for directly passing in the acquired location link (Since it starts with /) +# It also caters to passing it without / as some implementations may remove the initial / . +directive: + - from: source-file-csharp + where: $ + transform: >- + return $. + replace( /_url = _url.Replace\("\{nextBlobUuidLink\}", location\);/g, "_url = _url.Replace(location.StartsWith(\"/\") ? \"/{nextBlobUuidLink}\" : \"{nextBlobUuidLink}\", location);") ``` ### Tag: package-2019-07 @@ -45,6 +61,7 @@ These settings apply only when `--tag=package-2018-08` is specified on the comma ``` yaml $(tag) == 'package-2018-08' input-file: - Microsoft.ContainerRegistry/preview/2018-08-10/containerregistry.json + ``` --- @@ -71,7 +88,7 @@ csharp: license-header: MICROSOFT_MIT_NO_VERSION namespace: Microsoft.Azure.ContainerRegistry sync-methods: None - output-folder: $(csharp-sdks-folder)/ContainerRegistry/preview/Microsoft.Azure.ContainerRegistry/src/Generated + output-folder: $(csharp-sdks-folder)/ContainerRegistry/Microsoft.Azure.ContainerRegistry/src/Generated clear-output-folder: true add-credentials: true ``` @@ -96,8 +113,31 @@ directive: reason: No content is returned by put Manifest in compliance with Docker's own specs for compatibility purposes. Specifics https://docs.docker.com/registry/spec/api/#put-manifest from: containerregistry.json where: $.paths["/v2/{name}/manifests/{reference}"].put.responses["201"] + - suppress: LROStatusCodesReturnTypeSchema + reason: No content is returned by put End Upload in compliance with Docker's own specs for compatibility purposes. Specifics https://docs.docker.com/v17.12/registry/spec/api/ + from: containerregistry.json + where: $.paths["/{nextBlobUuidLink}"].put.responses["201"] + - suppress: DefinitionsPropertiesNamesCamelCase + reason: These default values are specified by the Open Container Initiative. Used for cross compatibility. Specifics https://github.com/opencontainers/image-spec/blob/master/annotations.md#rules + from: containerregistry.json + where: + - $.definitions.Platform.properties["os.version"] + - $.definitions.Platform.properties["os.features"] + - $.definitions.Annotations.properties["org.opencontainers.image.created"] + - $.definitions.Annotations.properties["org.opencontainers.image.authors"] + - $.definitions.Annotations.properties["org.opencontainers.image.url"] + - $.definitions.Annotations.properties["org.opencontainers.image.documentation"] + - $.definitions.Annotations.properties["org.opencontainers.image.source"] + - $.definitions.Annotations.properties["org.opencontainers.image.version"] + - $.definitions.Annotations.properties["org.opencontainers.image.revision"] + - $.definitions.Annotations.properties["org.opencontainers.image.vendor"] + - $.definitions.Annotations.properties["org.opencontainers.image.licenses"] + - $.definitions.Annotations.properties["org.opencontainers.image.ref.name"] + - $.definitions.Annotations.properties["org.opencontainers.image.title"] + - $.definitions.Annotations.properties["org.opencontainers.image.description"] ``` -## Multi-API/Profile support for AutoRest v3 generators + +## Multi-API/Profile support for AutoRest v3 generators AutoRest V3 generators require the use of `--tag=all-api-versions` to select api files. @@ -109,16 +149,15 @@ require: $(this-folder)/../../../profiles/readme.md # all the input files across all versions input-file: + - $(this-folder)/Microsoft.ContainerRegistry/preview/2019-08-15/containerregistry.json - $(this-folder)/Microsoft.ContainerRegistry/preview/2019-07-15/containerregistry.json - $(this-folder)/Microsoft.ContainerRegistry/preview/2018-08-10/containerregistry.json - ``` -If there are files that should not be in the `all-api-versions` set, +If there are files that should not be in the `all-api-versions` set, uncomment the `exclude-file` section below and add the file paths. ``` yaml $(tag) == 'all-api-versions' -#exclude-file: +#exclude-file: # - $(this-folder)/Microsoft.Example/stable/2010-01-01/somefile.json ``` -