2016-12-25 20:34:02 +00:00
< rd-header >
< rd-header-title title = "Endpoints" >
< a data-toggle = "tooltip" title = "Refresh" ui-sref = "endpoints" ui-sref-opts = "{reload: true}" >
< i class = "fa fa-refresh" aria-hidden = "true" > < / i >
< / a >
2017-01-24 01:28:40 +00:00
< i id = "loadEndpointsSpinner" class = "fa fa-cog fa-spin" style = "margin-left: 5px;" > < / i >
2016-12-25 20:34:02 +00:00
< / rd-header-title >
< rd-header-content > Endpoint management< / rd-header-content >
< / rd-header >
2017-02-06 05:29:34 +00:00
< div class = "row" ng-if = "!applicationState.application.endpointManagement" >
< div class = "col-lg-12 col-md-12 col-xs-12" >
< rd-widget >
< rd-widget-header icon = "fa-exclamation-triangle" title = "Endpoint management is not available" >
< / rd-widget-header >
< rd-widget-body >
2017-07-03 06:36:18 +00:00
< span class = "small text-muted" > Portainer has been started using the < code > --external-endpoints< / code > flag.
Endpoint management via the UI is disabled.
< span ng-if = "applicationState.application.authentication" > You can still manage endpoint access.< / span >
< / span >
2017-02-06 05:29:34 +00:00
< / rd-wigdet-body >
< / rd-widget >
< / div >
< / div >
< div class = "row" ng-if = "applicationState.application.endpointManagement" >
2016-12-25 20:34:02 +00:00
< div class = "col-lg-12 col-md-12 col-xs-12" >
< rd-widget >
< rd-widget-header icon = "fa-plus" title = "Add a new endpoint" >
< / rd-widget-header >
< rd-widget-body >
< form class = "form-horizontal" >
<!-- name - input -->
< div class = "form-group" >
2017-03-27 12:44:39 +00:00
< label for = "container_name" class = "col-sm-3 col-lg-2 control-label text-left" > Name< / label >
< div class = "col-sm-9 col-lg-10" >
2016-12-25 20:34:02 +00:00
< input type = "text" class = "form-control" id = "container_name" ng-model = "formValues.Name" placeholder = "e.g. docker-prod01" >
< / div >
< / div >
<!-- !name - input -->
<!-- endpoint - url - input -->
< div class = "form-group" >
2017-03-27 12:44:39 +00:00
< label for = "endpoint_url" class = "col-sm-3 col-lg-2 control-label text-left" >
Endpoint URL
< portainer-tooltip position = "bottom" message = "URL or IP address of a Docker host. The Docker API must be exposed over a TCP port. Please refer to the Docker documentation to configure it." > < / portainer-tooltip >
< / label >
< div class = "col-sm-9 col-lg-10" >
2016-12-25 20:34:02 +00:00
< input type = "text" class = "form-control" id = "endpoint_url" ng-model = "formValues.URL" placeholder = "e.g. 10.0.0.10:2375 or mydocker.mydomain.com:2375" >
< / div >
< / div >
<!-- !endpoint - url - input -->
2017-05-01 10:19:43 +00:00
<!-- endpoint - public - url - input -->
< div class = "form-group" >
< label for = "endpoint_public_url" class = "col-sm-3 col-lg-2 control-label text-left" >
Public IP
< portainer-tooltip position = "bottom" message = "URL or IP address where exposed containers will be reachable. This field is optional and will default to the endpoint URL." > < / portainer-tooltip >
< / label >
< div class = "col-sm-9 col-lg-10" >
< input type = "text" class = "form-control" id = "endpoint_public_url" ng-model = "formValues.PublicURL" placeholder = "e.g. 10.0.0.10 or mydocker.mydomain.com" >
< / div >
< / div >
<!-- !endpoint - public - url - input -->
2016-12-25 20:34:02 +00:00
<!-- tls - checkbox -->
< div class = "form-group" >
2017-03-27 12:44:39 +00:00
< div class = "col-sm-12" >
< label for = "tls" class = "control-label text-left" >
TLS
< portainer-tooltip position = "bottom" message = "Enable this option if you need to specify TLS certificates to connect to the Docker endpoint." > < / portainer-tooltip >
< / label >
< label class = "switch" style = "margin-left: 20px;" >
< input type = "checkbox" ng-model = "formValues.TLS" > < i > < / i >
< / label >
2016-12-25 20:34:02 +00:00
< / div >
< / div >
<!-- !tls - checkbox -->
<!-- tls - certs -->
< div ng-if = "formValues.TLS" >
<!-- ca - input -->
< div class = "form-group" >
< label class = "col-sm-2 control-label text-left" > TLS CA certificate< / label >
< div class = "col-sm-10" >
< button class = "btn btn-sm btn-primary" ngf-select ng-model = "formValues.TLSCACert" > Select file< / button >
< span style = "margin-left: 5px;" >
{{ formValues.TLSCACert.name }}
< i class = "fa fa-times red-icon" ng-if = "!formValues.TLSCACert" aria-hidden = "true" > < / i >
< i class = "fa fa-circle-o-notch fa-spin" ng-if = "state.uploadInProgress" > < / i >
< / span >
< / div >
< / div >
<!-- !ca - input -->
<!-- cert - input -->
< div class = "form-group" >
< label for = "tls_cert" class = "col-sm-2 control-label text-left" > TLS certificate< / label >
< div class = "col-sm-10" >
< button class = "btn btn-sm btn-primary" ngf-select ng-model = "formValues.TLSCert" > Select file< / button >
< span style = "margin-left: 5px;" >
{{ formValues.TLSCert.name }}
< i class = "fa fa-times red-icon" ng-if = "!formValues.TLSCert" aria-hidden = "true" > < / i >
< i class = "fa fa-circle-o-notch fa-spin" ng-if = "state.uploadInProgress" > < / i >
< / span >
< / div >
< / div >
<!-- !cert - input -->
<!-- key - input -->
< div class = "form-group" >
< label class = "col-sm-2 control-label text-left" > TLS key< / label >
< div class = "col-sm-10" >
< button class = "btn btn-sm btn-primary" ngf-select ng-model = "formValues.TLSKey" > Select file< / button >
< span style = "margin-left: 5px;" >
{{ formValues.TLSKey.name }}
< i class = "fa fa-times red-icon" ng-if = "!formValues.TLSKey" aria-hidden = "true" > < / i >
< i class = "fa fa-circle-o-notch fa-spin" ng-if = "state.uploadInProgress" > < / i >
< / span >
< / div >
< / div >
<!-- !key - input -->
< / div >
<!-- !tls - certs -->
< div class = "form-group" >
< div class = "col-sm-12" >
< button type = "button" class = "btn btn-primary btn-sm" ng-disabled = "!formValues.Name || !formValues.URL || (formValues.TLS && (!formValues.TLSCACert || !formValues.TLSCert || !formValues.TLSKey))" ng-click = "addEndpoint()" > Add endpoint< / button >
< i id = "createEndpointSpinner" class = "fa fa-cog fa-spin" style = "margin-left: 5px; display: none;" > < / i >
< span class = "text-danger" ng-if = "state.error" style = "margin: 5px;" >
< i class = "fa fa-exclamation-circle" aria-hidden = "true" > < / i > {{ state.error }}
< / span >
< / div >
< / div >
< / form >
< / rd-widget-body >
< / rd-widget >
< / div >
< / div >
< div class = "row" >
< div class = "col-lg-12 col-md-12 col-xs-12" >
< rd-widget >
< rd-widget-header icon = "fa-plug" title = "Endpoints" >
< div class = "pull-right" >
2017-01-24 01:28:40 +00:00
Items per page:
< select ng-model = "state.pagination_count" ng-change = "changePaginationCount()" >
< option value = "0" > All< / option >
< option value = "10" > 10< / option >
< option value = "25" > 25< / option >
< option value = "50" > 50< / option >
< option value = "100" > 100< / option >
< / select >
2016-12-25 20:34:02 +00:00
< / div >
< / rd-widget-header >
< rd-widget-taskbar classes = "col-lg-12" >
2017-02-06 05:29:34 +00:00
< div class = "pull-left" ng-if = "applicationState.application.endpointManagement" >
2016-12-25 20:34:02 +00:00
< button type = "button" class = "btn btn-danger" ng-click = "removeAction()" ng-disabled = "!state.selectedItemCount" > < i class = "fa fa-trash space-right" aria-hidden = "true" > < / i > Remove< / button >
< / div >
< div class = "pull-right" >
< input type = "text" id = "filter" ng-model = "state.filter" placeholder = "Filter..." class = "form-control input-sm" / >
< / div >
< / rd-widget-taskbar >
< rd-widget-body classes = "no-padding" >
< div class = "table-responsive" >
< table class = "table table-hover" >
< thead >
< tr >
2017-03-12 16:39:27 +00:00
< th ng-if = "applicationState.application.endpointManagement" >
< input type = "checkbox" ng-model = "allSelected" ng-change = "selectItems(allSelected)" / >
< / th >
2016-12-25 20:34:02 +00:00
< th >
< a ui-sref = "endpoints" ng-click = "order('Name')" >
Name
< span ng-show = "sortType == 'Name' && !sortReverse" class = "glyphicon glyphicon-chevron-down" > < / span >
< span ng-show = "sortType == 'Name' && sortReverse" class = "glyphicon glyphicon-chevron-up" > < / span >
< / a >
< / th >
< th >
< a ui-sref = "endpoints" ng-click = "order('URL')" >
URL
< span ng-show = "sortType == 'URL' && !sortReverse" class = "glyphicon glyphicon-chevron-down" > < / span >
< span ng-show = "sortType == 'URL' && sortReverse" class = "glyphicon glyphicon-chevron-up" > < / span >
< / a >
< / th >
2017-03-12 16:24:15 +00:00
< th > < / th >
2016-12-25 20:34:02 +00:00
< / tr >
< / thead >
< tbody >
2017-01-24 01:28:40 +00:00
< tr dir-paginate = "endpoint in (state.filteredEndpoints = (endpoints | filter:state.filter | orderBy:sortType:sortReverse | itemsPerPage: state.pagination_count))" >
2017-02-06 05:29:34 +00:00
< td ng-if = "applicationState.application.endpointManagement" > < input type = "checkbox" ng-model = "endpoint.Checked" ng-change = "selectItem(endpoint)" / > < / td >
2016-12-25 20:34:02 +00:00
< td > < i class = "fa fa-star" aria-hidden = "true" ng-if = "endpoint.Id === activeEndpoint.Id" > < / i > {{ endpoint.Name }}< / td >
< td > {{ endpoint.URL | stripprotocol }}< / td >
2017-03-12 16:24:15 +00:00
< td >
< span ng-if = "applicationState.application.endpointManagement" >
2017-06-20 11:18:08 +00:00
< a ui-sref = "endpoint({id: endpoint.Id})" > < i class = "fa fa-pencil-square-o" aria-hidden = "true" > < / i > Edit< / a >
2016-12-25 20:34:02 +00:00
< / span >
2017-03-12 16:24:15 +00:00
< span ng-if = "applicationState.application.authentication" >
< a ui-sref = "endpoint.access({id: endpoint.Id})" > < i class = "fa fa-users" aria-hidden = "true" style = "margin-left: 7px;" > < / i > Manage access< / a >
2016-12-25 20:34:02 +00:00
< / span >
< / td >
< / tr >
< tr ng-if = "!endpoints" >
< td colspan = "5" class = "text-center text-muted" > Loading...< / td >
< / tr >
< tr ng-if = "endpoints.length == 0" >
< td colspan = "5" class = "text-center text-muted" > No endpoints available.< / td >
< / tr >
< / tbody >
< / table >
< div ng-if = "endpoints" class = "pull-left pagination-controls" >
< dir-pagination-controls > < / dir-pagination-controls >
< / div >
< / div >
< / rd-widget-body >
< rd-widget >
< / div >
< / div >