From 189dc1daf4d2df84ae3ecb9337a80f0967768cea Mon Sep 17 00:00:00 2001 From: Valentin Lab Date: Tue, 13 Nov 2018 23:06:13 +0100 Subject: [PATCH] new: support for type of service ``run-once`` through hook ``dc-pre-run`` and removal of auto-populated ``up``. --- bin/compose | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/bin/compose b/bin/compose index 9346485..bf0e46e 100755 --- a/bin/compose +++ b/bin/compose @@ -2880,6 +2880,7 @@ export DOCKER_DATASTORE=${DOCKER_DATASTORE:-/srv/docker-datastore} COMPOSE_YML_FILE=$(get_compose_yml_location) || exit 1 +COMPOSE_YML_CONTENT=$(get_compose_yml_content) || exit 1 export COMPOSE_YML_FILE COMPOSE_YML_CONTENT @@ -2910,12 +2911,28 @@ if [ -z "$is_docker_compose_action" -a "$action" ]; then die "Unknown action '${DARKCYAN}$action$NORMAL': It doesn't match any docker-compose commands nor inner charm actions." fi else - if [[ "$action" =~ (up|ps) && "${#services_args[@]}" == 0 ]]; then - services_args=($(echo "$COMPOSE_YML_CONTENT" | shyaml keys)) - fi - if [ "$action" == "config" ]; then - services_args=("${action_posargs[@]}") - fi + case "$action" in + ps) + if [ "${#services_args[@]}" == 0 ]; then + services_args=($(printf "%s" "$COMPOSE_YML_CONTENT" | shyaml keys 2>/dev/null)) || true + fi + ;; + up) + if [ "${#services_args[@]}" == 0 ]; then + while read-0 service; do + charm=$(get_service_charm "$service") + metadata=$(charm.metadata "$charm") + type="$(printf "%s" "$metadata" | shyaml get-value type 2>/dev/null)" || true + if [ "$type" != "run-once" ]; then + services_args+=("$service") + fi + done < <(printf "%s" "$COMPOSE_YML_CONTENT" | shyaml keys-0 2>/dev/null) + fi + ;; + config) + services_args=("${action_posargs[@]}") + ;; + esac if [ "$is_docker_compose_action" -a "${#services_args[@]}" -gt 0 ]; then services=($(get_master_services "${services_args[@]}")) || exit 1 action_posargs+=("${services[@]}") @@ -2981,6 +2998,15 @@ if [ "$full_init" ]; then fi +if [ "$action" == "run" ]; then + charm=$(get_service_charm "${services_args[0]}") || exit 1 + metadata=$(charm.metadata "$charm") || exit 1 + type="$(printf "%s" "$metadata" | shyaml get-value type 2>/dev/null)" || true + if [ "$type" == "run-once" ]; then + run_service_hook dc-pre-run "${services_args[@]}" || exit 1 + fi +fi + export SERVICE_PACK="${services_args[*]}"