diff --git a/ansible/roles/poudriere/files/poudboot.bash b/ansible/roles/poudriere/files/poudboot.bash index 7b9990a..f61e5a1 100644 --- a/ansible/roles/poudriere/files/poudboot.bash +++ b/ansible/roles/poudriere/files/poudboot.bash @@ -5,13 +5,67 @@ set -euo pipefail IFS=$'\n\t' DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -COMMAND="$1" -shift 1 +function main { + COMMAND="$1" + shift 1 -if [ "$COMMAND" = "start" ]; then - echo "foo" -elif [ "$COMMAND" = "stop" ]; then - echo "bar" -else - echo "baz" -fi + if [ "$COMMAND" = "start" ]; then + cmd_start "${@}" + elif [ "$COMMAND" = "stop" ]; then + cmd_stop "${@}" + else + die 1 "Unrecognized command: $COMMAND" + fi +} + +function die { + exit_code="$1" + shift 1 + (>&2 echo "${@}") + exit "$exit_code" +} + +function abort_if_jobs_running { + if [[ $(sudo poudriere status) != *"No running builds"* ]]; then + echo "There is already a poudriere build in progress, exiting." + exit 0 + fi +} + +function build { + poudriere pkgclean -y "$@" + poudriere bulk -J "${POUDRIERE_JOBS:-1}" "$@" +} + +function cmd_start { + # Allow command failures without quitting the script because some + # package sets might fail whereas others may succeed based on which + # packages are in each set. + set +e + + for conf in /opt/poudriere/build_configs/*; do + ( + source "$conf" + build -j "$JAIL" -p "$PORTS" -z "$SET" -f /usr/local/etc/poudriere.d/$JAIL-$PORTS-$SET-pkglist + ) + done + + # Re-enable exiting on failed commands + set -e + + # Cleanup old unused dist files + for conf in /opt/poudriere/build_configs/*; do + ( + source "$conf" + poudriere distclean -y -p "$PORTS" -f /usr/local/etc/poudriere.d/$JAIL-$PORTS-$SET-pkglist + ) + done + + poudriere logclean -y 180 +} + +function cmd_stop { + +} + +main "${@}" diff --git a/ansible/roles/poudriere/tasks/freebsd.yaml b/ansible/roles/poudriere/tasks/freebsd.yaml index 01889c3..56da4d2 100644 --- a/ansible/roles/poudriere/tasks/freebsd.yaml +++ b/ansible/roles/poudriere/tasks/freebsd.yaml @@ -29,16 +29,16 @@ - flock state: present -# - name: Create directories -# file: -# name: "{{ item }}" -# state: directory -# mode: 0755 -# owner: root -# group: wheel -# loop: -# - /usr/ports/distfiles -# - /opt/poudriere/build_configs +- name: Create directories + file: + name: "{{ item }}" + state: directory + mode: 0755 + owner: root + group: wheel + loop: + # - /usr/ports/distfiles + - /opt/poudriere/build_configs # - /usr/local/poudriere/data/logs/bulk - name: Install Configuration @@ -77,6 +77,15 @@ - src: poudboot.bash dest: /usr/local/bin/poudboot +- name: Install Configuration + template: + src: "build_config.j2" + dest: "/opt/poudriere/build_configs/{{ item.jail }}-{{ item.ports }}-{{ item.set }}" + owner: root + group: wheel + mode: 0600 + loop: "{{ poudriere_builds }}" + - name: Get ports tree list command: poudriere ports -ln register: ports_tree_list diff --git a/ansible/roles/poudriere/templates/build_config.j2 b/ansible/roles/poudriere/templates/build_config.j2 new file mode 100644 index 0000000..52ee8eb --- /dev/null +++ b/ansible/roles/poudriere/templates/build_config.j2 @@ -0,0 +1,3 @@ +JAIL={{ item.jail }} +PORTS={{ item.ports }} +SET={{ item.set }}