|
|
@ -2771,35 +2771,24 @@ _run_service_action_relation() { |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
|
|
|
|
export RELATION_DATA_FILE=$(get_relation_data_file "$service" "$target_service" "$relation_name" "$relation_config") |
|
|
|
|
|
|
|
export action_errlvl_file="$state_tmpdir/action-$service-$charm-$action-errlvl" |
|
|
|
export state_tmpdir |
|
|
|
{ |
|
|
|
( |
|
|
|
set +e ## Prevents unwanted leaks from parent shell |
|
|
|
export METADATA_CONFIG=$(charm.metadata "$charm") |
|
|
|
export SERVICE_NAME=$service |
|
|
|
export RELATION_TARGET_SERVICE="$target_service" |
|
|
|
export RELATION_TARGET_CHARM="$target_charm" |
|
|
|
export RELATION_BASE_SERVICE="$service" |
|
|
|
export RELATION_BASE_CHARM="$charm" |
|
|
|
export ACTION_NAME=$action |
|
|
|
export CONTAINER_NAME=$(get_top_master_service_for_service "$service") |
|
|
|
export DOCKER_BASE_IMAGE=$(service_base_docker_image "$CONTAINER_NAME") |
|
|
|
export SERVICE_DATASTORE="$DATASTORE/$service" |
|
|
|
export SERVICE_CONFIGSTORE="$CONFIGSTORE/$service" |
|
|
|
exname="$exname $ACTION_NAME $SERVICE_NAME" \ |
|
|
|
stdbuf -oL -eL bash -c 'charm.run_relation_action "$@"' -- "$target_charm" "$relation_name" "$action" "$@" |
|
|
|
echo "$?" > "$action_errlvl_file" |
|
|
|
) | logstdout "$DARKYELLOW$service$NORMAL/${DARKCYAN}$action${NORMAL} ${GREEN}@${NORMAL}" |
|
|
|
} 3>&1 1>&2 2>&3 | logstderr "$DARKYELLOW$service$NORMAL/${DARKCYAN}$action${NORMAL} ${RED}@$NORMAL" 3>&1 1>&2 2>&3 |
|
|
|
if ! [ -e "$action_errlvl_file" ]; then |
|
|
|
err "Action $DARKYELLOW$service$NORMAL:$DARKCYAN$action$NORMAL has failed without having time" \ |
|
|
|
"to output an errlvl" |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
return "$(cat "$action_errlvl_file")" |
|
|
|
( |
|
|
|
set +e ## Prevents unwanted leaks from parent shell |
|
|
|
export METADATA_CONFIG=$(charm.metadata "$charm") |
|
|
|
export SERVICE_NAME=$service |
|
|
|
export RELATION_TARGET_SERVICE="$target_service" |
|
|
|
export RELATION_TARGET_CHARM="$target_charm" |
|
|
|
export RELATION_BASE_SERVICE="$service" |
|
|
|
export RELATION_BASE_CHARM="$charm" |
|
|
|
export ACTION_NAME=$action |
|
|
|
export CONTAINER_NAME=$(get_top_master_service_for_service "$service") |
|
|
|
export DOCKER_BASE_IMAGE=$(service_base_docker_image "$CONTAINER_NAME") |
|
|
|
export SERVICE_DATASTORE="$DATASTORE/$service" |
|
|
|
export SERVICE_CONFIGSTORE="$CONFIGSTORE/$service" |
|
|
|
exname="$exname $ACTION_NAME $SERVICE_NAME" \ |
|
|
|
stdbuf -oL -eL bash -c 'charm.run_relation_action "$@"' -- "$target_charm" "$relation_name" "$action" "$@" |
|
|
|
) 0<&6 ## inject general stdin |
|
|
|
} |
|
|
|
export -f _run_service_action_relation |
|
|
|
|
|
|
@ -3733,6 +3722,7 @@ get_docker_charm_action_help() { |
|
|
|
local services service charm relation_name target_service relation_config \ |
|
|
|
target_charm |
|
|
|
services=($(get_compose_yml_content | shyaml keys 2>/dev/null)) |
|
|
|
get_all_relations "${services[@]}" >/dev/null 2>&1 || exit 1 |
|
|
|
for service in "${services[@]}"; do |
|
|
|
out=$( |
|
|
|
charm=$(get_service_charm "$service") || return 1 |
|
|
@ -3744,7 +3734,7 @@ get_docker_charm_action_help() { |
|
|
|
for action in $(charm.ls_relation_actions "$target_charm" "$relation_name"); do |
|
|
|
printf " %-28s %s\n" "$action $service" "Indirect action from ${DARKPINK}$target_charm${NORMAL}" |
|
|
|
done |
|
|
|
done < <(get_compose_relations "$service") |
|
|
|
done < <(get_service_relations "$service") |
|
|
|
) |
|
|
|
if [ "$out" ]; then |
|
|
|
echo " for ${DARKYELLOW}$service${NORMAL}:" |
|
|
@ -4226,6 +4216,12 @@ if [ -z "$is_docker_compose_action" -a "$action" ]; then |
|
|
|
display_commands_help |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
## Required by has_service_action |
|
|
|
array_read-0 services_args < <(printf "%s" "$COMPOSE_YML_CONTENT" | shyaml keys-0 2>/dev/null) |
|
|
|
get_all_relations "${services_args[@]}" >/dev/null 2>&1 || return 1 |
|
|
|
|
|
|
|
remainder_args=("${remainder_args[@]:1}") |
|
|
|
if has_service_action "$action_service" "$action" >/dev/null; then |
|
|
|
is_service_action=true |
|
|
@ -4242,6 +4238,7 @@ if [ -z "$is_docker_compose_action" -a "$action" ]; then |
|
|
|
esac |
|
|
|
} < <(has_service_action "$action_service" "$action") |
|
|
|
services_args=("$action_service") |
|
|
|
get_all_relations "${services_args[@]}" >/dev/null 2>&1 || return 1 |
|
|
|
|
|
|
|
## Divert logging to stdout to stderr |
|
|
|
log () { cat >&2; } |
|
|
@ -4420,7 +4417,7 @@ case "$action" in |
|
|
|
;; |
|
|
|
*) |
|
|
|
if [ "$is_service_action" ]; then |
|
|
|
run_service_action "$SERVICE_PACK" "$action" "${remainder_args[@]}" |
|
|
|
run_service_action "$action_service" "$action" "${remainder_args[@]}" |
|
|
|
errlvl="$?" |
|
|
|
errlvl "$errlvl" |
|
|
|
else |
|
|
|