summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty Taylor <mordred@inaugust.com>2020-03-04 08:56:08 -0600
committerMonty Taylor <mordred@inaugust.com>2020-03-14 17:15:46 -0500
commit8c47b67e8337c05a6e14d717452a4438aa17167f (patch)
treec05dca5bafa10e64c1f484db0a3629899e3c3a89
parent0699df95c8a6c177940ef2abbc97f21ad4b86ebf (diff)
downloadpython-openstackclient-8c47b67e8337c05a6e14d717452a4438aa17167f.tar.gz
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
-rw-r--r--.zuul.yaml58
-rw-r--r--Dockerfile26
-rwxr-xr-xexamples/openstack.sh33
3 files changed, 117 insertions, 0 deletions
diff --git a/.zuul.yaml b/.zuul.yaml
index 15f719c3..26ca146f 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 00000000..9ff8084c
--- /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 00000000..aa35acfe
--- /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 $@