From 8c47b67e8337c05a6e14d717452a4438aa17167f Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Wed, 4 Mar 2020 08:56:08 -0600 Subject: [PATCH] Build utility image for using osc python-openstackclient currently has a non-zero number of dependencies, so for admins who would like to run it on laptops or similar it can get tricky. In opendev, for instance, admins have it installed into a venv on a jump host, but it's really wonky to keep up with. Use the opendev/python-builder opendev/python-base pair to make a minimal image that contains an install of python-openstackclient and publish it to the osclient org on dockerhub. There is an overall policy against having binary artifacts such as this appear to be official deliverables of the OpenStack project, which this is not. It's also only publishing images based on master, so no warranties should be implied. But if this makes life easier for a user somewhere, cool. Change-Id: I9a8bfc27c127e92b6856cb6a3e45b32c818db16c --- .zuul.yaml | 58 +++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 26 +++++++++++++++++++ examples/openstack.sh | 33 ++++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 Dockerfile create mode 100755 examples/openstack.sh diff --git a/.zuul.yaml b/.zuul.yaml index 15f719c35..26ca146ff 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -152,6 +152,59 @@ tox_envlist: functional tox_install_siblings: true +- secret: + name: osc-dockerhub + data: + username: osclientzuul + password: !encrypted/pkcs1-oaep + - qQ0O7bXUWBhkygjSKcPHogWvR2ax67EgHZcYd27zgg6KvpdK9GsNTRTIeD5yeBb9Dzr/K + RcAf+0pQT3fRIsKyEx2odHNevGpePjmUZENd5vHTIvTuZWq+X5ehpXgkEYvw3jwYJg78F + ids1igEaHsE86OMHjWauyc1QUzYfwkf+ziK7TIOZ6RpVRHgq5Bf9S+Hz/QnVdxOLaIlO0 + VC/bchKX/36vOQKd20KkNhBQAnUlDBQWMnZocvZKZYtkDs2w2vqlnUPRlzEppBWm5Yae6 + 5acyIHEEAIbECd/wC/OT8YndoeOUiqOZY0uSWtv4JgEKl6AexP+54VxPrsz7LayRMDJ4B + jVCZK6y1sss9mF6mNXvZipPEVgklGcGM76GfGdqTeuQ3i8CqaKmCTBo1IKlEmcslXR/5T + vjibWzvNHPpFcpYEEM6GLGg2K6nja1MCE1s/L76pN3FtxCZHdl8rZXU+mJH37uQk9zvdR + Y6qtWJ+3o5sbgYfjgdp/nPs1xXMUvuG83qykuzYgtOYvlEw51eqwd2SPXd3op/KApAhKR + Zlu8fBUkm/FyXToOpCl0s/eR4w1d+Spv0A+UhrS5pmV18+NlpNs0Krj5wS9KWMUIec0ae + opgPkQrFfj/zD45rrIUJRzT+alZlZeK+WQfeNOXt2i6MLtOPesHMukTc6ksXtA= + +- job: + name: osc-build-image + parent: opendev-build-docker-image + description: Build Docker images. + allowed-projects: openstack/python-openstackclient + requires: + - python-builder-container-image + - python-base-container-image + provides: osc-container-image + vars: &osc_image_vars + docker_images: + - context: . + repository: osclient/python-openstackclient + +- job: + name: osc-upload-image + parent: opendev-upload-docker-image + description: Build Docker images and upload to Docker Hub. + allowed-projects: openstack/python-openstackclient + requires: + - python-builder-container-image + - python-base-container-image + provides: osc-container-image + vars: *osc_image_vars + secrets: &osc_image_secrets + - name: docker_credentials + secret: osc-dockerhub + pass-to-parent: true + +- job: + name: osc-promote-image + parent: opendev-promote-docker-image + allowed-projects: openstack/python-openstackclient + description: Promote previously uploaded Docker images. + vars: *osc_image_vars + secrets: *osc_image_secrets + - project-template: name: osc-tox-unit-tips check: @@ -174,6 +227,7 @@ - lib-forward-testing-python3 check: jobs: + - osc-build-image - osc-functional-devstack # - osc-functional-devstack-n-net: # voting: false @@ -187,4 +241,8 @@ branches: ^(?!stable) gate: jobs: + - osc-upload-image - osc-functional-devstack + promote: + jobs: + - osc-promote-image diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..9ff8084c3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +# Copyright (c) 2020 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. + +FROM docker.io/opendevorg/python-builder as builder + +COPY . /tmp/src +RUN assemble + +FROM docker.io/opendevorg/python-base + +COPY --from=builder /output/ /output +RUN /output/install-from-bindep + +CMD ["/usr/local/bin/openstack"] diff --git a/examples/openstack.sh b/examples/openstack.sh new file mode 100755 index 000000000..aa35acfeb --- /dev/null +++ b/examples/openstack.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# Copyright (c) 2020 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. + +# This is an example script that can be installed somewhere, such as +# /usr/local/bin/openstack, that will allow using python-openstackclient +# via the container image instead of via a direct installation. It +# bind-mounts in clouds.yaml files, so it should behave like a directly +# installed osc. + +if type podman 2>/dev/null ; then + RUNTIME=podman +else + RUNTIME=docker +fi + +exec $RUNTIME run -it --rm \ + -v/etc/openstack:/etc/openstack \ + -v$HOME/.config/openstack:/root/.config/openstack \ + osclient/openstackclient \ + openstack $@