UNPKG

@spotinst/spinnaker-deck

Version:

Spinnaker-Deck service, forked with support to Spotinst

249 lines (247 loc) 10.5 kB
<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>