1d3af2b0bd
Take ownership code got moved into its own directive in Oct, but we forgot we have a call in superuser panel for orgs as well. Fix this, and simplify the call sites
223 lines
10 KiB
HTML
223 lines
10 KiB
HTML
<div class="super-user">
|
|
<div class="cor-loader" ng-show="!configStatus"></div>
|
|
<div class="page-content" quay-show="Features.SUPER_USERS && configStatus == 'ready'">
|
|
<div ng-if="requiresRestart && configProviderId == 'file'" class="alert alert-warning restart-required">
|
|
<button class="btn btn-warning" ng-click="restartContainer()">
|
|
<i class="fa fa-refresh"></i>Restart Now
|
|
</button>
|
|
<i class="fa fa-lg fa-warning"></i>
|
|
<div><strong>Container restart required!</strong></div>
|
|
Configuration changes have been made but the container hasn't been restarted yet.
|
|
</div>
|
|
<div ng-if="requiresRestart && configProviderId == 'k8s'" class="alert alert-warning restart-required">
|
|
<i class="fa fa-lg fa-warning"></i>
|
|
<div><strong>Container restarts required!</strong></div>
|
|
Configuration changes have been made to the Kubernetes secret but they will not be applied to
|
|
your cluster until the containers are restarted. Please issue a rolling deployment now to apply
|
|
these changes to the cluster.
|
|
</div>
|
|
|
|
<div class="cor-title">
|
|
<span class="cor-title-link"></span>
|
|
<span class="cor-title-content">Quay Enterprise Management</span>
|
|
</div>
|
|
|
|
<div class="cor-tab-panel">
|
|
<div class="cor-tabs">
|
|
<span class="cor-tab" tab-active="true" tab-title="Manage Users"
|
|
tab-target="#users" tab-init="loadUsers()">
|
|
<i class="fa fa-group"></i>
|
|
</span>
|
|
<span class="cor-tab" tab-title="Manage Organizations"
|
|
tab-target="#organizations" tab-init="loadOrganizations()">
|
|
<i class="fa fa-sitemap"></i>
|
|
</span>
|
|
<span class="cor-tab" tab-title="Manage Service Keys"
|
|
tab-target="#servicekeys" tab-init="loadServiceKeys()">
|
|
<i class="fa fa-key"></i>
|
|
</span>
|
|
<span class="cor-tab" tab-title="Change Log" tab-target="#change-log" tab-init="getChangeLog()">
|
|
<i class="fa fa-rss"></i>
|
|
</span>
|
|
<span class="cor-tab" tab-title="Usage Logs" tab-target="#logs" tab-init="loadUsageLogs()">
|
|
<i class="fa fa-bar-chart"></i>
|
|
</span>
|
|
<span class="cor-tab" tab-title="Internal Logs and Debugging" tab-target="#debug"
|
|
tab-init="loadDebugServices()">
|
|
<i class="fa fa-bug"></i>
|
|
</span>
|
|
<span class="cor-tab hidden-xs" tab-title="Registry Settings" tab-target="#setup"
|
|
tab-init="loadConfig()">
|
|
<i class="fa fa-cog"></i>
|
|
</span>
|
|
<span class="cor-tab hidden-xs" tab-title="Globally visible user messages" tab-target="#message-of-the-day"
|
|
tab-init="loadMessageOfTheDay()">
|
|
<i class="fa fa-newspaper-o"></i>
|
|
</span>
|
|
<span class="cor-tab hidden-xs" tab-title="Build Logs" tab-target="#super-user-build-logs"
|
|
tab-init="loadSuperUserBuildLogs()">
|
|
<i class="fa fa-history"></i>
|
|
</span>
|
|
</div> <!-- /cor-tabs -->
|
|
|
|
<div class="cor-tab-content">
|
|
<!-- Setup tab -->
|
|
<div id="setup" class="tab-pane">
|
|
<div class="co-alert co-alert-warning" ng-if="configProviderId != 'k8s'">
|
|
<strong>Warning:</strong> If you are running Quay Enterprise under multiple containers, additional actions are necessary in order to apply any configuration changes made here to the entire cluster. It is recommended to make (and validate) configuration changes here, then copy your configuration to all instances and restart them.
|
|
</div>
|
|
<div class="config-setup-tool" is-active="configStatus == 'ready'"
|
|
configuration-saved="configurationSaved(config)"></div>
|
|
</div>
|
|
|
|
<!-- Super user build logs tab-->
|
|
<div id="super-user-build-logs" class="tab-pane">
|
|
<div class="super-user-build-logs" is-enabled="superUserBuildLogsActive"></div>
|
|
</div> <!-- Super user build logs tab -->
|
|
|
|
<!-- Messages tab -->
|
|
<div id="message-of-the-day" class="tab-pane">
|
|
<div class="global-message-tab" is-enabled="globalMessagesActive"></div>
|
|
</div> <!-- Messages tab -->
|
|
|
|
|
|
<!-- Service keys tab -->
|
|
<div id="servicekeys" class="tab-pane">
|
|
<div class="service-keys-manager" is-enabled="serviceKeysActive"></div>
|
|
</div>
|
|
|
|
<!-- Debugging tab -->
|
|
<div id="debug" class="tab-pane">
|
|
<div class="cor-loader" ng-show="!debugServices"></div>
|
|
|
|
<div role="tabpanel" ng-show="debugServices">
|
|
<!-- Nav tabs -->
|
|
<ul class="nav nav-tabs" role="tablist">
|
|
<li role="presentation" ng-repeat="service in debugServices"
|
|
ng-class="debugService == service ? 'active' : ''">
|
|
<a ng-click="viewSystemLogs(service)">{{ service }}</a>
|
|
</li>
|
|
</ul>
|
|
|
|
<div class="system-log-download-panel" ng-if="!debugService">
|
|
Select a service above to view its local logs
|
|
|
|
<div>
|
|
<a class="btn btn-primary" href="/systemlogsarchive?_csrf_token={{ csrf_token }}" ng-safenewtab>
|
|
<i class="fa fa-download fa-lg" style="margin-right: 4px;"></i> Download All Local Logs (.tar.gz)
|
|
</a>
|
|
</div>
|
|
</div>
|
|
<div class="cor-log-box" logs="debugLogs" ng-show="debugService"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Logs tab -->
|
|
<div id="logs" class="tab-pane">
|
|
<div class="logsView" makevisible="logsCounter" all-logs="true"></div>
|
|
</div> <!-- /logs tab-->
|
|
|
|
<!-- Change Log tab -->
|
|
<div id="change-log" class="tab-pane">
|
|
<h3 style="margin-top: 0px;">Change Log</h3>
|
|
<div class="cor-loader" ng-if="!changeLog"></div>
|
|
<div class="markdown-view" content="changeLog.log" ng-if="changeLog"></div>
|
|
</div> <!-- /change-log tab-->
|
|
|
|
<!-- Organizations tab -->
|
|
<div id="organizations" class="tab-pane">
|
|
<div class="resource-view" resource="organizationsResource"
|
|
error-message="'Could not load organizations'">
|
|
<div class="manager-header" header-title="Organizations">
|
|
</div>
|
|
|
|
<div class="co-top-bar">
|
|
<span class="co-filter-box">
|
|
<span class="page-controls" total-count="orderedOrgs.entries.length" current-page="options.page" page-size="orgsPerPage"></span>
|
|
<input class="form-control" type="text" ng-model="options.filter" placeholder="Filter Organizations..." style="margin-right: 10px;">
|
|
</span>
|
|
</div>
|
|
|
|
<table class="cor-table" ng-if="orderedOrgs.entries.length && !isLoading">
|
|
<thead>
|
|
<td style="width: 24px;"></td>
|
|
|
|
<td ng-class="tablePredicateClass('name', options.predicate, options.reverse)">
|
|
<a ng-click="orderBy('name')">Name</a>
|
|
</td>
|
|
<td ng-class="tablePredicateClass('email', options.predicate, options.reverse)">
|
|
<a ng-click="orderBy('email')">Admin Email</a>
|
|
</td>
|
|
<td style="width: 24px;"></td>
|
|
</thead>
|
|
|
|
<tr ng-repeat="current_org in orderedOrgs.entries | slice
|
|
:(orgsPerPage * options.page)
|
|
:(orgsPerPage * (options.page + 1))"
|
|
class="org-row">
|
|
<td>
|
|
<span class="avatar" data="current_org.avatar" size="24"></span>
|
|
</td>
|
|
<td>
|
|
{{ current_org.name }}
|
|
</td>
|
|
<td>
|
|
<a href="mailto:{{ current_org.email }}">{{ current_org.email }}</a>
|
|
</td>
|
|
<td style="text-align: center;">
|
|
<span class="cor-options-menu">
|
|
<span class="cor-option" option-click="askRenameOrganization(current_org)">
|
|
<i class="fa fa-arrow-right"></i> Rename Organization
|
|
</span>
|
|
<span class="cor-option" option-click="askDeleteOrganization(current_org)">
|
|
<i class="fa fa-times"></i> Delete Organization
|
|
</span>
|
|
<span class="cor-option" option-click="askTakeOwnership(current_org)">
|
|
<i class="fa fa-bolt"></i> Take Ownership
|
|
</span>
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div> <!-- /resource -->
|
|
</div> <!-- organizations tab -->
|
|
|
|
<!-- Users tab -->
|
|
<div id="users" class="tab-pane active">
|
|
<div class="manage-user-tab" is-enabled="manageUsersActive"></div>
|
|
</div> <!-- users-tab -->
|
|
|
|
</div> <!-- /cor-tab-content -->
|
|
</div> <!-- /cor-tab-panel -->
|
|
|
|
<!-- Modal message dialog -->
|
|
<div class="co-dialog modal fade" id="restartingContainerModal">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title">Container Currently Restarting</h4>
|
|
</div>
|
|
<div class="modal-body" style="padding: 20px;">
|
|
<i class="fa fa-lg fa-refresh" style="margin-right: 10px;"></i>
|
|
<span class="registry-name"></span> is currently being restarted.
|
|
<br><br>
|
|
This can take several minutes. If the container does not restart on its own,
|
|
please reexecute the <code>docker run</code> command.
|
|
</div>
|
|
<div class="modal-footer working">
|
|
<span class="cor-loader-inline"></span> Waiting for container to restart...
|
|
</div>
|
|
</div><!-- /.modal-content -->
|
|
</div><!-- /.modal-dialog -->
|
|
</div><!-- /.modal -->
|
|
|
|
<div class="cor-confirm-dialog take-ownership-dialog"
|
|
dialog-context="takeOwnershipInfo"
|
|
dialog-action="takeOwnership(info, callback)"
|
|
dialog-title="Take Ownership"
|
|
dialog-action-title="Take Ownership">
|
|
Are you sure you want to take ownership of organization <span class="avatar" data="takeOwnershipInfo.entity.avatar" size="16"></span> {{ takeOwnershipInfo.entity.name }}?</span>
|
|
</div>
|
|
|
|
</div> <!-- /page-content -->
|
|
</div>
|