123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #!/usr/bin/env bash
- # shellcheck disable=SC1003
- # Based on https://gist.github.com/pkuczynski/8665367
- parse_yaml() {
- local yaml_file=$1
- local prefix=$2
- local s
- local w
- local fs
- s='[[:space:]]*'
- w='[a-zA-Z0-9_.-]*'
- fs="$(echo @|tr @ '\034')"
- (
- sed -e '/- [^\“]'"[^\']"'.*: /s|\([ ]*\)- \([[:space:]]*\)|\1-\'$'\n'' \1\2|g' |
- sed -ne '/^--/s|--||g; s|\"|\\\"|g; s/[[:space:]]*$//g;' \
- -e "/#.*[\"\']/!s| #.*||g; /^#/s|#.*||g;" \
- -e "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
- -e "s|^\($s\)\($w\)${s}[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" |
- awk -F"$fs" '{
- indent = length($1)/2;
- if (length($2) == 0) { conj[indent]="+";} else {conj[indent]="";}
- vname[indent] = $2;
- for (i in vname) {if (i > indent) {delete vname[i]}}
- if (length($3) > 0) {
- vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
- printf("%s%s%s%s=(\"%s\")\n", "'"$prefix"'",vn, $2, conj[indent-1],$3);
- }
- }' |
- sed -e 's/_=/+=/g' |
- awk 'BEGIN {
- FS="=";
- OFS="="
- }
- /(-|\.).*=/ {
- gsub("-|\\.", "_", $1)
- }
- { print }'
- ) < "$yaml_file"
- }
- create_variables() {
- local yaml_file="$1"
- local prefix="$2"
- eval "$(parse_yaml "$yaml_file" "$prefix")"
- }
|