diff options
Diffstat (limited to 'collections-debian-merged/ansible_collections/community/okd/ci')
3 files changed, 371 insertions, 0 deletions
diff --git a/collections-debian-merged/ansible_collections/community/okd/ci/Dockerfile b/collections-debian-merged/ansible_collections/community/okd/ci/Dockerfile new file mode 100644 index 00000000..37227966 --- /dev/null +++ b/collections-debian-merged/ansible_collections/community/okd/ci/Dockerfile @@ -0,0 +1,40 @@ +FROM registry.access.redhat.com/ubi8/ubi + +ENV OPERATOR=/usr/local/bin/ansible-operator \ + USER_UID=1001 \ + USER_NAME=ansible-operator\ + HOME=/opt/ansible \ + ANSIBLE_LOCAL_TMP=/opt/ansible/tmp + +RUN yum install -y \ + glibc-langpack-en \ + git \ + make \ + python3 \ + python3-devel \ + python3-pip \ + python3-setuptools \ + && pip3 install --no-cache-dir --upgrade setuptools pip \ + && pip3 install --no-cache-dir \ + openshift \ + ansible==2.9.* \ + molecule \ + && yum clean all \ + && rm -rf $HOME/.cache \ + && curl -L https://github.com/openshift/okd/releases/download/4.5.0-0.okd-2020-08-12-020541/openshift-client-linux-4.5.0-0.okd-2020-08-12-020541.tar.gz | tar -xz -C /usr/local/bin + # TODO: Is there a better way to install this client in ubi8? + +COPY . /opt/ansible + +WORKDIR /opt/ansible + +RUN echo "${USER_NAME}:x:${USER_UID}:0:${USER_NAME} user:${HOME}:/sbin/nologin" >> /etc/passwd \ + && mkdir -p "${HOME}/.ansible/tmp" \ + && chown -R "${USER_UID}:0" "${HOME}" \ + && chmod -R ug+rwX "${HOME}" \ + && mkdir /go \ + && chown -R "${USER_UID}:0" /go \ + && chmod -R ug+rwX /go + + +USER ${USER_UID} diff --git a/collections-debian-merged/ansible_collections/community/okd/ci/downstream.sh b/collections-debian-merged/ansible_collections/community/okd/ci/downstream.sh new file mode 100755 index 00000000..eaa0e37a --- /dev/null +++ b/collections-debian-merged/ansible_collections/community/okd/ci/downstream.sh @@ -0,0 +1,245 @@ +#!/bin/bash -eu + +# Script to dual-home the upstream and downstream Collection in a single repo +# +# This script will build or test a downstream collection, removing any +# upstream components that will not ship in the downstream release +# +# NOTES: +# - All functions are prefixed with f_ so it's obvious where they come +# from when in use throughout the script + +DOWNSTREAM_VERSION="1.0.0" +KEEP_DOWNSTREAM_TMPDIR="${KEEP_DOWNSTREAM_TMPDIR:-''}" +_build_dir="" + +f_log_info() +{ + printf "%s:LOG:INFO: %s\n" "${0}" "${1}" +} + +f_show_help() +{ + printf "Usage: downstream.sh [OPTION]\n" + printf "\t-s\t\tCreate a temporary downstream release and perform sanity tests.\n" + printf "\t-i\t\tCreate a temporary downstream release and perform integration tests.\n" + printf "\t-m\t\tCreate a temporary downstream release and perform molecule tests.\n" + printf "\t-b\t\tCreate a downstream release and stage for release.\n" + printf "\t-r\t\tCreate a downstream release and publish release.\n" +} + +f_text_sub() +{ + # Switch FQCN and dependent components + sed -i "s/community-okd/redhat-openshift/" "${_build_dir}/Makefile" + sed -i "s/community\/okd/redhat\/openshift/" "${_build_dir}/Makefile" + sed -i "s/^VERSION\:/VERSION: ${DOWNSTREAM_VERSION}/" "${_build_dir}/Makefile" + sed -i "s/name\:.*$/name: openshift/" "${_build_dir}/galaxy.yml" + sed -i "s/namespace\:.*$/namespace: redhat/" "${_build_dir}/galaxy.yml" + sed -i "s/Kubernetes/OpenShift/g" "${_build_dir}/galaxy.yml" + sed -i "s/^version\:.*$/version: ${DOWNSTREAM_VERSION}/" "${_build_dir}/galaxy.yml" + find ${_build_dir} -type f -exec sed -i "s/community\.kubernetes/kubernetes\.core/g" {} \; + find ${_build_dir} -type f -exec sed -i "s/community\.okd/redhat\.openshift/g" {} \; +} + +f_prep() +{ + f_log_info "${FUNCNAME[0]}" + # Array of excluded files from downstream build (relative path) + _file_exclude=( + ) + + # Files to copy downstream (relative repo root dir path) + _file_manifest=( + CHANGELOG.rst + galaxy.yml + LICENSE + README.md + Makefile + setup.cfg + .yamllint + ) + + # Directories to recursively copy downstream (relative repo root dir path) + _dir_manifest=( + changelogs + ci + meta + molecule + plugins + tests + ) + + + # Temp build dir + _tmp_dir=$(mktemp -d) + _build_dir="${_tmp_dir}/ansible_collections/redhat/openshift" + mkdir -p "${_build_dir}" +} + + +f_cleanup() +{ + f_log_info "${FUNCNAME[0]}" + if [[ -n "${_build_dir}" ]]; then + if [[ -n ${KEEP_DOWNSTREAM_TMPDIR} ]]; then + if [[ -d ${_build_dir} ]]; then + rm -fr "${_build_dir}" + fi + fi + else + exit 0 + fi +} + +# Exit and handle cleanup processes if needed +f_exit() +{ + f_cleanup + exit "$0" +} + +f_create_collection_dir_structure() +{ + f_log_info "${FUNCNAME[0]}" + # Create the Collection + for f_name in "${_file_manifest[@]}"; + do + cp "./${f_name}" "${_build_dir}/${f_name}" + done + for d_name in "${_dir_manifest[@]}"; + do + cp -r "./${d_name}" "${_build_dir}/${d_name}" + done + for exclude_file in "${_file_exclude[@]}"; + do + if [[ -f "${_build_dir}/${exclude_file}" ]]; then + rm -f "${_build_dir}/${exclude_file}" + fi + done +} + +f_install_kubernetes_core_from_src() +{ + local community_k8s_tmpdir="${_tmp_dir}/community.kubernetes" + local install_collections_dir="${_tmp_dir}/ansible_collections" + mkdir -p "${community_k8s_tmpdir}" + pushd "${_tmp_dir}" + # curl -L \ + # https://github.com/ansible-collections/community.kubernetes/archive/main.tar.gz \ + # | tar -xz -C "${community_k8s_tmpdir}" --strip-components 1 + # pushd "${community_k8s_tmpdir}" + # make downstream-build + # ansible-galaxy collection install -p "${install_collections_dir}" "${community_k8s_tmpdir}"/kubernetes-core-*.tar.gz + # popd + #popd + git clone https://github.com/ansible-collections/community.kubernetes "${community_k8s_tmpdir}" + pushd "${community_k8s_tmpdir}" + make downstream-build + ansible-galaxy collection install -p "${install_collections_dir}" "${community_k8s_tmpdir}"/kubernetes-core-*.tar.gz + popd + popd +} + + +f_copy_collection_to_working_dir() +{ + f_log_info "${FUNCNAME[0]}" + # Copy the Collection build result into original working dir + cp "${_build_dir}"/*.tar.gz ./ +} + +f_common_steps() +{ + f_log_info "${FUNCNAME[0]}" + f_prep + f_create_collection_dir_structure + f_text_sub +} + +# Run the test sanity scanerio +f_test_sanity_option() +{ + f_log_info "${FUNCNAME[0]}" + f_common_steps + f_install_kubernetes_core_from_src + pushd "${_build_dir}" || return + ansible-galaxy collection build + f_log_info "SANITY TEST PWD: ${PWD}" + ## Can't do this because the upstream community.kubernetes dependency logic + ## is bound as a Makefile dep to the test-sanity target + #SANITY_TEST_ARGS="--docker --color --python 3.6" make test-sanity + # Run tests in docker if available, venv otherwise + if command -v docker &> /dev/null + then + ansible-test sanity --docker -v --exclude ci/ --color --python 3.6 + else + ansible-test sanity --venv -v --exclude ci/ --color --python 3.6 + fi + popd || return + f_cleanup +} + +# Run the test integration +f_test_integration_option() +{ + f_log_info "${FUNCNAME[0]}" + f_common_steps + f_install_kubernetes_core_from_src + pushd "${_build_dir}" || return + f_log_info "INTEGRATION TEST WD: ${PWD}" + OVERRIDE_COLLECTION_PATH="${_tmp_dir}" molecule test + popd || return + f_cleanup +} + +# Run the build scanerio +f_build_option() +{ + f_log_info "${FUNCNAME[0]}" + f_common_steps + pushd "${_build_dir}" || return + f_log_info "BUILD WD: ${PWD}" + # FIXME + # This doesn't work because we end up either recursively curl'ing + # community.kubernetes and redoing the text replacement over and over + # + # make build + ansible-galaxy collection build + + popd || return + f_copy_collection_to_working_dir + f_cleanup +} + +# If no options are passed, display usage and exit +if [[ "${#}" -eq "0" ]]; then + f_show_help + f_exit 0 +fi + +# Handle options +while getopts ":sirb" option +do + case $option in + s) + f_test_sanity_option + ;; + i) + f_test_integration_option + ;; + r) + f_release_option + ;; + b) + f_build_option + ;; + *) + printf "ERROR: Unimplemented option chosen.\n" + f_show_help + f_exit 1 + ;; # Default. + esac +done + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/collections-debian-merged/ansible_collections/community/okd/ci/incluster_integration.sh b/collections-debian-merged/ansible_collections/community/okd/ci/incluster_integration.sh new file mode 100755 index 00000000..88212a26 --- /dev/null +++ b/collections-debian-merged/ansible_collections/community/okd/ci/incluster_integration.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +set -x + +NAMESPACE=${NAMESPACE:-default} + +# IMAGE_FORMAT is in the form $registry/$org/$image:$$component, ie +# quay.io/openshift/release:$component +# To test with your own image, build and push the test image +# (using the Dockerfile in ci/Dockerfile) +# and set the IMAGE_FORMAT environment variable so that it properly +# resolves to your image. For example, quay.io/mynamespace/$component +# would resolve to quay.io/mynamespace/molecule-test-runner +component='molecule-test-runner' +eval IMAGE=$IMAGE_FORMAT + +PULL_POLICY=${PULL_POLICY:-IfNotPresent} + +if ! oc get namespace $NAMESPACE +then + oc create namespace $NAMESPACE +fi + +oc project $NAMESPACE +oc adm policy add-cluster-role-to-user cluster-admin -z default +oc adm policy who-can create projectrequests + +echo "Deleting test job if it exists" +oc delete job molecule-integration-test --wait --ignore-not-found + +echo "Creating molecule test job" +cat << EOF | oc create -f - +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: molecule-integration-test +spec: + template: + spec: + containers: + - name: test-runner + image: ${IMAGE} + imagePullPolicy: ${PULL_POLICY} + command: + - make + - test-integration + restartPolicy: Never + backoffLimit: 2 + completions: 1 + parallelism: 1 +EOF + +function check_success { + oc wait --for=condition=complete job/molecule-integration-test --timeout 5s -n $NAMESPACE \ + && oc logs job/molecule-integration-test \ + && echo "Molecule integration tests ran successfully" \ + && return 0 + return 1 +} + +function check_failure { + oc wait --for=condition=failed job/molecule-integration-test --timeout 5s -n $NAMESPACE \ + && oc logs job/molecule-integration-test \ + && echo "Molecule integration tests failed, see logs for more information..." \ + && return 0 + return 1 +} + +runtime="15 minute" +endtime=$(date -ud "$runtime" +%s) + +echo "Waiting for test job to complete" +while [[ $(date -u +%s) -le $endtime ]] +do + if check_success + then + exit 0 + elif check_failure + then + exit 1 + fi + sleep 10 +done + +exit 1 |