diff --git a/roles/copr/backend/files/provision/copr-rh-subscribe.sh b/roles/copr/backend/files/provision/copr-rh-subscribe.sh new file mode 100755 index 0000000000..5538001740 --- /dev/null +++ b/roles/copr/backend/files/provision/copr-rh-subscribe.sh @@ -0,0 +1,83 @@ +#! /bin/bash + +die() +{ + echo >&2 "ERROR: $*" && exit 1 +} + +show_help() +{ +cat <&2 +Usage: $0 --pool-id POOL_ID --user USER --pass PASS --system NAME +EOHELP + +test -z "$1" || exit "$1" +} + +# handle no arguments +test ${#@} -eq 0 && show_help 1 + +ARGS=$(getopt -o "h" -l "pool-id:,user:,pass:,system:,help" -n "getopt" -- "$@") \ + || show_help 1 +eval set -- "$ARGS" + +option_variable() +{ + # Function to convert '--some-option' to '$opt_some_option". + opt=$1 + opt=${1##--} + opt=${opt##-} + opt=${opt//-/_} + option_variable_result=opt_$opt +} + +opt_system= +opt_user= +opt_pass= +opt_pool_id= + +while true; do + case $1 in + -h|--help) + show_help 0 + ;; + + --pool-id|--user|--pass|--system) + option_variable "$1" + eval "$option_variable_result=\$2" + shift 2 + ;; + + --) shift; break;; # end + *) echo "programmer mistake ($1)" >&2; exit 1;; + esac +done + +set -x +provided=true + +for i in system user pass pool_id; do + varname=opt_$i + if eval 'test -z "$'"$varname"'"'; then + provided=false + echo >&2 "$varname required" + fi +done +$provided || die "some options missing" + +try_indefinitely() +{ + cmd=( "$@" ) + while :; do + if "${cmd[@]}"; then + break + fi + sleep 5 + done +} + +try_indefinitely subscription-manager register --force \ + --username "$opt_user" \ + --password "$opt_pass" \ + --name "$opt_system" +try_indefinitely subscription-manager attach --pool "$opt_pool_id" diff --git a/roles/copr/backend/files/provision/provision_builder_tasks.yml b/roles/copr/backend/files/provision/provision_builder_tasks.yml index 9f97404f60..df9f9ef2f9 100644 --- a/roles/copr/backend/files/provision/provision_builder_tasks.yml +++ b/roles/copr/backend/files/provision/provision_builder_tasks.yml @@ -86,30 +86,20 @@ # subscription-manager by default. when: "'subscription-manager' not in ansible_facts.packages" +- name: install the subscription-manager script + copy: + src: copr-rh-subscribe.sh + dest: /usr/local/bin/copr-rh-subscribe.sh + - name: Activate Red Hat Subscription - community.general.redhat_subscription: - state: present - username: copr-team - force_register: true - password: "{{ copr_red_hat_subscription_password }}" - consumer_name: "{{ lookup('env', 'RESALLOC_NAME') | default('unknown-builder') }}" - server_hostname: subscription.rhsm.redhat.com - pool_ids: - - "8a85f9a17c71102f017ce611251c770f" - when: - - prepare_base_image is not defined - - copr_red_hat_subscription_password is defined - tags: - - red_hat_subscription - ignore_errors: true - register: subscription - -- name: Cleanup subscription before failure - shell: subscription-manager unregister - when: subscription.failed - -- fail: msg="Could not subscribe" - when: subscription.failed + shell: + cmd: > + /usr/local/bin/copr-rh-subscribe.sh \ + --pool-id 8a85f9a17c71102f017ce611251c770f \ + --user copr-team \ + --pass "{{ copr_red_hat_subscription_password }}" \ + --system "{{ lookup('env', 'RESALLOC_NAME') | default('unknown-builder') }}" + no_log: true - name: install copr-builder and other latest packages dnf: state=latest pkg={{ packages }}