@spotinst/spinnaker-deck
Version:
Spinnaker-Deck service, forked with support to Spotinst
249 lines (247 loc) • 10.5 kB
HTML
<div class="details-panel">
<div class="header">
<instance-details-header
health-state="instance.healthState"
instance-id="instance ? instance.instanceId : instanceIdNotFound"
loading="state.loading"
standalone="state.standalone"
></instance-details-header>
<div ng-if="!state.loading">
<div class="actions" ng-class="{ insights: instance.insightActions.length > 0 }" ng-if="instance.placement">
<div class="dropdown" uib-dropdown dropdown-append-to-body>
<button
type="button"
class="btn btn-sm btn-primary dropdown-toggle"
ng-disabled="disabled"
uib-dropdown-toggle
>
Instance Actions <span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu role="menu">
<li>
<a href ng-click="ctrl.enableInstanceInDiscovery()" ng-if="ctrl.canRegisterWithDiscovery()"
>Enable in Discovery</a
>
</li>
<li>
<a href ng-click="ctrl.disableInstanceInDiscovery()" ng-if="ctrl.hasHealthState('Discovery', 'Up')"
>Disable in Discovery</a
>
</li>
<li>
<a href ng-click="ctrl.registerInstanceWithLoadBalancer()" ng-if="ctrl.canRegisterWithLoadBalancer()"
>Register with Load Balancer</a
>
</li>
<li>
<a href ng-click="ctrl.deregisterInstanceFromLoadBalancer()" ng-if="ctrl.canDeregisterFromLoadBalancer()"
>Deregister from Load Balancer</a
>
</li>
<li role="presentation" class="divider" ng-if="ctrl.showInstanceActionsDivider()"></li>
<li><a href ng-click="ctrl.rebootInstance()">Reboot</a></li>
<li><a href ng-click="ctrl.terminateInstance()">Terminate</a></li>
<li>
<a href ng-click="ctrl.terminateInstanceAndShrinkServerGroup()" ng-if="instance.serverGroup"
>Terminate and Shrink Server Group</a
>
</li>
</ul>
</div>
<div class="dropdown" ng-if="instance.insightActions.length > 0" uib-dropdown dropdown-append-to-body>
<button type="button" class="btn btn-sm btn-default dropdown-toggle" uib-dropdown-toggle>
Insight <span class="caret"></span>
</button>
<ul class="dropdown-menu" uib-dropdown-menu role="menu">
<li ng-repeat="action in instance.insightActions">
<a target="_blank" href="{{action.url}}">{{action.label}}</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="content" ng-if="!state.loading && instance">
<collapsible-section heading="Instance Information" expanded="true">
<dl class="dl-horizontal dl-narrow">
<dt>Launched</dt>
<dd ng-if="instance.launchTime">{{instance.launchTime | timestamp}}</dd>
<dd ng-if="!instance.launchTime">(Unknown)</dd>
<dt>In</dt>
<dd>
<account-tag account="instance.account" pad="right"></account-tag>
{{instance.placement.availabilityZone || '(Unknown)'}}
</dd>
<dt>Type</dt>
<dd>{{instance.instanceType || '(Unknown)' | customInstanceFilter}}</dd>
<dt>CPU Platform</dt>
<dd>{{instance.cpuPlatform}}</dd>
<dt ng-if="instance.serverGroup">Server Group</dt>
<dd ng-if="instance.serverGroup">
<a
ui-sref="^.serverGroup({region: instance.region,
accountId: instance.account,
serverGroup: instance.serverGroup,
provider: instance.provider})"
>{{instance.serverGroup}}</a
>
</dd>
<dt>Network</dt>
<dd>{{instance.network || '(Unknown)'}}</dd>
<dt ng-if="instance.subnet">Subnet</dt>
<dd ng-if="instance.subnet">{{instance.subnet}}</dd>
</dl>
</collapsible-section>
<collapsible-section heading="Status" expanded="true">
<p ng-if="instance.healthState !== 'Starting' && !healthMetrics.length">
No health metrics found for this instance
</p>
<p ng-if="instance.healthState === 'Starting' && !healthMetrics.length">
<span class="glyphicon glyphicon-Starting-triangle"></span> <strong>Starting</strong>
</p>
<dl class="horizontal-when-filters-collapsed">
<dt ng-repeat-start="metric in healthMetrics | orderBy: 'type'">{{metric.type | robotToHuman}}</dt>
<dd ng-repeat-end>
<div ng-if="metric.type !== 'LoadBalancer'">
<span
uib-tooltip="{{metric.state.toLowerCase() === 'down' ? metric.description : ''}}"
tooltip-placement="left"
>
<span class="glyphicon glyphicon-{{metric.state}}-triangle"></span>
{{metric.state | robotToHuman}}
</span>
<span class="pad-left small">
<a ng-if="metric.healthCheckUrl" target="_blank" href="{{metric.healthCheckUrl}}">Health Check</a>
<span ng-if="metric.healthCheckUrl && metric.statusPageUrl"> | </span>
<a ng-if="metric.statusPageUrl" target="_blank" href="{{metric.statusPageUrl}}">Status</a>
</span>
</div>
<div
ng-if="metric.type === 'LoadBalancer' && metric.loadBalancers.length"
ng-repeat="loadBalancer in metric.loadBalancers"
>
<instance-load-balancer-health load-balancer="loadBalancer"></instance-load-balancer-health>
</div>
</dd>
</dl>
</collapsible-section>
<collapsible-section heading="DNS">
<dl class="horizontal-when-filters-collapsed">
<dt ng-if="instance.internalDnsName">Internal DNS Name</dt>
<dd ng-if="instance.internalDnsName">
<a href="http://{{instance.internalDnsName}}" target="_blank">{{instance.internalDnsName}}</a>
<copy-to-clipboard
class="copy-to-clipboard copy-to-clipboard-sm"
text="instance.internalDnsName"
tool-tip="'Copy to clipboard'"
>
</copy-to-clipboard>
</dd>
<dt ng-if="instance.internalIpAddress">Internal IP Address</dt>
<dd ng-if="instance.internalIpAddress">
<a href="http://{{instance.internalIpAddress}}" target="_blank">{{instance.internalIpAddress}}</a>
<copy-to-clipboard
class="copy-to-clipboard copy-to-clipboard-sm"
text="instance.internalIpAddress"
tool-tip="'Copy to clipboard'"
>
</copy-to-clipboard>
</dd>
<dt ng-if="instance.externalIpAddress">External IP Address</dt>
<dd ng-if="instance.externalIpAddress">
<a href="http://{{instance.externalIpAddress}}" target="_blank">{{instance.externalIpAddress}}</a>
<copy-to-clipboard
class="copy-to-clipboard copy-to-clipboard-sm"
text="instance.externalIpAddress"
tool-tip="'Copy to clipboard'"
>
</copy-to-clipboard>
</dd>
</dl>
</collapsible-section>
<collapsible-section heading="{{firewallsLabel}}">
<ul>
<li ng-repeat="securityGroup in instance.securityGroups | orderBy:'groupName'">
<a
ui-sref="^.firewallDetails({name:securityGroup.groupName, accountId: instance.account, region: 'global', provider: instance.provider})"
>
{{securityGroup.groupName}}
</a>
</li>
</ul>
</collapsible-section>
<collapsible-section heading="Custom Metadata">
<div ng-if="!instance.metadata.items.length">No custom metadata associated with this instance</div>
<dl ng-if="instance.metadata.items.length">
<dt ng-repeat-start="metadata in instance.metadata.items">
{{metadata.key}}
<help-field key="gce.instance.customMetadata.{{metadata.key}}"></help-field>
</dt>
<dd ng-repeat-end>{{metadata.value.length > 90 ? metadata.value.substring(0, 90) + "..." : metadata.value}}</dd>
</dl>
</collapsible-section>
<collapsible-section heading="Tags">
<div ng-if="!instance.tags.items.length">No tags associated with this instance</div>
<dl ng-if="instance.tags.items.length">
<dd ng-repeat="tag in instance.tags.items">
{{tag}}
<help-field content="{{instance.tags.helpMap[tag]}}"></help-field>
</dd>
</dl>
</collapsible-section>
<collapsible-section heading="Labels">
<div ng-if="!instance.labels">No labels associated with this instance</div>
<dl ng-if="instance.labels">
<dt ng-repeat-start="(key, value) in instance.labels">
{{key}}
<help-field key="gce.instance.labels.{{key}}"></help-field>
</dt>
<dd ng-repeat-end>{{value}}</dd>
</dl>
</collapsible-section>
<collapsible-section heading="SSH" ng-if="!instance.notFound">
<dl>
<dt ng-if="instance.sshLink">SSH into this instance</dt>
<dd ng-if="instance.sshLink">
<a href="{{instance.sshLink}}" target="_blank">SSH</a>
<copy-to-clipboard
class="copy-to-clipboard copy-to-clipboard-sm"
text="instance.sshLink"
tool-tip="'Copy to clipboard'"
>
</copy-to-clipboard>
</dd>
</dl>
</collapsible-section>
<collapsible-section heading="Logs">
<ul>
<li ng-if="instance.logsLink">
<a href="{{instance.logsLink}}" target="_blank">Cloud Console Logs</a>
<copy-to-clipboard
class="copy-to-clipboard copy-to-clipboard-sm"
text="instance.logsLink"
tool-tip="'Copy to clipboard'"
>
</copy-to-clipboard>
</li>
<li>
<console-output-link instance="instance"></console-output-link>
</li>
</ul>
</collapsible-section>
<instance-links
address="baseIpAddress"
application="application"
instance="instance"
moniker="moniker"
environment="environment"
></instance-links>
</div>
<div class="content" ng-if="!state.loading && !instance">
<div class="content-section">
<div class="content-body text-center">
<h3>Instance not found.</h3>
</div>
</div>
</div>
</div>