Commit Graph

142 Commits

Author SHA1 Message Date
James E. Blair 41d8e478a5 Remove "sql connection" backwards compatability for database
In 4.0 we deprecated connections using the "sql" driver in favor of
using the new "database" config file section.  Remove the backwards
compatible handling of that so that "sql" connections or lack of
"database" section report an error.

Change-Id: I7e592cf5ff63f73f487e41bb6e3e4a4ae523e3fc
2022-01-25 16:07:08 -08:00
James E. Blair 215c96f500 Remove gearman server
The gearman server is no longer required.  Remove it from tests and
the scheduler.

Change-Id: I34eda003889305dadec471930ab277e31d78d9fe
2022-01-25 06:44:17 -08:00
James E. Blair 7d7d2f9f2a Remove time database
We can obtain the same information from the SQL database now, so
do that and remove the filesystem-based time database.  This will
help support multiple schedulers (as they will all have access to
the same data).

Nothing in the scheduler uses the state directory anymore, so clean
up the docs around that.  The executor still has a state dir where
it may install ansible-related files.

The SQL query was rather slow in practice because it created a
temporary table since it was filtering mostly by buildset fields
then sorting by build.id.  We can sort by buildset.id and get nearly
the same results (equally valid from our perspective) much faster.

In some configurations under postgres, we may see a performance
variation in the run-time of the query.  In order to keep the time
estimation out of the critical path of job launches, we perform
the SQL query asynchronously.  We may be able to remove this added
bit of complexity once the scale-out-scheduler work is finished
(and/or we we further define/restrict our database requirements).

Change-Id: Id3c64be7a05c9edc849e698200411ad436a1334d
2021-09-27 11:54:33 -07:00
Tristan Cacqueray 0dbd8c0784 prometheus: add options to start the server and process collector
This change adds a new prometheus_port option to start a metric server
to be scrapped by a prometheus service. By default, the server exposes
process informations.

Change-Id: Ie329df6adc69768dfdb158d00283161f8b70f07a
2021-04-26 14:47:36 +00:00
James E. Blair 3647139920 Move key_store_password to keystore section in zuul.conf
This is likely to be needed by executors as well since passing
decrypted secrets to the executors via zookeeper has the same
encrypted-at-rest concerns as they keystore itself.  To avoid
confusion around executors needing a zuul.conf with a scheduler
section, start a new keystore section which we can later indicate
is used by schedulers and executors.  It also makes it convenient
to add new options (like those dealing with rotation, or even
using an external keystore).

Also change some log levels from debug to info where it's useful
for the operator to know that the backup keystore was used (or
a key was generated).

Change-Id: If2491bbe4eb80b76435a274cf5354a4918315e65
2021-04-14 06:42:44 -07:00
Simon Westphahl dd2d7fee4c Store secrets keys and SSH keys in Zookeeper
As a preparation for the HA scheduler, project secrets keys and SSH keys
will now also be stored in Zookeeper. All private data in Zookeeper will
be encrypted at rest.

Existing keys on the filesystem will be automatically imported into
Zookeeper and new keys will still be available as files for backup.

Change-Id: I2a7d1a555f1db1f2178d3bb2f06756ecc8bc7a81
2021-04-14 08:22:07 +02:00
Matthieu Huin b599c7249d authentication config: add optional max_validity_time, skew
The Zuul admin can configure authenticators with an optional
"max_validity_time" field, which is the maximum age in seconds
for a valid authentication token. By default there is no
maximum age set for tokens, except the one deduced from
the token's "exp" claim.
If "max_validity" is set, tokens without an "iat" claim will
be rejected.

This is meant as an extra security to avoid accidentally issueing
very long lived tokens through the CLI.

The "skew" field can be used to mitigate clocks discrepancies
between Zuul and a JWT emitter.

Change-Id: I9351ca016b60050b5f3b3950b840d5f719e919ce
2019-12-10 16:39:29 +01:00
Vitaliy Lotorev 423713febd Add propagate=0 for loggers in logging.conf-sample
Otherwise messages from zuul and gerrit loggers are printed
twice: from the logger and from root logger.

Change-Id: I377758d4b70e250f8b2ba281cd0dabcf12555b62
2019-11-14 01:08:50 +03:00
mhuin 19474fb62f Web: plug the authorization engine
Add an "authorize_user" RPC call allowing to test a set of claims
against the rules of a given tenant. Make zuul-web use this call
to authorize access to tenant-scoped privileged actions.

Change-Id: I50575f25b6db06f56b231bb47f8ad675febb9d82
2019-07-30 15:32:31 +00:00
mhuin 7a622a5823 Add Authorization Rules configuration
Allow an operator to define authorization rules.
Allow an operator to add authorization rules to a tenant.
Add a rule parser and a rule registry.

The authZ engine is not plugged in yet.

Change-Id: I3a86c6c7d62ad2bce68a98dbd2fff18549b94fb9
2019-07-30 15:32:15 +00:00
mhuin 9d86c00111 Zuul CLI: allow access via REST
Users can set the [webclient] section in their zuul.conf file so that the CLI
relies on REST calls rather than RPC. The CLI accepts a new --auth-token
argument allowing remote users to use privileged REST endpoints.

Change-Id: I5a07fccfd787246c4c494db592b575fbdf90ddb1
2019-07-30 10:46:17 +02:00
Matthieu Huin 6a7235fb50 web: add tenant and project scoped, JWT-protected actions
A user with the right JSON Web Token (JWT) can trigger a autohold,
reenqueue or dequeue a buildset from the web API.

The Token is expected to include a key called "zuul.admin" that
contains a list of the tenants the user is allowed to perform
these actions on.

The Token must be passed as a bearer token in an Authorization header.

The Token is validated thanks to authenticator declarations in Zuul's
configuration file.

Change-Id: Ief9088812f44368f14234ddfa25ba872526b8735
2019-07-10 12:11:14 +02:00
Fergus Yu 8fe0de2402 Fix indent error for layout.yaml-sample.
Change-Id: I01ac226e7873bf9531a221471431e2d5dcf6aed7
2018-06-20 12:20:23 +08:00
James E. Blair 46e48d7b97 Move SQL web handler to driver
The only rest API endpoint that uses sql queries is
/api/tenant/{tenant}/builds.  There's no connection in there, which
means it doesn't make sense for that to be attached to a sql connection
(which is currently the case).  Moreover, it doesn't make sense for
*every* tenant's endpoint to be attached to the *same* connection.

In other words, the current situation only allows for a single sql
connection system-wide, even if someone is using different connections
per tenant.

Moving the handler for the endpoint into the sql driver means that it
can dispatch the query to the appropriate connection for a given tenant
(since a tenant is always implied by the REST endpoint).

Moreover, the *rest* of the system actually allows multiple connections
within a single tenant, and we should support that here, but I don't
immediately have a solution of how to handle pagination across queries
that span multiple connections.  This is an improvement in that it is
now tenant-scoped, but it's not ideal.

This also removes the (undocumented!) sql_connection_name config file
option.

It also uses the tenant name from the path to constructe the query so
that it always includes the correct tenant (this eliminates the
inadvertant ability for one tenant to query another tenant's builds).

The internal API here isn't great, but it will get cleaned up in the
next patch which converts to cherrypy.

Change-Id: Ie1f19f0b392d4c010ef43dc6220ff1c8667f5a4a
2018-05-31 09:08:53 -07:00
Zuul a2a2ed90ea Merge "mqtt: add basic reporter" 2018-05-31 15:13:41 +00:00
Tristan Cacqueray 531a880a5d mqtt: add basic reporter
This change adds a MQTT reporter to publish build results message.

Change-Id: I5a9937a7952beac5c77d83ab791d48ff000b447b
2018-05-02 07:20:46 +00:00
Fatih Degirmenci c9ac766047 Add zuul systemd drop-in files for CentOS 7
The existing service files are for Fedora27 and it does not work
on CentOS 7 since pip installs zuul-executor, zuul-scheduler, and
zuul-web in /usr/bin on CentOS 7. This change adds the systemd drop-in
files for this distro so ExecStart and ExecStop commands are overriden
by systemd based on where zuul componenst are installed.

This change is needed in order to have complete installation instructions
for Centos7 in zuul-from-scratch document.

Change-Id: Ib9766ba2a825486f05464be6a85968b5158e2e34
2018-04-29 23:29:39 +02:00
Paul Belanger 724ffa0b15
Fix zuul systemd files
Our current systemd unit files do not work with type=forking, it does
work with type=simple. This also means we can drop the PIDFile, as it
is only used by forking.

Change-Id: Ia9a2e54b91e9b2430c612b2edfa07077f7248539
Signed-off-by: Paul Belanger <pabelanger@redhat.com>
2018-04-27 18:27:24 -04:00
Zuul d4e2d97986 Merge "Add sample systemd service files." 2018-04-16 18:07:59 +00:00
David Shrewsbury bd16925421 Add sample systemd service files.
Also modify the Zuul From Scratch doc to reference these new files
in the service installation documents.

Depends-On: https://review.openstack.org/560993
Change-Id: Ifa0d1cd48ec5e1ef3358ada55b1b2769f392dfe9
2018-04-13 15:30:18 +00:00
Paul Belanger fc120688f8
Remove zuul-cloner command
With the release of zuul 3.0.0 is command is no longer needed. Jobs
are setup to push the known repo state on to the remove nodes.

Change-Id: I0df6e41dc05276e648d393ec62329a85f1b8c415
Signed-off-by: Paul Belanger <pabelanger@redhat.com>
2018-04-12 11:49:13 -04:00
Monty Taylor 4a781a7f86
Use yarn and webpack to manage zuul-web javascript
yarn drives package and dependency management. webpack handles
bundling, minification and transpiling down to browser-acceptable
javascript but allows for more modern javascript like import statements.

There are some really neat things in the webpack dev server. CSS
changes, for instance, get applied immediately without a refresh. Other
things, like the jquery plugin do need a refresh, but it's handled just
on a file changing.

As a followup, we can also consider turning the majority of the status page
into a webpack library that other people can depend on as a mechanism
for direct use. Things like that haven't been touched because allowing
folks to poke at the existing known status page without too many changes
using the tools seems like a good way for people to learn/understand the
stack.

Move things so that the built content gets put
into zuul/web/static so that the built-in static serving from zuul-web
will/can serve the files.

Update MANIFEST.in so that if npm run build:dist is run before the
python setup.py sdist, the built html/javascript content will be
included in the source tarball.

Add a pbr hook so that if yarn is installed, javascript content will be
built before the tarball.

Add a zuul job with a success url that contains a source_url
pointing to the live v3 data.

This adds a framework for verifying that we can serve the web app
urls and their dependencies for all of the various ways we want to
support folks hosting zuul-web.

It includes a very simple reverse proxy server for approximating
what we do in openstack to "white label" the Zuul service -- that
is, hide the multitenancy aspect and present the single tenant
at the site root.

We can run similar tests without the proxy to ensure the default,
multi-tenant view works as well.

Add babel transpiling enabling use of ES6 features

ECMAScript6 has a bunch of nice things, like block scoped variables,
const, template strings and classes. Babel is a javascript transpiler
which webpack can use to allow us to write using modern javascript but
the resulting code to still work on older browsers.

Use the babel-plugin-angularjs-annotate so that angular's dependency
injection doesn't get borked by babel's transpiling things (which causes
variables to otherwise be renamed in a way that causes angular to not
find them)

While we're at it, replace our use of var with let (let is the new
block-scoped version of var) and toss in some use of const and template
strings for good measure.

Add StandardJS eslint config for linting

JavaScript Standard Style is a code style similar to pep8/flake8. It's
being added here not because of the pep8 part, but because the pyflakes
equivalent can catch real errors. This uses the babel-eslint parser
since we're using Babel to transpile already.

This auto-formats the existing code with:

  npm run format

Rather than using StandardJS directly through the 'standard' package,
use the standardjs eslint plugin so that we can ignore the camelCase
rule (and any other rule that might emerge in the future)

Many of under_score/camelCase were fixed in a previous version of the patch.
Since the prevailing zuul style is camelCase methods anyway, those fixes
were left. That warning has now been disabled.

Other things, such as == vs. === and ensuring template
strings are in backticks are fixed.

Ignore indentation errors for now - we'll fix them at the end of this
stack and then remove the exclusion.

Add a 'format' npm run target that will run the eslint command with
--fix for ease of fixing reported issues.

Add a 'lint' npm run target and a 'lint' environment that runs with
linting turned to errors. The next patch makes the lint environment more
broadly useful.

When we run lint, also run the BundleAnalyzerPlugin and set the
success-url to the report.

Add an angular controller for status and stream page

Wrap the status and stream page construction with an angular controller
so that all the javascripts can be bundled in a single file.

Building the files locally is wonderful and all, but what we really want
is to make a tarball that has the built code so that it can be deployed.

Put it in the root source dir so that it can be used with the zuul
fetch-javascript-tarball role.

Also, replace the custom npm job with the new build-javascript-content
job which naturally grabs the content we want.

Make a 'main.js' file that imports the other three so that we just have
a single bundle. Then, add a 'vendor' entry in the common webpack file
and use the CommonsChunkPlugin to extract dependencies into their own
bundle. A second CommonsChunkPlugin entry pulls out a little bit of
metadata that would otherwise cause the main and vendor chunks to change
even with no source change. Then add chunkhash into the filename. This
way the files themselves can be aggressively cached.

This all follows recommendations from https://webpack.js.org/guides/caching/
https://webpack.js.org/guides/code-splitting/ and
https://webpack.js.org/guides/output-management/

Change-Id: I2e1230783fe57f1bc3b7818460463df1e659936b
Co-Authored-By: Tristan Cacqueray <tdecacqu@redhat.com>
Co-Authored-By: James E. Blair <jeblair@redhat.com>
2018-03-04 07:20:40 -06:00
Monty Taylor 9010dc50f4
Remove .json suffix from web routes
For the existing simple cases, like builds, jobs and status, having the json
suffix is a perfectly reasonable thing. However, in the next patch it starts
to get weird. When we add support for specific changes or specific jobs, we
we grow URLs like:

  /openstack/status.json
  /openstack/status/change/537010,2.json

Those read weird, because change/537010,2 is much more like an argument or
specialiation of status. The thing that reads weird is the status call having
 .json but the change-specific call just being status/, not
the trailing .json on the change url.

Removing the json suffix gets us:

  /openstack/status
  /openstack/status/change/537010,2

which feels better as the status portion of the url remains consistent.

This is done first in the stack so that as we add tests for new
endpoints we can get them right the first time rather than having a big
rename patch at the end (which is what this started as)

Change-Id: I4baf33fdacaf46943fbd192743551bb27bd618de
2018-02-19 09:27:31 -06:00
Tobias Henkel e0bad8dc05
Remove webapp
The webapp has been superseeded by zuul-web now so remove it
completely.

Change-Id: I8125a0d7f3aef8fa7982c75d4650776b6906a612
2018-01-29 21:21:00 +01:00
Tobias Henkel 940da00e9b
Move status_url from webapp to web section
The webapp will be fully replaced by zuul-web so also move the
status_url setting there.

Change-Id: I8278d9ca81ed7b0a2a2189d42b8b69c5eea2bab5
2018-01-29 14:16:28 +01:00
Monty Taylor 1e464b118f
Remove large status header and tagline
With the dashboard navbar above, the words "Zuul Status" aren't really
neeed. Also, "Real-time status monitor of Zuul, the pipeline manager
between Gerrit and Workers." seems like text that's a little out of
place now.

Change-Id: I5741f1e7edf721eec3a445c054f036a1d17bb172
2017-12-08 18:20:32 -06:00
Tristan Cacqueray daa95de3ac web: add /{tenant}/builds route
This change adds a SqlHandler to query the sql reporter database from
zuul-web through the /{tenant}/builds.json controller.

This change also adds a /{tenant}/builds.html basic web interface.

Change-Id: I423a37365316cc96ed07ad0895c7198d9cff8be5
2017-12-06 12:51:39 +00:00
Tristan Cacqueray 3c2d39dd86 web: add Cache-Control to static files
This change add the Cache-Control header to static files' response.

Change-Id: Ibdf1c35bad378507162d807cf5acdf13fc3fab88
2017-11-29 06:22:27 +00:00
Tobias Henkel 02ec07f0fb Add management queue length to status page
The status.json now exposes the management queue length. This should
also be displayed on the status page.

Change-Id: I9dbf34e3b477f82605076be95b4e6c02f253abc7
2017-10-19 07:11:33 +02:00
James E. Blair ded241e598 Switch statsd config to zuul.conf
The automatic statsd configuration based on env variables has
proven cumbersome and counter-intuitive.  Move its configuration
into zuul.conf in preparation for other components emitting stats.

Change-Id: I3f6b5010d31c05e295f3d70925cac8460d334283
2017-10-13 14:04:42 -07:00
Jens Harbott 898a8bf82a Avoid JS error when a change has no id
This may cause the UI to display only a subset of the total changes,
leading to some confusion. Use the local variable that we define to be
set even when change.id is null consistently.

Change-Id: I7c5ff2d9c6ba83e8a8265df3fd83afabe1984fe2
2017-10-04 13:14:47 +00:00
Timo Tijhof 0445c277eb Status: Don't toggle panel when clicking patch link
Each patchset panel is clickable in its entirety. Clicks anywhere
on the header of the widget propagate to the wrapper element and
result in the panel being toggled.

This works as expected when clicking on non-interactive areas,
such as the title, ETA, background, or progress bar.

However, this doesn't work as expected when clicking on the
Gerrit patch link, which inadvertently also causes the panel
to be toggled.

Add logic to the click event handler to ignore the event if it
bubbled up from an anchor link.

Test Plan:
* http://localhost/zuul/etc/status/public_html/?demo=basic
* Click on a Gerrit patch link (e.g. "10101,1") in a panel.

Previously, it triggers a panel toggle. Now it doesn't.
Clicking elsewhere still toggles the panel.

Cherry-picked from: Ifadf3dfabfc361e1e7d775a62c4c2643b0e2b2c2

Change-Id: Ifadf3dfabfc361e1e7d775a62c4c2643b0e2b2c2
2017-09-19 14:53:02 -04:00
Timo Tijhof 9a2362d55a Status: Remove use of deprecated jQuery jqXHR `complete` method
This has been deprecated for a long time, and was removed in
jQuery 3.0 per <https://api.jquery.com/jQuery.ajax/#jqXHR>

jqXHR.always() has been available since jQuery 1.6.

Cherry-picked from: I4498e3b63d07d019db51b4f04a1dd20ebc7c1167

Change-Id: I4498e3b63d07d019db51b4f04a1dd20ebc7c1167
2017-09-19 14:52:30 -04:00
James E. Blair 13c5ffca25 Revert "Only add changes to status page with jobs"
This reverts commit d9f1f82b4e.

This change has been confusing because it makes it hard to detect
when a change is sitting in a pipeline waiting for a merge.

Change-Id: I3cc74db8c13f73d0a609f15a42bbe765a163084b
2017-09-05 07:59:56 -07:00
Monty Taylor d9f1f82b4e
Only add changes to status page with jobs
In v3, changes get added to pipelines and then it is determined what, if
any, jobs they have. This leads to two UX 'issues'. The first is that a
change can flash into the check pipeline for a second even if zuul isn't
doing anything with it. The second is that for changes that zuul IS
doing things with, the change box will appear before it is expandable.

If we only append changes that have jobs, then they won't show up in a
pipeline if they aren't going to do anything, nor will the user be
presented with a box that looks expandable but isn't.

Change-Id: I4c39505dbba5c02790132a3f52afad5d68578a2e
2017-08-30 10:16:29 -05:00
Tristan Cacqueray a7586c96a7 Add gearman server port configuration
This change adds the port configuration option to set a custom port
for the gearman server.

Change-Id: I1b65f93fa0403ff10e00a97afcdb4a3b512eb372
2017-08-29 11:08:39 +00:00
Tobias Henkel 34ee088603 Remove zuul_url from merger config
Currently the zuul_url is not used anywhere but still a required
merger setting. This removes it.

Change-Id: I627c8a18015f4c148c28d2f7e735b30cc1ef3862
2017-07-31 22:28:35 +02:00
Monty Taylor 01380dd885
Change name and document the bind_mount config paths
The content in these can be a file or a directory - so _dirs is
confusing. Change it to _paths and document it.

Change-Id: Ida38766cd3d440d75a6dc55035a54e0804e03760
2017-07-28 17:30:45 -05:00
Tobias Henkel ea98a194cc Case sensitive label matching
After upgrading Gerrit to 2.13 our gate stopped working. The reason
for this is that after a successful gate run zuul does something like
'gerrit review --label verified=2 --submit'. The verified label in
Gerrit by default is configured as 'Verified'. The newer version of
gerrit behaves different now. It accepts the +2 vote on verified but
doesn't submit the patch anymore if the casing is not correct. This
forces us to specify the label in the same casing as gerrit
expects. In that case the tolower() in canMerge prevents the patch
from entering the gate.

In order to avoid confusion and be consistent, avoid any case
conversions and use the labels exactly as defined in Gerrit.

Note that this patch requires changes to the pipelines such that the
labels are spelled exactly as defined in Gerrit.

Change-Id: I9713a075e07b268e4f2620c0862c128158283c7c
2017-07-27 07:46:35 +02:00
Monty Taylor e78211da17
Display log url when a job completes
When the job has a result we need to swap to showing the report_url and
not the url.

Change-Id: Iae9edf906c5dcb692550ea887286bc8a49490d9b
2017-07-21 09:49:09 +09:00
Tristan Cacqueray 7d04c4d738 Fix status_url section in zuul.conf-sample
The status_url needs to be in the [webapp] section

Change-Id: I1568d7e6e62682bfca87979fc71db5648f1ed72e
2017-07-13 05:09:59 +00:00
Jenkins e128b517d0 Merge "Add web-based console log streaming" into feature/zuulv3 2017-07-10 20:09:21 +00:00
Monty Taylor 51139a0682 Add web-based console log streaming
zuul now provides socket-based console streaming, which is super cool.
In order to have jenkins parity with web streaming, we need to provide a
websocket (javascript in browsers can't really connect to random ports
on servers)

After surveying the existing python websocket options, basically all of
them are based around twisted, eventlet, gevent or asyncio. It's not
just a thing we can easily deal with from our current webob/paste
structure, because it is a change to the fundamental HTTP handling.
While we could write our own websocket server implementation that was
threaded like the rest of zuul, that's a pretty giant amount of work.

Instead, we can run an async-based server that's just for the
websockets, so that we're not all of a sudden putting async code into
the rest of zuul and winding up frankensteined. Since this is new code,
using asyncio and python3 seems like an excellent starting place.

aiohttp supports running a websocket server in a thread. It also
supports doing other HTTP/REST calls, so by going aiohttp we can set
ourselves up for a single answer for the HTTP tier.

In order to keep us from being an open socket relay, we'll expect two
parameters as the first message on the websocket - what's the zuul build
uuid, and what log file do we want to stream. (the second thing,
multiple log files, isn't supported yet by the rest of zuul, but one can
imagine a future where we'd like to support that too, so it's in the
protocol) The websocket server will then ask zuul over gearman for the
IP and port associated with the build and logfile and will start
streaming it to the socket.

Ultimately we'll want the status page to make links of the form:

  /console.html?uuid=<uuid>&logfile=console.log

and we'll want to have apache map the websocket server to something like
/console.

Co-Authored-By: Monty Taylor <mordred@inaugust.com>

Change-Id: Idd0d3f9259e81fa9a60d7540664ce8d5ad2c298f
2017-07-10 10:32:28 -04:00
James E. Blair fdb111d7a5 Move zookeeper_hosts to zookeeper section
To anticipate future use of zookeeper by more than just the scheduler,
create a new 'zookeeper' section in zuul.conf similar to the 'gearman'
section.  The 'hosts' entry is the only setting there now, but others
may be added later.

Change-Id: Ib0bb2dfdc96fa0eb4aad2b4700de2f2004ea15f2
2017-07-05 14:42:47 -07:00
James E. Blair edc4016b4b Correct sample zuul.conf
And add missing zuul.conf config entries.

Change-Id: I776826e7ff1fff2edd6f6d332c20a24af1a4eb58
2017-07-05 14:38:53 -07:00
Tristan Cacqueray 44aef15d6e executor: run trusted playbook in a bubblewrap
This change renames untrusted_wrapper to execution_wrapper and uses
bubblewrap for both trusted and untrusted playbooks by default.

This change adds new options to the zuul.conf executor section to let
operators define what directories to mount ro or rw for both context:
* trusted_ro_dirs/trusted_rw_dirs, and
* untrusted_ro_dirs/untrusted_rw_dirs

Change-Id: I9a8a74a338a8a837913db5e2effeef1bd949a49c
Story: 2001070
Task: 4687
2017-06-17 02:43:19 +00:00
Paul Belanger 0a21f0a1d5
Add ssl support to gearman / gearman_server
Enable SSL support for gearman. We also created an new SSLZuulBaseTest
class to provide a simple way to use SSL end to end where possible. A
future patch will enable support in zookeeper.

Change-Id: Ia8b89bab475d758cc6a021988f8d79ead8836a9d
Signed-off-by: Paul Belanger <pabelanger@redhat.com>
2017-06-14 10:10:45 -04:00
Jenkins 38e8f77a20 Merge "Re-add the ability to set username on zuul-executor" into feature/zuulv3 2017-06-07 12:36:41 +00:00
Jenkins ed792a03dd Merge "Fix bad text wrap in status page" into feature/zuulv3 2017-06-01 17:30:29 +00:00
Monty Taylor 271290c16b
Fix bad text wrap in status page
Change-Id: I63fa6c25aff15a016b57924963971dacbe48d010
2017-05-26 15:09:46 -05:00