Files
actions/make-yaml-redirector/action.yml

123 lines
4.9 KiB
YAML

name: "Make YAML file"
author: "Igor Pecovnik"
description: "Make YAML for redirector"
inputs:
variant:
description: packages, images, ...
required: true
port:
description: Repository
required: false
geodb:
description: geodb
required: true
asndb:
description: asndb
required: true
dl_map:
description: dl_map
required: true
certDataPath:
description: certDataPath
required: false
reloadKey:
description: reloadKey
required: true
failoverserver:
description: failover
required: true
netbox:
description: NetboxID
required: true
netboxapi:
description: NetboxAPI
required: true
runs:
using: "composite"
steps:
- shell: bash
run: |
rm -rf *.yaml
FILENAME=${{ inputs.variant }}
PORT=${{ inputs.port }}
CERTPATH=${{ inputs.certDataPath }}
cat <<- EOF > dlrouter-${FILENAME}.yaml
#
# ${FILENAME}.armbian.com
#
geodb: ${{ inputs.geodb }}
asndb: ${{ inputs.asndb }}
dl_map: ${{ inputs.dl_map }}
EOF
[[ -n ${CERTPATH} ]] && echo "certDataPath: ${CERTPATH}" >> dlrouter-${FILENAME}.yaml
[[ -n ${PORT} ]] && echo "bind: ':${PORT}'" >> dlrouter-${FILENAME}.yaml
[[ ${FILENAME} == *images* ]] && echo "enableProfiler: true" >> dlrouter-${FILENAME}.yaml
cat <<- EOF >> dlrouter-${FILENAME}.yaml
# Reload authorization key
reloadKey: ${{ inputs.reloadKey }}
# LRU Cache Size (in items)
cacheSize: 2048
# Documentation: https://github.com/armbian/armbian-router
specialExtensions:
- boot-sms.img.xz: -boot-sms
- boot-boe.img.xz: -boot-boe
- boot-csot.img.xz: -boot-csot
- rootfs.img.xz: -rootfs
- img.qcow2: -qcow2
- img.qcow2.xz: -qcow2
- boot.bin.xz: -boot
- u-boot.rom.xz: -u-boot-rom
- hyperv.zip: -hyperv
servers:
EOF
echo "<pre>" >> $GITHUB_STEP_SUMMARY
for server_id in ${{ inputs.failoverserver }}; do
unset REGION LATITUDE LONGITUDE PHYSICAL TIME_ZONE UPLOAD
# read virtual machine
COMMAND=$(curl -sH "Authorization: Token ${{ inputs.netbox }}" -H "Accept: application/json; indent=4" "${{ inputs.netboxapi }}/virtualization/virtual-machines/${server_id}/" | jq)
IFS=',' read -r SITE_ID NAME DL_PATH_DEBS DL_PATH_IMAGES WEIGHT <<<$(echo $COMMAND | jq '.site.id,.name,.custom_fields["download_path_debs"],.custom_fields["download_path_images"],.custom_fields["weight"]' | sed 's/$/,/' | xargs | sed 's/, /,/g')
# site data
COMMAND=$(curl -sH "Authorization: Token ${{ inputs.netbox }}" -H "Accept: application/json; indent=4" "${{ inputs.netboxapi }}/dcim/sites/${SITE_ID}/" | jq)
IFS=',' read REGION LATITUDE LONGITUDE PHYSICAL TIME_ZONE UPLOAD DOWNLOAD_EXCLUDE <<<$(echo $COMMAND | jq -r '.region.name,.latitude,.longitude,.physical_address,.time_zone,.custom_fields["upload_speed"],.custom_fields["download_exclude"]' | sed 's/$/,/' | xargs | sed 's/, /,/g')
echo "" >> dlrouter-${FILENAME}.yaml
[[ -n $REGION ]] && echo " # $TIME_ZONE - $UPLOAD Mbit/s" >> dlrouter-${FILENAME}.yaml
DL_PATH="${FILENAME}"
[[ "${FILENAME}" == rsync ]] && DL_PATH=""
[[ "${FILENAME}" == debs ]] && DL_PATH="apt"
[[ "${FILENAME}" == debs-beta ]] && DL_PATH="beta"
[[ "${FILENAME}" == images ]] && DL_PATH="dl"
[[ "$DL_PATH_DEBS" != null && "${FILENAME}" == debs ]] && DL_PATH="${DL_PATH_DEBS}"
[[ "$DL_PATH_IMAGES" != null && "${FILENAME}" == images ]] && DL_PATH="${DL_PATH_IMAGES}"
echo " - server: $NAME/$DL_PATH/" >> "dlrouter-${FILENAME}.yaml"
if [[ "$DOWNLOAD_EXCLUDE" != null && -n "$DOWNLOAD_EXCLUDE" ]]; then
echo " rules:" >> dlrouter-${FILENAME}.yaml
echo " - field: location.country.iso_code" >> dlrouter-${FILENAME}.yaml
echo " not_in:" >> dlrouter-${FILENAME}.yaml
echo " - ${DOWNLOAD_EXCLUDE}" >> dlrouter-${FILENAME}.yaml
fi
[[ "$LATITUDE" != null && -n "$LATITUDE" ]] && echo " latitude: $LATITUDE" >> dlrouter-${FILENAME}.yaml
[[ "$LONGITUDE" != null && -n "$LONGITUDE" ]] && echo " longitude: $LONGITUDE" >> dlrouter-${FILENAME}.yaml
[[ "$WEIGHT" != null ]] && echo " weight: $WEIGHT" >> dlrouter-${FILENAME}.yaml
done
cat dlrouter-${FILENAME}.yaml >> $GITHUB_STEP_SUMMARY
echo "</pre>" >> $GITHUB_STEP_SUMMARY
- name: Upload JSON
uses: actions/upload-artifact@v4
with:
name: config-${{ inputs.variant }}
path: ${{ github.workspace }}/*.yaml
if-no-files-found: ignore