2014-12-26 21:54:36 +00:00
< div class = "config-setup-tool-element" >
2015-02-18 00:15:54 +00:00
< div class = "cor-loader" ng-if = "!config" > < / div >
2015-01-08 21:06:20 +00:00
< div ng-show = "config && config['SUPER_USERS']" >
2015-01-08 20:58:35 +00:00
< form id = "configform" name = "configform" >
2015-01-05 18:01:32 +00:00
<!-- Basic Configuration -->
< div class = "co-panel" >
< div class = "co-panel-heading" >
< i class = "fa fa-gears" > < / i > Basic Configuration
2014-12-26 21:54:36 +00:00
< / div >
2015-01-05 18:01:32 +00:00
< div class = "co-panel-body" >
2014-12-26 21:54:36 +00:00
< table class = "config-table" >
< tr >
2015-01-05 18:01:32 +00:00
< td > Enterprise Logo URL:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-01-05 18:01:32 +00:00
< span class = "config-string-field" binding = "config.ENTERPRISE_LOGO_URL"
2015-01-05 20:18:01 +00:00
placeholder="http://example.com/logo.png">< / span >
2015-01-05 18:01:32 +00:00
< div class = "help-text" >
2015-01-05 20:18:01 +00:00
Enter the full URL to your company's logo.
2015-01-05 18:01:32 +00:00
< / div >
< / td >
< td >
2015-01-05 20:18:01 +00:00
< img class = "registry-logo-preview" ng-src = "{{ config.ENTERPRISE_LOGO_URL }}" >
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< tr >
< td class = "non-input" > Contact Information:< / td >
< td colspan = "2" >
2015-01-05 22:10:01 +00:00
< span class = "config-contacts-field" binding = "config.CONTACT_INFO" > < / span >
2015-01-05 18:01:32 +00:00
< div class = "help-text" style = "margin-top: 10px;" >
Information to show in the Contact Page. If none specified, CoreOS contact information
is displayed.
< / div >
< / td >
< / tr >
2014-12-26 21:54:36 +00:00
< tr >
2015-03-25 22:43:12 +00:00
< td class = "non-input" > User Creation:< / td >
2015-01-05 20:18:01 +00:00
< td colspan = "2" >
2015-01-05 18:01:32 +00:00
< div class = "co-checkbox" >
< input id = "ftuc" type = "checkbox" ng-model = "config.FEATURE_USER_CREATION" >
2015-01-05 20:18:01 +00:00
< label for = "ftuc" > Enable Open User Creation< / label >
2015-01-05 18:01:32 +00:00
< / div >
< div class = "help-text" >
2015-01-05 20:18:01 +00:00
If enabled, user accounts can be created by anyone.
Users can always be created in the users panel under this superuser view.
2015-01-05 18:01:32 +00:00
< / div >
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-03-25 22:43:12 +00:00
< tr >
2015-03-26 20:31:19 +00:00
< td class = "non-input" > Encrypted Client Password:< / td >
2015-03-25 22:43:12 +00:00
< td colspan = "2" >
< div class = "co-checkbox" >
< input id = "ftet" type = "checkbox" ng-model = "config.FEATURE_REQUIRE_ENCRYPTED_BASIC_AUTH" >
2015-03-26 20:31:19 +00:00
< label for = "ftet" > Require Encrypted Client Passwords< / label >
2015-03-25 22:43:12 +00:00
< / div >
< div class = "help-text" >
If enabled, users will not be able to login from the Docker command
line with a non-encrypted password and must generate an encrypted
2015-03-26 20:31:19 +00:00
password to use.
2015-03-25 22:43:12 +00:00
< / div >
< div class = "help-text" ng-if = "config.AUTHENTICATION_TYPE == 'LDAP'" >
This feature is < strong > highly recommended< / strong > for setups with LDAP authentication, as Docker currently stores passwords in < strong > plaintext< / strong > on user's machines.
< / div >
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< / table >
< / div >
< / div >
<!-- Server Configuration -->
< div class = "co-panel" >
< div class = "co-panel-heading" >
< i class = "fa fa-cloud" > < / i > Server Configuration
< / div >
< div class = "co-panel-body" >
< table class = "config-table" >
< tr >
2015-01-05 20:18:01 +00:00
< td > Server Hostname:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-01-05 18:01:32 +00:00
< span class = "config-string-field" binding = "config.SERVER_HOSTNAME"
2015-01-14 22:04:02 +00:00
placeholder="Hostname (and optional port if non-standard)"
2015-01-15 19:36:05 +00:00
pattern="{{ HOSTNAME_REGEX }}">< / span >
2015-01-05 18:01:32 +00:00
< div class = "help-text" >
The HTTP host (and optionally the port number if a non-standard HTTP/HTTPS port) of the location
where the registry will be accessible on the network
< / div >
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< tr >
< td > SSL:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-01-05 18:01:32 +00:00
< div class = "co-checkbox" >
< input id = "enable-ssl" type = "checkbox" ng-model = "config.PREFERRED_URL_SCHEME"
ng-true-value="https" ng-false-value="http">
< label for = "enable-ssl" > Enable SSL< / label >
< / div >
< div class = "help-text" style = "margin-bottom: 10px" >
A valid SSL certificate and private key files are required to use this option.
< / div >
2015-05-22 20:09:11 +00:00
< div class = "co-alert co-alert-info" ng-if = "config.PREFERRED_URL_SCHEME == 'https'" >
Enabling SSL also enables < a href = "https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" > HTTP Strict Transport Security< / a > .< br / >
This prevents downgrade attacks and cookie theft, but browsers will reject all future insecure connections on this hostname.
< / div >
2015-01-08 20:58:35 +00:00
< table class = "config-table" ng-if = "config.PREFERRED_URL_SCHEME == 'https'" >
2015-01-05 18:01:32 +00:00
< tr >
< td class = "non-input" > Certificate:< / td >
< td >
< span class = "config-file-field" filename = "ssl.cert" > < / span >
< div class = "help-text" >
The certificate must be in PEM format.
< /div
< / td >
< / tr >
< tr >
< td class = "non-input" > Private key:< / td >
< td >
< span class = "config-file-field" filename = "ssl.key" > < / span >
< / td >
< / tr >
< / table >
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< / table >
< / div >
< / div >
2014-12-26 21:54:36 +00:00
2015-01-05 18:01:32 +00:00
<!-- Redis -->
< div class = "co-panel" >
< div class = "co-panel-heading" >
< img src = "/static/img/redis-small.png" > redis
< / div >
< div class = "co-panel-body" >
< div class = "description" >
< p > A < a href = "http://redis.io" target = "_blank" > redis< / a > key-value store is required for real-time events and build logs.< / p >
< / div >
< table class = "config-table" >
< tr >
2015-01-05 20:18:01 +00:00
< td > Redis Hostname:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-01-05 20:18:01 +00:00
< span class = "config-string-field" binding = "mapped.redis.host"
2015-01-14 22:04:02 +00:00
placeholder="The redis server hostname"
2015-01-15 19:36:05 +00:00
pattern="{{ HOSTNAME_REGEX }}"
validator="validateHostname(value)">>< / span >
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< tr >
< td > Redis port:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-01-05 18:01:32 +00:00
< span class = "config-numeric-field" binding = "mapped.redis.port" default-value = "6379" > < / span >
< div class = "help-text" >
Access to this port and hostname must be allowed from all hosts running
the enterprise registry
< / div >
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< tr >
< td > Redis password:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-01-05 20:18:01 +00:00
< input class = "form-control" type = "password" ng-model = "mapped.redis.password"
placeholder="Optional password for connecting to redis">
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< / table >
< / div >
< / div > <!-- /Redis -->
<!-- Registry Storage -->
< div class = "co-panel" >
< div class = "co-panel-heading" >
< i class = "fa fa-download" > < / i > Registry Storage
< / div >
< div class = "co-panel-body" >
< div class = "description" >
< p >
Registry images can be stored either locally or in a remote storage system.
< strong > A remote storage system is required for high-avaliability systems.< / strong >
< / p >
< table class = "config-table" >
< tr >
< td class = "non-input" > Storage Engine:< / td >
< td >
< select ng-model = "config.DISTRIBUTED_STORAGE_CONFIG.local[0]" >
< option value = "LocalStorage" > Locally mounted directory< / option >
< option value = "S3Storage" > Amazon S3< / option >
< option value = "GoogleCloudStorage" > Google Cloud Storage< / option >
< option value = "RadosGWStorage" > Ceph Object Gateway (RADOS)< / option >
2015-05-21 19:22:59 +00:00
< option value = "SwiftStorage" > OpenStack Storage (Swift)< / option >
2015-01-05 18:01:32 +00:00
< / select >
< / td >
< / tr >
2015-01-07 21:20:51 +00:00
<!-- Fields -->
< tr ng-repeat = "field in STORAGE_CONFIG_FIELDS[config.DISTRIBUTED_STORAGE_CONFIG.local[0]]" >
< td > {{ field.title }}:< / td >
2015-01-05 18:01:32 +00:00
< td >
2015-05-21 19:22:59 +00:00
< span class = "config-map-field"
binding="config.DISTRIBUTED_STORAGE_CONFIG.local[1][field.name]"
ng-if="field.kind == 'map'"
keys="field.keys">< / span >
2015-01-05 18:01:32 +00:00
< span class = "config-string-field"
2015-01-07 21:20:51 +00:00
binding="config.DISTRIBUTED_STORAGE_CONFIG.local[1][field.name]"
placeholder="{{ field.placeholder }}"
2015-05-21 19:22:59 +00:00
ng-if="field.kind == 'text'"
is-optional="field.optional">< / span >
2015-01-07 21:20:51 +00:00
< div class = "co-checkbox" ng-if = "field.kind == 'bool'" >
< input id = "dsc-{{ field.name }}" type = "checkbox"
ng-model="config.DISTRIBUTED_STORAGE_CONFIG.local[1][field.name]">
< label for = "dsc-{{ field.name }}" > {{ field.placeholder }}< / label >
2015-01-05 18:01:32 +00:00
< / div >
2015-01-07 21:20:51 +00:00
< div class = "help-text" ng-if = "field.help_url" >
See < a href = "{{ field.help_url }}" target = "_blank" > Documentation< / a > for more information
2015-01-05 18:01:32 +00:00
< / div >
< / td >
< / tr >
< / table >
< / div >
< / div >
< / div >
<!-- E - mail -->
< div class = "co-panel" >
< div class = "co-panel-heading" >
< i class = "fa fa-envelope" > < / i > E-mail
< / div >
< div class = "co-panel-body" >
< div class = "description" >
< p > Valid e-mail server configuration is required for notification e-mails and the ability of
users to reset their passwords.< / p >
< / div >
< div class = "co-checkbox" >
< input id = "ftmail" type = "checkbox" ng-model = "config.FEATURE_MAILING" >
< label for = "ftmail" > Enable E-mails< / label >
< / div >
2015-01-08 20:58:35 +00:00
< table class = "config-table" ng-if = "config.FEATURE_MAILING" >
2015-01-05 18:01:32 +00:00
< tr >
< td > SMTP Server:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-01-05 18:01:32 +00:00
< span class = "config-string-field" binding = "config.MAIL_SERVER"
2015-01-14 22:04:02 +00:00
placeholder="SMTP server for sending e-mail"
2015-01-15 19:36:05 +00:00
pattern="{{ HOSTNAME_REGEX }}"
validator="validateHostname(value)">>< / span >
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< tr >
< td > SMTP Server Port:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-01-05 18:01:32 +00:00
< span class = "config-numeric-field" binding = "config.MAIL_PORT"
default-value="587">< / span >
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< tr >
< td > TLS:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-01-05 18:01:32 +00:00
< div class = "co-checkbox" >
< input id = "mut" type = "checkbox" ng-model = "config.MAIL_USE_TLS" >
< label for = "mut" > Use TLS< / label >
2014-12-26 21:54:36 +00:00
< / div >
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< tr >
< td > Mail Sender:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-02-25 23:30:38 +00:00
< input class = "form-control" type = "email" ng-model = "config.MAIL_DEFAULT_SENDER"
2015-01-14 22:04:02 +00:00
placeholder="E-mail address">< / span >
2015-01-05 18:01:32 +00:00
< div class = "help-text" >
E-mail address from which all e-mails are sent. If not specified,
< code > support@quay.io< / code > will be used.
< / div >
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< tr >
< td > Authentication:< / td >
2014-12-26 21:54:36 +00:00
< td >
2015-01-05 18:01:32 +00:00
< div class = "co-checkbox" >
< input id = "uma" type = "checkbox" ng-model = "config.MAIL_USE_AUTH" >
< label for = "uma" > Requires Authentication< / label >
< / div >
2015-01-08 20:58:35 +00:00
< table class = "config-table" ng-if = "config.MAIL_USE_AUTH" >
2015-01-05 18:01:32 +00:00
< tr >
< td > Username:< / td >
< td >
< span class = "config-string-field" binding = "config.MAIL_USERNAME"
placeholder="Username for authentication">< / span >
< / td >
< / tr >
< tr >
< td > Password:< / td >
< td >
2015-01-07 21:20:51 +00:00
< input class = "form-control" type = "password"
ng-model="config.MAIL_PASSWORD"
2015-01-05 18:01:32 +00:00
placeholder="Password for authentication">< / span >
< / td >
< / tr >
< / table >
2014-12-26 21:54:36 +00:00
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< / table >
2014-12-26 21:54:36 +00:00
< / div >
2015-01-05 18:01:32 +00:00
< / div > <!-- /E - mail -->
2014-12-26 21:54:36 +00:00
2015-01-05 18:01:32 +00:00
<!-- Authentication -->
< div class = "co-panel" >
< div class = "co-panel-heading" >
< i class = "fa fa-users" > < / i > Authentication
2014-12-26 21:54:36 +00:00
< / div >
2015-01-05 18:01:32 +00:00
< div class = "co-panel-body" >
< div class = "description" >
< p >
Authentication for the registry can be handled by either the registry itself or LDAP.
2015-02-18 00:15:54 +00:00
External authentication providers (such as GitHub) can be used on top of this choice.
2015-01-05 18:01:32 +00:00
< / p >
< / div >
2014-12-26 21:54:36 +00:00
2015-05-12 01:23:18 +00:00
< div class = "co-alert co-alert-warning" ng-if = "config.AUTHENTICATION_TYPE == 'LDAP' && !config.FEATURE_REQUIRE_ENCRYPTED_BASIC_AUTH" >
2015-03-26 20:31:19 +00:00
It is < strong > highly recommended< / strong > to require encrypted client passwords. LDAP passwords used in the Docker client will be stored in < strong > plaintext< / strong > !
2015-03-25 22:43:12 +00:00
< a href = "javascript:void(0)" ng-click = "config.FEATURE_REQUIRE_ENCRYPTED_BASIC_AUTH = true" > Enable this requirement now< / a > .
< / div >
2015-05-12 01:23:18 +00:00
< div class = "co-alert co-alert-success" ng-if = "config.AUTHENTICATION_TYPE == 'LDAP' && config.FEATURE_REQUIRE_ENCRYPTED_BASIC_AUTH" >
2015-03-26 20:31:19 +00:00
Note: The "Require Encrypted Client Passwords" feature is currently enabled which will
2015-03-26 19:10:58 +00:00
prevent LDAP passwords from being saved as plaintext by the Docker client.
2015-03-25 22:43:12 +00:00
< / div >
2015-01-05 18:01:32 +00:00
< table class = "config-table" >
< tr >
< td class = "non-input" > Authentication:< / td >
< td >
< select ng-model = "config.AUTHENTICATION_TYPE" >
< option value = "Database" > Local Database< / option >
< option value = "LDAP" > LDAP< / option >
< / select >
< / td >
< / tr >
< / table >
2014-12-26 21:54:36 +00:00
2015-01-08 20:58:35 +00:00
< table class = "config-table" ng-if = "config.AUTHENTICATION_TYPE == 'LDAP'" >
2015-01-05 18:01:32 +00:00
< tr >
< td > LDAP URI:< / td >
2015-03-16 18:33:53 +00:00
< td >
< span class = "config-string-field" binding = "config.LDAP_URI"
pattern="ldap(s)?://.+">< / span >
< div class = "help-text" >
The full LDAP URI, including the ldap:// or ldaps:// prefix.
< / div >
< / td >
2015-01-05 18:01:32 +00:00
< / tr >
< tr >
2015-05-12 01:23:18 +00:00
< td > Base DN:< / td >
< td >
< span class = "config-list-field" item-title = "DN" binding = "config.LDAP_BASE_DN" > < / span >
< div class = "help-text" >
A list of Distinguished Name pieces which forms the base path for
looking up all LDAP records.
< / div >
< div class = "help-text" >
Example: [dc=my,dc=domain,dc=com]
< / div >
< / td >
2015-01-05 18:01:32 +00:00
< / tr >
< tr >
2015-05-12 01:23:18 +00:00
< td > User Relative DN:< / td >
< td >
< span class = "config-list-field" item-title = "RDN" binding = "config.LDAP_USER_RDN" > < / span >
< div class = "help-text" >
A list of Distinguished Name pieces which forms the base path for
looking up all user LDAP records, relative to the Base DN defined above.
< / div >
< div class = "help-text" >
Example: [ou=employees]
< / div >
< / td >
2015-01-05 18:01:32 +00:00
< / tr >
< tr >
2015-05-12 01:23:18 +00:00
< td > Administrator DN:< / td >
< td > < span class = "config-string-field" binding = "config.LDAP_ADMIN_DN" > < / span >
< div class = "help-text" >
The Distinguished Name for the Administrator account. This account must be able to login and view the records for all user accounts.
< / div >
< div class = "help-text" >
Example: uid=admin,ou=employees,dc=my,dc=domain,dc=com
< / div >
< / td >
2015-01-05 18:01:32 +00:00
< / tr >
< tr >
2015-05-12 01:23:18 +00:00
< td > Administrator DN Password:< / td >
< td >
< div class = "co-alert co-alert-warning" >
Note: This will be stored in
< strong > plaintext< / strong > inside the config.yaml, so setting up a dedicated account or using
< a href = "http://tools.ietf.org/id/draft-stroeder-hashed-userpassword-values-01.html" target = "_blank" > a password hash< / a > is < strong > highly< / strong > recommended.
< / div >
< span class = "config-string-field" binding = "config.LDAP_ADMIN_PASSWD" > < / span >
< div class = "help-text" >
The password for the Administrator DN.
< / div >
< / td >
2015-01-05 18:01:32 +00:00
< / tr >
< tr >
< td > UID Attribute:< / td >
2015-05-12 01:23:18 +00:00
< td >
< span class = "config-string-field" binding = "config.LDAP_UID_ATTR" default-value = "uid" > < / span >
< div class = "help-text" >
The name of the property field in your LDAP user records that stores your
users' username. Typically "uid".
< / div >
< / td >
2015-01-05 18:01:32 +00:00
< / tr >
< tr >
2015-05-12 01:23:18 +00:00
< td > Mail Attribute:< / td >
< td >
< span class = "config-string-field" binding = "config.LDAP_EMAIL_ATTR" default-value = "mail" > < / span >
< div class = "help-text" >
The name of the property field in your LDAP user records that stores your
users' e-mail address(es). Typically "mail".
< / div >
< / td >
2015-01-05 18:01:32 +00:00
< / tr >
< / table >
2014-12-26 21:54:36 +00:00
< / div >
2015-01-05 18:01:32 +00:00
< / div > <!-- /Authentication -->
2014-12-26 21:54:36 +00:00
2015-02-18 00:15:54 +00:00
<!-- GitHub Authentication -->
2015-01-05 18:01:32 +00:00
< div class = "co-panel" >
< div class = "co-panel-heading" >
2015-02-18 00:15:54 +00:00
< i class = "fa fa-github" > < / i > GitHub (Enterprise) Authentication
2014-12-26 21:54:36 +00:00
< / div >
2015-01-05 18:01:32 +00:00
< div class = "co-panel-body" >
< div class = "description" >
< p >
2015-02-18 00:15:54 +00:00
If enabled, users can use GitHub or GitHub Enterprise to authenticate to the registry.
2015-01-05 18:01:32 +00:00
< / p >
< p >
2015-02-18 00:15:54 +00:00
< strong > Note:< / strong > A registered GitHub (Enterprise) OAuth application is required.
2015-01-05 18:01:32 +00:00
View instructions on how to
2015-02-18 00:15:54 +00:00
< a href = "https://coreos.com/docs/enterprise-registry/github-app/" target = "_blank" >
2015-01-05 18:01:32 +00:00
Create an OAuth Application in GitHub
< / a >
< / p >
< / div >
< div class = "co-checkbox" >
< input id = "ftghl" type = "checkbox" ng-model = "config.FEATURE_GITHUB_LOGIN" >
2015-02-18 00:15:54 +00:00
< label for = "ftghl" > Enable GitHub Authentication< / label >
2015-01-05 18:01:32 +00:00
< / div >
2015-01-08 20:58:35 +00:00
< table class = "config-table" ng-if = "config.FEATURE_GITHUB_LOGIN" >
2015-01-05 18:01:32 +00:00
< tr >
2015-02-18 00:15:54 +00:00
< td > GitHub:< / td >
2015-01-05 18:01:32 +00:00
< td >
2015-01-05 20:18:01 +00:00
< select ng-model = "mapped.GITHUB_LOGIN_KIND" >
2015-02-18 00:15:54 +00:00
< option value = "hosted" > GitHub.com< / option >
< option value = "enterprise" > GitHub Enterprise< / option >
2015-01-05 20:18:01 +00:00
< / select >
2015-01-05 18:01:32 +00:00
< / td >
< / tr >
2015-01-08 20:58:35 +00:00
< tr ng-if = "mapped.GITHUB_LOGIN_KIND == 'enterprise'" >
2015-02-18 00:15:54 +00:00
< td > GitHub Endpoint:< / td >
2015-01-05 18:01:32 +00:00
< td >
2015-01-08 18:26:24 +00:00
< span class = "config-string-field"
binding="config.GITHUB_LOGIN_CONFIG.GITHUB_ENDPOINT"
placeholder="https://my.githubserver"
2015-05-03 18:50:26 +00:00
pattern="{{ GITHOST_REGEX }}">
2015-01-05 18:01:32 +00:00
< / span >
< div class = "help-text" >
2015-02-18 00:15:54 +00:00
The GitHub Enterprise endpoint. Must start with http:// or https://.
2015-01-05 18:01:32 +00:00
< / div >
< / td >
< / tr >
< tr >
< td > OAuth Client ID:< / td >
< td >
< span class = "config-string-field" binding = "config.GITHUB_LOGIN_CONFIG.CLIENT_ID" >
< / span >
< / td >
< / tr >
< tr >
< td > OAuth Client Secret:< / td >
< td >
< span class = "config-string-field" binding = "config.GITHUB_LOGIN_CONFIG.CLIENT_SECRET" >
< / span >
< / td >
< / tr >
2015-03-04 00:58:42 +00:00
< tr >
< td > Organization Filtering:< / td >
< td >
< div class = "co-checkbox" >
< input id = "ftghlof" type = "checkbox"
ng-model="config.GITHUB_LOGIN_CONFIG.ORG_RESTRICT">
< label for = "ftghlof" > Restrict By Organization Membership< / label >
< / div >
< div class = "help-text" style = "margin-bottom: 20px;" >
If enabled, only members of specified GitHub
< span ng-if = "mapped.GITHUB_LOGIN_KIND == 'enterprise'" > Enterprise< / span > organizations will be allowed to login via GitHub
< span ng-if = "mapped.GITHUB_LOGIN_KIND == 'enterprise'" > Enterprise< / span > .
< / div >
< span class = "config-list-field"
item-title="Organization ID"
binding="config.GITHUB_LOGIN_CONFIG.ALLOWED_ORGANIZATIONS"
ng-if="config.GITHUB_LOGIN_CONFIG.ORG_RESTRICT">
< / span >
< / td >
< / tr >
2015-01-05 18:01:32 +00:00
< / table >
2014-12-26 21:54:36 +00:00
< / div >
2015-02-18 00:15:54 +00:00
< / div > <!-- /GitHub Authentication -->
2014-12-26 21:54:36 +00:00
2015-01-05 18:01:32 +00:00
<!-- Google Authentication -->
< div class = "co-panel" >
< div class = "co-panel-heading" >
< i class = "fa fa-google" > < / i > Google Authentication
2014-12-26 21:54:36 +00:00
< / div >
2015-01-05 18:01:32 +00:00
< div class = "co-panel-body" >
< div class = "description" >
< p >
If enabled, users can use Google to authenticate to the registry.
< / p >
< p >
< strong > Note:< / strong > A registered Google OAuth application is required.
Visit the
< a href = "https://console.developers.google.com" target = "_blank" >
Google Developer Console
< / a >
to register an application.
< / p >
< / div >
< div class = "co-checkbox" >
< input id = "ftgoa" type = "checkbox" ng-model = "config.FEATURE_GOOGLE_LOGIN" >
< label for = "ftgoa" > Enable Google Authentication< / label >
< / div >
2015-01-08 20:58:35 +00:00
< table class = "config-table" ng-if = "config.FEATURE_GOOGLE_LOGIN" >
2015-01-05 18:01:32 +00:00
< tr >
< td > OAuth Client ID:< / td >
< td >
< span class = "config-string-field" binding = "config.GOOGLE_LOGIN_CONFIG.CLIENT_ID" >
< / span >
< / td >
< / tr >
< tr >
< td > OAuth Client Secret:< / td >
< td >
< span class = "config-string-field" binding = "config.GOOGLE_LOGIN_CONFIG.CLIENT_SECRET" >
< / span >
< / td >
< / tr >
< / table >
2015-01-07 21:20:51 +00:00
< / div >
< / div > <!-- /Google Authentication -->
2014-12-26 21:54:36 +00:00
2015-01-07 21:20:51 +00:00
<!-- Build Support -->
< div class = "co-panel" >
< div class = "co-panel-heading" >
< i class = "fa fa-tasks" > < / i > Dockerfile Build Support
< / div >
< div class = "co-panel-body" >
< div class = "description" >
If enabled, users can submit Dockerfiles to be built and pushed by the Enterprise Registry.
< / div >
2014-12-26 21:54:36 +00:00
2015-01-07 21:20:51 +00:00
< div class = "co-checkbox" >
< input id = "ftbs" type = "checkbox" ng-model = "config.FEATURE_BUILD_SUPPORT" >
< label for = "ftbs" > Enable Dockerfile Build< / label >
< / div >
< div ng-if = "config.FEATURE_BUILD_SUPPORT" style = "margin-top: 10px" >
< strong > Note: Build workers are required for this feature.< / strong >
See < a href = "https://coreos.com/docs/enterprise-registry/build-support/" target = "_blank" > Adding Build Workers< / a > for instructions on how to setup build workers.
2015-01-05 18:01:32 +00:00
< / div >
2014-12-26 21:54:36 +00:00
< / div >
2015-01-07 21:20:51 +00:00
< / div > <!-- /Build Support -->
2014-12-26 21:54:36 +00:00
2015-02-18 00:15:54 +00:00
<!-- GitHub Trigger -->
2015-01-08 20:58:35 +00:00
< div class = "co-panel" ng-if = "config.FEATURE_BUILD_SUPPORT" style = "margin-top: 20px;" >
2015-01-05 18:01:32 +00:00
< div class = "co-panel-heading" >
2015-02-18 00:15:54 +00:00
< i class = "fa fa-github" > < / i > GitHub (Enterprise) Build Triggers
2014-12-26 21:54:36 +00:00
< / div >
2015-01-05 18:01:32 +00:00
< div class = "co-panel-body" >
< div class = "description" >
< p >
2015-02-18 00:15:54 +00:00
If enabled, users can setup GitHub or GitHub Enterprise triggers to invoke Registry builds.
2015-01-05 18:01:32 +00:00
< / p >
< p >
2015-02-18 00:15:54 +00:00
< strong > Note:< / strong > A registered GitHub (Enterprise) OAuth application (< strong > separate from GitHub Authentication< / strong > ) is required.
2015-01-05 18:01:32 +00:00
View instructions on how to
2015-02-18 00:15:54 +00:00
< a href = "https://coreos.com/docs/enterprise-registry/github-app/" target = "_blank" >
2015-01-05 18:01:32 +00:00
Create an OAuth Application in GitHub
< / a >
< / p >
< / div >
< div class = "co-checkbox" >
< input id = "ftgb" type = "checkbox" ng-model = "config.FEATURE_GITHUB_BUILD" >
2015-02-18 00:15:54 +00:00
< label for = "ftgb" > Enable GitHub Triggers< / label >
2015-01-05 18:01:32 +00:00
< / div >
2015-01-08 20:58:35 +00:00
< table class = "config-table" ng-if = "config.FEATURE_GITHUB_BUILD" >
2015-01-05 18:01:32 +00:00
< tr >
2015-02-18 00:15:54 +00:00
< td > GitHub:< / td >
2015-01-05 18:01:32 +00:00
< td >
2015-01-05 20:18:01 +00:00
< select ng-model = "mapped.GITHUB_TRIGGER_KIND" >
2015-02-18 00:15:54 +00:00
< option value = "hosted" > GitHub.com< / option >
< option value = "enterprise" > GitHub Enterprise< / option >
2015-01-05 20:18:01 +00:00
< / select >
2015-01-05 18:01:32 +00:00
< / td >
< / tr >
2015-01-08 20:58:35 +00:00
< tr ng-if = "mapped.GITHUB_TRIGGER_KIND == 'enterprise'" >
2015-02-18 00:15:54 +00:00
< td > GitHub Endpoint:< / td >
2015-01-05 18:01:32 +00:00
< td >
2015-01-08 18:26:24 +00:00
< span class = "config-string-field"
binding="config.GITHUB_TRIGGER_CONFIG.GITHUB_ENDPOINT"
placeholder="https://my.githubserver"
2015-05-03 18:50:26 +00:00
pattern="{{ GITHOST_REGEX }}">
2015-01-05 18:01:32 +00:00
< / span >
< div class = "help-text" >
2015-02-18 00:15:54 +00:00
The GitHub Enterprise endpoint. Must start with http:// or https://.
2015-01-05 18:01:32 +00:00
< / div >
< / td >
< / tr >
< tr >
< td > OAuth Client ID:< / td >
< td >
< span class = "config-string-field" binding = "config.GITHUB_TRIGGER_CONFIG.CLIENT_ID" >
< / span >
< / td >
< / tr >
< tr >
< td > OAuth Client Secret:< / td >
< td >
< span class = "config-string-field" binding = "config.GITHUB_TRIGGER_CONFIG.CLIENT_SECRET" >
< / span >
< / td >
< / tr >
< / table >
2014-12-26 21:54:36 +00:00
< / div >
2015-02-18 00:15:54 +00:00
< / div > <!-- /GitHub Trigger -->
2015-05-03 18:50:26 +00:00
<!-- BitBucket Trigger -->
< div class = "co-panel" ng-if = "config.FEATURE_BUILD_SUPPORT" style = "margin-top: 20px;" >
< div class = "co-panel-heading" >
< i class = "fa fa-bitbucket" > < / i > BitBucket Build Triggers
< / div >
< div class = "co-panel-body" >
< div class = "description" >
< p >
If enabled, users can setup BitBucket triggers to invoke Registry builds.
< / p >
< p >
< strong > Note:< / strong > A registered BitBucket OAuth application is required.
View instructions on how to
< a href = "https://coreos.com/docs/enterprise-registry/bitbucket-app/" target = "_blank" >
Create an OAuth Application in BitBucket
< / a >
< / p >
< / div >
< div class = "co-checkbox" >
< input id = "ftbbb" type = "checkbox" ng-model = "config.FEATURE_BITBUCKET_BUILD" >
< label for = "ftbbb" > Enable BitBucket Triggers< / label >
< / div >
< table class = "config-table" ng-if = "config.FEATURE_BITBUCKET_BUILD" >
< tr >
< td > OAuth Consumer Key:< / td >
< td >
< span class = "config-string-field" binding = "config.BITBUCKET_TRIGGER_CONFIG.CONSUMER_KEY" >
< / span >
< / td >
< / tr >
< tr >
< td > OAuth Consumer Secret:< / td >
< td >
< span class = "config-string-field" binding = "config.BITBUCKET_TRIGGER_CONFIG.CONSUMER_SECRET" >
< / span >
< / td >
< / tr >
< / table >
< / div >
< / div > <!-- /BitBucket Trigger -->
<!-- GitLab Trigger -->
< div class = "co-panel" ng-if = "config.FEATURE_BUILD_SUPPORT" style = "margin-top: 20px;" >
< div class = "co-panel-heading" >
2015-05-03 23:54:27 +00:00
< i class = "fa ci-gitlab" > < / i > GitLab Build Triggers
2015-05-03 18:50:26 +00:00
< / div >
< div class = "co-panel-body" >
< div class = "description" >
< p >
If enabled, users can setup GitLab triggers to invoke Registry builds.
< / p >
< p >
< strong > Note:< / strong > A registered GitLab OAuth application is required.
2015-05-03 19:02:07 +00:00
Visit the
< a href = "{{ config.GITLAB_TRIGGER_CONFIG.GITLAB_ENDPOINT || 'https://gitlab.com' }}/admin/applications" target = "_blank" >
GitLab applications admin panel
2015-05-03 18:50:26 +00:00
< / a >
2015-05-03 19:02:07 +00:00
to create a new application.
< / p >
< p > The callback URL to use is:
< code > {{ config.PREFERRED_URL_SCHEME || 'http' }}://{{ config.SERVER_HOSTNAME || 'localhost' }}/oauth2/gitlab/callback/trigger< / code >
2015-05-03 18:50:26 +00:00
< / p >
< / div >
< div class = "co-checkbox" >
< input id = "ftglb" type = "checkbox" ng-model = "config.FEATURE_GITLAB_BUILD" >
< label for = "ftglb" > Enable GitLab Triggers< / label >
< / div >
< table class = "config-table" ng-if = "config.FEATURE_GITLAB_BUILD" >
< tr >
< td > GitLab:< / td >
< td >
< select ng-model = "mapped.GITLAB_TRIGGER_KIND" >
< option value = "hosted" > GitLab.com< / option >
< option value = "enterprise" > GitLab CE/EE< / option >
< / select >
< / td >
< / tr >
< tr ng-if = "mapped.GITLAB_TRIGGER_KIND == 'enterprise'" >
< td > GitLab Endpoint:< / td >
< td >
< span class = "config-string-field"
binding="config.GITLAB_TRIGGER_CONFIG.GITLAB_ENDPOINT"
placeholder="https://my.gitlabserver"
pattern="{{ GITHOST_REGEX }}">
< / span >
< div class = "help-text" >
The GitLab Enterprise endpoint. Must start with http:// or https://.
< / div >
< / td >
< / tr >
< tr >
< td > OAuth Client ID:< / td >
< td >
< span class = "config-string-field" binding = "config.GITLAB_TRIGGER_CONFIG.CLIENT_ID" >
< / span >
< / td >
< / tr >
< tr >
< td > OAuth Client Secret:< / td >
< td >
< span class = "config-string-field" binding = "config.GITLAB_TRIGGER_CONFIG.CLIENT_SECRET" >
< / span >
< / td >
< / tr >
< / table >
< / div >
< / div > <!-- /GitLab Trigger -->
2015-01-08 20:58:35 +00:00
< / form >
2015-01-07 21:20:51 +00:00
<!-- Save Bar -->
< div class = "cor-floating-bottom-bar" >
< button class = "btn" ng-class = "mapped.$hasChanges ? 'btn-primary' : 'btn-success'"
2015-01-08 20:58:35 +00:00
ng-click="checkValidateAndSave()" ng-show="configform.$valid">
2015-01-07 21:20:51 +00:00
< i class = "fa fa-lg" ng-class = "mapped.$hasChanges ? 'fa-dot-circle-o' : 'fa-check-circle'" > < / i >
< span ng-if = "mapped.$hasChanges" > Save Configuration Changes< / span >
< span ng-if = "!mapped.$hasChanges" > Configuration Saved< / span >
< / button >
2015-01-08 20:58:35 +00:00
< button class = "btn btn-warning" ng-click = "checkValidateAndSave()" ng-show = "!configform.$valid"
ng-click="checkValidateAndSave()">
< i class = "fa fa-lg fa-sort" > < / i >
{{ configform.$error['required'].length }} configuration field< span ng-show = "configform.$error['required'].length != 1" > s< / span > remaining
< / button >
2015-01-07 21:20:51 +00:00
< / div >
<!-- Modal message dialog -->
2015-01-23 22:19:15 +00:00
< div class = "modal co-dialog fade initial-setup-modal" id = "validateAndSaveModal" >
2015-01-07 21:20:51 +00:00
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2015-01-23 22:19:15 +00:00
< h4 class = "modal-title" >
Checking your settings
2015-01-07 21:20:51 +00:00
< / h4 >
< / div >
2015-01-23 22:19:15 +00:00
< div class = "modal-body" >
2015-01-07 21:20:51 +00:00
< div class = "service-verification" >
< div class = "service-verification-row" ng-repeat = "serviceInfo in validating" >
< span class = "quay-spinner" ng-show = "serviceInfo.status == 'validating'" > < / span >
< i class = "fa fa-lg fa-check-circle" ng-show = "serviceInfo.status == 'success'" > < / i >
< i class = "fa fa-lg fa-warning" ng-show = "serviceInfo.status == 'error'" > < / i >
< span class = "service-title" > {{ serviceInfo.service.title }}< / span >
< div class = "service-verification-error" ng-show = "serviceInfo.status == 'error'" > {{ serviceInfo.errorMessage }}< / div >
< / div >
< / div >
< / div >
2015-01-23 22:19:15 +00:00
<!-- Footer: Saving configuration -->
< div class = "modal-footer working" ng-show = "savingConfiguration" >
< span class = "cor-loader-inline" > < / span > Saving Configuration...
2015-01-07 21:20:51 +00:00
< / div >
2015-01-23 22:19:15 +00:00
<!-- Footer: Validating -->
< div class = "modal-footer working"
ng-show="!savingConfiguration & & validationStatus(validating) == 'validating'">
< span class = "cor-loader-inline" > < / span > Validating settings...
2015-01-08 20:27:49 +00:00
2015-01-23 22:19:15 +00:00
< button class = "btn btn-default" ng-click = "cancelValidation()" >
2015-01-08 20:27:49 +00:00
Stop Validating
< / button >
2015-01-23 22:19:15 +00:00
< / div >
<!-- Footer: Valid Config -->
< div class = "modal-footer"
ng-show="!savingConfiguration & & validationStatus(validating) == 'success'">
< span class = "left-align" >
< i class = "fa fa-check" > < / i >
Configuration Validated
< / span >
2015-01-08 20:27:49 +00:00
2015-01-07 21:20:51 +00:00
< button class = "btn btn-primary"
ng-click="saveConfiguration()"
ng-disabled="savingConfiguration">
< i class = "fa fa-upload" style = "margin-right: 10px;" > < / i > Save Configuration
< / button >
2015-01-23 22:19:15 +00:00
< / div >
<!-- Footer: Invalid Config -->
< div class = "modal-footer"
ng-show="!savingConfiguration & & validationStatus(validating) == 'failed'">
< span class = "left-align" >
< i class = "fa fa-warning" > < / i >
Problem Detected
< / span >
< button class = "btn btn-default" data-dismiss = "modal" >
Continue Editing
2015-01-07 21:20:51 +00:00
< / button >
< / div >
2015-01-23 22:19:15 +00:00
2015-01-07 21:20:51 +00:00
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2015-01-05 18:01:32 +00:00
< / div >
2015-05-22 20:09:11 +00:00
< / div >