diff --git a/_data/toc.yaml b/_data/toc.yaml index 540520e139..c13808fed6 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -1085,6 +1085,104 @@ toc: title: Release notes - path: /datacenter/dtr/2.1/guides/support/ title: Get support + + - sectiontitle: Beta versions + section: + - sectiontitle: Docker Trusted Registry 2.2 + section: + - path: /datacenter/dtr/2.2/guides/ + title: Docker Trusted Registry overview + - path: /datacenter/dtr/2.2/guides/architecture/ + title: Architecture + - sectiontitle: Installation + section: + - path: /datacenter/dtr/2.2/guides/install/system-requirements/ + title: System requirements + - path: /datacenter/dtr/2.2/guides/install/ + title: Install Docker Trusted Registry + - path: /datacenter/dtr/2.2/guides/install/install-offline/ + title: Install offline + - path: /datacenter/dtr/2.2/guides/install/license/ + title: License your deployment + - path: /datacenter/dtr/2.2/guides/install/scale-your-deployment/ + title: Scale your deployment + - path: /datacenter/dtr/2.2/guides/install/upgrade/ + title: Upgrade + - path: /datacenter/dtr/2.2/guides/install/uninstall/ + title: Uninstall + - sectiontitle: Configuration + section: + - path: /datacenter/dtr/2.2/guides/configure/ + title: Use your own certificates + - path: /datacenter/dtr/2.2/guides/configure/configure-storage/ + title: Storage configuration + - path: /datacenter/dtr/2.2/guides/configure/use-nfs/ + title: Use NFS + - sectiontitle: Monitor and troubleshoot + section: + - path: /datacenter/dtr/2.2/guides/monitor-troubleshoot/ + title: Monitor DTR + - path: /datacenter/dtr/2.2/guides/monitor-troubleshoot/troubleshoot/ + title: Troubleshoot DTR + - sectiontitle: High-availability + section: + - path: /datacenter/dtr/2.2/guides/high-availability/ + title: Set up high availability + - path: /datacenter/dtr/2.2/guides/high-availability/backups-and-disaster-recovery/ + title: Backups and disaster recovery + - sectiontitle: User management + section: + - path: /datacenter/dtr/2.2/guides/user-management/ + title: Authentication and authorization + - path: /datacenter/dtr/2.2/guides/user-management/create-and-manage-users/ + title: Create and manage users + - path: /datacenter/dtr/2.2/guides/user-management/create-and-manage-orgs/ + title: Create and manage organizations + - path: /datacenter/dtr/2.2/guides/user-management/create-and-manage-teams/ + title: Create and manage teams + - path: /datacenter/dtr/2.2/guides/user-management/permission-levels/ + title: Permission levels + - sectiontitle: Repositories and images + section: + - path: /datacenter/dtr/2.2/guides/repos-and-images/ + title: Configure your Docker Engine + - path: /datacenter/dtr/2.2/guides/repos-and-images/pull-an-image/ + title: Pull an image + - path: /datacenter/dtr/2.2/guides/repos-and-images/push-an-image/ + title: Push an image + - path: /datacenter/dtr/2.2/guides/repos-and-images/delete-an-image/ + title: Delete an image + - sectiontitle: API and CLI reference + section: + - path: /datacenter/dtr/2.2/reference/api/ + title: API reference + - sectiontitle: CLI reference + section: + - path: /datacenter/dtr/2.2/reference/cli/ + title: Overview + - path: /datacenter/dtr/2.2/reference/cli/backup/ + title: backup + - path: /datacenter/dtr/2.2/reference/cli/dumpcerts/ + title: dumpcerts + - path: /datacenter/dtr/2.2/reference/cli/images/ + title: images + - path: /datacenter/dtr/2.2/reference/cli/install/ + title: install + - path: /datacenter/dtr/2.2/reference/cli/join/ + title: join + - path: /datacenter/dtr/2.2/reference/cli/reconfigure/ + title: reconfigure + - path: /datacenter/dtr/2.2/reference/cli/remove/ + title: remove + - path: /datacenter/dtr/2.2/reference/cli/restore/ + title: restore + - path: /datacenter/dtr/2.2/reference/cli/upgrade/ + title: upgrade + - path: /datacenter/dtr/2.2/guides/release-notes/ + title: Release notes + - path: /datacenter/dtr/2.2/guides/support/ + title: Get support + - sectiontitle: Previous versions section: - sectiontitle: Universal Control Plane 1.0 diff --git a/datacenter/dtr/2.2/guides/architecture.md b/datacenter/dtr/2.2/guides/architecture.md new file mode 100644 index 0000000000..a2b5531fe3 --- /dev/null +++ b/datacenter/dtr/2.2/guides/architecture.md @@ -0,0 +1,86 @@ +--- +description: Learn about the architecture of Docker Trusted Registry. +keywords: docker, registry, dtr, architecture +title: DTR architecture +--- + +Docker Trusted Registry (DTR) is a Dockerized application that runs on a Docker +Universal Control Plane cluster. + +![](images/architecture-1.png) + + +## Containers + +When you install DTR on a node, the following containers are started: + +| Name | Description | +|:-------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------| +| dtr-api-<replica_id> | Executes the DTR business logic. It serves the DTR web application, and API | +| dtr-etcd-<replica_id> | A key-value store for persisting DTR configuration settings | +| dtr-jobrunner-<replica_id> | Runs cleanup jobs in the background | +| dtr-nginx-<replica_id> | Receives http and https requests and proxies them to other DTR components. By default it listens to ports 80 and 443 of the host | +| dtr-notary-server-<replica_id> | Receives, validates, and serves content trust metadata, and is consulted when pushing or pulling to DTR with content trust enabled | +| dtr-notary-signer-<replica_id> | Performs server-side timestamp and snapshot signing for content trust metadata | +| dtr-registry-<replica_id> | Implements the functionality for pulling and pushing Docker images. It also handles how images are stored | +| dtr-rethinkdb-<replica_id> | A database for persisting repository metadata | + +All these components are for internal use of DTR. Don't use them in your applications. + +## Networks + +To allow containers to communicate, when installing DTR the following networks +are created: + +| Name | Type | Description | +|:-------|:--------|:---------------------------------------------------------------------------------------| +| dtr-br | bridge | Allows DTR components on the same node to communicate with each other in a secure way | +| dtr-ol | overlay | Allows DTR components running on different nodes to communicate, to replicate DTR data | + + +## Volumes + +DTR uses these named volumes for persisting data: + +| Volume name | Description | +|:------------------------------------|:---------------------------------------------------------------------------------| +| dtr-ca-<replica_id> | Root key material for the DTR root CA that issues certificates | +| dtr-etcd-<replica_id> | DTR configuration data | +| dtr-notary-<replica_id> | Certificate and keys for the Notary components | +| dtr-registry-<replica_id> | Docker images data, if DTR is configured to store images on the local filesystem | +| dtr-rethink-<replica_id> | Repository metadata | +| dtr-nfs-registry-<replica_id> | Docker images data, if DTR is configured to store images on NFS | + +You can customize the volume driver used for these volumes, by creating the +volumes before installing DTR. During the installation, DTR checks which volumes +don't exist in the node, and creates them using the default volume driver. + +By default, the data for these volumes can be found at +`/var/lib/docker/volumes//_data`. + +## Image storage + +By default, Docker Trusted Registry stores images on the filesystem of the node +where it is running. + +You can also configure DTR to use these storage backends: + +* NFS +* Amazon S3 +* Cleversafe +* OpenStack Swift +* Microsoft Azure + +For highly available installations, you should use a cloud storage system +instead of an NFS mount, since they usually have better performance. + +## High-availability support + +For load balancing and high-availability, you can install multiple replicas of +DTR, and join them to create a cluster. +[Learn more about high availability](high-availability/index.md). + +## Where to go next + +* [System requirements](install/system-requirements.md) +* [Install DTR](install/index.md) diff --git a/datacenter/dtr/2.2/guides/configure/configure-storage.md b/datacenter/dtr/2.2/guides/configure/configure-storage.md new file mode 100644 index 0000000000..a20aae4823 --- /dev/null +++ b/datacenter/dtr/2.2/guides/configure/configure-storage.md @@ -0,0 +1,212 @@ +--- +description: Storage configuration for Docker Trusted Registry +keywords: docker, documentation, about, technology, understanding, configuration, + storage, storage drivers, Azure, S3, Swift, enterprise, hub, registry +title: Configure where images are stored +--- + +After installing Docker Trusted Registry, one of your first tasks is to +designate and configure the Trusted Registry storage backend. This document provides the following: + +* Information describing your storage backend options. +* Configuration steps using either the Trusted Registry UI or a YAML file. + +While there is a default storage backend, `filesystem`, the Trusted Registry offers other options that are cloud-based. This flexibility to configure to a different storage backend allows you to: + +* Scale your Trusted Registry +* Leverage storage redundancy +* Store your images anywhere in the cloud +* Take advantage of other features that are critical to your organization + +At first, you might have explored Docker Trusted Registry and Docker Engine by + [installing](../install/index.md) +them on your system in order to familiarize yourself with them. +However, for various reasons such as deployment purposes or continuous +integration, it makes sense to think about your long term organization’s needs +when selecting a storage backend. The Trusted Registry natively supports TLS and +basic authentication. It also ships with a [notification system](/registry/notifications.md), calling webhooks in response to activity. The notification system also provides both extensive logging and +reporting, which is useful for organizations that want to collect metrics. + +## Understand the Trusted Registry storage backend + +By default, your Trusted Registry data resides as a data volume on the host +`filesystem`. This is where your repositories and images are stored. This +storage driver is the local posix `filesystem` and is configured to use a +directory tree in the local filesystem. It's suitable for development or small +deployments. The `filesystem` can be located on the same computer as the Trusted Registry, or on a separate system. + +Additionally, the Trusted Registry supports these cloud-based storage drivers: + +* Amazon Simple Storage Solution **S3** +* OpenStack **Swift** +* Microsoft **Azure** Blob Storage + + + +### Filesystem + +If you select `filesystem`, then the Trusted Registry uses the local disk to +store registry files. This backend has a single, required `rootdirectory` +parameter which specifies a subdirectory of `/var/local/dtr/imagestorage` in +which all registry files are stored. The default value of `/local` means the +files are stored in `/var/local/dtr/image-storage/local`. + +The Trusted Registry stores all its data at this location, so ensure there is +adequate space available. To do so, you can run the following commands: + +* To analyze the disk usage: `docker exec -it bash` then run `df -h`. +* To see the file size of your containers, use the `-s` argument of `docker ps -s`. + +### Amazon S3 + +S3 stores data as objects within “buckets” where you read, write, and delete +objects in that container. It too, has a `rootdirectory` parameter. If you select this option, there will be some tasks that you need to first perform [on AWS](https://aws.amazon.com/s3/getting-started/). + +1. You must create an S3 bucket, and write down its name and the AWS zone it +runs on. +2. Determine write permissions for your bucket. +3. S3 flavor comes with DEBUG=false by default. If you need to debug, then you need to add `-e DEBUG=True`. +4. Specify an AWS region, which is dependent on your S3 location, for example, use `-e AWS_REGION=”eu-west-1”`. +5. Ensure your host time is correct. If your host clock is still running on the main computer, but not on the docker host virtual machine, then you will have +time differences. This may cause an issue if you try to authenticate with Amazon +web services. +6. You will also need your AWS access key and secret key. Learn [more about it ](http://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html) here. + +Conversely, you can further limit what users access in the Trusted Registry when you use AW to host your Trusted Registry. Instead of using the UI to enter information, you can create an [IAM user policy](http://docs.aws.amazon.com/AmazonS3/latest/dev/example-policies-s3.html) which is a JSON description of the effects, actions, and resources available to +a user. The advantage of using this method instead of configuring through the Trusted Registry UI is that you can restrict what users can access. You apply the policy as part of the process of installing the Trusted Registry on AW. To set a policy through the AWS command line, save the policy into a file, +for example `TrustedRegistryUserPerms.json`, and pass it to the +put-user-policy AWS command: + +``` +$ aws iam put-user-policy --user-name MyUser --policy-name TrustedRegistryUserPerms --policy-document file://C:\Temp\TrustedRegistryUserPerms.json +``` + +You can also set a policy through your AWS console. For more information about +setting IAM policies using the command line or the console, review the AWS +[Overview of IAM Policies](http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) article or visit the console Policies page. + +The following example describes the minimum permissions set which allows +Trusted Registry users to access, push, pull, and delete images. + +``` +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "s3:ListAllMyBuckets", + "Resource": "arn:aws:s3:::*" + }, + { + "Effect": "Allow", + "Action": [ + "s3:ListBucket", + "s3:GetBucketLocation" + ], + "Resource": "arn:aws:s3:::" + }, + { + "Effect": "Allow", + "Action": [ + "s3:PutObject", + "s3:GetObject", + "s3:DeleteObject" + ], + "Resource": "arn:aws:s3:::/*" + } + ] +} + +``` + +### OpenStack Swift + +OpenStack Swift, also known as OpenStack Object Storage, is an open source +object storage system that is licensed under the Apache 2.0 license. Refer to [Swift documentation](http://docs.openstack.org/developer/swift/) to get started. + + + +### Microsoft Azure + +This storage backend uses Microsoft’s Azure Blob storage. Data is stored within +a paid Windows Azure storage account. Refer to Microsoft's Azure +[documentation](https://azure.microsoft.com/en-us/services/storage/) which +explains how to set up your Storage account. + +## Configure your Trusted Registry storage backend + +Once you select your driver, you need to configure it through the UI or use a +YAML file (which is discussed further in this document.) + +1. From the main Trusted Registry screen, navigate to Settings > Storage. +2. Under Storage Backend, use the drop down menu to select your storage. The screen refreshes to reflect your option. +3. Enter your configuration settings. If you're not sure what a particular parameter does, then find your driver from the following headings so that you can see a detailed explanation. +4. Click Save. The Trusted Registry restarts so that your changes take effect. + +>**Note**: Changing your storage backend requires you to restart the Trusted Registry. + +See the [Registry configuration](/registry/configuration.md) +documentation for the full options specific to each driver. Storage drivers can +be customized through the [Docker Registry storage driver +API](/registry/storage-drivers/index.md#storage-driver-api). + + +### Filesystem settings + +The [filesystem storage backend](/registry/configuration.md#filesystem) +has only one setting, the "Storage directory". + +### S3 settings + +If you select the [S3 storage backend](/registry/configuration.md#s3), then you +need to set "AWS region", "Bucket name", "Access Key", and "Secret Key". + +### Azure settings + +Set the "Account name", "Account key", "Container", and "Realm" on the [Azure storage backend](/registry/configuration.md#azure) page. + +### Openstack Swift settings + +View the [Openstack Swift settings](/registry/configuration.md#openstack-swift) +documentation so that you can set up your storage settings: authurl, username, +password, container, tenant, tenantid, domain, domainid, insecureskipverify, +region, chunksize, and prefix. + +## Configure using a YAML file + +If the previous quick setup options are not sufficient to configure your +Registry options, you can upload a YAML file. The schema of this file is +identical to that used by the [Registry](/registry/configuration.md). + +There are several benefits to using a YAML file as it can provide an +additional level of granularity in defining your storage backend. Advantages +include: + +* Overriding specific configuration options. +* Overriding the entire configuration file. +* Selecting from the entire list of configuration options. + +**To configure**: + +1. Navigate to the Trusted Registry UI > Settings > Storage. +2. Select Download to get the text based file. It contains a minimum amount +of information and you're going to need additional data based on your driver and +business requirements. +3. Go [here](/registry/configuration.md#list-of-configuration-options") to see the open source YAML file. Copy the sections you need and paste into your `storage.yml` file. Note that some settings may contradict others, so +ensure your choices make sense. +4. Save the YAML file and return to the UI. +5. On the Storage screen, upload the file, review your changes, and click Save. + +## See also + +* [Use your own certificates](index.md) diff --git a/datacenter/dtr/2.2/guides/configure/index.md b/datacenter/dtr/2.2/guides/configure/index.md new file mode 100644 index 0000000000..91f4f065d5 --- /dev/null +++ b/datacenter/dtr/2.2/guides/configure/index.md @@ -0,0 +1,46 @@ +--- +description: Trusted Registry configuration options +keywords: docker, documentation, about, technology, install, enterprise, hub, CS engine, + Docker Trusted Registry, configure, storage, backend, drivers +title: Use your own certificates +--- + +By default the DTR services are exposed using HTTPS, to ensure all +communications between clients and DTR is encrypted. Since DTR +replicas use self-signed certificates for this, when a client accesses +DTR, their browsers won't trust this certificate, so the browser displays a +warning message. + +You can configure DTR to use your own certificates, so that it is automatically +trusted by your users' browser and client tools. + +## Replace the server certificates + +To configure DTR to use your own certificates and keys, go to the +**DTR web UI**, navigate to the **Settings** page, and scroll down to the +**Domain** section. + +![](../images/use-your-certificates-1.png) + + +Set the DTR domain name and upload the certificates and key: + +* Load balancer/public address, is the domain name clients will use to access DTR. +* TLS certificate, is the server certificate and any intermediate CA public +certificates. This certificate needs to be valid for the DTR public address, +and have SANs for all addresses used to reach the DTR replicas, including load +balancers. +* TLS private key is the server private key. +* TLS CA is the root CA public certificate. + +Finally, click **Save** for the changes to take effect. + +If you're using certificates issued by a globally trusted certificate authority, +any web browser or client tool should now trust DTR. If you're using an internal +certificate authority, you'll need to [configure your system to trust that +certificate authority](../repos-and-images/index.md). + +## Where to go next + +* [Configure your Docker Engine](../repos-and-images/index.md) +* [Pull an image](../repos-and-images/pull-an-image.md) diff --git a/datacenter/dtr/2.2/guides/configure/use-nfs.md b/datacenter/dtr/2.2/guides/configure/use-nfs.md new file mode 100644 index 0000000000..672d845df4 --- /dev/null +++ b/datacenter/dtr/2.2/guides/configure/use-nfs.md @@ -0,0 +1,71 @@ +--- +title: Use NFS +description: Learn how to integrate Docker Trusted Registry with NFS +keywords: registry, dtr, storage, nfs +--- + +You can configure DTR to store Docker images in an NFS directory. + +Before installing or configuring DTR to use an NFS directory, make sure that: + +* The NFS server has been correctly configured +* The NFS server has a fixed IP address +* All hosts running DTR have the correct NFS libraries installed + + +To confirm that the hosts can connect to the NFS server, try to list the +directories exported by your NFS server: + +```bash +showmount -e +``` + +You should also try yo mount one of the exported directories: + +```bash +mkdir /tmp/mydir && sudo mount -t nfs : +``` + +## Install DTR with NFS + +One way to configure DTR to use an NFS directory is at install time: + +```none +docker run -it --rm docker/dtr install \ + --nfs-storage-url \ + +``` + +The NFS storage URL should be in the format `nfs:///`. + +When you join replicas to the DTR cluster, the replicas will pick up that +configuration, so you don't need to specify it again. + +### Reconfigure DTR to use NFS + +If you're upgrading from a previous version of DTR and are already using +NFS you can continue using the same configurations. + +If you want to start using the new DTR built-in support for NFS you can +reconfigure DTR: + +```none +docker run -it --rm docker/dtr reconfigure \ + --nfs-storage-url +``` + +If you want to reconfigure DTR to stop using NFS storage, leave the option +in blank: + +```none +docker run -it --rm docker/dtr reconfigure \ + --nfs-storage-url "" +``` + +If the IP address of your NFS server changes, even if the DNS address is kept +the same, you should reconfigure DTR to stop using NFS storage, and then +add it back again. + +## Where to go next + +* [Configure where images are stored](configure-storage.md) diff --git a/datacenter/dtr/2.2/guides/high-availability/backups-and-disaster-recovery.md b/datacenter/dtr/2.2/guides/high-availability/backups-and-disaster-recovery.md new file mode 100644 index 0000000000..9746270d9b --- /dev/null +++ b/datacenter/dtr/2.2/guides/high-availability/backups-and-disaster-recovery.md @@ -0,0 +1,129 @@ +--- +description: Learn how to backup your Docker Trusted Registry cluster, and to recover + your cluster from an existing backup. +keywords: docker, registry, high-availability, backup, recovery +title: Backups and disaster recovery +--- + +When you decide to start using Docker Trusted Registry on a production +setting, you should [configure it for high availability](index.md). + +The next step is creating a backup policy and disaster recovery plan. + +## DTR data persistency + +Docker Trusted Registry persists: + +* Configurations: the cluster configurations are stored on a key-value store +that is replicated through all DTR replicas. +* Repository metadata: the information about the repositories and +images deployed. This information is replicated through all DTR replicas. +* Certificates and keys: the certificates, public keys, and private keys that +are used for mutual TLS communication. + +This data is persisted on the host where DTR is running, using named volumes. +[Learn more about DTR named volumes](../architecture.md). + +DTR also persists Docker images on the filesystem of the host running DTR, or +on a cloud provider, depending on the way DTR is configured. + +## Backup DTR data + +To perform a backup of a DTR node, use the `backup` command. This +command creates a backup of DTR: + +* Configurations, +* Repository metadata, +* Certificates and keys used by DTR. + +These files are added to a tar archive, and the result is streamed to stdout. + +The backup command does not create a backup of Docker images. You should +implement a separate backup policy for the Docker images, taking in +consideration whether your DTR installation is configured to store images on the +filesystem or using a cloud provider. + +The backup command also doesn't create a backup of the users and organizations. +That data is managed by UCP, so when you create a UCP backup you're creating +a backup of the users and organizations metadata. + +When creating a backup, the resulting .tar file contains sensitive information +like private keys. You should ensure the backups are stored securely. + +You can check the +[reference documentation](../../reference/cli/backup.md), for the +backup command to learn about all the available flags. + +As an example, to create a backup of a DTR node, you can use: + +```none +$ docker run -i --rm docker/dtr backup \ + --ucp-url \ + --ucp-insecure-tls \ + --existing-replica-id \ + --ucp-username \ + --ucp-password > /tmp/backup.tar +``` + +Where: + +* `--ucp-url` is the address of UCP, +* `--ucp-insecure-tls` is to trust the UCP TLS certificate, +* `--existing-replica-id` is the id of the replica to backup, +* `--ucp-username`, and `--ucp-password` are the credentials of a UCP administrator. + +To validate that the backup was correctly performed, you can print the contents +of the tar file created: + +```none +$ tar -tf /tmp/backup.tar +``` + +## Restore DTR data + +You can restore a DTR node from a backup using the `restore` +command. +This command performs a fresh installation of DTR, and reconfigures it with +the configuration created during a backup. + +The command starts by installing DTR, restores the configurations stored on +etcd, and then restores the repository metadata stored on RethinkDB. You +can use the `--config-only` option, to only restore the configurations stored +on etcd. + +This command does not restore Docker images. You should implement a separate +restore procedure for the Docker images stored in your registry, taking in +consideration whether your DTR installation is configured to store images on +the filesystem or using a cloud provider. + +You can check the +[reference documentation](../../reference/cli/backup.md), for the +backup command to learn about all the available flags. + + +As an example, to install DTR on the host and restore its +state from an existing backup: + +```none +# Install and restore configurations from an existing backup +$ docker run -i --rm \ + docker/dtr restore \ + --ucp-url \ + --ucp-insecure-tls \ + --ucp-username \ + --ucp-password \ + --dtr-load-balancer < /tmp/backup.tar +``` + +Where: + +* `--ucp-url` is the address of UCP, +* `--ucp-insecure-tls` is to trust the UCP TLS certificate, +* `--ucp-username`, and `--ucp-password` are the credentials of a UCP administrator, +* `--dtr-load-balancer` is the domain name or ip where DTR can be reached. + + +## Where to go next + +* [Set up high availability](index.md) +* [DTR architecture](../architecture.md) diff --git a/datacenter/dtr/2.2/guides/high-availability/index.md b/datacenter/dtr/2.2/guides/high-availability/index.md new file mode 100644 index 0000000000..67126e1332 --- /dev/null +++ b/datacenter/dtr/2.2/guides/high-availability/index.md @@ -0,0 +1,83 @@ +--- +description: Learn how to set up Docker Trusted Registry for high availability. +keywords: docker, registry, high-availability, backup, recovery +title: Set up high availability +--- + +Docker Trusted Registry (DTR) is designed for high availability. + +When you first install DTR, you create a cluster with a single DTR replica. +Replicas are single instances of DTR that can be joined together to form a +cluster. +When joining new replicas to the cluster, you'll be creating new DTR instances +that are running the same set of services. Any change to the state of an +instance is replicated across all other instances. + +![](../images/high-availability-1.png) + +Having a DTR cluster with multiple replicas, allows you to: + +* Load-balance user requests across the DTR replicas, +* Keep the DTR cluster working if a replica fails. + +To make a DTR installation tolerant to failures, add additional replicas to +the DTR cluster. + +| DTR replicas | Failures tolerated | +|:------------:|:------------------:| +| 1 | 0 | +| 3 | 1 | +| 5 | 2 | +| 7 | 3 | + + +When sizing your DTR installation for high-availability, +follow these rules of thumb: + +* Don't create a DTR cluster with just two replicas. Your cluster +won't tolerate any failures, and it's possible that you experience performance +degradation. +* When a replica fails, the number of failures tolerated by your cluster +decreases. Don't leave that replica offline for long. +* Adding too many replicas to the cluster might also lead to performance +degradation, as data needs to be replicated across all replicas. + +## Size your cluster + +When installing DTR for production, you should have dedicated nodes for running: + +* Docker Universal Control Plane (UCP) controller nodes, +* DTR replicas, +* Your own applications. + +Having dedicated nodes ensures all applications will remain performant since +they have dedicated resources for them. +It also makes it easier to implement backup policies and disaster recovery +plans for UCP and DTR. + +To have high-availability on UCP and DTR, you need a minimum of: + +* 3 dedicated nodes to install UCP with high availability, +* 3 dedicated nodes to install DTR with high availability, +* As many nodes as you want for running your containers and applications. + + +![](../images/high-availability-2.png) + +## Load balancing + +DTR does not provide a load balancing service. You can use an on-premises +or cloud-based load balancer to balance requests across multiple DTR replicas. + +Make sure you configure your load balancer to: + +* Load-balance TCP traffic on ports 80 and 443, +* Not terminate HTTPS connections, +* Use the `/health` endpoint on each DTR replica, to check if +the replica is healthy and if it should remain on the load balancing pool or +not. + +## Where to go next + +* [Backups and disaster recovery](backups-and-disaster-recovery.md) +* [DTR architecture](../architecture.md) diff --git a/datacenter/dtr/2.2/guides/images/Makefile b/datacenter/dtr/2.2/guides/images/Makefile new file mode 100644 index 0000000000..15b73ad543 --- /dev/null +++ b/datacenter/dtr/2.2/guides/images/Makefile @@ -0,0 +1,47 @@ + +SIZE="1280px" +HOST=dtr.domain.com +HOSTIP:=192.168.18.131 +HOSTURL=https://$(HOST) +IMAGE=svendowideit/screenshot +#IMAGE=screenshot +RUNOPTS=docker run --rm -v $(CURDIR):/srv --add-host $(HOST):$(HOSTIP) +RUN=$(RUNOPTS) $(IMAGE) + +all: + # Needs to be run with no authentication + $(RUN) $(HOSTURL)/admin/ admin-metrics.png $(SIZE) + $(RUN) $(HOSTURL)/admin/logs/ admin-logs.png $(SIZE) + $(RUN) $(HOSTURL)/admin/settings/auth/ admin-settings-authentication.png $(SIZE) + $(RUN) $(HOSTURL)/admin/settings/general admin-settings.png $(SIZE) + $(RUN) $(HOSTURL)/admin/settings/security admin-settings-security.png $(SIZE) + $(RUN) $(HOSTURL)/admin/settings/storage admin-settings-storage.png $(SIZE) + $(RUN) $(HOSTURL)/admin/settings/license admin-settings-license.png $(SIZE) + +manual: + # --env-file=passwords.env + $(RUNOPTS) --env-file=passwords.env \ + $(IMAGE) \ + $(HOSTURL)/admin/settings#auth admin-settings-authentication-basic.png $(SIZE) + + #admin-settings-authentication-ldap.png + + +# TODO: needs manual intervention atm +qs1: + # this requires the hostname to resolve. + echo "$HOST $HOSTIP" >> /etc/hosts + # and requires that host to be added to the docker daemon's insecure registry settings + # maybe use a dind daemon? + + docker pull jenkins + docker tag -f jenkins t400s.home.org.au/ci-infrastructure/jnkns-img + docker push t400s.home.org.au/ci-infrastructure/jnkns-img + sleep 1 + $(RUN) $(HOSTURL)/admin/ console-push.png $(SIZE) + sleep 10 +qs2: + docker rmi jenkins t400s.home.org.au/ci-infrastructure/jnkns-img + docker pull t400s.home.org.au/ci-infrastructure/jnkns-img + sleep 1 + $(RUN) $(HOSTURL)/admin/ console-pull.png $(SIZE) diff --git a/datacenter/dtr/2.2/guides/images/admin-logs.png b/datacenter/dtr/2.2/guides/images/admin-logs.png new file mode 100644 index 0000000000..de2920f3ba Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-logs.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-metrics.png b/datacenter/dtr/2.2/guides/images/admin-metrics.png new file mode 100644 index 0000000000..99a5d548ac Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-metrics.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings-auth.png b/datacenter/dtr/2.2/guides/images/admin-settings-auth.png new file mode 100644 index 0000000000..d7dd0bef85 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings-auth.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings-authentication-basic.png b/datacenter/dtr/2.2/guides/images/admin-settings-authentication-basic.png new file mode 100644 index 0000000000..3d9cbbe463 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings-authentication-basic.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings-authentication-ldap.png b/datacenter/dtr/2.2/guides/images/admin-settings-authentication-ldap.png new file mode 100644 index 0000000000..22b2b13598 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings-authentication-ldap.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings-authentication.png b/datacenter/dtr/2.2/guides/images/admin-settings-authentication.png new file mode 100644 index 0000000000..6453784c17 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings-authentication.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings-license.png b/datacenter/dtr/2.2/guides/images/admin-settings-license.png new file mode 100644 index 0000000000..5ed5559032 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings-license.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings-license2.png b/datacenter/dtr/2.2/guides/images/admin-settings-license2.png new file mode 100644 index 0000000000..725ddd9281 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings-license2.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings-security.png b/datacenter/dtr/2.2/guides/images/admin-settings-security.png new file mode 100644 index 0000000000..67077fdf2d Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings-security.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings-storage-azure.png b/datacenter/dtr/2.2/guides/images/admin-settings-storage-azure.png new file mode 100644 index 0000000000..95c04cc303 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings-storage-azure.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings-storage-s3.png b/datacenter/dtr/2.2/guides/images/admin-settings-storage-s3.png new file mode 100644 index 0000000000..9e142fb309 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings-storage-s3.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings-storage.png b/datacenter/dtr/2.2/guides/images/admin-settings-storage.png new file mode 100644 index 0000000000..f6256d4f77 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings-storage.png differ diff --git a/datacenter/dtr/2.2/guides/images/admin-settings.png b/datacenter/dtr/2.2/guides/images/admin-settings.png new file mode 100644 index 0000000000..665255fb13 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/admin-settings.png differ diff --git a/datacenter/dtr/2.2/guides/images/architecture-1.png b/datacenter/dtr/2.2/guides/images/architecture-1.png new file mode 100644 index 0000000000..1528ddecf1 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/architecture-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/authentication-authorization-1.svg b/datacenter/dtr/2.2/guides/images/authentication-authorization-1.svg new file mode 100644 index 0000000000..72b3492d96 --- /dev/null +++ b/datacenter/dtr/2.2/guides/images/authentication-authorization-1.svg @@ -0,0 +1,90 @@ + + + + dtr-authorization-1 + Created with Sketch. + + + + + + + + + + + + + + + billing team + + + + + blog team + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + whale/node + + + + + + whale/java + + + + + + whale/golang + + + + + + + Whale organization + + + + + \ No newline at end of file diff --git a/datacenter/dtr/2.2/guides/images/aws-dtr-sg-rules.png b/datacenter/dtr/2.2/guides/images/aws-dtr-sg-rules.png new file mode 100644 index 0000000000..c8cf00297b Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/aws-dtr-sg-rules.png differ diff --git a/datacenter/dtr/2.2/guides/images/aws-engine-sg-rules.png b/datacenter/dtr/2.2/guides/images/aws-engine-sg-rules.png new file mode 100644 index 0000000000..0d6d6e821b Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/aws-engine-sg-rules.png differ diff --git a/datacenter/dtr/2.2/guides/images/aws-instance-id.png b/datacenter/dtr/2.2/guides/images/aws-instance-id.png new file mode 100644 index 0000000000..6337bf442a Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/aws-instance-id.png differ diff --git a/datacenter/dtr/2.2/guides/images/azure_filter.png b/datacenter/dtr/2.2/guides/images/azure_filter.png new file mode 100644 index 0000000000..bc89660185 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/azure_filter.png differ diff --git a/datacenter/dtr/2.2/guides/images/azure_ip.png b/datacenter/dtr/2.2/guides/images/azure_ip.png new file mode 100644 index 0000000000..d42e97bddd Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/azure_ip.png differ diff --git a/datacenter/dtr/2.2/guides/images/azure_portal.png b/datacenter/dtr/2.2/guides/images/azure_portal.png new file mode 100644 index 0000000000..b0507cbed6 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/azure_portal.png differ diff --git a/datacenter/dtr/2.2/guides/images/basic_configuration.png b/datacenter/dtr/2.2/guides/images/basic_configuration.png new file mode 100644 index 0000000000..c7845b0198 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/basic_configuration.png differ diff --git a/datacenter/dtr/2.2/guides/images/console-pull.png b/datacenter/dtr/2.2/guides/images/console-pull.png new file mode 100644 index 0000000000..c2d1194bed Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/console-pull.png differ diff --git a/datacenter/dtr/2.2/guides/images/console-push.png b/datacenter/dtr/2.2/guides/images/console-push.png new file mode 100644 index 0000000000..79ddc7d5ef Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/console-push.png differ diff --git a/datacenter/dtr/2.2/guides/images/create-and-manage-orgs-1.png b/datacenter/dtr/2.2/guides/images/create-and-manage-orgs-1.png new file mode 100644 index 0000000000..1b242c0148 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/create-and-manage-orgs-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/create-and-manage-orgs-2.png b/datacenter/dtr/2.2/guides/images/create-and-manage-orgs-2.png new file mode 100644 index 0000000000..6f010ea345 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/create-and-manage-orgs-2.png differ diff --git a/datacenter/dtr/2.2/guides/images/create-and-manage-orgs-3.png b/datacenter/dtr/2.2/guides/images/create-and-manage-orgs-3.png new file mode 100644 index 0000000000..a0793bd592 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/create-and-manage-orgs-3.png differ diff --git a/datacenter/dtr/2.2/guides/images/create-and-manage-teams-1.png b/datacenter/dtr/2.2/guides/images/create-and-manage-teams-1.png new file mode 100644 index 0000000000..3c0c7ac437 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/create-and-manage-teams-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/create-and-manage-teams-2.png b/datacenter/dtr/2.2/guides/images/create-and-manage-teams-2.png new file mode 100644 index 0000000000..48f69a9c88 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/create-and-manage-teams-2.png differ diff --git a/datacenter/dtr/2.2/guides/images/create-and-manage-teams-3.png b/datacenter/dtr/2.2/guides/images/create-and-manage-teams-3.png new file mode 100644 index 0000000000..07bcd825e5 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/create-and-manage-teams-3.png differ diff --git a/datacenter/dtr/2.2/guides/images/create-and-manage-teams-4.png b/datacenter/dtr/2.2/guides/images/create-and-manage-teams-4.png new file mode 100644 index 0000000000..823defa208 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/create-and-manage-teams-4.png differ diff --git a/datacenter/dtr/2.2/guides/images/create-and-manage-teams-5.png b/datacenter/dtr/2.2/guides/images/create-and-manage-teams-5.png new file mode 100644 index 0000000000..d70972364f Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/create-and-manage-teams-5.png differ diff --git a/datacenter/dtr/2.2/guides/images/create-manage-users-1.png b/datacenter/dtr/2.2/guides/images/create-manage-users-1.png new file mode 100644 index 0000000000..cbf30037c9 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/create-manage-users-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/create-manage-users-2.png b/datacenter/dtr/2.2/guides/images/create-manage-users-2.png new file mode 100644 index 0000000000..91360649ab Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/create-manage-users-2.png differ diff --git a/datacenter/dtr/2.2/guides/images/dashboard-settings-general.png b/datacenter/dtr/2.2/guides/images/dashboard-settings-general.png new file mode 100644 index 0000000000..f30a948b0c Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/dashboard-settings-general.png differ diff --git a/datacenter/dtr/2.2/guides/images/delete-an-image-1.png b/datacenter/dtr/2.2/guides/images/delete-an-image-1.png new file mode 100644 index 0000000000..beff50eefc Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/delete-an-image-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/docker-hub-org-enterprise-license-CSDE-dropdown.png b/datacenter/dtr/2.2/guides/images/docker-hub-org-enterprise-license-CSDE-dropdown.png new file mode 100644 index 0000000000..fe7a6d2045 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/docker-hub-org-enterprise-license-CSDE-dropdown.png differ diff --git a/datacenter/dtr/2.2/guides/images/docker-hub-org-enterprise-license.png b/datacenter/dtr/2.2/guides/images/docker-hub-org-enterprise-license.png new file mode 100644 index 0000000000..2f2976f1a3 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/docker-hub-org-enterprise-license.png differ diff --git a/datacenter/dtr/2.2/guides/images/dtr-integration-1.png b/datacenter/dtr/2.2/guides/images/dtr-integration-1.png new file mode 100644 index 0000000000..a73ef063c1 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/dtr-integration-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/dtr-license-download.png b/datacenter/dtr/2.2/guides/images/dtr-license-download.png new file mode 100644 index 0000000000..f614e202a8 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/dtr-license-download.png differ diff --git a/datacenter/dtr/2.2/guides/images/high-availability-1.png b/datacenter/dtr/2.2/guides/images/high-availability-1.png new file mode 100644 index 0000000000..4a7a323764 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/high-availability-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/high-availability-2.png b/datacenter/dtr/2.2/guides/images/high-availability-2.png new file mode 100644 index 0000000000..c96083a198 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/high-availability-2.png differ diff --git a/datacenter/dtr/2.2/guides/images/install-dtr-0.png b/datacenter/dtr/2.2/guides/images/install-dtr-0.png new file mode 100644 index 0000000000..1528ddecf1 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/install-dtr-0.png differ diff --git a/datacenter/dtr/2.2/guides/images/install-dtr-1.png b/datacenter/dtr/2.2/guides/images/install-dtr-1.png new file mode 100644 index 0000000000..c17e7f0d5c Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/install-dtr-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/install-dtr-2.png b/datacenter/dtr/2.2/guides/images/install-dtr-2.png new file mode 100644 index 0000000000..2a284ed12f Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/install-dtr-2.png differ diff --git a/datacenter/dtr/2.2/guides/images/install-dtr-3.png b/datacenter/dtr/2.2/guides/images/install-dtr-3.png new file mode 100644 index 0000000000..37dea664cb Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/install-dtr-3.png differ diff --git a/datacenter/dtr/2.2/guides/images/install-dtr-4.png b/datacenter/dtr/2.2/guides/images/install-dtr-4.png new file mode 100644 index 0000000000..87508be693 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/install-dtr-4.png differ diff --git a/datacenter/dtr/2.2/guides/images/jenkins-plugins.png b/datacenter/dtr/2.2/guides/images/jenkins-plugins.png new file mode 100644 index 0000000000..82cd8a00f9 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/jenkins-plugins.png differ diff --git a/datacenter/dtr/2.2/guides/images/jenkins-ui.png b/datacenter/dtr/2.2/guides/images/jenkins-ui.png new file mode 100644 index 0000000000..e828dfbab8 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/jenkins-ui.png differ diff --git a/datacenter/dtr/2.2/guides/images/license-1.png b/datacenter/dtr/2.2/guides/images/license-1.png new file mode 100644 index 0000000000..58539aa40d Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/license-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/license-2.png b/datacenter/dtr/2.2/guides/images/license-2.png new file mode 100644 index 0000000000..37dea664cb Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/license-2.png differ diff --git a/datacenter/dtr/2.2/guides/images/monitor-1.png b/datacenter/dtr/2.2/guides/images/monitor-1.png new file mode 100644 index 0000000000..87508be693 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/monitor-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/monitor-2.png b/datacenter/dtr/2.2/guides/images/monitor-2.png new file mode 100644 index 0000000000..c17e7f0d5c Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/monitor-2.png differ diff --git a/datacenter/dtr/2.2/guides/images/overview-1.png b/datacenter/dtr/2.2/guides/images/overview-1.png new file mode 100644 index 0000000000..36153b8a07 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/overview-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/overview-2.png b/datacenter/dtr/2.2/guides/images/overview-2.png new file mode 100644 index 0000000000..9bb034c54d Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/overview-2.png differ diff --git a/datacenter/dtr/2.2/guides/images/pull-an-image-1.png b/datacenter/dtr/2.2/guides/images/pull-an-image-1.png new file mode 100644 index 0000000000..b95124da2b Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/pull-an-image-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/pull-an-image-2.png b/datacenter/dtr/2.2/guides/images/pull-an-image-2.png new file mode 100644 index 0000000000..d9e91bc86b Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/pull-an-image-2.png differ diff --git a/datacenter/dtr/2.2/guides/images/push-an-image-1.png b/datacenter/dtr/2.2/guides/images/push-an-image-1.png new file mode 100644 index 0000000000..ce53a90d17 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/push-an-image-1.png differ diff --git a/datacenter/dtr/2.2/guides/images/push-an-image-2.png b/datacenter/dtr/2.2/guides/images/push-an-image-2.png new file mode 100644 index 0000000000..6ec8ae7463 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/push-an-image-2.png differ diff --git a/datacenter/dtr/2.2/guides/images/push-an-image-3.png b/datacenter/dtr/2.2/guides/images/push-an-image-3.png new file mode 100644 index 0000000000..65e6e8b14d Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/push-an-image-3.png differ diff --git a/datacenter/dtr/2.2/guides/images/repo.png b/datacenter/dtr/2.2/guides/images/repo.png new file mode 100644 index 0000000000..9b08a6bbfc Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/repo.png differ diff --git a/datacenter/dtr/2.2/guides/images/script-copy.png b/datacenter/dtr/2.2/guides/images/script-copy.png new file mode 100644 index 0000000000..3fdf87c7b8 Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/script-copy.png differ diff --git a/datacenter/dtr/2.2/guides/images/use-your-certificates-1.png b/datacenter/dtr/2.2/guides/images/use-your-certificates-1.png new file mode 100644 index 0000000000..c23e89e2aa Binary files /dev/null and b/datacenter/dtr/2.2/guides/images/use-your-certificates-1.png differ diff --git a/datacenter/dtr/2.2/guides/index.md b/datacenter/dtr/2.2/guides/index.md new file mode 100644 index 0000000000..4e43f573bc --- /dev/null +++ b/datacenter/dtr/2.2/guides/index.md @@ -0,0 +1,38 @@ +--- +description: Learn how to install, configure, and use Docker Trusted Registry. +keywords: docker, registry, repository, images +title: Docker Trusted Registry overview +--- + +Docker Trusted Registry (DTR) is the enterprise-grade image storage solution +from Docker. You install it behind your firewall so that you can securely store +and manage the Docker images you use in your applications. + +## Image management + +Docker Trusted Registry can be installed on-premises, or on a virtual private +cloud. And with it, you can store your Docker images securely, behind your +firewall. + +![](images/overview-1.png) + +You can use DTR as part of your continuous integration, and continuous +delivery processes to build, run, and ship your applications. + + +## Built-in security and access control + +DTR uses the same authentication mechanism as Docker Universal Control Plane. +It has a built-in authentication mechanism, and also integrates with LDAP +and Active Directory. It also supports Role Based Access Control (RBAC). + +This allows you to implement fine-grain access control policies on who has +access to your Docker images. + +![](images/overview-2.png) + + +## Where to go next + +* [DTR architecture](architecture.md) +* [Install DTR](install/index.md) diff --git a/datacenter/dtr/2.2/guides/install/index.md b/datacenter/dtr/2.2/guides/install/index.md new file mode 100644 index 0000000000..0f30232e48 --- /dev/null +++ b/datacenter/dtr/2.2/guides/install/index.md @@ -0,0 +1,130 @@ +--- +description: Learn how to install Docker Trusted Registry for production. +keywords: docker, dtr, registry, install +title: Install Docker Trusted Registry +--- + +Docker Trusted Registry (DTR) is a containerized application that runs on a +swarm managed by Docker Universal Control Plane (UCP). It can be installed +on-premises or on a cloud infrastructure. + +Use these instructions to install DTR. + +## Step 1. Validate the system requirements + +The first step in installing DTR, is ensuring your +infrastructure has all the [requirements DTR needs to run](system-requirements.md). + +## Step 2. Install UCP + +Since DTR requires Docker Universal Control Plane (UCP) +to run, you need to install UCP on all the nodes where you plan to install DTR. +[Learn how to install UCP](/datacenter/ucp/2.0/guides/installation/index.md). + +DTR needs to be installed on a worker node that is being managed by UCP. +You can't install DTR on a standalone Docker Engine. + +![](../images/install-dtr-0.png) + + +## Step 3. Install DTR + +To install DTR you use the `docker/dtr` image. This image has commands to +install, configure, and backup DTR. + +Run the following command to install DTR: + +```none +# Pull the latest version of DTR +$ docker pull docker/dtr + +# Install DTR +$ docker run -it --rm \ + docker/dtr install \ + --ucp-node \ + --ucp-insecure-tls +``` + +Where the `--ucp-node` is the hostname of the UCP node where you want to deploy +DTR. `--ucp-insecure-tls` tells the installer to trust the certificates used +by UCP. + +The install command has other flags for customizing DTR at install time. +Check the [reference documentation to learn more](../../reference/cli/install.md). + + +## Step 4. Check that DTR is running + +In your browser, navigate to the Docker **Universal Control Plane** +web UI, and navigate to the **Applications** screen. DTR should be listed +as an application. + +![](../images/install-dtr-1.png) + +You can also access the **DTR web UI**, to make sure it is working. In your +browser, navigate to the address were you installed DTR. + +![](../images/install-dtr-2.png) + + +## Step 5. Configure DTR + +After installing DTR, you should configure: + + * The certificates used for TLS communication. [Learn more](../configure/index.md). + * The storage backend to store the Docker images. [Lean more](../configure/configure-storage.md). + + To perform these configurations, navigate to the **Settings** page of DTR. + + ![](../images/install-dtr-3.png) + + +## Step 6. Test pushing and pulling + +Now that you have a working installation of DTR, you should test that you can +push and pull images to it. +[Learn how to push and pull images](../repos-and-images/index.md). + +## Step 7. Join replicas to the cluster + +This step is optional. + +To set up DTR for [high availability](../high-availability/index.md), +you can add more replicas to your DTR cluster. Adding more replicas allows you +to load-balance requests across all replicas, and keep DTR working if a +replica fails. + +For high-availability you should set 3, 5, or 7 DTR replicas. The nodes where +you're going to install these replicas also need to be managed by UCP. + +To add replicas to a DTR cluster, use the `docker/dtr join` command: + +1. Load your UCP user bundle. + +2. Run the join command. + + When you join a replica to a DTR cluster, you need to specify the + ID of a replica that is already part of the cluster. You can find an + existing replica ID by going to the **Applications** page on UCP. + + Then run: + + ```none + docker run -it --rm \ + docker/dtr join \ + --ucp-node \ + --ucp-insecure-tls + ``` + +3. Check that all replicas are running. + + In your browser, navigate to the Docker **Universal Control Plane** + web UI, and navigate to the **Applications** screen. All replicas should + be displayed. + + ![](../images/install-dtr-4.png) + +## See also + +* [Install DTR offline](install-offline.md) +* [Upgrade DTR](upgrade.md) diff --git a/datacenter/dtr/2.2/guides/install/install-offline.md b/datacenter/dtr/2.2/guides/install/install-offline.md new file mode 100644 index 0000000000..3fb39ec9f7 --- /dev/null +++ b/datacenter/dtr/2.2/guides/install/install-offline.md @@ -0,0 +1,60 @@ +--- +description: Learn how to install Docker Trusted Registry on a machine with no internet + access. +keywords: docker, registry, install, offline +title: Install Docker Trusted Registry offline +--- + +The procedure to install Docker Trusted Registry on a host is the same, +whether that host has access to the internet or not. + +The only difference when installing on an offline host, +is that instead of pulling the UCP images from Docker Hub, you use a +computer that is connected to the internet to download a single package with +all the images. Then you copy that package to the host where you’ll install DTR. + +## Versions available + +{% include components/ddc_url_list.html %} + +## Download the offline package + +Use a computer with internet access to download a single package with all +Docker Datacenter components: + +```bash +$ wget -O docker-datacenter.tar.gz +``` + +Now that you have the package in your local machine, you can transfer it to +the machines where you want to install DTR. + +For each machine where you want to install DTR: + +1. Copy the Docker Datacenter package to that machine. + + ```bash + $ scp docker-datacenter.tar.gz @:/tmp + ``` + +2. Use ssh to login into the hosts where you transferred the package. + +3. Load the Docker Datacenter images. + + Once the package is transferred to the hosts, you can use the + `docker load` command, to load the Docker images from the tar archive: + + ```bash + $ docker load < docker-datacenter.tar.gz + ``` + +## Install DTR + +Now that the offline hosts have all the images needed to install DTR, +you can [install DTR on that host](index.md). + + +## Where to go next + +* [DTR architecture](../architecture.md) +* [Install DTR](index.md) diff --git a/datacenter/dtr/2.2/guides/install/license.md b/datacenter/dtr/2.2/guides/install/license.md new file mode 100644 index 0000000000..4ba07b3c55 --- /dev/null +++ b/datacenter/dtr/2.2/guides/install/license.md @@ -0,0 +1,40 @@ +--- +description: Learn how to license your Docker Trusted Registry installation. +keywords: docker, dtr, install, license +title: License Docker Trusted Registry +--- + +By default, you don't need to license your Docker Trusted Registry. When +installing DTR, it automatically starts using the same license file used on +your Docker Universal Control Plane cluster. + +However, there are some situations when you have to manually license your +DTR installation: + +* When upgrading to a new major version, +* When your current license expires. + + +## Download your license + +Go to [Docker Store](https://store.docker.com/bundles/docker-datacenter) and +download your license. + +![](../images/license-1.png) + + +## License your installation + +Once you've downloaded the license file, you can apply it to your DTR +installation. Navigate to the **DTR web UI**, and then go to the **Settings +page**. + +![](../images/license-2.png) + +Click the **Apply new license** button, and upload your new license file. + + +## Where to go next + +* [Install DTR](index.md) +* [Install DTR offline](install-offline.md) diff --git a/datacenter/dtr/2.2/guides/install/scale-your-deployment.md b/datacenter/dtr/2.2/guides/install/scale-your-deployment.md new file mode 100644 index 0000000000..cda1e710c2 --- /dev/null +++ b/datacenter/dtr/2.2/guides/install/scale-your-deployment.md @@ -0,0 +1,66 @@ +--- +title: Scale your deployment +description: Lean how to scale Docker Trusted Registry by adding and removing replicas. +keywords: docker, dtr, install, deploy +--- + +Docker Trusted Registry is designed to scale horizontally as your usage +increases. You can add or remove replicas to make DTR scale to your needs +or for high availability. + +To set up DTR for [high availability](../high-availability/index.md), +you can add more replicas to your DTR cluster. Adding more replicas allows you +to load-balance requests across all replicas, and keep DTR working if a +replica fails. + +For high-availability you should set 3, 5, or 7 DTR replicas. The nodes where +you're going to install these replicas also need to be managed by UCP. + +## Join more DTR replicas + +To add replicas to an existing DTR deployment: + +1. Use ssh to log into a node that is already part of UCP. + +2. Run the DTR join command: + + ```none + docker run -it --rm \ + docker/dtr join \ + --ucp-node \ + --ucp-insecure-tls + ``` + + Where the `--ucp-node` is the hostname of the UCP node where you want to + deploy the DTR replica. `--ucp-insecure-tls` tells the command to trust the + certificates used by UCP. + +3. If you have a load balancer, add this DTR replica to the load balancing pool. + +## Remove existing replicas + +To remove a DTR replica from your deployment: + +1. Use ssh to log into a node that is already part of UCP. +2. Run the DTR remove command: + +```none +docker run -it --rm \ + docker/dtr remove \ + --ucp-insecure-tls +``` + +You will be prompted for: + +* Existing replica id: the id of any healthy DTR replica of that cluster +* Replica id: the id of the DTR replica you want to remove. It can be the id of an +unhealthy replica +* UCP username and password: the administrator credentials for UCP + +If you're load-balancing user requests across multiple DTR replicas, don't +forget to remove this replica from the load balancing pool. + +## Where to go next + +* [Install DTR](index.md) +* [Uninstall DTR](uninstall.md) diff --git a/datacenter/dtr/2.2/guides/install/system-requirements.md b/datacenter/dtr/2.2/guides/install/system-requirements.md new file mode 100644 index 0000000000..4f7a099e28 --- /dev/null +++ b/datacenter/dtr/2.2/guides/install/system-requirements.md @@ -0,0 +1,41 @@ +--- +description: Learn about the system requirements for installing Docker Trusted Registry. +keywords: docker, DTR, architecture, requirements +title: Docker Trusted Registry system requirements +--- + +Docker Trusted Registry can be installed on-premises or on the cloud. +Before installing, be sure your infrastructure has these requirements. + +## Software requirements + +You can only install DTR on a node that is being managed by Docker Universal +Control Plane 2.0. + + +## Ports used + +When installing DTR on a node, make sure the following ports are open on that +node: + +| Direction | Port | Purpose | +|:---------:|:-----|:--------------------------------------| +| in | 80 | Web app and API client access to DTR. | +| in | 443 | Web app and API client access to DTR. | + +These ports are configurable when installing DTR. + +## Compatibility and maintenance lifecycle + +Docker Datacenter is a software subscription that includes 3 products: + +* CS Docker Engine, +* Docker Trusted Registry, +* Docker Universal Control Plane. + +[Learn more about the maintenance lifecycle for these products](http://success.docker.com/Get_Help/Compatibility_Matrix_and_Maintenance_Lifecycle). + +## Where to go next + +* [DTR architecture](../architecture.md) +* [Install DTR](index.md) diff --git a/datacenter/dtr/2.2/guides/install/uninstall.md b/datacenter/dtr/2.2/guides/install/uninstall.md new file mode 100644 index 0000000000..76c8a4f075 --- /dev/null +++ b/datacenter/dtr/2.2/guides/install/uninstall.md @@ -0,0 +1,39 @@ +--- +description: Learn how to uninstall your Docker Trusted Registry installation. +keywords: docker, dtr, install, uninstall +title: Uninstall Docker Trusted Registry +--- + +Use the `remove` command, to remove a DTR replica from an existing deployment. +To uninstall a DTR cluster you remove all DTR replicas one at a time. + +The remove command informs the DTR cluster that the node is about to be removed, +then it removes the replica, stops and removes all DTR containers from that node, +and deletes all DTR volumes. + +To uninstall a DTR replica, run: + +```none +docker run -it --rm \ + docker/dtr remove \ + --ucp-insecure-tls +``` + +You will be prompted for: + +* Existing replica id: the id of any healthy DTR replica of that cluster +* Replica id: the id of the DTR replica you want to remove. It can be the id of an +unhealthy replica that you want to remove from your deployment +* UCP username and password: the administrator credentials for UCP + +To ensure you don't loose data, DTR will not remove the last replica from your +deployment. To confirm you really want to remove that replica, use the +`--force-remove` flag. + +To see what options are available in the uninstall command, check the +[uninstall command reference documentation](../../reference/cli/remove.md). + +## Where to go next + +* [Scale your deployment](scale-your-deployment.md) +* [Install DTR](index.md) diff --git a/datacenter/dtr/2.2/guides/install/upgrade.md b/datacenter/dtr/2.2/guides/install/upgrade.md new file mode 100644 index 0000000000..22e7559190 --- /dev/null +++ b/datacenter/dtr/2.2/guides/install/upgrade.md @@ -0,0 +1,57 @@ +--- +description: Learn how to upgrade your Docker Trusted Registry +keywords: docker, dtr, upgrade, install +title: Upgrade DTR +--- + +The first step in upgrading to a new minor version or patch release of DTR 2.0, +is ensuring you're running DTR 2.0. If that's not the case, start by upgrading +your installation to version 2.0.0, and then upgrade to the latest version +available. + +There is no downtime when upgrading an highly-available DTR cluster. If your +DTR deployment has a single replica, schedule the upgrade to take place outside +business peak hours to ensure the impact on your business is close to none. + +## Step 1. Upgrade DTR to 2.0 + +Make sure you're running DTR 2.0. If that's not the case, [upgrade your +installation to the 2.0 version](/datacenter/dtr/2.0/install/upgrade/upgrade-major.md). + +## Step 2. Upgrade DTR + +To upgrade DTR you use the `upgrade` command. + +1. Download a UCP client bundle. + + Having a UCP client bundle allows you to run Docker commands on a UCP + cluster. Download a UCP client bundle and set up your CLI client to use it. + +2. Pull the latest `docker/dtr` image. + + ```bash + $ docker pull docker/dtr: + ``` + + If the node you're upgrading doesn't have access to the internet, you can + use a machine with internet connection to + [pull all the DTR images](install-offline.md). + +4. Run the upgrade command. + + The upgrade command upgrades all DTR replicas that are part of your cluster: + + ```bash + $ docker run -it --rm \ + docker/dtr: upgrade \ + --ucp-insecure-tls + ``` + + By default the upgrade command runs in interactive mode and prompts you for + any necessary information. You can also check the + [reference documentation](../../reference/cli/index.md) for other existing flags. + +## Where to go next + +* [System requirements](system-requirements.md) +* [Monitor DTR](..//monitor-troubleshoot/index.md) diff --git a/datacenter/dtr/2.2/guides/monitor-troubleshoot/index.md b/datacenter/dtr/2.2/guides/monitor-troubleshoot/index.md new file mode 100644 index 0000000000..85f73e8f69 --- /dev/null +++ b/datacenter/dtr/2.2/guides/monitor-troubleshoot/index.md @@ -0,0 +1,46 @@ +--- +description: Learn how to monitor your DTR installation. +keywords: docker, registry, monitor, troubleshoot +title: Monitor Docker Trusted Registry +--- + +Docker Trusted Registry is a Dockerized application. To monitor it, you can +use the same tools and techniques you're already using to monitor other +containerized applications running on your cluster. One way to monitor +DTR is using the monitoring capabilities of Docker Universal Control Plane. + +In your browser, log in to **Docker Universal Control Plane** (UCP), and +navigate to the **Applications** page. + +To make it easier to find DTR, use the search box to **search for the +DTR application**. If you have DTR set up for high-availability, then all the +DTR nodes are displayed. + +![](../images/monitor-1.png) + +**Click on the DTR application** to see all of its containers, and if they're +running. **Click on a container** to see its details, like configurations, +resources, and logs. + +![](../images/monitor-2.png) + +## Health checks + +DTR also exposes several endpoints you can use to assess if a DTR replica +is healthy or not: + +* `/health`: Checks if the several components of a DTR replica are healthy, and +returns a simple json response. This is useful for load balancing or other +automated health check tasks. +* `/load_balancer_status`: Checks if the several components of a DTR replica +can be reached, and displays that information in a table. This is useful for +an administrator to gauge the status of a DTR replica. +* `/nginx_status`: Returns the number of connections being handled by the +NGINX front-end used by DTR. +* `/api/v0/meta/cluster_status`: Returns extensive information about all DTR +replicas. + +## Where to go next + +* [Troubleshoot DTR](troubleshoot.md) +* [DTR architecture](../architecture.md) diff --git a/datacenter/dtr/2.2/guides/monitor-troubleshoot/troubleshoot.md b/datacenter/dtr/2.2/guides/monitor-troubleshoot/troubleshoot.md new file mode 100644 index 0000000000..1b6015331d --- /dev/null +++ b/datacenter/dtr/2.2/guides/monitor-troubleshoot/troubleshoot.md @@ -0,0 +1,62 @@ +--- +description: Learn how to troubleshoot your DTR installation. +keywords: docker, registry, monitor, troubleshoot +title: Troubleshoot Docker Trusted Registry +--- + +High availability in DTR depends on having overlay networking working in UCP. +To manually test that overlay networking is working in UCP run the following +commands on two different UCP machines. + +``` +docker run -it --rm --net dtr-ol --name overlay-test1 --entrypoint sh docker/dtr +docker run -it --rm --net dtr-ol --name overlay-test2 --entrypoint ping docker/dtr -c 3 overlay-test1 +``` + +You can create new overlay network for this test with `docker network create -d overaly network-name`. +You can also use any images that contain `sh` and `ping` for this test. + +If the second command succeeds, overlay networking is working. + +## DTR doesn't come up after a Docker restart + +This is a known issue with Docker restart policies when DTR is running on the same +machine as a UCP controller. If this happens, you can simply restart the DTR replica +from the UCP UI under "Applications". The best workaround right now is to not run +DTR on the same node as a UCP controller. + +## Etcd refuses to start after a Docker restart + +If you see the following log message in etcd's logs after a DTR restart it means that +your DTR replicas are on machines that don't have their clocks synchronized. Etcd requires +synchronized clocks to function correctly. + +``` +2016-04-27 17:56:34.086748 W | rafthttp: the clock difference against peer aa4fdaf4c562342d is too high [8.484795885s > 1s] +``` + +## Accessing the RethinkDB Admin UI + + > Warning: This command will expose your database to the internet with no authentication. Use with caution. + +Run this on the UCP node that has a DTR replica with the given replica id: + +``` +docker run --rm -it --net dtr-br -p 9999:8080 svendowideit/ambassador dtr-rethinkdb-$REPLICA_ID 8080 +``` + +Options to make this more secure: + +* Use `-p 127.0.0.1:9999:8080` to expose the admin UI only to localhost +* Use an SSH tunnel in combination with exposing the port only to localhost +* Use a firewall to limit which IPs are allowed to connect +* Use a second proxy with TLS and basic auth to provide secure access over the Internet + +## Accessing etcd directly + +You can execute etcd commands on a UCP node hosting a DTR replica using etcdctl +via the following docker command: + +``` +docker run --rm -v dtr-ca-$REPLICA_ID:/ca --net dtr-br -it --entrypoint /etcdctl docker/dtr-etcd:v2.2.4 --endpoint https://dtr-etcd-$REPLICA_ID.dtr-br:2379 --ca-file /ca/etcd/cert.pem --key-file /ca/etcd-client/key.pem --cert-file /ca/etcd-client/cert.pem +``` diff --git a/datacenter/dtr/2.2/guides/release-notes.md b/datacenter/dtr/2.2/guides/release-notes.md new file mode 100644 index 0000000000..318b32ae00 --- /dev/null +++ b/datacenter/dtr/2.2/guides/release-notes.md @@ -0,0 +1,98 @@ +--- +description: Docker Trusted Registry release notes +keywords: docker trusted registry, whats new, release notes +redirect_from: +- /docker-trusted-registry/release-notes/release-notes/ +- /docker-trusted-registry/release-notes/ +title: Docker Trusted Registry release notes +--- + +Here you can learn about new features, bug fixes, breaking changes and +known issues for each DTR version. + +You can then use [the upgrade instructions](install/upgrade.md), +to upgrade your installation to the latest release. + +## DTR 2.1.2 + +(8 Dec 2016) + +**Features** + +* The web UI now alerts when no backups have been made in a week + + +**Bug fixes** + +* Restore operation now prints logs +* Google Cloud Storage driver now throttles data if there's heavy load, instead +of generating errors +* Upgraded Alpine images used by the DTR services to fix a [security +vulnerability with Expat2](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-4472) +* Fix for tag migration when pushing non-standard manifests +* Fix for tag migration failing during upgrade due to database timeouts + + +## DTR 2.1.1 + +(28 Nov 2016) + +**Features** + +* Updated backend storage configuration to use AWS v4 headers +* Added support for Scality, an Amazon S3 compatible object storage + +**Other Improvements** + +* Health check now reports failures after 3 consecutive failures +* Restore command now restores Notary server data +* Fix subsequent joins after a failed join + + +## DTR 2.1.0 + +(10 Nov 2016) + +**Features** + +* Out of the box integration between UCP and DTR. You no longer need to +configure UCP to trust DTR and vice versa. Requires UCP 2.0 or higher +* DTR now contains its own Notary server you can use to store secure image +metadata +* Notary is highly-available if DTR is configured for high availability +* Added support of Google Cloud Storage driver using YML configurations +* Added support for Amazon S3 compatible storages like Cleversafe object store +by IBM + +**Installer** + +Made several improvements to the DTR installer, and added more configuration +flag, for more customization at install time. + +* Several improvements to make installation more stable +* Added the `--log-tls-ca-cert`, `--log-tls-cert`, `--log-tls-key`, +`--log-tls-skip-verify` for specifying the TLS certificates to be used +with the DTR logging driver +* Added the `--enable-pprof` to enable pprof profiling of the server +* Added the `--etcd-heartbeat-interval`, `--etcd-election-timeout`, and +`--etcd-snapshot-count` options to configure the key-value store used by DTR +* Added the `--nfs-storage-url`, and `--dtr-storage-volume` options to allow +configuring where Docker images are stored + +**Web UI** + +* Web UI now displays information about tag metadata and logs +* Improved garbage collection settings + +**General improvements** + +* Better integration with NFS storage driver to store Docker images +* Better integration with Filesystem storage driver to store Docker images +* Improved garbage collection performance and efficiency +* Improved health checking API for more granularity + +**Known issues** + +* When upgrading to this version, tag metadata is migrated to DTR's internal +database. Depending on how many images are stored in DTR this can take some +time to complete. diff --git a/datacenter/dtr/2.2/guides/repos-and-images/delete-an-image.md b/datacenter/dtr/2.2/guides/repos-and-images/delete-an-image.md new file mode 100644 index 0000000000..baeb410e0f --- /dev/null +++ b/datacenter/dtr/2.2/guides/repos-and-images/delete-an-image.md @@ -0,0 +1,15 @@ +--- +description: Learn how to delete images from your repositories on Docker Trusted Registry. +keywords: docker, registry, repository, delete, image +title: Delete an image +--- + +To delete an image, go to the **DTR web UI**, and navigate to the image +**repository** you want to delete. In the **Tags** tab, select all the image +tags you want to delete, and click the **Delete button**. + +![](../images/delete-an-image-1.png) + +You can also delete all image versions, by deleting the repository. For that, +in the image **repository**, navigate to the **Settings** tab, and click the +**Delete** button. diff --git a/datacenter/dtr/2.2/guides/repos-and-images/index.md b/datacenter/dtr/2.2/guides/repos-and-images/index.md new file mode 100644 index 0000000000..c939d3a470 --- /dev/null +++ b/datacenter/dtr/2.2/guides/repos-and-images/index.md @@ -0,0 +1,111 @@ +--- +description: Learn how to configure your Docker Engine to push and pull images from + Docker Trusted Registry. +keywords: docker, registry, TLS, certificates +title: Configure your Docker Engine +--- + +By default Docker Engine uses TLS when pushing and pulling images to an +image registry like Docker Trusted Registry. + +If DTR is using the default configurations or was configured to use +self-signed certificates, you need to configure your Docker Engine to trust DTR. +Otherwise, when you try to login or push and pull images to DTR, you'll get an +error: + +```none +$ docker login dtr.example.org + +x509: certificate signed by unknown authority +``` + +The first step to make your Docker Engine trust the certificate authority used +by DTR is to get the DTR CA certificate. Then you configure your operating +system to trust that certificate. + +## Configure your host + +### macOS + +In your browser navigate to `https:///ca` to download the TLS +certificate used by DTR. Then +[add that certificate to the macOS trust store](https://support.apple.com/kb/PH18677?locale=en_US). + +### Windows + +In your browser navigate to `https:///ca` to download the TLS +certificate used by DTR. Then +[add that certificate to the Windows trust store](https://technet.microsoft.com/en-us/library/cc754841(v=ws.11).aspx). + + +### Ubuntu/ Debian + +```bash +# Download the DTR CA certificate +$ curl -k https:///ca -o /usr/local/share/ca-certificates/.crt +# Refresh the list of certificates to trust +$ sudo update-ca-certificates +# Restart the Docker daemon +$ sudo service docker restart +``` + +### RHEL/ CentOS + +```bash +# Download the DTR CA certificate +$ curl -k https:///ca -o /etc/pki/ca-trust/source/anchors/.crt +# Refresh the list of certificates to trust +$ sudo update-ca-trust +# Restart the Docker daemon +$ sudo /bin/systemctl restart docker.service +``` + +### Boot2Docker + +1. Login into the virtual machine with ssh: + + ```bash + docker-machine ssh + ``` + +2. Create the `bootsync.sh` file, and make it executable: + + ```bash + sudo touch /var/lib/boot2docker/bootsync.sh + sudo chmod 755 /var/lib/boot2docker/bootsync.sh + ``` + +3. Add the following content to the `bootsync.sh` file. You can use nano or vi + for this. + + ```bash + #!/bin/sh + + cat /var/lib/boot2docker/server.pem >> /etc/ssl/certs/ca-certificates.crt + ``` + +4. Add the DTR CA certificate to the `server.pem` file: + + ```bash + curl -k https:///ca | sudo tee -a /var/lib/boot2docker/server.pem + ``` + +5. Run `bootsync.sh` and restart the Docker daemon: + + ```bash + sudo /var/lib/boot2docker/bootsync.sh + sudo /etc/init.d/docker restart + ``` + +## Login into DTR + +To validate that your Docker daemon trusts DTR, trying authenticating against +DTR. + +```bash +docker login dtr.example.org +``` + +## Where to go next + +* [Pull an image from DTR](pull-an-image.md) diff --git a/datacenter/dtr/2.2/guides/repos-and-images/pull-an-image.md b/datacenter/dtr/2.2/guides/repos-and-images/pull-an-image.md new file mode 100644 index 0000000000..31a1a2ce5c --- /dev/null +++ b/datacenter/dtr/2.2/guides/repos-and-images/pull-an-image.md @@ -0,0 +1,30 @@ +--- +description: Learn how to pull an image from Docker Trusted Registry. +keywords: docker, registry, images, pull +title: Pull an image from DTR +--- + +Pulling an image from Docker Trusted Registry is the same as pulling an image +from Docker Hub. Since DTR is secure by default, you always need to authenticate +before pulling images. + +In this example, DTR can be accessed at dtr.company.org, and the user +was granted permissions to access the Java, Python, and Golang repositories. + +![](../images/pull-an-image-1.png) + +Click on the repository to see its details. + +![](../images/pull-an-image-2.png) + +To pull the 1.7 tag of the dave.lauper/golang image, run: + +```bash +$ docker login dtr.company.org +$ docker pull dtr.company.org/dave.lauper/golang:1.7 +``` + +## Where to go next + +* [Push an image to DTR](push-an-image.md) +* [Configure your Docker Engine](index.md) diff --git a/datacenter/dtr/2.2/guides/repos-and-images/push-an-image.md b/datacenter/dtr/2.2/guides/repos-and-images/push-an-image.md new file mode 100644 index 0000000000..5f03c6cbef --- /dev/null +++ b/datacenter/dtr/2.2/guides/repos-and-images/push-an-image.md @@ -0,0 +1,68 @@ +--- +description: Learn how to push an image to Docker Trusted Registry. +keywords: docker, registry, images, pull +title: Push an image to DTR +--- + +Pushing an image to Docker Trusted Registry is the same as pushing an image +to Docker Hub. +Since DTR is secure by default, you need to create the image repository before +being able to push the image to DTR. + +In this example, we'll create the 'golang' repository in DTR, and push the +Golang 1.7 image to it. + +## Create a repository + +To create a new repository, navigate to the **DTR web application**, and click +the **New repository** button. + +![](../images/push-an-image-1.png) + +Add a **name and description** for the repository, and choose whether your +repository is public or private: + + * Public repositories are visible to all users, but can only be changed by + users granted with permission to write them. + * Private repositories can only be seen by users that have been granted + permissions to that repository. + +![](../images/push-an-image-2.png) + +Click **Save** to create the repository. + +When creating a repository in DTR, the full name of the repository becomes +`//`. In this example, the full +name of our repository will be `dtr.company.org/dave.lauper/golang`. + +## Tag the image + +Before you can push an image to DTR, you need to tag it with the full +repository name. A tag defines where the image was pulled from, and where +it will be pushed to. + +```bash +# Pull from Docker Hub the 1.7 tag of the golang image +$ docker pull golang:1.7 + +# Tag the golang:1.7 image with the full repository name we've created in DTR +$ docker tag golang:1.7 dtr.company.org/dave.lauper/golang:1.7 +``` + +## Push the image + +Now that you have tagged the image, you only need to authenticate and push the +image to DTR. + +```bash +$ docker login dtr.company.org +$ docker push dtr.company.org/dave.lauper/golang:1.7 +``` + +Go back to the **DTR web UI** to validate that the tag was successfully pushed. + +![](../images/push-an-image-3.png) + +## Where to go next + +* [Pull an image from DTR](pull-an-image.md) diff --git a/datacenter/dtr/2.2/guides/support.md b/datacenter/dtr/2.2/guides/support.md new file mode 100644 index 0000000000..419ffc9f13 --- /dev/null +++ b/datacenter/dtr/2.2/guides/support.md @@ -0,0 +1,16 @@ +--- +description: Your Docker subscription gives you access to prioritized support. You + can file tickets via email, your the support portal. +keywords: Docker, support, help +title: Get support for DTR +--- + +Your Docker Data Center, or Docker Trusted Registry subscription gives you +access to prioritized support. The service levels depend on your subscription. + +If you need help, you can file a ticket via: + +* [Email](mailto:support@docker.com) +* [Docker support page](https://support.docker.com/) + +Be sure to use your company email when filing tickets. diff --git a/datacenter/dtr/2.2/guides/user-management/create-and-manage-orgs.md b/datacenter/dtr/2.2/guides/user-management/create-and-manage-orgs.md new file mode 100644 index 0000000000..96382174cf --- /dev/null +++ b/datacenter/dtr/2.2/guides/user-management/create-and-manage-orgs.md @@ -0,0 +1,47 @@ +--- +description: Learn how to set up organizations to enforce security in Docker Trusted + Registry. +keywords: docker, registry, security, permissions, organizations +title: Create and manage organizations +--- + +When a user creates a repository, only that user has permissions to make changes +to the repository. + +For team workflows, where multiple users have permissions to manage a set of +common repositories, create an organization. By default, DTR has one organization +called 'docker-datacenter', that is shared between DTR and UCP. + +To create a new organization, navigate to the **DTR web UI**, and go to the +**Organizations** page. + +![](../images/create-and-manage-orgs-1.png) + +Click the **New organization** button, and choose a meaningful name for the +organization. + +![](../images/create-and-manage-orgs-2.png) + +Repositories owned by this organization will contain the organization name, so +to pull an image from that repository, you'll use: + +```bash +$ docker pull //: +``` + +Click **Save** to create the organization, and then **click the organization** +to define which users are allowed to manage this +organization. These users will be able to edit the organization settings, edit +all repositories owned by the organization, and define the user permissions for +this organization. + +For this, click the **Add user** button, **select the users** that you want to +grant permissions to manage the organization, and click +**Save**. Then change their permissions from 'Member' to **Admin**. + +![](../images/create-and-manage-orgs-3.png) + +## Where to go next + +* [Create and manage users](create-and-manage-users.md) +* [Create and manage teams](create-and-manage-teams.md) diff --git a/datacenter/dtr/2.2/guides/user-management/create-and-manage-teams.md b/datacenter/dtr/2.2/guides/user-management/create-and-manage-teams.md new file mode 100644 index 0000000000..1cd002b51a --- /dev/null +++ b/datacenter/dtr/2.2/guides/user-management/create-and-manage-teams.md @@ -0,0 +1,55 @@ +--- +description: Learn how to manage teams to enforce fine-grain access control in Docker + Trusted Registry. +keywords: docker, registry, security, permissions, teams +title: Create and manage teams +--- + +You can extend the user's default permissions by granting them fine-grain +permissions over image repositories. You do this by adding the user to a team. +A team defines the permissions a set of users have for a set of repositories. + +To create a new team, go to the **DTR web UI**, and navigate to the +**Organizations** page. +Then **click the organization** where you want to create the team. In this +example, we'll create the 'billing' team under the 'whale' organization. + +![](../images/create-and-manage-teams-1.png) + +Click '**+**' to create a new team, and give it a name. + +![](../images/create-and-manage-teams-2.png) + +## Add users to a team + +Once you have created a team, **click the team** name, to manage its settings. +The first thing we need to do is add users to the team. Click the **Add user** +button and add users to the team. + +![](../images/create-and-manage-teams-3.png) + +## Manage team permissions + +The next step is to define the permissions this team has for a set of +repositories. Navigate to the **Repositories** tab, and click the +**Add repository** button. + +![](../images/create-and-manage-teams-4.png) + +Choose the repositories this team has access to, and what permission levels the +team members have. + +![](../images/create-and-manage-teams-5.png) + +There are three permission levels available: + +| Permission level | Description | +|:-----------------|:-----------------------------------------------------------------| +| Read only | View repository and pull images. | +| Read & Write | View repository, pull and push images. | +| Admin | Manage repository and change its settings, pull and push images. | + +## Where to go next + +* [Create and manage users](create-and-manage-users.md) +* [Create and manage organizations](create-and-manage-orgs.md) diff --git a/datacenter/dtr/2.2/guides/user-management/create-and-manage-users.md b/datacenter/dtr/2.2/guides/user-management/create-and-manage-users.md new file mode 100644 index 0000000000..3e5cbcd9d8 --- /dev/null +++ b/datacenter/dtr/2.2/guides/user-management/create-and-manage-users.md @@ -0,0 +1,28 @@ +--- +description: Learn how to manage user permissions in Docker Trusted Registry. +keywords: docker, registry, security, permissions, users +title: Create and manage users +--- + +When using the Docker Datacenter built-in authentication, you can create users +to grant them fine-grained permissions. +Users are shared across Docker Datacenter. When you create a new user in +Docker Universal Control Plane, that user becomes available in DTR and vice +versa. + +To create a new user, go to the **DTR web UI**, and navigate to the **Users** +page. + +![](../images/create-manage-users-1.png) + +Click the **New user** button, and fill-in the user information. + +![](../images/create-manage-users-2.png) + +Check the **Trusted Registry admin** option, if you want to grant permissions +for the user to change Docker Datacenter configurations. + +## Where to go next + +* [Create and manage organizations](create-and-manage-orgs.md) +* [Create and manage teams](create-and-manage-teams.md) diff --git a/datacenter/dtr/2.2/guides/user-management/index.md b/datacenter/dtr/2.2/guides/user-management/index.md new file mode 100644 index 0000000000..5d2cb34e45 --- /dev/null +++ b/datacenter/dtr/2.2/guides/user-management/index.md @@ -0,0 +1,56 @@ +--- +description: Learn about the permission levels available on Docker Trusted Registry. +keywords: docker, registry, security, permissions, users +title: Authentication and authorization +--- + +With DTR you get to control which users have access to your image repositories. + +By default, anonymous users can only pull images from public repositories. +They can't create new repositories or push to existing ones. +You can then grant permissions to enforce fine-grained access control to image +repositories. For that: + +* Start by creating a user. + + Users are shared across Docker Datacenter. When you create a new user in + Docker Universal Control Plane, that user becomes available in DTR and vice + versa. Registered users can create and manage their own repositories. + + You can also integrate with an LDAP service to manage users from a single + place. + +* Extend the permissions by adding the user to a team. + + To extend a user's permission and manage their permissions over repositories, + you add the user to a team. + A team defines the permissions users have for a set of repositories. + + +## Organizations and teams + +When a user creates a repository, only that user can make changes to the +repository settings, and push new images to it. + +Organizations take permission management one step further, since they allow +multiple users to own and manage a common set of repositories. This +is useful when implementing team workflows. With organizations you can +delegate the management of a set of repositories and user permissions to the +organization administrators. + +An organization owns a set of repositories, and defines a set of teams. With +teams you can define fine-grain permissions that a team of +user has for a set of repositories. + +![](../images/authentication-authorization-1.svg) + +In this example, the 'Whale' organization has three repositories and two teams: + +* Members of the blog team can only see and pull images from the whale/java +repository, +* Members of the billing team can manage the whale/golang repository, and push +and pull images from the whale/java repository. + +## Where to go next + +* [Create and manage users](create-and-manage-users.md) diff --git a/datacenter/dtr/2.2/guides/user-management/permission-levels.md b/datacenter/dtr/2.2/guides/user-management/permission-levels.md new file mode 100644 index 0000000000..1105e991de --- /dev/null +++ b/datacenter/dtr/2.2/guides/user-management/permission-levels.md @@ -0,0 +1,54 @@ +--- +description: Learn about the permission levels available in Docker Trusted Registry. +keywords: docker, registry, security, permissions +title: Permission levels +--- + +Docker Trusted Registry allows you to define fine-grain permissions over image +repositories. + +## Administrator users + +Users are shared across Docker Datacenter. When you create a new user in Docker +Universal Control Plane, that user becomes available in DTR and vice versa. +When you create an administrator user in DTR, that user is a Docker Datacenter +administrator, with permissions to: + +* Manage users across Docker Datacenter, +* Manage DTR repositories and settings, +* Manage the whole UCP cluster. + +## Team permission levels + +Teams allow you to define the permissions a set of user has for a set of +repositories. Three permission levels are available: + +| Repository operation | read | read-write | admin | +|:----------------------|:----:|:----------:|:-----:| +| View/ browse | x | x | x | +| Pull | x | x | x | +| Push | | x | x | +| Delete tags | | x | x | +| Edit description | | | x | +| Set public or private | | | x | +| Manage user access | | | x | +| Delete repository | | | | + +Team permissions are additive. When a user is a member of multiple teams, they +have the highest permission level defined by those teams. + +## Overall permissions + +Here's an overview of the permission levels available in DTR: + +* Anonymous users: Can search and pull public repositories. +* Users: Can search and pull public repos, and create and manage their own +repositories. +* Team member: Everything a user can do, plus the permissions granted by the teams the user is member of. +* Team admin: Everything a team member can do, and can also add members to the team. +* Organization admin: Everything a team admin can do, can create new teams, and add members to the organization. +* DDC admin: Can manage anything across UCP and DTR. + +## Where to go next + +* [Authentication and authorization](index.md) diff --git a/datacenter/dtr/2.2/reference/api/css/print.css b/datacenter/dtr/2.2/reference/api/css/print.css new file mode 100644 index 0000000000..cd3aa8b6a4 --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/css/print.css @@ -0,0 +1,1172 @@ +/* Original style from softwaremaniacs.org (c) Ivan Sagalaev */ +.swagger-section pre code { + display: block; + padding: 0.5em; + background: #F0F0F0; +} +.swagger-section pre code, +.swagger-section pre .subst, +.swagger-section pre .tag .title, +.swagger-section pre .lisp .title, +.swagger-section pre .clojure .built_in, +.swagger-section pre .nginx .title { + color: black; +} +.swagger-section pre .string, +.swagger-section pre .title, +.swagger-section pre .constant, +.swagger-section pre .parent, +.swagger-section pre .tag .value, +.swagger-section pre .rules .value, +.swagger-section pre .rules .value .number, +.swagger-section pre .preprocessor, +.swagger-section pre .ruby .symbol, +.swagger-section pre .ruby .symbol .string, +.swagger-section pre .aggregate, +.swagger-section pre .template_tag, +.swagger-section pre .django .variable, +.swagger-section pre .smalltalk .class, +.swagger-section pre .addition, +.swagger-section pre .flow, +.swagger-section pre .stream, +.swagger-section pre .bash .variable, +.swagger-section pre .apache .tag, +.swagger-section pre .apache .cbracket, +.swagger-section pre .tex .command, +.swagger-section pre .tex .special, +.swagger-section pre .erlang_repl .function_or_atom, +.swagger-section pre .markdown .header { + color: #800; +} +.swagger-section pre .comment, +.swagger-section pre .annotation, +.swagger-section pre .template_comment, +.swagger-section pre .diff .header, +.swagger-section pre .chunk, +.swagger-section pre .markdown .blockquote { + color: #888; +} +.swagger-section pre .number, +.swagger-section pre .date, +.swagger-section pre .regexp, +.swagger-section pre .literal, +.swagger-section pre .smalltalk .symbol, +.swagger-section pre .smalltalk .char, +.swagger-section pre .go .constant, +.swagger-section pre .change, +.swagger-section pre .markdown .bullet, +.swagger-section pre .markdown .link_url { + color: #080; +} +.swagger-section pre .label, +.swagger-section pre .javadoc, +.swagger-section pre .ruby .string, +.swagger-section pre .decorator, +.swagger-section pre .filter .argument, +.swagger-section pre .localvars, +.swagger-section pre .array, +.swagger-section pre .attr_selector, +.swagger-section pre .important, +.swagger-section pre .pseudo, +.swagger-section pre .pi, +.swagger-section pre .doctype, +.swagger-section pre .deletion, +.swagger-section pre .envvar, +.swagger-section pre .shebang, +.swagger-section pre .apache .sqbracket, +.swagger-section pre .nginx .built_in, +.swagger-section pre .tex .formula, +.swagger-section pre .erlang_repl .reserved, +.swagger-section pre .prompt, +.swagger-section pre .markdown .link_label, +.swagger-section pre .vhdl .attribute, +.swagger-section pre .clojure .attribute, +.swagger-section pre .coffeescript .property { + color: #8888ff; +} +.swagger-section pre .keyword, +.swagger-section pre .id, +.swagger-section pre .phpdoc, +.swagger-section pre .title, +.swagger-section pre .built_in, +.swagger-section pre .aggregate, +.swagger-section pre .css .tag, +.swagger-section pre .javadoctag, +.swagger-section pre .phpdoc, +.swagger-section pre .yardoctag, +.swagger-section pre .smalltalk .class, +.swagger-section pre .winutils, +.swagger-section pre .bash .variable, +.swagger-section pre .apache .tag, +.swagger-section pre .go .typename, +.swagger-section pre .tex .command, +.swagger-section pre .markdown .strong, +.swagger-section pre .request, +.swagger-section pre .status { + font-weight: bold; +} +.swagger-section pre .markdown .emphasis { + font-style: italic; +} +.swagger-section pre .nginx .built_in { + font-weight: normal; +} +.swagger-section pre .coffeescript .javascript, +.swagger-section pre .javascript .xml, +.swagger-section pre .tex .formula, +.swagger-section pre .xml .javascript, +.swagger-section pre .xml .vbscript, +.swagger-section pre .xml .css, +.swagger-section pre .xml .cdata { + opacity: 0.5; +} +.swagger-section .swagger-ui-wrap { + line-height: 1; + font-family: "Droid Sans", sans-serif; + max-width: 960px; + margin-left: auto; + margin-right: auto; +} +.swagger-section .swagger-ui-wrap b, +.swagger-section .swagger-ui-wrap strong { + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap q, +.swagger-section .swagger-ui-wrap blockquote { + quotes: none; +} +.swagger-section .swagger-ui-wrap p { + line-height: 1.4em; + padding: 0 0 10px; + color: #333333; +} +.swagger-section .swagger-ui-wrap q:before, +.swagger-section .swagger-ui-wrap q:after, +.swagger-section .swagger-ui-wrap blockquote:before, +.swagger-section .swagger-ui-wrap blockquote:after { + content: none; +} +.swagger-section .swagger-ui-wrap .heading_with_menu h1, +.swagger-section .swagger-ui-wrap .heading_with_menu h2, +.swagger-section .swagger-ui-wrap .heading_with_menu h3, +.swagger-section .swagger-ui-wrap .heading_with_menu h4, +.swagger-section .swagger-ui-wrap .heading_with_menu h5, +.swagger-section .swagger-ui-wrap .heading_with_menu h6 { + display: block; + clear: none; + float: left; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + width: 60%; +} +.swagger-section .swagger-ui-wrap table { + border-collapse: collapse; + border-spacing: 0; +} +.swagger-section .swagger-ui-wrap table thead tr th { + padding: 5px; + font-size: 0.9em; + color: #666666; + border-bottom: 1px solid #999999; +} +.swagger-section .swagger-ui-wrap table tbody tr:last-child td { + border-bottom: none; +} +.swagger-section .swagger-ui-wrap table tbody tr.offset { + background-color: #f0f0f0; +} +.swagger-section .swagger-ui-wrap table tbody tr td { + padding: 6px; + font-size: 0.9em; + border-bottom: 1px solid #cccccc; + vertical-align: top; + line-height: 1.3em; +} +.swagger-section .swagger-ui-wrap ol { + margin: 0px 0 10px; + padding: 0 0 0 18px; + list-style-type: decimal; +} +.swagger-section .swagger-ui-wrap ol li { + padding: 5px 0px; + font-size: 0.9em; + color: #333333; +} +.swagger-section .swagger-ui-wrap ol, +.swagger-section .swagger-ui-wrap ul { + list-style: none; +} +.swagger-section .swagger-ui-wrap h1 a, +.swagger-section .swagger-ui-wrap h2 a, +.swagger-section .swagger-ui-wrap h3 a, +.swagger-section .swagger-ui-wrap h4 a, +.swagger-section .swagger-ui-wrap h5 a, +.swagger-section .swagger-ui-wrap h6 a { + text-decoration: none; +} +.swagger-section .swagger-ui-wrap h1 a:hover, +.swagger-section .swagger-ui-wrap h2 a:hover, +.swagger-section .swagger-ui-wrap h3 a:hover, +.swagger-section .swagger-ui-wrap h4 a:hover, +.swagger-section .swagger-ui-wrap h5 a:hover, +.swagger-section .swagger-ui-wrap h6 a:hover { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap h1 span.divider, +.swagger-section .swagger-ui-wrap h2 span.divider, +.swagger-section .swagger-ui-wrap h3 span.divider, +.swagger-section .swagger-ui-wrap h4 span.divider, +.swagger-section .swagger-ui-wrap h5 span.divider, +.swagger-section .swagger-ui-wrap h6 span.divider { + color: #aaaaaa; +} +.swagger-section .swagger-ui-wrap a { + color: #547f00; +} +.swagger-section .swagger-ui-wrap a img { + border: none; +} +.swagger-section .swagger-ui-wrap article, +.swagger-section .swagger-ui-wrap aside, +.swagger-section .swagger-ui-wrap details, +.swagger-section .swagger-ui-wrap figcaption, +.swagger-section .swagger-ui-wrap figure, +.swagger-section .swagger-ui-wrap footer, +.swagger-section .swagger-ui-wrap header, +.swagger-section .swagger-ui-wrap hgroup, +.swagger-section .swagger-ui-wrap menu, +.swagger-section .swagger-ui-wrap nav, +.swagger-section .swagger-ui-wrap section, +.swagger-section .swagger-ui-wrap summary { + display: block; +} +.swagger-section .swagger-ui-wrap pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + padding: 10px; +} +.swagger-section .swagger-ui-wrap pre code { + line-height: 1.6em; + background: none; +} +.swagger-section .swagger-ui-wrap .content > .content-type > div > label { + clear: both; + display: block; + color: #0F6AB4; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +.swagger-section .swagger-ui-wrap .content pre { + font-size: 12px; + margin-top: 5px; + padding: 5px; +} +.swagger-section .swagger-ui-wrap .icon-btn { + cursor: pointer; +} +.swagger-section .swagger-ui-wrap .info_title { + padding-bottom: 10px; + font-weight: bold; + font-size: 25px; +} +.swagger-section .swagger-ui-wrap .footer { + margin-top: 20px; +} +.swagger-section .swagger-ui-wrap p.big, +.swagger-section .swagger-ui-wrap div.big p { + font-size: 1em; + margin-bottom: 10px; +} +.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input { + width: 500px !important; +} +.swagger-section .swagger-ui-wrap .info_license { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_tos { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .message-fail { + color: #cc0000; +} +.swagger-section .swagger-ui-wrap .info_url { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_email { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_name { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_description { + padding-bottom: 10px; + font-size: 15px; +} +.swagger-section .swagger-ui-wrap .markdown ol li, +.swagger-section .swagger-ui-wrap .markdown ul li { + padding: 3px 0px; + line-height: 1.4em; + color: #333333; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input { + display: block; + padding: 4px; + width: auto; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title { + font-size: 1.3em; +} +.swagger-section .swagger-ui-wrap table.fullwidth { + width: 100%; +} +.swagger-section .swagger-ui-wrap .model-signature { + font-family: "Droid Sans", sans-serif; + font-size: 1em; + line-height: 1.5em; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav a { + text-decoration: none; + color: #AAA; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover { + text-decoration: underline; + color: black; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected { + color: black; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap .model-signature .propType { + color: #5555aa; +} +.swagger-section .swagger-ui-wrap .model-signature pre:hover { + background-color: #ffffdd; +} +.swagger-section .swagger-ui-wrap .model-signature pre { + font-size: .85em; + line-height: 1.2em; + overflow: auto; + max-height: 200px; + cursor: pointer; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav { + display: block; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li { + float: left; + margin: 0 5px 5px 0; + padding: 2px 5px 2px 0; + border-right: 1px solid #ddd; +} +.swagger-section .swagger-ui-wrap .model-signature .propOpt { + color: #555; +} +.swagger-section .swagger-ui-wrap .model-signature .snippet small { + font-size: 0.75em; +} +.swagger-section .swagger-ui-wrap .model-signature .propOptKey { + font-style: italic; +} +.swagger-section .swagger-ui-wrap .model-signature .description .strong { + font-weight: bold; + color: #000; + font-size: .9em; +} +.swagger-section .swagger-ui-wrap .model-signature .description div { + font-size: 0.9em; + line-height: 1.5em; + margin-left: 1em; +} +.swagger-section .swagger-ui-wrap .model-signature .description .stronger { + font-weight: bold; + color: #000; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper { + border-spacing: 0; + position: absolute; + background-color: #ffffff; + border: 1px solid #bbbbbb; + display: none; + font-size: 11px; + max-width: 400px; + line-height: 30px; + color: black; + padding: 5px; + margin-left: 10px; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th { + text-align: center; + background-color: #eeeeee; + border: 1px solid #bbbbbb; + font-size: 11px; + color: #666666; + font-weight: bold; + padding: 5px; + line-height: 15px; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:first-child, +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:last-child { + display: inline; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:not(:first-child):before { + display: block; + content: ''; +} +.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown > p:only-child { + margin-right: -3px; +} +.swagger-section .swagger-ui-wrap .model-signature .propName { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-container { + clear: both; +} +.swagger-section .swagger-ui-wrap .body-textarea { + width: 300px; + height: 100px; + border: 1px solid #aaa; +} +.swagger-section .swagger-ui-wrap .markdown p code, +.swagger-section .swagger-ui-wrap .markdown li code { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #f0f0f0; + color: black; + padding: 1px 3px; +} +.swagger-section .swagger-ui-wrap .required { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap input.parameter { + width: 300px; + border: 1px solid #aaa; +} +.swagger-section .swagger-ui-wrap h1 { + color: black; + font-size: 1.5em; + line-height: 1.3em; + padding: 10px 0 10px 0; + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .heading_with_menu { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap .heading_with_menu ul { + display: block; + clear: none; + float: right; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin-top: 10px; +} +.swagger-section .swagger-ui-wrap h2 { + color: black; + font-size: 1.3em; + padding: 10px 0 10px 0; +} +.swagger-section .swagger-ui-wrap h2 a { + color: black; +} +.swagger-section .swagger-ui-wrap h2 span.sub { + font-size: 0.7em; + color: #999999; + font-style: italic; +} +.swagger-section .swagger-ui-wrap h2 span.sub a { + color: #777777; +} +.swagger-section .swagger-ui-wrap span.weak { + color: #666666; +} +.swagger-section .swagger-ui-wrap .message-success { + color: #89BF04; +} +.swagger-section .swagger-ui-wrap caption, +.swagger-section .swagger-ui-wrap th, +.swagger-section .swagger-ui-wrap td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} +.swagger-section .swagger-ui-wrap .code { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea { + font-family: "Droid Sans", sans-serif; + height: 250px; + padding: 4px; + display: block; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select { + display: block; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label { + display: block; + float: left; + clear: none; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input { + display: block; + float: left; + clear: none; + margin: 0 5px 0 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label { + color: black; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label { + display: block; + clear: both; + width: auto; + padding: 0 0 3px; + color: #666666; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr { + padding-left: 3px; + color: #888888; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints { + margin-left: 0; + font-style: italic; + font-size: 0.9em; + margin: 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons { + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap span.blank, +.swagger-section .swagger-ui-wrap span.empty { + color: #888888; + font-style: italic; +} +.swagger-section .swagger-ui-wrap .markdown h3 { + color: #547f00; +} +.swagger-section .swagger-ui-wrap .markdown h4 { + color: #666666; +} +.swagger-section .swagger-ui-wrap .markdown pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + padding: 10px; + margin: 0 0 10px 0; +} +.swagger-section .swagger-ui-wrap .markdown pre code { + line-height: 1.6em; +} +.swagger-section .swagger-ui-wrap div.gist { + margin: 20px 0 25px 0 !important; +} +.swagger-section .swagger-ui-wrap ul#resources { + font-family: "Droid Sans", sans-serif; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource { + border-bottom: 1px solid #dddddd; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a, +.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a, +.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a { + color: #555555; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child { + border-bottom: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading { + border: 1px solid transparent; + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 14px 10px 0 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; + color: #666666; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a { + color: #aaaaaa; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover { + text-decoration: underline; + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { + color: #999999; + padding-left: 0; + display: block; + clear: none; + float: left; + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { + color: #999999; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path { + padding-left: 10px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a { + color: black; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a { + text-transform: uppercase; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span { + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 6px 10px 0 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a { + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + margin: 0 0 20px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 { + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a { + padding: 4px 0 0 10px; + display: inline-block; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; + padding: 6px 8px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber { + background-image: url('../images/throbber.gif'); + width: 128px; + height: 16px; + display: block; + clear: none; + float: right; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error { + outline: 2px solid black; + outline-color: #cc0000; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; + overflow-y: auto; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { + background-color: #f9f2e9; + border: 1px solid #f0e0ca; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { + background-color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #f0e0ca; + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { + background-color: #faf5ee; + border: 1px solid #f0e0ca; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { + color: #dcb67f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading { + background-color: #fcffcd; + border: 1px solid black; + border-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #ffd20f; + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a { + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content { + background-color: #fcffcd; + border: 1px solid black; + border-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 { + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a { + color: #6fc992; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { + background-color: #f5e8e8; + border: 1px solid #e8c6c7; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #e8c6c7; + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { + background-color: #f7eded; + border: 1px solid #e8c6c7; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { + color: #c8787a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { + background-color: #e7f6ec; + border: 1px solid #c3e8d1; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { + background-color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3e8d1; + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { + background-color: #ebf7f0; + border: 1px solid #c3e8d1; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { + color: #6fc992; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading { + background-color: #FCE9E3; + border: 1px solid #F5D5C3; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a { + background-color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #f0cecb; + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a { + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content { + background-color: #faf0ef; + border: 1px solid #f0cecb; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 { + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a { + color: #dcb67f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { + background-color: #e7f0f7; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { + background-color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3d9ec; + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { + color: #6fa5d2; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading { + background-color: #e7f0f7; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a { + background-color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3d9ec; + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4 { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a { + color: #6fa5d2; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { + border-top: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap p#colophon { + margin: 0 15px 40px 15px; + padding: 10px 0; + font-size: 0.8em; + border-top: 1px solid #dddddd; + font-family: "Droid Sans", sans-serif; + color: #999999; + font-style: italic; +} +.swagger-section .swagger-ui-wrap p#colophon a { + text-decoration: none; + color: #547f00; +} +.swagger-section .swagger-ui-wrap h3 { + color: black; + font-size: 1.1em; + padding: 10px 0 10px 0; +} +.swagger-section .swagger-ui-wrap .markdown ol, +.swagger-section .swagger-ui-wrap .markdown ul { + font-family: "Droid Sans", sans-serif; + margin: 5px 0 10px; + padding: 0 0 0 18px; + list-style-type: disc; +} +.swagger-section .swagger-ui-wrap form.form_box { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; + padding: 10px; +} +.swagger-section .swagger-ui-wrap form.form_box label { + color: #0f6ab4 !important; +} +.swagger-section .swagger-ui-wrap form.form_box input[type=submit] { + display: block; + padding: 10px; +} +.swagger-section .swagger-ui-wrap form.form_box p.weak { + font-size: 0.8em; +} +.swagger-section .swagger-ui-wrap form.form_box p { + font-size: 0.9em; + padding: 0 0 15px; + color: #7e7b6d; +} +.swagger-section .swagger-ui-wrap form.form_box p a { + color: #646257; +} +.swagger-section .swagger-ui-wrap form.form_box p strong { + color: black; +} +.swagger-section .swagger-ui-wrap .operation-status td.markdown > p:last-child { + padding-bottom: 0; +} +.swagger-section .title { + font-style: bold; +} +.swagger-section .secondary_form { + display: none; +} +.swagger-section .main_image { + display: block; + margin-left: auto; + margin-right: auto; +} +.swagger-section .oauth_body { + margin-left: 100px; + margin-right: 100px; +} +.swagger-section .oauth_submit { + text-align: center; +} +.swagger-section .api-popup-dialog { + z-index: 10000; + position: absolute; + width: 500px; + background: #FFF; + padding: 20px; + border: 1px solid #ccc; + border-radius: 5px; + display: none; + font-size: 13px; + color: #777; +} +.swagger-section .api-popup-dialog .api-popup-title { + font-size: 24px; + padding: 10px 0; +} +.swagger-section .api-popup-dialog .api-popup-title { + font-size: 24px; + padding: 10px 0; +} +.swagger-section .api-popup-dialog p.error-msg { + padding-left: 5px; + padding-bottom: 5px; +} +.swagger-section .api-popup-dialog button.api-popup-authbtn { + height: 30px; +} +.swagger-section .api-popup-dialog button.api-popup-cancel { + height: 30px; +} +.swagger-section .api-popup-scopes { + padding: 10px 20px; +} +.swagger-section .api-popup-scopes li { + padding: 5px 0; + line-height: 20px; +} +.swagger-section .api-popup-scopes .api-scope-desc { + padding-left: 20px; + font-style: italic; +} +.swagger-section .api-popup-scopes li input { + position: relative; + top: 2px; +} +.swagger-section .api-popup-actions { + padding-top: 10px; +} +#header { + display: none; +} +.swagger-section .swagger-ui-wrap .model-signature pre { + max-height: none; +} +.swagger-section .swagger-ui-wrap .body-textarea { + width: 100px; +} +.swagger-section .swagger-ui-wrap input.parameter { + width: 100px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { + display: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints { + display: block !important; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { + display: block !important; +} diff --git a/datacenter/dtr/2.2/reference/api/css/reset.css b/datacenter/dtr/2.2/reference/api/css/reset.css new file mode 100644 index 0000000000..b2b078943c --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/css/reset.css @@ -0,0 +1,125 @@ +/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */ +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { + display: block; +} +body { + line-height: 1; +} +ol, +ul { + list-style: none; +} +blockquote, +q { + quotes: none; +} +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/datacenter/dtr/2.2/reference/api/css/screen.css b/datacenter/dtr/2.2/reference/api/css/screen.css new file mode 100644 index 0000000000..436cc28edd --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/css/screen.css @@ -0,0 +1,1279 @@ +/* Original style from softwaremaniacs.org (c) Ivan Sagalaev */ +.swagger-section pre code { + display: block; + padding: 0.5em; + background: #F0F0F0; +} +.swagger-section pre code, +.swagger-section pre .subst, +.swagger-section pre .tag .title, +.swagger-section pre .lisp .title, +.swagger-section pre .clojure .built_in, +.swagger-section pre .nginx .title { + color: black; +} +.swagger-section pre .string, +.swagger-section pre .title, +.swagger-section pre .constant, +.swagger-section pre .parent, +.swagger-section pre .tag .value, +.swagger-section pre .rules .value, +.swagger-section pre .rules .value .number, +.swagger-section pre .preprocessor, +.swagger-section pre .ruby .symbol, +.swagger-section pre .ruby .symbol .string, +.swagger-section pre .aggregate, +.swagger-section pre .template_tag, +.swagger-section pre .django .variable, +.swagger-section pre .smalltalk .class, +.swagger-section pre .addition, +.swagger-section pre .flow, +.swagger-section pre .stream, +.swagger-section pre .bash .variable, +.swagger-section pre .apache .tag, +.swagger-section pre .apache .cbracket, +.swagger-section pre .tex .command, +.swagger-section pre .tex .special, +.swagger-section pre .erlang_repl .function_or_atom, +.swagger-section pre .markdown .header { + color: #800; +} +.swagger-section pre .comment, +.swagger-section pre .annotation, +.swagger-section pre .template_comment, +.swagger-section pre .diff .header, +.swagger-section pre .chunk, +.swagger-section pre .markdown .blockquote { + color: #888; +} +.swagger-section pre .number, +.swagger-section pre .date, +.swagger-section pre .regexp, +.swagger-section pre .literal, +.swagger-section pre .smalltalk .symbol, +.swagger-section pre .smalltalk .char, +.swagger-section pre .go .constant, +.swagger-section pre .change, +.swagger-section pre .markdown .bullet, +.swagger-section pre .markdown .link_url { + color: #080; +} +.swagger-section pre .label, +.swagger-section pre .javadoc, +.swagger-section pre .ruby .string, +.swagger-section pre .decorator, +.swagger-section pre .filter .argument, +.swagger-section pre .localvars, +.swagger-section pre .array, +.swagger-section pre .attr_selector, +.swagger-section pre .important, +.swagger-section pre .pseudo, +.swagger-section pre .pi, +.swagger-section pre .doctype, +.swagger-section pre .deletion, +.swagger-section pre .envvar, +.swagger-section pre .shebang, +.swagger-section pre .apache .sqbracket, +.swagger-section pre .nginx .built_in, +.swagger-section pre .tex .formula, +.swagger-section pre .erlang_repl .reserved, +.swagger-section pre .prompt, +.swagger-section pre .markdown .link_label, +.swagger-section pre .vhdl .attribute, +.swagger-section pre .clojure .attribute, +.swagger-section pre .coffeescript .property { + color: #8888ff; +} +.swagger-section pre .keyword, +.swagger-section pre .id, +.swagger-section pre .phpdoc, +.swagger-section pre .title, +.swagger-section pre .built_in, +.swagger-section pre .aggregate, +.swagger-section pre .css .tag, +.swagger-section pre .javadoctag, +.swagger-section pre .phpdoc, +.swagger-section pre .yardoctag, +.swagger-section pre .smalltalk .class, +.swagger-section pre .winutils, +.swagger-section pre .bash .variable, +.swagger-section pre .apache .tag, +.swagger-section pre .go .typename, +.swagger-section pre .tex .command, +.swagger-section pre .markdown .strong, +.swagger-section pre .request, +.swagger-section pre .status { + font-weight: bold; +} +.swagger-section pre .markdown .emphasis { + font-style: italic; +} +.swagger-section pre .nginx .built_in { + font-weight: normal; +} +.swagger-section pre .coffeescript .javascript, +.swagger-section pre .javascript .xml, +.swagger-section pre .tex .formula, +.swagger-section pre .xml .javascript, +.swagger-section pre .xml .vbscript, +.swagger-section pre .xml .css, +.swagger-section pre .xml .cdata { + opacity: 0.5; +} +.swagger-section .swagger-ui-wrap { + line-height: 1; + font-family: "Droid Sans", sans-serif; + max-width: 960px; + margin-left: auto; + margin-right: auto; +} +.swagger-section .swagger-ui-wrap b, +.swagger-section .swagger-ui-wrap strong { + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap q, +.swagger-section .swagger-ui-wrap blockquote { + quotes: none; +} +.swagger-section .swagger-ui-wrap p { + line-height: 1.4em; + padding: 0 0 10px; + color: #333333; +} +.swagger-section .swagger-ui-wrap q:before, +.swagger-section .swagger-ui-wrap q:after, +.swagger-section .swagger-ui-wrap blockquote:before, +.swagger-section .swagger-ui-wrap blockquote:after { + content: none; +} +.swagger-section .swagger-ui-wrap .heading_with_menu h1, +.swagger-section .swagger-ui-wrap .heading_with_menu h2, +.swagger-section .swagger-ui-wrap .heading_with_menu h3, +.swagger-section .swagger-ui-wrap .heading_with_menu h4, +.swagger-section .swagger-ui-wrap .heading_with_menu h5, +.swagger-section .swagger-ui-wrap .heading_with_menu h6 { + display: block; + clear: none; + float: left; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + width: 60%; +} +.swagger-section .swagger-ui-wrap table { + border-collapse: collapse; + border-spacing: 0; +} +.swagger-section .swagger-ui-wrap table thead tr th { + padding: 5px; + font-size: 0.9em; + color: #666666; + border-bottom: 1px solid #999999; +} +.swagger-section .swagger-ui-wrap table tbody tr:last-child td { + border-bottom: none; +} +.swagger-section .swagger-ui-wrap table tbody tr.offset { + background-color: #f0f0f0; +} +.swagger-section .swagger-ui-wrap table tbody tr td { + padding: 6px; + font-size: 0.9em; + border-bottom: 1px solid #cccccc; + vertical-align: top; + line-height: 1.3em; +} +.swagger-section .swagger-ui-wrap ol { + margin: 0px 0 10px; + padding: 0 0 0 18px; + list-style-type: decimal; +} +.swagger-section .swagger-ui-wrap ol li { + padding: 5px 0px; + font-size: 0.9em; + color: #333333; +} +.swagger-section .swagger-ui-wrap ol, +.swagger-section .swagger-ui-wrap ul { + list-style: none; +} +.swagger-section .swagger-ui-wrap h1 a, +.swagger-section .swagger-ui-wrap h2 a, +.swagger-section .swagger-ui-wrap h3 a, +.swagger-section .swagger-ui-wrap h4 a, +.swagger-section .swagger-ui-wrap h5 a, +.swagger-section .swagger-ui-wrap h6 a { + text-decoration: none; +} +.swagger-section .swagger-ui-wrap h1 a:hover, +.swagger-section .swagger-ui-wrap h2 a:hover, +.swagger-section .swagger-ui-wrap h3 a:hover, +.swagger-section .swagger-ui-wrap h4 a:hover, +.swagger-section .swagger-ui-wrap h5 a:hover, +.swagger-section .swagger-ui-wrap h6 a:hover { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap h1 span.divider, +.swagger-section .swagger-ui-wrap h2 span.divider, +.swagger-section .swagger-ui-wrap h3 span.divider, +.swagger-section .swagger-ui-wrap h4 span.divider, +.swagger-section .swagger-ui-wrap h5 span.divider, +.swagger-section .swagger-ui-wrap h6 span.divider { + color: #aaaaaa; +} +.swagger-section .swagger-ui-wrap a { + color: #547f00; +} +.swagger-section .swagger-ui-wrap a img { + border: none; +} +.swagger-section .swagger-ui-wrap article, +.swagger-section .swagger-ui-wrap aside, +.swagger-section .swagger-ui-wrap details, +.swagger-section .swagger-ui-wrap figcaption, +.swagger-section .swagger-ui-wrap figure, +.swagger-section .swagger-ui-wrap footer, +.swagger-section .swagger-ui-wrap header, +.swagger-section .swagger-ui-wrap hgroup, +.swagger-section .swagger-ui-wrap menu, +.swagger-section .swagger-ui-wrap nav, +.swagger-section .swagger-ui-wrap section, +.swagger-section .swagger-ui-wrap summary { + display: block; +} +.swagger-section .swagger-ui-wrap pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + padding: 10px; +} +.swagger-section .swagger-ui-wrap pre code { + line-height: 1.6em; + background: none; +} +.swagger-section .swagger-ui-wrap .content > .content-type > div > label { + clear: both; + display: block; + color: #0F6AB4; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +.swagger-section .swagger-ui-wrap .content pre { + font-size: 12px; + margin-top: 5px; + padding: 5px; +} +.swagger-section .swagger-ui-wrap .icon-btn { + cursor: pointer; +} +.swagger-section .swagger-ui-wrap .info_title { + padding-bottom: 10px; + font-weight: bold; + font-size: 25px; +} +.swagger-section .swagger-ui-wrap .footer { + margin-top: 20px; +} +.swagger-section .swagger-ui-wrap p.big, +.swagger-section .swagger-ui-wrap div.big p { + font-size: 1em; + margin-bottom: 10px; +} +.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input { + width: 500px !important; +} +.swagger-section .swagger-ui-wrap .info_license { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_tos { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .message-fail { + color: #cc0000; +} +.swagger-section .swagger-ui-wrap .info_url { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_email { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_name { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_description { + padding-bottom: 10px; + font-size: 15px; +} +.swagger-section .swagger-ui-wrap .markdown ol li, +.swagger-section .swagger-ui-wrap .markdown ul li { + padding: 3px 0px; + line-height: 1.4em; + color: #333333; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input { + display: block; + padding: 4px; + width: auto; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title { + font-size: 1.3em; +} +.swagger-section .swagger-ui-wrap table.fullwidth { + width: 100%; +} +.swagger-section .swagger-ui-wrap .model-signature { + font-family: "Droid Sans", sans-serif; + font-size: 1em; + line-height: 1.5em; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav a { + text-decoration: none; + color: #AAA; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover { + text-decoration: underline; + color: black; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected { + color: black; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap .model-signature .propType { + color: #5555aa; +} +.swagger-section .swagger-ui-wrap .model-signature pre:hover { + background-color: #ffffdd; +} +.swagger-section .swagger-ui-wrap .model-signature pre { + font-size: .85em; + line-height: 1.2em; + overflow: auto; + max-height: 200px; + cursor: pointer; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav { + display: block; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li { + float: left; + margin: 0 5px 5px 0; + padding: 2px 5px 2px 0; + border-right: 1px solid #ddd; +} +.swagger-section .swagger-ui-wrap .model-signature .propOpt { + color: #555; +} +.swagger-section .swagger-ui-wrap .model-signature .snippet small { + font-size: 0.75em; +} +.swagger-section .swagger-ui-wrap .model-signature .propOptKey { + font-style: italic; +} +.swagger-section .swagger-ui-wrap .model-signature .description .strong { + font-weight: bold; + color: #000; + font-size: .9em; +} +.swagger-section .swagger-ui-wrap .model-signature .description div { + font-size: 0.9em; + line-height: 1.5em; + margin-left: 1em; +} +.swagger-section .swagger-ui-wrap .model-signature .description .stronger { + font-weight: bold; + color: #000; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper { + border-spacing: 0; + position: absolute; + background-color: #ffffff; + border: 1px solid #bbbbbb; + display: none; + font-size: 11px; + max-width: 400px; + line-height: 30px; + color: black; + padding: 5px; + margin-left: 10px; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th { + text-align: center; + background-color: #eeeeee; + border: 1px solid #bbbbbb; + font-size: 11px; + color: #666666; + font-weight: bold; + padding: 5px; + line-height: 15px; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:first-child, +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:last-child { + display: inline; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:not(:first-child):before { + display: block; + content: ''; +} +.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown > p:only-child { + margin-right: -3px; +} +.swagger-section .swagger-ui-wrap .model-signature .propName { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-container { + clear: both; +} +.swagger-section .swagger-ui-wrap .body-textarea { + width: 300px; + height: 100px; + border: 1px solid #aaa; +} +.swagger-section .swagger-ui-wrap .markdown p code, +.swagger-section .swagger-ui-wrap .markdown li code { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #f0f0f0; + color: black; + padding: 1px 3px; +} +.swagger-section .swagger-ui-wrap .required { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap input.parameter { + width: 300px; + border: 1px solid #aaa; +} +.swagger-section .swagger-ui-wrap h1 { + color: black; + font-size: 1.5em; + line-height: 1.3em; + padding: 10px 0 10px 0; + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .heading_with_menu { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap .heading_with_menu ul { + display: block; + clear: none; + float: right; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin-top: 10px; +} +.swagger-section .swagger-ui-wrap h2 { + color: black; + font-size: 1.3em; + padding: 10px 0 10px 0; +} +.swagger-section .swagger-ui-wrap h2 a { + color: black; +} +.swagger-section .swagger-ui-wrap h2 span.sub { + font-size: 0.7em; + color: #999999; + font-style: italic; +} +.swagger-section .swagger-ui-wrap h2 span.sub a { + color: #777777; +} +.swagger-section .swagger-ui-wrap span.weak { + color: #666666; +} +.swagger-section .swagger-ui-wrap .message-success { + color: #89BF04; +} +.swagger-section .swagger-ui-wrap caption, +.swagger-section .swagger-ui-wrap th, +.swagger-section .swagger-ui-wrap td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} +.swagger-section .swagger-ui-wrap .code { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea { + font-family: "Droid Sans", sans-serif; + height: 250px; + padding: 4px; + display: block; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select { + display: block; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label { + display: block; + float: left; + clear: none; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input { + display: block; + float: left; + clear: none; + margin: 0 5px 0 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label { + color: black; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label { + display: block; + clear: both; + width: auto; + padding: 0 0 3px; + color: #666666; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr { + padding-left: 3px; + color: #888888; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints { + margin-left: 0; + font-style: italic; + font-size: 0.9em; + margin: 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons { + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap span.blank, +.swagger-section .swagger-ui-wrap span.empty { + color: #888888; + font-style: italic; +} +.swagger-section .swagger-ui-wrap .markdown h3 { + color: #547f00; +} +.swagger-section .swagger-ui-wrap .markdown h4 { + color: #666666; +} +.swagger-section .swagger-ui-wrap .markdown pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + padding: 10px; + margin: 0 0 10px 0; +} +.swagger-section .swagger-ui-wrap .markdown pre code { + line-height: 1.6em; +} +.swagger-section .swagger-ui-wrap div.gist { + margin: 20px 0 25px 0 !important; +} +.swagger-section .swagger-ui-wrap ul#resources { + font-family: "Droid Sans", sans-serif; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource { + border-bottom: 1px solid #dddddd; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a, +.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a, +.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a { + color: #555555; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child { + border-bottom: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading { + border: 1px solid transparent; + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 14px 10px 0 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; + color: #666666; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a { + color: #aaaaaa; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover { + text-decoration: underline; + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { + color: #999999; + padding-left: 0; + display: block; + clear: none; + float: left; + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { + color: #999999; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path { + padding-left: 10px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a { + color: black; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a { + text-transform: uppercase; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span { + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 6px 10px 0 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a { + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + margin: 0 0 20px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 { + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a { + padding: 4px 0 0 10px; + display: inline-block; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; + padding: 6px 8px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber { + background-image: url('../images/throbber.gif'); + width: 128px; + height: 16px; + display: block; + clear: none; + float: right; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error { + outline: 2px solid black; + outline-color: #cc0000; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; + overflow-y: auto; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { + background-color: #f9f2e9; + border: 1px solid #f0e0ca; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { + background-color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #f0e0ca; + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { + background-color: #faf5ee; + border: 1px solid #f0e0ca; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { + color: #dcb67f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading { + background-color: #fcffcd; + border: 1px solid black; + border-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #ffd20f; + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a { + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content { + background-color: #fcffcd; + border: 1px solid black; + border-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 { + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a { + color: #6fc992; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { + background-color: #f5e8e8; + border: 1px solid #e8c6c7; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #e8c6c7; + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { + background-color: #f7eded; + border: 1px solid #e8c6c7; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { + color: #c8787a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { + background-color: #e7f6ec; + border: 1px solid #c3e8d1; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { + background-color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3e8d1; + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { + background-color: #ebf7f0; + border: 1px solid #c3e8d1; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { + color: #6fc992; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading { + background-color: #FCE9E3; + border: 1px solid #F5D5C3; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a { + background-color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #f0cecb; + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a { + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content { + background-color: #faf0ef; + border: 1px solid #f0cecb; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 { + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a { + color: #dcb67f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { + background-color: #e7f0f7; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { + background-color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3d9ec; + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { + color: #6fa5d2; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading { + background-color: #e7f0f7; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a { + background-color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3d9ec; + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4 { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a { + color: #6fa5d2; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { + border-top: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap p#colophon { + margin: 0 15px 40px 15px; + padding: 10px 0; + font-size: 0.8em; + border-top: 1px solid #dddddd; + font-family: "Droid Sans", sans-serif; + color: #999999; + font-style: italic; +} +.swagger-section .swagger-ui-wrap p#colophon a { + text-decoration: none; + color: #547f00; +} +.swagger-section .swagger-ui-wrap h3 { + color: black; + font-size: 1.1em; + padding: 10px 0 10px 0; +} +.swagger-section .swagger-ui-wrap .markdown ol, +.swagger-section .swagger-ui-wrap .markdown ul { + font-family: "Droid Sans", sans-serif; + margin: 5px 0 10px; + padding: 0 0 0 18px; + list-style-type: disc; +} +.swagger-section .swagger-ui-wrap form.form_box { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; + padding: 10px; +} +.swagger-section .swagger-ui-wrap form.form_box label { + color: #0f6ab4 !important; +} +.swagger-section .swagger-ui-wrap form.form_box input[type=submit] { + display: block; + padding: 10px; +} +.swagger-section .swagger-ui-wrap form.form_box p.weak { + font-size: 0.8em; +} +.swagger-section .swagger-ui-wrap form.form_box p { + font-size: 0.9em; + padding: 0 0 15px; + color: #7e7b6d; +} +.swagger-section .swagger-ui-wrap form.form_box p a { + color: #646257; +} +.swagger-section .swagger-ui-wrap form.form_box p strong { + color: black; +} +.swagger-section .swagger-ui-wrap .operation-status td.markdown > p:last-child { + padding-bottom: 0; +} +.swagger-section .title { + font-style: bold; +} +.swagger-section .secondary_form { + display: none; +} +.swagger-section .main_image { + display: block; + margin-left: auto; + margin-right: auto; +} +.swagger-section .oauth_body { + margin-left: 100px; + margin-right: 100px; +} +.swagger-section .oauth_submit { + text-align: center; +} +.swagger-section .api-popup-dialog { + z-index: 10000; + position: absolute; + width: 500px; + background: #FFF; + padding: 20px; + border: 1px solid #ccc; + border-radius: 5px; + display: none; + font-size: 13px; + color: #777; +} +.swagger-section .api-popup-dialog .api-popup-title { + font-size: 24px; + padding: 10px 0; +} +.swagger-section .api-popup-dialog .api-popup-title { + font-size: 24px; + padding: 10px 0; +} +.swagger-section .api-popup-dialog p.error-msg { + padding-left: 5px; + padding-bottom: 5px; +} +.swagger-section .api-popup-dialog button.api-popup-authbtn { + height: 30px; +} +.swagger-section .api-popup-dialog button.api-popup-cancel { + height: 30px; +} +.swagger-section .api-popup-scopes { + padding: 10px 20px; +} +.swagger-section .api-popup-scopes li { + padding: 5px 0; + line-height: 20px; +} +.swagger-section .api-popup-scopes .api-scope-desc { + padding-left: 20px; + font-style: italic; +} +.swagger-section .api-popup-scopes li input { + position: relative; + top: 2px; +} +.swagger-section .api-popup-actions { + padding-top: 10px; +} +.swagger-section .access { + float: right; +} +.swagger-section .auth { + float: right; +} +.swagger-section .api-ic { + height: 18px; + vertical-align: middle; + display: inline-block; + background: url(../images/explorer_icons.png) no-repeat; +} +.swagger-section .api-ic .api_information_panel { + position: relative; + margin-top: 20px; + margin-left: -5px; + background: #FFF; + border: 1px solid #ccc; + border-radius: 5px; + display: none; + font-size: 13px; + max-width: 300px; + line-height: 30px; + color: black; + padding: 5px; +} +.swagger-section .api-ic .api_information_panel p .api-msg-enabled { + color: green; +} +.swagger-section .api-ic .api_information_panel p .api-msg-disabled { + color: red; +} +.swagger-section .api-ic:hover .api_information_panel { + position: absolute; + display: block; +} +.swagger-section .ic-info { + background-position: 0 0; + width: 18px; + margin-top: -6px; + margin-left: 4px; +} +.swagger-section .ic-warning { + background-position: -60px 0; + width: 18px; + margin-top: -6px; + margin-left: 4px; +} +.swagger-section .ic-error { + background-position: -30px 0; + width: 18px; + margin-top: -6px; + margin-left: 4px; +} +.swagger-section .ic-off { + background-position: -90px 0; + width: 58px; + margin-top: -4px; + cursor: pointer; +} +.swagger-section .ic-on { + background-position: -160px 0; + width: 58px; + margin-top: -4px; + cursor: pointer; +} +.swagger-section #header { + background-color: #89bf04; + padding: 14px; +} +.swagger-section #header a#logo { + font-size: 1.5em; + font-weight: bold; + text-decoration: none; + background: transparent url(../images/logo_small.png) no-repeat left center; + padding: 20px 0 20px 40px; + color: white; +} +.swagger-section #header form#api_selector { + display: block; + clear: none; + float: right; +} +.swagger-section #header form#api_selector .input { + display: block; + clear: none; + float: left; + margin: 0 10px 0 0; +} +.swagger-section #header form#api_selector .input input#input_apiKey { + width: 200px; +} +.swagger-section #header form#api_selector .input input#input_baseUrl { + width: 400px; +} +.swagger-section #header form#api_selector .input a#explore { + display: block; + text-decoration: none; + font-weight: bold; + padding: 6px 8px; + font-size: 0.9em; + color: white; + background-color: #547f00; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + -o-border-radius: 4px; + -ms-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; +} +.swagger-section #header form#api_selector .input a#explore:hover { + background-color: #547f00; +} +.swagger-section #header form#api_selector .input input { + font-size: 0.9em; + padding: 3px; + margin: 0; +} +.swagger-section #content_message { + margin: 10px 15px; + font-style: italic; + color: #999999; +} +.swagger-section #message-bar { + min-height: 30px; + text-align: center; + padding-top: 10px; +} diff --git a/datacenter/dtr/2.2/reference/api/css/style.css b/datacenter/dtr/2.2/reference/api/css/style.css new file mode 100644 index 0000000000..fc21a31db5 --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/css/style.css @@ -0,0 +1,250 @@ +.swagger-section #header a#logo { + font-size: 1.5em; + font-weight: bold; + text-decoration: none; + background: transparent url(../images/logo.png) no-repeat left center; + padding: 20px 0 20px 40px; +} +#text-head { + font-size: 80px; + font-family: 'Roboto', sans-serif; + color: #ffffff; + float: right; + margin-right: 20%; +} +.navbar-fixed-top .navbar-nav { + height: auto; +} +.navbar-fixed-top .navbar-brand { + height: auto; +} +.navbar-header { + height: auto; +} +.navbar-inverse { + background-color: #000; + border-color: #000; +} +#navbar-brand { + margin-left: 20%; +} +.navtext { + font-size: 10px; +} +.h1, +h1 { + font-size: 60px; +} +.navbar-default .navbar-header .navbar-brand { + color: #a2dfee; +} +/* tag titles */ +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { + color: #393939; + font-family: 'Arvo', serif; + font-size: 1.5em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { + color: #525252; + padding-left: 0px; + display: block; + clear: none; + float: left; + font-family: 'Arvo', serif; + font-weight: bold; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #0A0A0A; +} +.container1 { + width: 1500px; + margin: auto; + margin-top: 0; + background-image: url('../images/shield.png'); + background-repeat: no-repeat; + background-position: -40px -20px; + margin-bottom: 210px; +} +.container-inner { + width: 1200px; + margin: auto; + background-color: rgba(223, 227, 228, 0.75); + padding-bottom: 40px; + padding-top: 40px; + border-radius: 15px; +} +.header-content { + padding: 0; + width: 1000px; +} +.title1 { + font-size: 80px; + font-family: 'Vollkorn', serif; + color: #404040; + text-align: center; + padding-top: 40px; + padding-bottom: 100px; +} +#icon { + margin-top: -18px; +} +.subtext { + font-size: 25px; + font-style: italic; + color: #08b; + text-align: right; + padding-right: 250px; +} +.bg-primary { + background-color: #00468b; +} +.navbar-default .nav > li > a, +.navbar-default .nav > li > a:focus { + color: #08b; +} +.navbar-default .nav > li > a, +.navbar-default .nav > li > a:hover { + color: #08b; +} +.navbar-default .nav > li > a, +.navbar-default .nav > li > a:focus:hover { + color: #08b; +} +.text-faded { + font-size: 25px; + font-family: 'Vollkorn', serif; +} +.section-heading { + font-family: 'Vollkorn', serif; + font-size: 45px; + padding-bottom: 10px; +} +hr { + border-color: #00468b; + padding-bottom: 10px; +} +.description { + margin-top: 20px; + padding-bottom: 200px; +} +.description li { + font-family: 'Vollkorn', serif; + font-size: 25px; + color: #525252; + margin-left: 28%; + padding-top: 5px; +} +.gap { + margin-top: 200px; +} +.troubleshootingtext { + color: rgba(255, 255, 255, 0.7); + padding-left: 30%; +} +.troubleshootingtext li { + list-style-type: circle; + font-size: 25px; + padding-bottom: 5px; +} +.overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1000; +} +.block.response_body.json:hover { + cursor: pointer; +} +.backdrop { + color: blue; +} +#myModal { + height: 100%; +} +.modal-backdrop { + bottom: 0; + position: fixed; +} +.curl { + padding: 10px; + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + font-size: 0.9em; + max-height: 400px; + margin-top: 5px; + overflow-y: auto; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + border-radius: 4px; +} +.curl_title { + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; + font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif; + font-weight: 500; + line-height: 1.1; +} +.footer { + display: none; +} +.swagger-section .swagger-ui-wrap h2 { + padding: 0; +} +h2 { + margin: 0; + margin-bottom: 5px; +} +.markdown p { + font-size: 15px; + font-family: 'Arvo', serif; +} +.swagger-section .swagger-ui-wrap .code { + font-size: 15px; + font-family: 'Arvo', serif; +} +.swagger-section .swagger-ui-wrap b { + font-family: 'Arvo', serif; +} +#signin:hover { + cursor: pointer; +} +.dropdown-menu { + padding: 15px; +} +.navbar-right .dropdown-menu { + left: 0; + right: auto; +} +#signinbutton { + width: 100%; + height: 32px; + font-size: 13px; + font-weight: bold; + color: #08b; +} +.navbar-default .nav > li .details { + color: #000000; + text-transform: none; + font-size: 15px; + font-weight: normal; + font-family: 'Open Sans', sans-serif; + font-style: italic; + line-height: 20px; + top: -2px; +} +.navbar-default .nav > li .details:hover { + color: black; +} +#signout { + width: 100%; + height: 32px; + font-size: 13px; + font-weight: bold; + color: #08b; +} diff --git a/datacenter/dtr/2.2/reference/api/css/typography.css b/datacenter/dtr/2.2/reference/api/css/typography.css new file mode 100644 index 0000000000..27c3751ac2 --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/css/typography.css @@ -0,0 +1,26 @@ +/* droid-sans-regular - latin */ +@font-face { + font-family: 'Droid Sans'; + font-style: normal; + font-weight: 400; + src: url('../fonts/droid-sans-v6-latin-regular.eot'); /* IE9 Compat Modes */ + src: local('Droid Sans'), local('DroidSans'), + url('../fonts/droid-sans-v6-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/droid-sans-v6-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/droid-sans-v6-latin-regular.woff') format('woff'), /* Modern Browsers */ + url('../fonts/droid-sans-v6-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/droid-sans-v6-latin-regular.svg#DroidSans') format('svg'); /* Legacy iOS */ +} +/* droid-sans-700 - latin */ +@font-face { + font-family: 'Droid Sans'; + font-style: normal; + font-weight: 700; + src: url('../fonts/droid-sans-v6-latin-700.eot'); /* IE9 Compat Modes */ + src: local('Droid Sans Bold'), local('DroidSans-Bold'), + url('../fonts/droid-sans-v6-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/droid-sans-v6-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/droid-sans-v6-latin-700.woff') format('woff'), /* Modern Browsers */ + url('../fonts/droid-sans-v6-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/droid-sans-v6-latin-700.svg#DroidSans') format('svg'); /* Legacy iOS */ +} diff --git a/datacenter/dtr/2.2/reference/api/custom/custom.css b/datacenter/dtr/2.2/reference/api/custom/custom.css new file mode 100644 index 0000000000..c365077de3 --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/custom/custom.css @@ -0,0 +1,15 @@ +em { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h5 { + color: #10654A; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h5 { + font-size: 1.0em; + margin: 0px; + padding: 15px 0px 5px; +} + +.swagger-section .swagger-ui-wrap table tr td:nth-child(2) textarea { + display: none !important; +} diff --git a/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.eot b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.eot new file mode 100644 index 0000000000..d8524983ad Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.eot differ diff --git a/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.svg b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.svg new file mode 100644 index 0000000000..a54bbbbf25 --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.svg @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.ttf b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.ttf new file mode 100644 index 0000000000..15896c441f Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.ttf differ diff --git a/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.woff b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.woff new file mode 100644 index 0000000000..67e3e25f83 Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.woff differ diff --git a/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.woff2 b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.woff2 new file mode 100644 index 0000000000..1e726a7cfc Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-700.woff2 differ diff --git a/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.eot b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.eot new file mode 100644 index 0000000000..ac2698e85a Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.eot differ diff --git a/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.svg b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.svg new file mode 100644 index 0000000000..d9f2a214f9 --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.svg @@ -0,0 +1,403 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.ttf b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.ttf new file mode 100644 index 0000000000..fb8cea662b Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.ttf differ diff --git a/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.woff b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.woff new file mode 100644 index 0000000000..abf19899f7 Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.woff differ diff --git a/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.woff2 b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.woff2 new file mode 100644 index 0000000000..9f93f74c3b Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/fonts/droid-sans-v6-latin-regular.woff2 differ diff --git a/datacenter/dtr/2.2/reference/api/images/explorer_icons.png b/datacenter/dtr/2.2/reference/api/images/explorer_icons.png new file mode 100644 index 0000000000..ed9d2fffb6 Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/images/explorer_icons.png differ diff --git a/datacenter/dtr/2.2/reference/api/images/favicon-16x16.png b/datacenter/dtr/2.2/reference/api/images/favicon-16x16.png new file mode 100755 index 0000000000..66b1a5bfb9 Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/images/favicon-16x16.png differ diff --git a/datacenter/dtr/2.2/reference/api/images/favicon-32x32.png b/datacenter/dtr/2.2/reference/api/images/favicon-32x32.png new file mode 100755 index 0000000000..32f319f89b Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/images/favicon-32x32.png differ diff --git a/datacenter/dtr/2.2/reference/api/images/favicon.ico b/datacenter/dtr/2.2/reference/api/images/favicon.ico new file mode 100755 index 0000000000..8b60bcf06a Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/images/favicon.ico differ diff --git a/datacenter/dtr/2.2/reference/api/images/logo_small.png b/datacenter/dtr/2.2/reference/api/images/logo_small.png new file mode 100644 index 0000000000..5496a65579 Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/images/logo_small.png differ diff --git a/datacenter/dtr/2.2/reference/api/images/pet_store_api.png b/datacenter/dtr/2.2/reference/api/images/pet_store_api.png new file mode 100644 index 0000000000..f9f9cd4aeb Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/images/pet_store_api.png differ diff --git a/datacenter/dtr/2.2/reference/api/images/throbber.gif b/datacenter/dtr/2.2/reference/api/images/throbber.gif new file mode 100644 index 0000000000..0639388924 Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/images/throbber.gif differ diff --git a/datacenter/dtr/2.2/reference/api/images/wordnik_api.png b/datacenter/dtr/2.2/reference/api/images/wordnik_api.png new file mode 100644 index 0000000000..dca4f1455a Binary files /dev/null and b/datacenter/dtr/2.2/reference/api/images/wordnik_api.png differ diff --git a/datacenter/dtr/2.2/reference/api/index.html b/datacenter/dtr/2.2/reference/api/index.html new file mode 100644 index 0000000000..ddd268cefb --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/index.html @@ -0,0 +1,32 @@ + + + + + Docker Trusted Registry API Documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/datacenter/dtr/2.2/reference/api/index.md b/datacenter/dtr/2.2/reference/api/index.md new file mode 100644 index 0000000000..c62ee08b3c --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/index.md @@ -0,0 +1,29 @@ +--- +description: Learn how to use the Docker Trusted Registry REST API +keywords: dtr, api, reference +title: Docker Trusted Registry 2.1 API +--- + +
+
+ + + + + + + + + + + + + + + + + + + + +
diff --git a/datacenter/dtr/2.2/reference/api/lang/en.js b/datacenter/dtr/2.2/reference/api/lang/en.js new file mode 100644 index 0000000000..776a8b72e0 --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/lang/en.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Warning: Deprecated", + "Implementation Notes":"Implementation Notes", + "Response Class":"Response Class", + "Status":"Status", + "Parameters":"Parameters", + "Parameter":"Parameter", + "Value":"Value", + "Description":"Description", + "Parameter Type":"Parameter Type", + "Data Type":"Data Type", + "Response Messages":"Response Messages", + "HTTP Status Code":"HTTP Status Code", + "Reason":"Reason", + "Response Model":"Response Model", + "Request URL":"Request URL", + "Response Body":"Response Body", + "Response Code":"Response Code", + "Response Headers":"Response Headers", + "Hide Response":"Hide Response", + "Headers":"Headers", + "Try it out!":"Try it out!", + "Show/Hide":"Show/Hide", + "List Operations":"List Operations", + "Expand Operations":"Expand Operations", + "Raw":"Raw", + "can't parse JSON. Raw result":"can't parse JSON. Raw result", + "Model Schema":"Model Schema", + "Model":"Model", + "apply":"apply", + "Username":"Username", + "Password":"Password", + "Terms of service":"Terms of service", + "Created by":"Created by", + "See more at":"See more at", + "Contact the developer":"Contact the developer", + "api version":"api version", + "Response Content Type":"Response Content Type", + "fetching resource":"fetching resource", + "fetching resource list":"fetching resource list", + "Explore":"Explore", + "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Can't read from server. It may not have the appropriate access-control-origin settings.", + "Please specify the protocol for":"Please specify the protocol for", + "Can't read swagger JSON from":"Can't read swagger JSON from", + "Finished Loading Resource Information. Rendering Swagger UI":"Finished Loading Resource Information. Rendering Swagger UI", + "Unable to read api":"Unable to read api", + "from path":"from path", + "server returned":"server returned" +}); diff --git a/datacenter/dtr/2.2/reference/api/lang/es.js b/datacenter/dtr/2.2/reference/api/lang/es.js new file mode 100644 index 0000000000..a8dff60b6a --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/lang/es.js @@ -0,0 +1,52 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Advertencia: Obsoleto", + "Implementation Notes":"Notas de implementación", + "Response Class":"Clase de la Respuesta", + "Status":"Status", + "Parameters":"Parámetros", + "Parameter":"Parámetro", + "Value":"Valor", + "Description":"Descripción", + "Parameter Type":"Tipo del Parámetro", + "Data Type":"Tipo del Dato", + "Response Messages":"Mensajes de la Respuesta", + "HTTP Status Code":"Código de Status HTTP", + "Reason":"Razón", + "Response Model":"Modelo de la Respuesta", + "Request URL":"URL de la Solicitud", + "Response Body":"Cuerpo de la Respuesta", + "Response Code":"Código de la Respuesta", + "Response Headers":"Encabezados de la Respuesta", + "Hide Response":"Ocultar Respuesta", + "Try it out!":"Pruébalo!", + "Show/Hide":"Mostrar/Ocultar", + "List Operations":"Listar Operaciones", + "Expand Operations":"Expandir Operaciones", + "Raw":"Crudo", + "can't parse JSON. Raw result":"no puede parsear el JSON. Resultado crudo", + "Model Schema":"Esquema del Modelo", + "Model":"Modelo", + "apply":"aplicar", + "Username":"Nombre de usuario", + "Password":"Contraseña", + "Terms of service":"Términos de Servicio", + "Created by":"Creado por", + "See more at":"Ver más en", + "Contact the developer":"Contactar al desarrollador", + "api version":"versión de la api", + "Response Content Type":"Tipo de Contenido (Content Type) de la Respuesta", + "fetching resource":"buscando recurso", + "fetching resource list":"buscando lista del recurso", + "Explore":"Explorar", + "Show Swagger Petstore Example Apis":"Mostrar Api Ejemplo de Swagger Petstore", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"No se puede leer del servidor. Tal vez no tiene la configuración de control de acceso de origen (access-control-origin) apropiado.", + "Please specify the protocol for":"Por favor, especificar el protocola para", + "Can't read swagger JSON from":"No se puede leer el JSON de swagger desde", + "Finished Loading Resource Information. Rendering Swagger UI":"Finalizada la carga del recurso de Información. Mostrando Swagger UI", + "Unable to read api":"No se puede leer la api", + "from path":"desde ruta", + "server returned":"el servidor retornó" +}); diff --git a/datacenter/dtr/2.2/reference/api/lang/pt.js b/datacenter/dtr/2.2/reference/api/lang/pt.js new file mode 100644 index 0000000000..f2e7c13d41 --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/lang/pt.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Aviso: Depreciado", + "Implementation Notes":"Notas de Implementação", + "Response Class":"Classe de resposta", + "Status":"Status", + "Parameters":"Parâmetros", + "Parameter":"Parâmetro", + "Value":"Valor", + "Description":"Descrição", + "Parameter Type":"Tipo de parâmetro", + "Data Type":"Tipo de dados", + "Response Messages":"Mensagens de resposta", + "HTTP Status Code":"Código de status HTTP", + "Reason":"Razão", + "Response Model":"Modelo resposta", + "Request URL":"URL requisição", + "Response Body":"Corpo da resposta", + "Response Code":"Código da resposta", + "Response Headers":"Cabeçalho da resposta", + "Headers":"Cabeçalhos", + "Hide Response":"Esconder resposta", + "Try it out!":"Tente agora!", + "Show/Hide":"Mostrar/Esconder", + "List Operations":"Listar operações", + "Expand Operations":"Expandir operações", + "Raw":"Cru", + "can't parse JSON. Raw result":"Falha ao analisar JSON. Resulto cru", + "Model Schema":"Modelo esquema", + "Model":"Modelo", + "apply":"Aplicar", + "Username":"Usuário", + "Password":"Senha", + "Terms of service":"Termos do serviço", + "Created by":"Criado por", + "See more at":"Veja mais em", + "Contact the developer":"Contate o desenvolvedor", + "api version":"Versão api", + "Response Content Type":"Tipo de conteúdo da resposta", + "fetching resource":"busca recurso", + "fetching resource list":"buscando lista de recursos", + "Explore":"Explorar", + "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Não é possível ler do servidor. Pode não ter as apropriadas configurações access-control-origin", + "Please specify the protocol for":"Por favor especifique o protocolo", + "Can't read swagger JSON from":"Não é possível ler o JSON Swagger de", + "Finished Loading Resource Information. Rendering Swagger UI":"Carregar informação de recurso finalizada. Renderizando Swagger UI", + "Unable to read api":"Não foi possível ler api", + "from path":"do caminho", + "server returned":"servidor retornou" +}); diff --git a/datacenter/dtr/2.2/reference/api/lang/ru.js b/datacenter/dtr/2.2/reference/api/lang/ru.js new file mode 100644 index 0000000000..065100f73f --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/lang/ru.js @@ -0,0 +1,52 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Ворнинг: Депрекейтед", + "Implementation Notes":"Заметки", + "Response Class":"Пример ответа", + "Status":"Статус", + "Parameters":"Параметры", + "Parameter":"Параметр", + "Value":"Значение", + "Description":"Описание", + "Parameter Type":"Тип параметра", + "Data Type":"Тип данных", + "HTTP Status Code":"HTTP код", + "Reason":"Причина", + "Response Model":"Структура ответа", + "Request URL":"URL запроса", + "Response Body":"Тело ответа", + "Response Code":"HTTP код ответа", + "Response Headers":"Заголовки ответа", + "Hide Response":"Спрятать ответ", + "Response Messages":"Что может прийти в ответ", + "Try it out!":"Попробовать!", + "Show/Hide":"Показать/Скрыть", + "List Operations":"Операции кратко", + "Expand Operations":"Операции подробно", + "Raw":"В сыром виде", + "can't parse JSON. Raw result":"Не удается распарсить ответ:", + "Model Schema":"Структура", + "Model":"Описание", + "apply":"применить", + "Username":"Имя пользователя", + "Password":"Пароль", + "Terms of service":"Условия использования", + "Created by":"Разработано", + "See more at":"Еще тут", + "Contact the developer":"Связаться с разработчиком", + "api version":"Версия API", + "Response Content Type":"Content Type ответа", + "fetching resource":"Получение ресурса", + "fetching resource list":"Получение ресурсов", + "Explore":"Поехали", + "Show Swagger Petstore Example Apis":"Показать примеры АПИ", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Не удается получить ответ от сервера. Возможно, какая-то лажа с настройками доступа", + "Please specify the protocol for":"Пожалуйста, укажите протогол для", + "Can't read swagger JSON from":"Не получается прочитать swagger json из", + "Finished Loading Resource Information. Rendering Swagger UI":"Загрузка информации о ресурсах завершена. Рендерим", + "Unable to read api":"Не удалось прочитать api", + "from path":"по адресу", + "server returned":"сервер сказал" +}); diff --git a/datacenter/dtr/2.2/reference/api/lang/tr.js b/datacenter/dtr/2.2/reference/api/lang/tr.js new file mode 100644 index 0000000000..16426a9c34 --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/lang/tr.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Uyarı: Deprecated", + "Implementation Notes":"Gerçekleştirim Notları", + "Response Class":"Dönen Sınıf", + "Status":"Statü", + "Parameters":"Parametreler", + "Parameter":"Parametre", + "Value":"Değer", + "Description":"Açıklama", + "Parameter Type":"Parametre Tipi", + "Data Type":"Veri Tipi", + "Response Messages":"Dönüş Mesajı", + "HTTP Status Code":"HTTP Statü Kodu", + "Reason":"Gerekçe", + "Response Model":"Dönüş Modeli", + "Request URL":"İstek URL", + "Response Body":"Dönüş İçeriği", + "Response Code":"Dönüş Kodu", + "Response Headers":"Dönüş Üst Bilgileri", + "Hide Response":"Dönüşü Gizle", + "Headers":"Üst Bilgiler", + "Try it out!":"Dene!", + "Show/Hide":"Göster/Gizle", + "List Operations":"Operasyonları Listele", + "Expand Operations":"Operasyonları Aç", + "Raw":"Ham", + "can't parse JSON. Raw result":"JSON çözümlenemiyor. Ham sonuç", + "Model Schema":"Model Şema", + "Model":"Model", + "apply":"uygula", + "Username":"Kullanıcı Adı", + "Password":"Parola", + "Terms of service":"Servis şartları", + "Created by":"Oluşturan", + "See more at":"Daha fazlası için", + "Contact the developer":"Geliştirici ile İletişime Geçin", + "api version":"api versiyon", + "Response Content Type":"Dönüş İçerik Tipi", + "fetching resource":"kaynak getiriliyor", + "fetching resource list":"kaynak listesi getiriliyor", + "Explore":"Keşfet", + "Show Swagger Petstore Example Apis":"Swagger Petstore Örnek Api'yi Gör", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Sunucudan okuma yapılamıyor. Sunucu access-control-origin ayarlarınızı kontrol edin.", + "Please specify the protocol for":"Lütfen istenen adres için protokol belirtiniz", + "Can't read swagger JSON from":"Swagger JSON bu kaynaktan okunamıyor", + "Finished Loading Resource Information. Rendering Swagger UI":"Kaynak baglantısı tamamlandı. Swagger UI gösterime hazırlanıyor", + "Unable to read api":"api okunamadı", + "from path":"yoldan", + "server returned":"sunucuya dönüldü" +}); diff --git a/datacenter/dtr/2.2/reference/api/lang/translator.js b/datacenter/dtr/2.2/reference/api/lang/translator.js new file mode 100644 index 0000000000..591f6d4094 --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/lang/translator.js @@ -0,0 +1,39 @@ +'use strict'; + +/** + * Translator for documentation pages. + * + * To enable translation you should include one of language-files in your index.html + * after . + * For example - + * + * If you wish to translate some new texsts you should do two things: + * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. + * 2. Mark that text it templates this way New Phrase or . + * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. + * + */ +window.SwaggerTranslator = { + + _words:[], + + translate: function(sel) { + var $this = this; + sel = sel || '[data-sw-translate]'; + + $(sel).each(function() { + $(this).html($this._tryTranslate($(this).html())); + + $(this).val($this._tryTranslate($(this).val())); + $(this).attr('title', $this._tryTranslate($(this).attr('title'))); + }); + }, + + _tryTranslate: function(word) { + return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word; + }, + + learn: function(wordsMap) { + this._words = wordsMap; + } +}; diff --git a/datacenter/dtr/2.2/reference/api/lib/backbone-min.js b/datacenter/dtr/2.2/reference/api/lib/backbone-min.js new file mode 100644 index 0000000000..a3f544be6d --- /dev/null +++ b/datacenter/dtr/2.2/reference/api/lib/backbone-min.js @@ -0,0 +1,15 @@ +// Backbone.js 1.1.2 + +(function(t,e){if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,r,s){t.Backbone=e(t,s,i,r)})}else if(typeof exports!=="undefined"){var i=require("underscore");e(t,exports,i)}else{t.Backbone=e(t,{},t._,t.jQuery||t.Zepto||t.ender||t.$)}})(this,function(t,e,i,r){var s=t.Backbone;var n=[];var a=n.push;var o=n.slice;var h=n.splice;e.VERSION="1.1.2";e.$=r;e.noConflict=function(){t.Backbone=s;return this};e.emulateHTTP=false;e.emulateJSON=false;var u=e.Events={on:function(t,e,i){if(!c(this,"on",t,[e,i])||!e)return this;this._events||(this._events={});var r=this._events[t]||(this._events[t]=[]);r.push({callback:e,context:i,ctx:i||this});return this},once:function(t,e,r){if(!c(this,"once",t,[e,r])||!e)return this;var s=this;var n=i.once(function(){s.off(t,n);e.apply(this,arguments)});n._callback=e;return this.on(t,n,r)},off:function(t,e,r){var s,n,a,o,h,u,l,f;if(!this._events||!c(this,"off",t,[e,r]))return this;if(!t&&!e&&!r){this._events=void 0;return this}o=t?[t]:i.keys(this._events);for(h=0,u=o.length;h").attr(t);this.setElement(r,false)}else{this.setElement(i.result(this,"el"),false)}}});e.sync=function(t,r,s){var n=T[t];i.defaults(s||(s={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:n,dataType:"json"};if(!s.url){a.url=i.result(r,"url")||M()}if(s.data==null&&r&&(t==="create"||t==="update"||t==="patch")){a.contentType="application/json";a.data=JSON.stringify(s.attrs||r.toJSON(s))}if(s.emulateJSON){a.contentType="application/x-www-form-urlencoded";a.data=a.data?{model:a.data}:{}}if(s.emulateHTTP&&(n==="PUT"||n==="DELETE"||n==="PATCH")){a.type="POST";if(s.emulateJSON)a.data._method=n;var o=s.beforeSend;s.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",n);if(o)return o.apply(this,arguments)}}if(a.type!=="GET"&&!s.emulateJSON){a.processData=false}if(a.type==="PATCH"&&k){a.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}var h=s.xhr=e.ajax(i.extend(a,s));r.trigger("request",r,h,s);return h};var k=typeof window!=="undefined"&&!!window.ActiveXObject&&!(window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent);var T={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var $=e.Router=function(t){t||(t={});if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var S=/\((.*?)\)/g;var H=/(\(\?)?:\w+/g;var A=/\*\w+/g;var I=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend($.prototype,u,{initialize:function(){},route:function(t,r,s){if(!i.isRegExp(t))t=this._routeToRegExp(t);if(i.isFunction(r)){s=r;r=""}if(!s)s=this[r];var n=this;e.history.route(t,function(i){var a=n._extractParameters(t,i);n.execute(s,a);n.trigger.apply(n,["route:"+r].concat(a));n.trigger("route",r,a);e.history.trigger("route",n,r,a)});return this},execute:function(t,e){if(t)t.apply(this,e)},navigate:function(t,i){e.history.navigate(t,i);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=i.result(this,"routes");var t,e=i.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(I,"\\$&").replace(S,"(?:$1)?").replace(H,function(t,e){return e?t:"([^/?]+)"}).replace(A,"([^?]*?)");return new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var r=t.exec(e).slice(1);return i.map(r,function(t,e){if(e===r.length-1)return t||null;return t?decodeURIComponent(t):null})}});var N=e.History=function(){this.handlers=[];i.bindAll(this,"checkUrl");if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var R=/^[#\/]|\s+$/g;var O=/^\/+|\/+$/g;var P=/msie [\w.]+/;var C=/\/$/;var j=/#.*$/;N.started=false;i.extend(N.prototype,u,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(t==null){if(this._hasPushState||!this._wantsHashChange||e){t=decodeURI(this.location.pathname+this.location.search);var i=this.root.replace(C,"");if(!t.indexOf(i))t=t.slice(i.length)}else{t=this.getHash()}}return t.replace(R,"")},start:function(t){if(N.started)throw new Error("Backbone.history has already been started");N.started=true;this.options=i.extend({root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var r=this.getFragment();var s=document.documentMode;var n=P.exec(navigator.userAgent.toLowerCase())&&(!s||s<=7);this.root=("/"+this.root+"/").replace(O,"/");if(n&&this._wantsHashChange){var a=e.$('