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
This commit is contained in:
Monty Taylor 2020-03-04 08:56:08 -06:00
parent 0699df95c8
commit 8c47b67e83
3 changed files with 117 additions and 0 deletions

View File

@ -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

26
Dockerfile Normal file
View File

@ -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"]

33
examples/openstack.sh Executable file
View File

@ -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 $@