diff --git a/.zuul.yaml b/.zuul.yaml index fd65092f1b..1642e25c7d 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -1007,6 +1007,32 @@ - playbooks/roles/zuul-preview/ - testinfra/test_zuul_preview.py +- job: + name: system-config-run-review-dev + parent: system-config-run + description: | + Run the playbook for gerrit (in a container). + nodeset: + nodes: + - name: bridge.openstack.org + label: ubuntu-bionic + - name: review-dev01.openstack.org + label: ubuntu-bionic + vars: + run_playbooks: + - playbooks/service-review-dev.yaml + host-vars: + review-dev01.openstack.org: + host_copy_output: + '/home/gerrit2/review_site/etc': logs + '/home/gerrit2/review_site/logs': logs + files: + - playbooks/group_vars/review-dev.yaml + - ^playbooks/host_vars/review-dev\d+.opendev.org.yaml + - playbooks/zuul/templates/group_vars/review.yaml.j2 + - playbooks/roles/gerrit/ + - testinfra/test_gerrit.py + - job: name: infra-prod-playbook description: | @@ -1064,6 +1090,7 @@ soft: true - name: system-config-build-image-haproxy-statsd soft: true + - system-config-run-review-dev - system-config-run-zuul-preview - system-config-run-letsencrypt - system-config-build-image-bazel @@ -1123,6 +1150,7 @@ soft: true - name: system-config-upload-image-haproxy-statsd soft: true + - system-config-run-review-dev - system-config-run-zuul-preview - system-config-run-letsencrypt - system-config-upload-image-bazel diff --git a/modules/openstack_project/files/gerrit/web_server.py b/modules/openstack_project/files/gerrit/web_server.py deleted file mode 100755 index 8c61a122b6..0000000000 --- a/modules/openstack_project/files/gerrit/web_server.py +++ /dev/null @@ -1,178 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2015 Hewlett-Packard Development Company, L.P. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -""" -This is a simple test server that serves up the web content locally -as if it was a working remote server. It also proxies all the live -date/*.json files into the local test server, so that the Ajax async -loading works without hitting Cross Site Scripting violations. -""" - -import argparse -import BaseHTTPServer -import os.path -import urllib2 - -import requests - -# Values for these set via cli defaults -GERRIT_UPSTREAM = "" -ZUUL_UPSTREAM = "" - - -def replace_urls(line, port): - line = line.replace( - GERRIT_UPSTREAM, - "http://localhost:%s" % port) - line = line.replace( - ZUUL_UPSTREAM, - "http://localhost:%s" % port) - return line - - -class GerritHandler(BaseHTTPServer.BaseHTTPRequestHandler): - """A request handler to create a magic local Gerrit server""" - - def do_POST(self): - data = self.rfile.read(int(self.headers['content-length'])) - headers = {} - # we need to trim some of the local headers in order for this - # request to remain valid. - for header in self.headers: - if header not in ("host", "origin", "connection"): - headers[header] = self.headers[header] - resp = requests.post("%s%s" % - (GERRIT_UPSTREAM, self.path), - headers=headers, - data=data) - - # Process request back to client - self.send_response(resp.status_code) - for header in resp.headers: - # Requests has now decoded the response so it's no longer - # a gzip stream, which also means content-length is - # wrong. So we remove content-encoding, then drop - # content-length because if provided Gerrit strictly uses - # it for reads. We also drop all the keep-alive related - # headers, our server doesn't do that. - if header not in ("connection", "content-length", - "keep-alive", "content-encoding"): - self.send_header(header, resp.headers[header]) - self.end_headers() - self.wfile.write(resp.text) - - def do_GET(self): - # possible local file path - local_path = self.path.replace('/static/', '').split('?')[0] - - # if the file exists locally, we'll serve it up directly - if os.path.isfile(local_path): - self.send_response(200, "Success") - self.end_headers() - with open(local_path) as f: - for line in f.readlines(): - line = replace_urls(line, self.server.server_port) - self.wfile.write(line) - print "Loaded from local override" - return - - # First we'll look for a zuul status call, /status doesn't map - # to gerrit so we can overload the localhost server for this. - if self.path.startswith("/status"): - try: - zuul_url = "%s%s" % (ZUUL_UPSTREAM, self.path) - # BUG(sdague): for some reason SSL connections to zuul - # from python 2.7 blow up with an SSL exception - zuul_url = zuul_url.replace('https', 'http') - response = urllib2.urlopen(zuul_url) - self.send_response(200, "Success") - for header in response.info(): - # need to reset content-length otherwise jquery complains - if header not in ("connection", "content-length", - "keep-alive", "content-encoding"): - self.send_header(header, response.info()[header]) - self.end_headers() - - for line in response.readlines(): - line = replace_urls(line, self.server.server_port) - self.wfile.write(line) - return - except urllib2.HTTPError as e: - self.send_response(e.code) - self.end_headers() - self.wfile.write(e.read()) - return - except urllib2.URLError as e: - print "URLError on %s" % (zuul_url) - print e - - # If you've not built local data to test with, instead grab - # the data off the production server on the fly and serve it - # up from our server. - try: - response = urllib2.urlopen("%s%s" % - (GERRIT_UPSTREAM, self.path)) - self.send_response(200, "Success") - for header in response.info(): - self.send_header(header, response.info()[header]) - self.end_headers() - - for line in response.readlines(): - line = replace_urls(line, self.server.server_port) - self.wfile.write(line) - except urllib2.HTTPError as e: - self.send_response(e.code) - self.end_headers() - self.wfile.write(e.read()) - - -def parse_opts(): - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument('-p', '--port', - help='port to bind to [default: 8001]', - type=int, - default=8001) - parser.add_argument('-z', '--zuul-url', - help='url for zuul server', - default="https://zuul.openstack.org") - parser.add_argument('-g', '--gerrit-url', - help='url for gerrit server', - default="https://review.opendev.org") - return parser.parse_args() - - -def main(): - global ZUUL_UPSTREAM - global GERRIT_UPSTREAM - opts = parse_opts() - ZUUL_UPSTREAM = opts.zuul_url - GERRIT_UPSTREAM = opts.gerrit_url - server_address = ('', opts.port) - httpd = BaseHTTPServer.HTTPServer(server_address, GerritHandler) - - print "Test Server is running at http://localhost:%s" % opts.port - print "Ctrl-C to exit" - print - - while True: - httpd.handle_request() - -if __name__ == '__main__': - try: - main() - except KeyboardInterrupt: - print "\n" - print "Thanks for testing! Please come again." diff --git a/playbooks/roles/gerrit/README.rst b/playbooks/roles/gerrit/README.rst new file mode 100644 index 0000000000..984e3c5c95 --- /dev/null +++ b/playbooks/roles/gerrit/README.rst @@ -0,0 +1 @@ +Run Gerrit. diff --git a/playbooks/roles/gerrit/defaults/main.yaml b/playbooks/roles/gerrit/defaults/main.yaml new file mode 100644 index 0000000000..2136969cf7 --- /dev/null +++ b/playbooks/roles/gerrit/defaults/main.yaml @@ -0,0 +1,5 @@ +gerrit_id: 3000 +gerrit_user_name: gerrit2 +gerrit_home_dir: /home/gerrit2 +gerrit_site_dir: "{{ gerrit_home_dir }}/review_site" +gerrit_run_init: false diff --git a/playbooks/roles/gerrit/files/cla.html b/playbooks/roles/gerrit/files/cla.html new file mode 100644 index 0000000000..83f8688a7a --- /dev/null +++ b/playbooks/roles/gerrit/files/cla.html @@ -0,0 +1,259 @@ +
+In order to clarify the intellectual property license granted with +Contributions from any person or entity, the OpenStack Project (the "Project") +must have a Contributor License Agreement ("Agreement") on file that has been +signed by each Contributor, indicating agreement to the license terms below. +This license is for your protection as a Contributor as well as the protection +of OpenStack Foundation as Project manager (the "Project Manager") and the +Project users; it does not change your rights to use your own Contributions for +any other purpose. +
+ ++You accept and agree to the following terms and conditions for Your present and +future Contributions submitted to the Project Manager. In return, the Project +Manager shall not use Your Contributions in a way that is contrary to the +public benefit or inconsistent with its nonprofit status and bylaws in effect +at the time of the Contribution. Except for the license granted herein to the +Project Manager and recipients of software distributed by the Project Manager, +You reserve all right, title, and interest in and to Your Contributions. +
+ ++Definitions. + +"You" (or "Your") shall mean the copyright owner or legal entity authorized by +the copyright owner that is making this Agreement with the Project Manager. For +legal entities, the entity making a Contribution and all other entities that +control, are controlled by, or are under common control with that entity are +considered to be a single Contributor. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the direction or +management of such entity, whether by contract or otherwise, or (ii) ownership +of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial +ownership of such entity. "Contribution" shall mean any original work of +authorship, including any modifications or additions to an existing work, that +is intentionally submitted by You to the Project Manager for inclusion in, or +documentation of, any of the projects owned or managed by the Project Manager +(the "Work"). For the purposes of this definition, "submitted" means any form of +electronic, verbal, or written communication sent to the Project Manager or its +representatives, including but not limited to communication on electronic +mailing lists, source code control systems, and issue tracking systems that are +managed by, or on behalf of, the Project Manager for the purpose of discussing +and improving the Work, but excluding communication that is conspicuously marked +or otherwise designated in writing by You as "Not a Contribution." +
+Grant of Copyright License. + +Subject to the terms and conditions of this Agreement, You hereby grant to the +Project Manager and to recipients of software distributed by the Project +Manager a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare derivative works of, +publicly display, publicly perform, sublicense, and distribute Your +Contributions and such derivative works. +
+Grant of Patent License. + +Subject to the terms and conditions of this Agreement, You hereby grant to the +Project Manager and to recipients of software distributed by the Project +Manager a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by You that are +necessarily infringed by Your Contribution(s) alone or by combination of Your +Contribution(s) with the Work to which such Contribution(s) was submitted. If +any entity institutes patent litigation against You or any other entity +(including a cross-claim or counterclaim in a lawsuit) alleging that Your +Contribution, or the Work to which You have contributed, constitutes direct or +contributory patent infringement, then any patent licenses granted to that +entity under this Agreement for that Contribution or Work shall terminate as of +the date such litigation is filed. +
+You represent that you are legally entitled to grant the above license. If your +employer(s) has rights to intellectual property that you create that includes +your Contributions, You represent that you have received permission to make +Contributions on behalf of that employer, that your employer has waived such +rights for your Contributions to the Project Manager, or that your employer has +executed a separate Corporate Contributor License Agreement with the Project +Manager. +
+You represent that each of Your Contributions is Your original creation (see +Section 7 for submissions on behalf of others). You represent that Your +Contribution submissions include complete details of any third-party license or +other restriction (including, but not limited to, related patents and +trademarks) of which you are personally aware and which are associated with any +part of Your Contributions. +
+You are not expected to provide support for Your Contributions, except to the +extent You desire to provide support. You may provide support for free, for a +fee, or not at all. Unless required by applicable law or agreed to in writing, +You provide Your Contributions on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied, including, without +limitation, any warranties or conditions of TITLE, NONINFRINGEMENT, +MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. +
+Should You wish to submit work that is not Your original creation, You may +submit it to the Project Manager separately from any Contribution, identifying +the complete details of its source and of any license or other restriction +(including, but not limited to, related patents, trademarks, and license +agreements) of which you are personally aware, and conspicuously marking the +work as "Submitted on behalf of a third-party: [named here]". +
+You agree to notify the Project Manager of any facts or circumstances of which +you become aware that would make these representations inaccurate in any +respect. +
+In addition, if you have provided a Contribution (as defined in the LLC +Contribution License Agreement below) to the Project under the Contribution +License Agreement to OpenStack, LLC ("LLC Contribution Agreement"), you agree +that OpenStack, LLC may assign the LLC Contribution Agreement along with all +its rights and obligations under the LLC Contribution License Agreement to the +Project Manager. +
++ +In order to clarify the intellectual property license granted with +Contributions from any person or entity, the OpenStack Project (the "Project") +must have a Contributor License Agreement ("Agreement") on file that has been +signed by each Contributor, indicating agreement to the license terms below. +This license is for your protection as a Contributor as well as the protection +of OpenStack, LLC as Project manager (the "Project Manager") and the Project +users; it does not change your rights to use your own Contributions for any +other purpose. If you have not already done so, please complete and sign this +Individual License Agreement by following the instructions embedded below. +After you fill in the required information and apply your digital signature to +the Agreement, the signature service will generate an email to you. You must +confirm your digital signature as instructed in this email to complete the +signing process. The signature service will then send you a signed copy of this +Agreement for your records.
+ +You accept and agree to the following terms and conditions for Your +present and future Contributions submitted to the Project Manager. Except for +the license granted herein to the Project Manager and recipients of software +distributed by the Project Manager, You reserve all right, title, and interest +in and to Your Contributions.
+ ++ +
+ +- + +
Definitions"You" (or "Your") shall mean the copyright +owner or legal entity authorized by the copyright owner that is making this +Agreement with the Project Manager. For legal entities, the entity making a +Contribution and all other entities that control, are controlled by, or are +under common control with that entity are considered to be a single +Contributor. For the purposes of this definition, "control" means (i) the +power, direct or indirect, to cause the direction or management of such entity, +whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or +more of the outstanding shares, or (iii) beneficial ownership of such +entity. "Contribution" shall mean any original work of authorship, including +any modifications or additions to an existing work, that is intentionally +submitted by You to the Project Manager for inclusion in, or documentation of, +any of the projects owned or managed by the Project Manager (the "Work"). For +the purposes of this definition, "submitted" means any form of electronic, +verbal, or written communication sent to the Project Manager or its +representatives, including but not limited to communication on electronic +mailing lists, source code control systems, and issue tracking systems that are +managed by, or on behalf of, the Project Manager for the purpose of discussing +and improving the Work, but excluding communication that is conspicuously +marked or otherwise designated in writing by You as "Not a +Contribution."
- + +
Grant of Copyright License. Subject to the terms and +conditions of this Agreement, You hereby grant to the Project Manager and to +recipients of software distributed by the Project Manager a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright +license to reproduce, prepare derivative works of, publicly display, publicly +perform, sublicense, and distribute Your Contributions and such derivative +works.
- + +
Grant of Patent License. Subject to the terms and +conditions of this Agreement, You hereby grant to the Project Manager and to +recipients of software distributed by the Project Manager a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as +stated in this section) patent license to make, have made, use, offer to sell, +sell, import, and otherwise transfer the Work, where such license applies only +to those patent claims licensable by You that are necessarily infringed by Your +Contribution(s) alone or by combination of Your Contribution(s) with the Work +to which such Contribution(s) was submitted. If any entity institutes patent +litigation against You or any other entity (including a cross-claim or +counterclaim in a lawsuit) alleging that Your Contribution, or the Work to +which You have contributed, constitutes direct or contributory patent +infringement, then any patent licenses granted to that entity under this +Agreement for that Contribution or Work shall terminate as of the date such +litigation is filed.
- + +
You represent that you are legally entitled to grant the above license. +If your employer(s) has rights to intellectual property that you create that +includes your Contributions, You represent that you have received permission to +make Contributions on behalf of that employer, that your employer has waived +such rights for your Contributions to the Project Manager, or that your +employer has executed a separate Corporate Contributor License Agreement with +the Project Manager.
- + +
You represent that each of Your Contributions is Your original creation +(see Section 7 for submissions on behalf other others). You represent that Your +Contribution submissions include complete details of any third-party license or +other restriction (including, but not limited to, related patents and +trademarks) of which you are personally aware and which are associated with any +part of Your Contributions.
- + +
You are not expected to provide support for Your Contributions, except +to the extent You desire to provide support. You may provide support for free, +for a fee, or not at all. Unless required by applicable law or agreed to in +writing, You provide Your Contributions on as "AS IS" BASIS, WITHOUT WARRANTIES +OR CONDITIONS OR ANY KIND, either express or implied, including, without +limitation, any warranties or conditions of TITLE, NONINFRINGEMENT, +MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
- + +
Should You wish to submit work that is not Your original creation, You +may submit it to the Project Manager separately from any Contribution, +identifying the complete details of its source and of any license or other +restriction (including, but not limited to, related patents, trademarks, and +license agreements) of which you are personally aware, and conspicuously +marking the work as "Submitted on behalf of a third-party: [named +here]".
- + +
You agree to notify the Project Manager of any facts or circumstances of +which you become aware that would make these representations inaccurate in any +respect.
+This is not a real CLA and cannot be signed. See the +account setup instructions for more information on OpenStack Contributor +License Agreements. +
+ ++This agreement is not managed through Gerrit. If you need to sign the U.S. +Government Contributor License Agreement, please contact the OpenStack +Foundation to initiate the process. See the +account setup instructions for more information on OpenStack Contributor +License Agreements. +
+ +|[\\s(])([0-9a-f]{40})(
|[\\s.,;:)])" + link = "" + html = "$1$2$3" +[its-storyboard] + url = https://storyboard.openstack.org +[trackingid "launchpad-bug"] + match = "\\#?(\\d+)" + footer = "closes-bug:" + footer = "partial-bug:" + footer = "related-bug:" + system = "Launchpad" +[trackingid "storyboard-story"] + match = "\\#?(\\d+)" + footer = "story:" + system = "Storyboard" +[trackingid "storyboard-task"] + match = "\\#?(\\d+)" + footer = "task:" + system = "Storyboard" +[theme] + backgroundColor = ffffff + topMenuColor = ffffff + textColor = 264d69 + trimColor = eef3f5 + selectionColor = d1e6ea + changeTableOutdatedColor = f5cccc + tableOddRowColor = ffffff + tableEvenRowColor = f5f5ff +[melody] + monitoring = true + session = true +[plugin "javamelody"] + allowTopMenu = false +# Gerrit upstream hardcodes a .git extension for cgit. +# The cgit settings below are the same just without the +# .git extension. +[gitweb] + type = gitweb + cgi = /usr/share/gitweb/gitweb.cgi + revision = "?p=${project}.git;a=commitdiff;h=${commit}" +[index] + type = LUCENE + threads = 4 +[download] + command = checkout + command = cherry_pick + command = pull + command = format_patch + scheme = ssh + scheme = anon_http + scheme = anon_git + archive = tar + archive = tbz2 + archive = tgz + archive = txz +[commitmessage] + maxLineLength = 72 +[groups] + newGroupsVisibleToAll = true +[mimetype "image/*"] + safe = true +[mimetype "text/x-yaml"] + safe = true +[mimetype "text/xml"] + safe = true +[mimetype "application/xml"] + safe = true +[mimetype "text/x-rst"] + safe = true +[mimetype "text/plain"] + safe = true +[mimetype "text/x-puppet"] + safe = true +[mimetype "text/x-ini"] + safe = true +[mimetype "text/x-properties"] + safe = true +[mimetype "text/x-markdown"] + safe = true +[mimetype "text/css"] + safe = true diff --git a/playbooks/roles/gerrit/templates/patchset-created.j2 b/playbooks/roles/gerrit/templates/patchset-created.j2 new file mode 100755 index 0000000000..59147b0810 --- /dev/null +++ b/playbooks/roles/gerrit/templates/patchset-created.j2 @@ -0,0 +1,11 @@ +#!/bin/sh + +# Use timeout to kill any process running longer than 10 minutes. +timeout -k 2m 10m /usr/local/bin/update-blueprint patchset-created "$@" +timeout -k 2m 10m /usr/local/bin/update-bug patchset-created "$@" +timeout -k 2m 10m /usr/local/bin/notify-impact patchset-created "$@" --impact SecurityImpact --dest-address 'openstack-security@lists.openstack.org' +{% if welcome_message_gerrit_ssh_private_key is defined %} +timeout -k 2m 10m /usr/local/bin/welcome-message patchset-created \ + --verbose --ssh-user=welcome-message \ + --ssh-key=/var/gerrit/etc/ssh_welcome_rsa_key "$@" +{% endif %} diff --git a/playbooks/roles/install-podman/README.rst b/playbooks/roles/install-podman/README.rst new file mode 100644 index 0000000000..7afdaaa052 --- /dev/null +++ b/playbooks/roles/install-podman/README.rst @@ -0,0 +1 @@ +An ansible role to install podman in the OpenDev production environment diff --git a/playbooks/roles/install-podman/defaults/main.yaml b/playbooks/roles/install-podman/defaults/main.yaml new file mode 100644 index 0000000000..b2555554ac --- /dev/null +++ b/playbooks/roles/install-podman/defaults/main.yaml @@ -0,0 +1,29 @@ +projectatomic_gpg_key: | + -----BEGIN PGP PUBLIC KEY BLOCK----- + + xsFNBFlRJjABEADuE3ZLY/2W++bPsxtcaoi7VaNnkvsXuVYbbHalEh/YwKFVsDTo + PQpuw1UlPpmVTwT3ufWfv2v42eZiiWMZaKG9/aWF/TeIdH5+3anfVi+X+tuIW9sv + GKTHZdtDqd7fIhtY6AuNQ/D629TJxLvafZ5MoGeyxjsebt5dOvOrl0SHpwR75uPP + aCXTWrokhH7W2BbJQUB+47k62BMd03EKe8stz9FzUxptROFJJ2bITijJlDXNfSbV + bwCiyREIkzXS6ZdWliJAqencOIZ4UbUax+5BT8SRbSLtr/c4YxvARilpSVCkxo8/ + EkPHBGygmgfw0kRPSGtLL7IqfWip9mFObji2geoU3A8gV/i3s9Ccc9GPKApX8r7b + QFs1tIlgUJKPqVwB2FAh+Xrqlsy/+8r95jL2gfRptSw7u8OP4AySj5WVm7cCEQ69 + aLyemCsf+v72bFOUXuYQ22Kr3yqz2O/1IsG/0Usr4riTdG65Aq6gnq4KRHMNgXu8 + 7fC9omoy3sKHvzeAJsw/eC9chYNwO8pv8KRIvpDSGL5L7Ems8mq2C5xMyzSVegTr + AvXu7nJoZWVBFRluh42bZa9QesX9MzzfOQ+G3085aW8BE++lhtX5QOkfRd74E49H + 1I2piAq/aE8P9jUHr60Po1C1Tw9iXeEaULLKut8eTMLkQ/02DXhBfq0I5QARAQAB + zSBMYXVuY2hwYWQgUFBBIGZvciBQcm9qZWN0IEF0b21pY8LBeAQTAQIAIgUCWVEm + MAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQi+zxY3rYx50HLw/5Ad6k + EHf2uT4owvzu393S/bUR6VVwCWYMbg14XgphxnoOfrHZWUjbrETTURyd1UexoHt7 + ZDtMCVmzeY0jpvMb1W3WDebFVo+wR4CI15sPjyycsOxWTviD743wxaPCL1s009co + CzWg5AgP88B0D353Y39meC07BBgOJgIfk1OkFdeRjqHfAtucT99NrCuKr/bbBwDn + 0E+wWaJoIbQvBzsPIFzMWWQ6RcnrZtyQv35epo+VBmW3VEIkorv1VoStF0RjvJM+ + cMW/ogZsIEZk0IUREOtrtTKUXVrMw1hZ9IGYZRpbJ2g670UGuNjW/vo3rRCRSDaF + 6Txp5Pn6ZLTgQWsWMw/6M6ooFIEpz3rhYmQSJLNmUN6SgKeWGVmOrQlg4f7YM75o + UEw56GKQWl9FAthO0qH0qF1OMfUKp/Tv2OSV/FNZsokf6alWXOB6Bzj6gYmmGXIv + MfFW5fZ1cuu5/0ULDckxWhVQ1ywLHREEoBQ6oKYONwUjSdWcM+VsKCEFeCqsNwak + qweP8C0fooycfiEZuncc/9ZujgkQ2p7xXTlv3t2SPF9h43xHs3515VS/OTJPGW59 + 98AqllpfqGxggYs5cwi2LO3xwvHyPoTqj3hcl1dRMspZINRsIo4VC8bSrCOqbjDc + CD2WFOo2c4mwTDmJpz0PLK87ev/WZ8K0OEflTfc= + =DzDk + -----END PGP PUBLIC KEY BLOCK----- diff --git a/playbooks/roles/install-podman/tasks/main.yaml b/playbooks/roles/install-podman/tasks/main.yaml new file mode 100644 index 0000000000..8318382b4a --- /dev/null +++ b/playbooks/roles/install-podman/tasks/main.yaml @@ -0,0 +1,20 @@ +- name: Add PPA GPG key + become: yes + apt_key: + data: "{{ projectatomic_gpg_key }}" + +- name: Add projectatomic apt repo + become: yes + template: + dest: /etc/apt/sources.list.d/projectatomic.list + group: root + mode: 0644 + owner: root + src: sources.list.j2 + +- name: Install podman + become: yes + apt: + name: podman + state: present + update_cache: yes diff --git a/playbooks/roles/install-podman/templates/sources.list.j2 b/playbooks/roles/install-podman/templates/sources.list.j2 new file mode 100644 index 0000000000..cc249acda6 --- /dev/null +++ b/playbooks/roles/install-podman/templates/sources.list.j2 @@ -0,0 +1 @@ +deb http://ppa.launchpad.net/projectatomic/ppa/ubuntu {{ ansible_lsb.codename }} main diff --git a/playbooks/service-review-dev.yaml b/playbooks/service-review-dev.yaml new file mode 100644 index 0000000000..eb274834a8 --- /dev/null +++ b/playbooks/service-review-dev.yaml @@ -0,0 +1,9 @@ +- hosts: "review-dev01.openstack.org:!disabled" + name: "Configure gerrit on review-dev01.openstack.org" + roles: + - pip3 + - install-podman + - role: gerrit + gerrit_ssh_rsa_key_contents: "{{ gerrit_dev_ssh_rsa_key_contents }}" + gerrit_ssh_rsa_pubkey_contents: "{{ gerrit_dev_ssh_rsa_pubkey_contents }}" + gerrit_database_config_section: "{{ gerrit_dev_database_config_section }}" diff --git a/playbooks/zuul/run-base-post.yaml b/playbooks/zuul/run-base-post.yaml index 24f8b464df..57380ac970 100644 --- a/playbooks/zuul/run-base-post.yaml +++ b/playbooks/zuul/run-base-post.yaml @@ -16,19 +16,32 @@ - hosts: all tasks: - - name: List containers - command: "docker ps -a --format '{{ '{{ .Names }}' }}'" - register: docker_containers - ignore_errors: true - become: true - - name: Create container log dir file: path: "/var/log/docker" state: directory become: true - - name: Save container logs + - name: List podman containers + command: "podman ps -a --format '{{ '{{ .Names }}' }}'" + register: podman_containers + ignore_errors: true + become: true + + - name: Save podman container logs + loop: "{{ podman_containers.stdout_lines | default([]) }}" + shell: "podman logs {{ item }} &> /var/log/docker/{{ item }}.txt" + args: + executable: /bin/bash + become: true + + - name: List docker containers + command: "docker ps -a --format '{{ '{{ .Names }}' }}'" + register: docker_containers + ignore_errors: true + become: true + + - name: Save docker container logs loop: "{{ docker_containers.stdout_lines | default([]) }}" shell: "docker logs {{ item }} &> /var/log/docker/{{ item }}.txt" args: diff --git a/playbooks/zuul/run-base.yaml b/playbooks/zuul/run-base.yaml index 661e687cb9..1af0eed4c5 100644 --- a/playbooks/zuul/run-base.yaml +++ b/playbooks/zuul/run-base.yaml @@ -80,6 +80,8 @@ - group_vars/gitea-lb.yaml - group_vars/letsencrypt.yaml - group_vars/registry.yaml + - group_vars/review.yaml + - group_vars/review-dev.yaml - group_vars/control-plane-clouds.yaml - group_vars/mirror_opendev.yaml - host_vars/bridge.openstack.org.yaml diff --git a/playbooks/zuul/templates/group_vars/review-dev.yaml.j2 b/playbooks/zuul/templates/group_vars/review-dev.yaml.j2 new file mode 100644 index 0000000000..4b9a212adf --- /dev/null +++ b/playbooks/zuul/templates/group_vars/review-dev.yaml.j2 @@ -0,0 +1,34 @@ +gerrit_dev_ssh_rsa_key_contents: | + -----BEGIN RSA PRIVATE KEY----- + MIIEpQIBAAKCAQEAvqQkJUwEGJgqzmOmj2728ikA3Dgl4mzzRiI5zzzLhCLQktL7 + UZ6hAc+851mUuQ66vciqUToerhRdNWqNlZzY8On/jXUTVdfUVlXupmDfqmtlax9n + Gi8Aayj4h9F3P3iuNQ+eXWVOyFsCmAMPzaYgWgXx2rxcIqSPq5hG+vDB9oXIpg3a + /244vtIZId1/uNnZDb5jHbZLglupynQBIZ12h2XOUiUfxL84EQnwfL2zC9d6eOjv + cYaCYJ+2VrzG972keY8SJEMLLVEd+q2hFYbbQQxLlmrFpx2G6zNc3d6KLnW0xEH+ + b1yEmShcoB8iRRam+IkO+ovoQ5W9FUCmQnWqJQIDAQABAoIBAQCABKeFKDPD9EMi + j0ZlIUXRPfmm6EmAcFs46Hjbkl60H9DiF63OlHBYUBDxZnV5g8ug8CR3IUlC6sfg + u+nR4x7HQMtsSYcvaRzc0R3OOlVYEoBrXA4XRiLI0x15zw593+NUHGXjH8m0v3DR + dZTiK0GkUkOj+EMCvHEB8OMRViVaDjel+TXI6lM2UuexpYLag/u+GotDUQ8sjq4v + kT2FWzrZAGHih98oZ7AflinasGjMBr21lCRq/u3w0ieU4ZPmxpLxz9EUbWS06kQe + W2pafIhDq+4mVtDuhmb87yMMpda+TCBcCRCzA3MGDMGVzQgQvPe49R4EPRWzBWXU + vso8JSzBAoGBAPrDobXukDJ0j2zD3Cw7xCSJy3foU4sdQF5yxeIWox1gfsgkAhn2 + zxmuewdfdh0hZAnZWZ41sJzFrEhrvTV/wFIfIZ2qlMf3q3ZdG8c0CQ6E3blsAF8g + jExgck8mV2kvZItowS8JCdWvNw1zpwNJ8Ae+mMUSMBKbs5hzO8X0V1FxAoGBAMKf + JNjqN/LegvlnfFXMPM+vo39MX2RsukwmTZT6msMi3rNgN3oekXSpOK1Mkftrd/wL + B5Vp9Nl3d3kFu3bTKA+N8bjtokXfN+fF9zPFeLwOfEOEtQlnvzb/XF4LhSGiq7Kg + OP6/4udaa9cr9yLE7jTDoLTiyRP796k4ADGRo8n1AoGBAPad0XsAbPYCJk/ca7tg + 5+zbS6zYYtlM4lJA5BYPF0o77VPd/ecVEOZ772j33EyX2y/If1eWC+SSj3YF52Yn + Brh8/211Jq9nB0z4EuqdZU7PItRJwC/N7czriWAIIC1FO8fTNTKR3Ac4M5daJ2WX + oKWtL8eYtIiIcl867Q0o2XsxAoGAHtJrWHsHb0wz++GavE/DFbUgNInY1aOugV7T + jJN/rQW5tTi4sHtk18/w7OkieWnUr7LjeZM1NreH0T/KJ5BbWNNHA92GhIBMb0VX + 1/gfHdFBdsPuk9W9X61jaHV0mRYVEQ302Mt02OTmDUamNfhwLSUKL3t3EtYlq8P1 + q+P/x30CgYEAiLaGdCtlPy5e35ULD/Ep73kOB1uRVtF4JlVpqZ4CygVoCguSZ3Sd + pHMmNylg7j2NyL/9aLKs1NzdGBxpxVa5A4vgcr1DjoS1cuRVEiQoSkI6D6DCmENA + Pb95AevPUxqqAKNZYsj4yDsXnmbFSHARijPWcpfkCDJmVhMFPObr4OE= + -----END RSA PRIVATE KEY----- +gerrit_dev_ssh_rsa_pubkey_contents: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+pCQlTAQYmCrOY6aPbvbyKQDcOCXibPNGIjnPPMuEItCS0vtRnqEBz7znWZS5Drq9yKpROh6uFF01ao2VnNjw6f+NdRNV19RWVe6mYN+qa2VrH2caLwBrKPiH0Xc/eK41D55dZU7IWwKYAw/NpiBaBfHavFwipI+rmEb68MH2hcimDdr/bji+0hkh3X+42dkNvmMdtkuCW6nKdAEhnXaHZc5SJR/EvzgRCfB8vbML13p46O9xhoJgn7ZWvMb3vaR5jxIkQwstUR36raEVhttBDEuWasWnHYbrM1zd3ooudbTEQf5vXISZKFygHyJFFqb4iQ76i+hDlb0VQKZCdaol gerrit-code-review@829f141b0fa5 +gerrit_dev_database_config_section: | + [database] + type = h2 + database = tmp/ReviewDB +gerrit_run_init: true diff --git a/playbooks/zuul/templates/group_vars/review.yaml.j2 b/playbooks/zuul/templates/group_vars/review.yaml.j2 new file mode 100644 index 0000000000..0d742b678f --- /dev/null +++ b/playbooks/zuul/templates/group_vars/review.yaml.j2 @@ -0,0 +1,29 @@ +gerrit_ssh_rsa_key_contents: | + -----BEGIN RSA PRIVATE KEY----- + MIIEpQIBAAKCAQEAvqQkJUwEGJgqzmOmj2728ikA3Dgl4mzzRiI5zzzLhCLQktL7 + UZ6hAc+851mUuQ66vciqUToerhRdNWqNlZzY8On/jXUTVdfUVlXupmDfqmtlax9n + Gi8Aayj4h9F3P3iuNQ+eXWVOyFsCmAMPzaYgWgXx2rxcIqSPq5hG+vDB9oXIpg3a + /244vtIZId1/uNnZDb5jHbZLglupynQBIZ12h2XOUiUfxL84EQnwfL2zC9d6eOjv + cYaCYJ+2VrzG972keY8SJEMLLVEd+q2hFYbbQQxLlmrFpx2G6zNc3d6KLnW0xEH+ + b1yEmShcoB8iRRam+IkO+ovoQ5W9FUCmQnWqJQIDAQABAoIBAQCABKeFKDPD9EMi + j0ZlIUXRPfmm6EmAcFs46Hjbkl60H9DiF63OlHBYUBDxZnV5g8ug8CR3IUlC6sfg + u+nR4x7HQMtsSYcvaRzc0R3OOlVYEoBrXA4XRiLI0x15zw593+NUHGXjH8m0v3DR + dZTiK0GkUkOj+EMCvHEB8OMRViVaDjel+TXI6lM2UuexpYLag/u+GotDUQ8sjq4v + kT2FWzrZAGHih98oZ7AflinasGjMBr21lCRq/u3w0ieU4ZPmxpLxz9EUbWS06kQe + W2pafIhDq+4mVtDuhmb87yMMpda+TCBcCRCzA3MGDMGVzQgQvPe49R4EPRWzBWXU + vso8JSzBAoGBAPrDobXukDJ0j2zD3Cw7xCSJy3foU4sdQF5yxeIWox1gfsgkAhn2 + zxmuewdfdh0hZAnZWZ41sJzFrEhrvTV/wFIfIZ2qlMf3q3ZdG8c0CQ6E3blsAF8g + jExgck8mV2kvZItowS8JCdWvNw1zpwNJ8Ae+mMUSMBKbs5hzO8X0V1FxAoGBAMKf + JNjqN/LegvlnfFXMPM+vo39MX2RsukwmTZT6msMi3rNgN3oekXSpOK1Mkftrd/wL + B5Vp9Nl3d3kFu3bTKA+N8bjtokXfN+fF9zPFeLwOfEOEtQlnvzb/XF4LhSGiq7Kg + OP6/4udaa9cr9yLE7jTDoLTiyRP796k4ADGRo8n1AoGBAPad0XsAbPYCJk/ca7tg + 5+zbS6zYYtlM4lJA5BYPF0o77VPd/ecVEOZ772j33EyX2y/If1eWC+SSj3YF52Yn + Brh8/211Jq9nB0z4EuqdZU7PItRJwC/N7czriWAIIC1FO8fTNTKR3Ac4M5daJ2WX + oKWtL8eYtIiIcl867Q0o2XsxAoGAHtJrWHsHb0wz++GavE/DFbUgNInY1aOugV7T + jJN/rQW5tTi4sHtk18/w7OkieWnUr7LjeZM1NreH0T/KJ5BbWNNHA92GhIBMb0VX + 1/gfHdFBdsPuk9W9X61jaHV0mRYVEQ302Mt02OTmDUamNfhwLSUKL3t3EtYlq8P1 + q+P/x30CgYEAiLaGdCtlPy5e35ULD/Ep73kOB1uRVtF4JlVpqZ4CygVoCguSZ3Sd + pHMmNylg7j2NyL/9aLKs1NzdGBxpxVa5A4vgcr1DjoS1cuRVEiQoSkI6D6DCmENA + Pb95AevPUxqqAKNZYsj4yDsXnmbFSHARijPWcpfkCDJmVhMFPObr4OE= + -----END RSA PRIVATE KEY----- +gerrit_ssh_rsa_pubkey_contents: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+pCQlTAQYmCrOY6aPbvbyKQDcOCXibPNGIjnPPMuEItCS0vtRnqEBz7znWZS5Drq9yKpROh6uFF01ao2VnNjw6f+NdRNV19RWVe6mYN+qa2VrH2caLwBrKPiH0Xc/eK41D55dZU7IWwKYAw/NpiBaBfHavFwipI+rmEb68MH2hcimDdr/bji+0hkh3X+42dkNvmMdtkuCW6nKdAEhnXaHZc5SJR/EvzgRCfB8vbML13p46O9xhoJgn7ZWvMb3vaR5jxIkQwstUR36raEVhttBDEuWasWnHYbrM1zd3ooudbTEQf5vXISZKFygHyJFFqb4iQ76i+hDlb0VQKZCdaol gerrit-code-review@829f141b0fa5 diff --git a/testinfra/test_gerrit.py b/testinfra/test_gerrit.py new file mode 100644 index 0000000000..7fb3d1a1cf --- /dev/null +++ b/testinfra/test_gerrit.py @@ -0,0 +1,21 @@ +# Copyright 2018 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +testinfra_hosts = ['review-dev01.openstack.org'] + + +def test_gerrit_listening(host): + gerrit_web = host.socket("tcp://:::8081") + assert gerrit_web.is_listening