|
|
@ -1977,6 +1977,54 @@ _get_services_uses() { |
|
|
|
export -f _get_services_uses |
|
|
|
|
|
|
|
|
|
|
|
_get_provides_provides() { |
|
|
|
local provides="$1" cache_file="$CACHEDIR/$FUNCNAME.cache.$(printf "%s\0" "$@" | md5_compat)" \ |
|
|
|
service rn rd |
|
|
|
|
|
|
|
if [ -e "$cache_file" ]; then |
|
|
|
debug "$FUNCNAME: CACHEDIR cache hit $1" |
|
|
|
cat "$cache_file" |
|
|
|
return 0 |
|
|
|
fi |
|
|
|
|
|
|
|
type=$(printf "%s" "$provides" | shyaml get-type) |
|
|
|
case "$type" in |
|
|
|
sequence) |
|
|
|
while read-0 prov; do |
|
|
|
printf "%s\0" "$prov" "" |
|
|
|
done < <(echo "$provides" | shyaml get-values-0) |
|
|
|
;; |
|
|
|
struct) |
|
|
|
printf "%s" "$provides" | shyaml key-values-0 |
|
|
|
;; |
|
|
|
str) |
|
|
|
printf "%s\0" "$(echo "$provides" | shyaml get-value)" "" |
|
|
|
;; |
|
|
|
*) |
|
|
|
err "Unexpected type '$type' for provider identifier in charm '$charm'." |
|
|
|
return 1 |
|
|
|
esac | tee "$cache_file" |
|
|
|
return "${PIPESTATUS[0]}" |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_get_metadata_provides() { |
|
|
|
local metadata="$1" cache_file="$CACHEDIR/$FUNCNAME.cache.$(printf "%s\0" "$@" | md5_compat)" \ |
|
|
|
service rn rd |
|
|
|
|
|
|
|
if [ -e "$cache_file" ]; then |
|
|
|
debug "$FUNCNAME: CACHEDIR cache hit" |
|
|
|
cat "$cache_file" |
|
|
|
return 0 |
|
|
|
fi |
|
|
|
|
|
|
|
provides=$(printf "%s" "$metadata" | shyaml get-value -y -q provides "") |
|
|
|
[ "$provides" -a "$provides" != "''" ] || { touch "$cache_file"; return 0; } |
|
|
|
|
|
|
|
_get_provides_provides "$provides" | tee "$cache_file" |
|
|
|
return "${PIPESTATUS[0]}" |
|
|
|
} |
|
|
|
|
|
|
|
_get_services_provides() { |
|
|
|
local cache_file="$state_tmpdir/$FUNCNAME.cache.$(printf "%s\0" "$@" | md5_compat)" \ |
|
|
|
service rn rd |
|
|
@ -1993,7 +2041,7 @@ _get_services_provides() { |
|
|
|
|
|
|
|
while read-0 rn rd; do |
|
|
|
printf "%s\0" "$service" "$rn" "$rd" |
|
|
|
done < <(printf "%s" "$metadata" | shyaml key-values-0 provides 2>/dev/null) |
|
|
|
done < <(_get_metadata_provides "$metadata") |
|
|
|
done > "$cache_file" |
|
|
|
if [ "$?" != 0 ]; then |
|
|
|
rm -f "$cache_file" ## no cache |
|
|
|