Merge "Update load balancer wizard help"

This commit is contained in:
Jenkins 2016-10-04 00:11:08 +00:00 committed by Gerrit Code Review
commit 463b1907c4
14 changed files with 114 additions and 63 deletions

View File

@ -29,22 +29,15 @@
}
/* The IP addresses list displayed when hovering over the IP address in the
available instances table. */
.addresses-popover + .popover {
available instances table, and any lists in the help panels. */
.addresses-popover + .popover,
#help-panel {
ul {
list-style-type: disc;
padding-left: 10px;
}
}
/* Popover help icons for fields in the wizard */
.form-group {
span.fa-exclamation-triangle,
span.fa-question-circle {
color: $gray-light;
}
}
/* Pool Members tab */
[ng-form="memberDetailsForm"] {
.transfer-section:first-child {

View File

@ -1,5 +1,20 @@
<p translate>
If the listener uses the TERMINATED_HTTPS protocol, then one or more SSL certificates must
be selected. The first certificate will be the default. Use the key-manager service to create
any certificate containers before creating the listener.
be selected. The first certificate will be the default.
</p>
<p translate>
Use the key-manager service to create any certificate containers before creating the listener.
The following documentation provides information on how to create a certificate container:
<ul>
<li>
<a target="_blank" href="http://developer.openstack.org/api-guide/key-manager/containers.html#certificate-containers">
Key Manager API Guide: Creating a Certificate Container
</a>
</li>
<li>
<a target="_blank" href="http://docs.openstack.org/cli-reference/barbican.html">
Key Manager Service Command-Line Client
</a>
</li>
</ul>
</p>

View File

@ -44,8 +44,6 @@
ctrl.portNumberError = gettext('The port must be a number between 1 and 65535.');
ctrl.portUniqueError = gettext(
'The port must be unique among all listeners attached to this load balancer.');
ctrl.certificatesError = gettext('There was an error obtaining certificates from the ' +
'key-manager service. The TERMINATED_HTTPS protocol is unavailable.');
////////////

View File

@ -52,7 +52,6 @@
it('should define error messages for invalid fields', function() {
expect(ctrl.portNumberError).toBeDefined();
expect(ctrl.portUniqueError).toBeDefined();
expect(ctrl.certificatesError).toBeDefined();
});
it('should show certificates step if selecting TERMINATED_HTTPS', function() {

View File

@ -1,8 +1,15 @@
<p translate>
A listener represents a listening endpoint for a load balancer. A single load balancer can
have multiple listeners.
Each port that listens for traffic on a particular load balancer is configured separately and
tied to the load balancer. Multiple listeners can be associated with the same load balancer but
each must use a unique port.
</p>
<p translate>
<strong>NOTE:</strong> The TERMINATED_HTTPS protocol is only available if the key-manager
service is enabled and you have authority to list certificate containers and secrets.
<strong>Protocol:</strong>
The protocol for which the front end listens. The TERMINATED_HTTPS protocol is only available if
the key-manager service is enabled and you have authority to list certificate containers and
secrets.
</p>
<p translate>
<strong>Port:</strong>
The port on which the front end listens. Must be an integer from 1 to 65535.
</p>

View File

@ -29,11 +29,6 @@
Protocol
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<span class="fa fa-exclamation-triangle invalid"
ng-show="model.certificatesError"
popover="{$ ::ctrl.certificatesError $}"
popover-placement="top" popover-append-to-body="true"
popover-trigger="hover"></span>
<select class="form-control" name="protocol" id="protocol"
ng-model="model.spec.listener.protocol" ng-required="true"
ng-change="ctrl.protocolChange(model.spec.listener.protocol)"

View File

@ -1,5 +1,13 @@
<p translate>
The subnet is the network on which to allocate the load balancer's IP address. If an IP
address is provided it must be a well-formed IPv4 or IPv6 address. The system will attempt
to assign the provided IP address to the load balancer.
The load balancer occupies a neutron network port and has an IP address assigned from a subnet.
</p>
<p translate>
<strong>IP address:</strong>
If an IP address is provided it must be a well-formed IPv4 or IPv6 address. The system will
attempt to assign the provided IP address to the load balancer. If an IP address is not provided
then one will be allocated for you.
</p>
<p translate>
<strong>Subnet:</strong>
The network on which to allocate the load balancer's IP address.
</p>

View File

@ -26,7 +26,7 @@
<div class="col-xs-12 col-sm-8 col-md-6">
<div class="form-group"
ng-class="{ 'has-error': loadBalancerDetailsForm.ip.$invalid && loadBalancerDetailsForm.ip.$dirty }">
<label translate class="control-label" for="ip">IP Address</label>
<label translate class="control-label" for="ip">IP address</label>
<input name="ip" id="ip" type="text" class="form-control"
ng-model="model.spec.loadbalancer.ip" ng-pattern="::ctrl.ipPattern"
ng-disabled="model.context.id">

View File

@ -1,8 +1,28 @@
<p translate>
The Available Instances table contains existing instances that can be added as members of
the pool. Use the "Add external member" button to add a member not found in the Available
Members are the actual IP addresses that will receive traffic from the load balancer. Each
member must have a unique combination of IP address and port.
</p>
<p translate>
The Available Instances table contains existing compute instances that can be added as members
of the pool. Use the "Add external member" button to add a member not found in the Available
Instances table.
</p>
<p translate>
Each member must have a unique combination of IP address and port.
<strong>IP address:</strong>
The IP address of the member to receive traffic from the load balancer. Must be a well-formed
IPv4 or IPv6 address.
</p>
<p translate>
<strong>Subnet:</strong>
The network which contains the IP address of the member.
</p>
<p translate>
<strong>Port:</strong>
The port on which the member listens for traffic. Must be a number from 1 to 65535.
</p>
<p translate>
<strong>Weight:</strong>
The weight of a member determines the portion of requests or connections it services compared
to the other members of the pool. A higher weight means it will receive more traffic. Must be
a number from 1 to 256.
</p>

View File

@ -49,16 +49,6 @@
ctrl.statusError = gettext('The expected status code is not valid.');
ctrl.pathError = gettext('The URL path is not valid.');
// Field level help text
ctrl.statusHelp = gettext('Must be one of a single value, a comma separated list, or a range.');
ctrl.intervalHelp = gettext('The delay between health check calls.');
ctrl.retryHelp = interpolate(
/* eslint-disable max-len */
gettext('The number of allowed connection failures before changing the status of the member to %(state)s.'),
/* eslint-enable max-len */
{ state: gettext('Inactive') },
true);
// HTTP status codes validation pattern
ctrl.statusPattern = patterns.httpStatusCodes;
ctrl.urlPathPattern = patterns.urlPath;

View File

@ -36,12 +36,6 @@
expect(ctrl.pathError).toBeDefined();
});
it('should define field level help messages', function() {
expect(ctrl.statusHelp).toBeDefined();
expect(ctrl.intervalHelp).toBeDefined();
expect(ctrl.retryHelp).toBeDefined();
});
it('should define patterns for field validation', function() {
expect(ctrl.statusPattern).toBeDefined();
expect(ctrl.urlPathPattern).toBeDefined();

View File

@ -1,5 +1,33 @@
<p translate>
The health monitor is used to determine the health of your pool members. Health checks
routinely run against each member within the pool and the result of the health check is used
to determine if the member receives new connections.
to determine if the member receives new connections. Each pool can only have one health
monitor.
</p>
<p translate>
<strong>Interval:</strong>
The interval between health checks. Must be greater than or equal to the timeout.
</p>
<p translate>
<strong>Retries:</strong>
The number of allowed connection failures before marking the member as inactive. Must be a
number from 1 to 10.
</p>
<p translate>
<strong>Timeout:</strong>
The time after which a health check times out. Must be a number greater than or equal to 0
and less than or equal to the interval.
</p>
<p translate>
<strong>HTTP method:</strong>
The HTTP method used to perform the health check.
</p>
<p translate>
<strong>Expected status codes:</strong>
The expected HTTP status codes to get from a successful health check. Must be a single number,
a comma separated list of numbers, or a range (two numbers separated by a hyphen).
</p>
<p translate>
<strong>URL path:</strong>
The target of the health check HTTP request to the member. Must be a valid URL path.
</p>

View File

@ -25,13 +25,9 @@
<div class="form-group required"
ng-class="{ 'has-error': monitorDetailsForm.interval.$invalid && monitorDetailsForm.interval.$dirty }">
<label translate class="control-label" for="interval">
Health check interval (sec)
Interval (sec)
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<span class="fa fa-question-circle pull-right"
popover="{$ ::ctrl.intervalHelp $}"
popover-placement="top" popover-append-to-body="true"
popover-trigger="hover"></span>
<input name="interval" id="interval" type="number" class="form-control"
ng-model="model.spec.monitor.interval" ng-pattern="/^\d+$/"
ng-min="model.spec.monitor.timeout" ng-required="true">
@ -45,13 +41,9 @@
<div class="form-group required"
ng-class="{ 'has-error': monitorDetailsForm.retry.$invalid && monitorDetailsForm.retry.$dirty }">
<label translate class="control-label" for="retry">
Retry count before markdown
Retries
<span class="hz-icon-required fa fa-asterisk"></span>
</label>
<span class="fa fa-question-circle pull-right"
popover="{$ ::ctrl.retryHelp $}"
popover-placement="top" popover-append-to-body="true"
popover-trigger="hover"></span>
<input name="retry" id="retry" type="number" class="form-control"
ng-model="model.spec.monitor.retry" ng-pattern="/^\d+$/" min="1" max="10"
ng-required="true">
@ -94,11 +86,7 @@
<div class="col-xs-12 col-sm-8 col-md-6 col-lg-4">
<div class="form-group"
ng-class="{ 'has-error': monitorDetailsForm.status.$invalid && monitorDetailsForm.status.$dirty }">
<label translate class="control-label" for="status">Expected HTTP status code</label>
<span class="fa fa-question-circle pull-right"
popover="{$ ::ctrl.statusHelp $}"
popover-placement="top" popover-append-to-body="true"
popover-trigger="hover"></span>
<label translate class="control-label" for="status">Expected status codes</label>
<input name="status" id="status" type="text" class="form-control"
ng-model="model.spec.monitor.status" ng-pattern="::ctrl.statusPattern"
ng-disabled="model.context.id">

View File

@ -1,3 +1,19 @@
<p translate>
A pool represents a group of members over which the load balancing will be applied.
</p>
<p translate>
<strong>Method:</strong>
The load balancer algorithm that distributes traffic to the pool members.
<ul>
<li>
LEAST_CONNECTIONS: Allocates requests to the instance with the least number of active
connections.
</li>
<li>
ROUND_ROBIN: Rotates requests evenly between multiple instances.
</li>
<li>
SOURCE_IP: Requests from a unique source IP address are consistently directed to the same instance.
</li>
</ul>
</p>