{"id":14979012,"url":"https://github.com/engapa/osc-docker-builder","last_synced_at":"2026-02-17T06:31:43.731Z","repository":{"id":57449676,"uuid":"75775013","full_name":"engapa/osc-docker-builder","owner":"engapa","description":"Docker Image builder for Openstack clients","archived":false,"fork":false,"pushed_at":"2017-02-14T12:29:04.000Z","size":49,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-20T04:44:02.799Z","etag":null,"topics":["docker-container","docker-image","docker-image-builder","openstack-clients","python"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/engapa.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-12-06T21:55:40.000Z","updated_at":"2018-06-05T17:54:55.000Z","dependencies_parsed_at":"2022-09-14T10:51:54.129Z","dependency_job_id":null,"html_url":"https://github.com/engapa/osc-docker-builder","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/engapa/osc-docker-builder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engapa%2Fosc-docker-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engapa%2Fosc-docker-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engapa%2Fosc-docker-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engapa%2Fosc-docker-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/engapa","download_url":"https://codeload.github.com/engapa/osc-docker-builder/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engapa%2Fosc-docker-builder/sbom","scorecard":{"id":377224,"data":{"date":"2025-08-11","repo":{"name":"github.com/engapa/osc-docker-builder","commit":"ed4ae02b84c743a9b884921339aac6a76e5cc756"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.8,"checks":[{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: osc_docker_builder/templates/Dockerfile.j2:1","Warn: pipCommand not pinned by hash: osc_docker_builder/templates/Dockerfile.j2:8","Warn: pipCommand not pinned by hash: osc_docker_builder/templates/Dockerfile.j2:9","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"12 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2019-217 / GHSA-462w-v97r-4m45","Warn: Project is vulnerable to: PYSEC-2014-8 / GHSA-8r7q-cvjq-x353","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: PYSEC-2014-82 / GHSA-fqh9-2qgg-h84h","Warn: Project is vulnerable to: PYSEC-2021-66 / GHSA-g3rq-g295-4j3m","Warn: Project is vulnerable to: GHSA-h5c8-rqwp-cp95","Warn: Project is vulnerable to: GHSA-h75v-3vvj-5mfj","Warn: Project is vulnerable to: PYSEC-2019-220 / GHSA-hj2j-77xm-mc5v","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: PYSEC-2021-142 / GHSA-8q59-q68h-6hv4","Warn: Project is vulnerable to: PYSEC-2018-49 / GHSA-rprw-h62v-c2w7","Warn: Project is vulnerable to: PYSEC-2022-238 / GHSA-h3qr-fjhm-jphw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T14:32:42.061Z","repository_id":57449676,"created_at":"2025-08-18T14:32:42.061Z","updated_at":"2025-08-18T14:32:42.061Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29535970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T05:00:25.817Z","status":"ssl_error","status_checked_at":"2026-02-17T04:57:16.126Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-container","docker-image","docker-image-builder","openstack-clients","python"],"created_at":"2024-09-24T13:58:54.775Z","updated_at":"2026-02-17T06:31:43.694Z","avatar_url":"https://github.com/engapa.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Docker image builder for Openstack clients (aka OSCs docker builder)\n====================================================================\n\n|Latest Version| |Downloads| |Code Issues| |codecov| |CircleCI|\n\nA lot of people need install/update/upgrade/downgrade any Openstack\npython client in any time. Thanks to Docker containers it is easy to get\nan isolated environment with all Openstack clients of specific upstream\nversions that you wish.\n\nPre-requisites\n==============\n\nList of prerequisites :\n\n-  docker image: Ensure that there is an official python docker image\n   for the provided python version parameter.\n-  tox : All clients are using tox, and python version parameter will be\n   matched in env list.\n-  common release: All clients have to have the same release, in other\n   cases you must specify a different release (by property 'release' in\n   the osc.yml file) to override global release parameter. For example,\n   in the osc.yml you may see that gnocchi client has 'master' release\n   instead of 'stable/newton'.\n\nBuild a docker image with OSCs\n==============================\n\nThis module can be installed by pip:\n\n::\n\n    $ pip install osc-docker-builder\n\nBest way to get help about the command is :\n\n::\n\n    osc-builder --help\n    usage: ocs [-h] [-bp BUILD_PATH] [-f CONFIG_FILE] [-pv PYTHON_VERSION]\n               [-r RELEASE] [-c CLIENTS] [-sf] [-v]\n\n    Build a docker image with all Openstack clients that you want for a specific\n    upstream branch and python version\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      -bp BUILD_PATH, --build-path BUILD_PATH\n                            The build path where files are written.\n      -f CONFIG_FILE, --config-file CONFIG_FILE\n                            A YAML config file.\n      -pv PYTHON_VERSION, --python-version PYTHON_VERSION\n                            Python version for docker image\n                            base(https://hub.docker.com/_/python/).For example :\n                            2.7, 3.5.2\n      -r RELEASE, --release RELEASE\n                            Upstream release.\n      -c CLIENTS, --clients CLIENTS\n                            Provide all openstack python clients that you want.By\n                            defaults only python-openstackclient will be\n                            installed.\n      -sf, --skip-fails     Skip failures and create the image.\n      -v, --verbose         Show details.\n\nReady for action ?, suppose that you want to create a docker image for\nthese python version and Openstack clients:\n\n::\n\n    osc-builder --python-version 3.4 --clients openstack --clients heat --release stable/newton --build-path /tmp/osc-docker-builder\n\nI recommend using a config file (which could be controlled by a version\ncontrol system):\n\n::\n\n    osc-builder -f osc.yml\n\nThis command can be launched form the source code. The main function\nwill be found in osc\\_docker\\_builder package :\n\n::\n\n    $ osc.py -f osc.yml -bp /tmp/osc-builder\n\nAs command execution output we have a docker image ready to be used.\nPush your images to your private registry or use my images at \"engapa\"\naccount in dockerhub.com\n\nRunning and using docker container\n==================================\n\nFor example, run a container based on latest image for python client 2.7\nand release stable/newton :\n\n::\n\n    $ docker run -it -d --name osc engapa/osc:2.7-stable_newton-latest\n    1f395d7273b99b734725fcbab4ebd05082f21978e0c4e3104cc8332c7430920d\n    $ docker ps\n    CONTAINER ID   IMAGE                               COMMAND     CREATED        STATUS       PORTS  NAMES\n    1f395d7273b9   engapa/osc:2.7-stable_newton-latest \"/bin/bash\" 2 seconds ago  Up 3 seconds        osc\n\nFor example let's view the version of the Heat client installed in this\ncontainer:\n\n::\n\n    $ docker exec -it 1f395d7273b9 /bin/bash -c \"heat --version\"\n    1.5.0\n\nIf you prefer operate within the container :\n\n::\n\n    $ docker attach 1f395d7273b9\n    root@1f395d7273b9:# pip list --format columns | grep -i \"^python-.*client\"\n    python-openstackclient         3.2.1.dev10 /src/python-openstackclient\n    python-saharaclient            0.18.1.dev1 /src/python-saharaclient\n    python-searchlightclient       1.0.1.dev1  /src/python-searchlightclient\n    python-senlinclient            1.0.1.dev14 /src/python-senlinclient\n    python-solumclient             2.1.2.dev2  /src/python-solumclient\n    python-swiftclient             3.1.1.dev1  /src/python-swiftclient\n    ...\n    root@1f395d7273b9:/#\n\nIf you want to update all python client versions (if provided release\nwas a branch , e.g. : master) just execute this command within the\ncontainer:\n\n::\n\n    $ docker attach 1f395d7273b9\n    root@1f395d7273b9:/root# pip install -U -r requirements.txt\n\nAn interesting module of openstack is 'os-client-config', it aims you to\nuse a cloud configuration file shared by volume mount point (at \"/root\",\n\"/root/.config/openstack\" or \"/etc/openstack\" directory):\n\n::\n\n    $ cat \u003c\u003c EOF \u003e cloud.yml\n    \u003e clouds:\n    \u003e   spaincloud:\n    \u003e     auth:\n    \u003e       username: engapa\n    \u003e       password: XXXXXXXXX\n    \u003e       project_name: OSOOS\n    \u003e       auth_url: 'https://spaincloud.com:5001/v2.0'\n    \u003e     region_name: SpainSalamanca\n    \u003e     dns_api_version: 1\n    \u003e EOF\n    $ docker run -it --name osc -v $(pwd)/clouds.yml:/root/.config/openstack/clouds.yml engapa/osc:2.7-stable_newton-latest\n    root@1536ac361c6c:~# openstack --os-cloud spaincloud server list\n    ...\n\nDeveloper mode\n==============\n\nMain tasks with code are managed by\n`tox \u003chttps://tox.readthedocs.io/en/latest/\u003e`__\n\nTo launch tests just type:\n\n::\n\n    $ tox -r\n    ...\n\n    Name                        Stmts   Miss  Cover\n    -----------------------------------------------\n    osc_docker_builder.py           0      0   100%\n    osc_docker_builder/osc.py     129    102    70%\n    -----------------------------------------------\n    TOTAL                         129    102    70%\n    ----------------------------------------------------------------------\n    Ran 5 tests in 0.097s\n\n    OK\n    ___________________________________________________________________________ summary ____________________________________________________________________________\n      pep8: commands succeeded\n      py27: commands succeeded\n      py35: commands succeeded\n      congratulations :)\n\nLoad the virtualenv and build a docker image :\n\n::\n\n    $ source .tox/py27/bin/activate\n    $(py27) osc-builder -f osc.yml\n\nAuthor\n======\n\nEnrique Garcia Pablos engapa@gmail.com\n\n.. |Latest Version| image:: https://img.shields.io/pypi/v/osc-docker-builder.svg\n   :target: https://pypi.python.org/pypi/osc-docker-builder/\n.. |Downloads| image:: https://img.shields.io/pypi/dm/osc-docker-builder.svg\n   :target: https://pypi.python.org/pypi/osc-docker-builder/\n.. |Code Issues| image:: https://www.quantifiedcode.com/api/v1/project/1a96eb463beb4512a203762481b0c1ab/badge.svg\n   :target: https://www.quantifiedcode.com/app/project/1a96eb463beb4512a203762481b0c1ab\n.. |codecov| image:: https://codecov.io/gh/engapa/osc-docker-builder/branch/master/graph/badge.svg\n   :target: https://codecov.io/gh/engapa/osc-docker-builder\n.. |CircleCI| image:: https://circleci.com/gh/engapa/osc-docker-builder/tree/master.svg?style=svg\n   :target: https://circleci.com/gh/engapa/osc-docker-builder/tree/master","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fengapa%2Fosc-docker-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fengapa%2Fosc-docker-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fengapa%2Fosc-docker-builder/lists"}