From 0e270a93b53119818f9c71fa273cda3a07d0bf5c Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Mon, 1 Oct 2018 16:01:51 -0700 Subject: [PATCH] Adjust "sed" expressions so we can bind-mount the configuration file This allows the file to be rewritten in-place even in the face of a bind mount (assuming permissions, etc). --- 2.1/docker-entrypoint.sh | 21 +++++++++++++++++---- 2.2/docker-entrypoint.sh | 21 +++++++++++++++++---- 3.0/docker-entrypoint.sh | 21 +++++++++++++++++---- 3.11/docker-entrypoint.sh | 21 +++++++++++++++++---- docker-entrypoint.sh | 21 +++++++++++++++++---- 5 files changed, 85 insertions(+), 20 deletions(-) diff --git a/2.1/docker-entrypoint.sh b/2.1/docker-entrypoint.sh index 60e6631..6f08ce7 100755 --- a/2.1/docker-entrypoint.sh +++ b/2.1/docker-entrypoint.sh @@ -26,6 +26,16 @@ _ip_address() { ' } +# "sed -i", but without "mv" (which doesn't work on a bind-mounted file, for example) +_sed-in-place() { + local filename="$1"; shift + local tempFile + tempFile="$(mktemp)" + sed "$@" "$filename" > "$tempFile" + cat "$tempFile" > "$filename" + rm "$tempFile" +} + if [ "$1" = 'cassandra' ]; then : ${CASSANDRA_RPC_ADDRESS='0.0.0.0'} @@ -45,8 +55,9 @@ if [ "$1" = 'cassandra' ]; then : ${CASSANDRA_SEEDS:="cassandra"} fi : ${CASSANDRA_SEEDS:="$CASSANDRA_BROADCAST_ADDRESS"} - - sed -ri 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' "$CASSANDRA_CONFIG/cassandra.yaml" + + _sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \ + -r 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' for yaml in \ broadcast_address \ @@ -61,7 +72,8 @@ if [ "$1" = 'cassandra' ]; then var="CASSANDRA_${yaml^^}" val="${!var}" if [ "$val" ]; then - sed -ri 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' "$CASSANDRA_CONFIG/cassandra.yaml" + _sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \ + -r 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' fi done @@ -69,7 +81,8 @@ if [ "$1" = 'cassandra' ]; then var="CASSANDRA_${rackdc^^}" val="${!var}" if [ "$val" ]; then - sed -ri 's/^('"$rackdc"'=).*/\1 '"$val"'/' "$CASSANDRA_CONFIG/cassandra-rackdc.properties" + _sed-in-place "$CASSANDRA_CONFIG/cassandra-rackdc.properties" \ + -r 's/^('"$rackdc"'=).*/\1 '"$val"'/' fi done fi diff --git a/2.2/docker-entrypoint.sh b/2.2/docker-entrypoint.sh index 60e6631..6f08ce7 100755 --- a/2.2/docker-entrypoint.sh +++ b/2.2/docker-entrypoint.sh @@ -26,6 +26,16 @@ _ip_address() { ' } +# "sed -i", but without "mv" (which doesn't work on a bind-mounted file, for example) +_sed-in-place() { + local filename="$1"; shift + local tempFile + tempFile="$(mktemp)" + sed "$@" "$filename" > "$tempFile" + cat "$tempFile" > "$filename" + rm "$tempFile" +} + if [ "$1" = 'cassandra' ]; then : ${CASSANDRA_RPC_ADDRESS='0.0.0.0'} @@ -45,8 +55,9 @@ if [ "$1" = 'cassandra' ]; then : ${CASSANDRA_SEEDS:="cassandra"} fi : ${CASSANDRA_SEEDS:="$CASSANDRA_BROADCAST_ADDRESS"} - - sed -ri 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' "$CASSANDRA_CONFIG/cassandra.yaml" + + _sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \ + -r 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' for yaml in \ broadcast_address \ @@ -61,7 +72,8 @@ if [ "$1" = 'cassandra' ]; then var="CASSANDRA_${yaml^^}" val="${!var}" if [ "$val" ]; then - sed -ri 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' "$CASSANDRA_CONFIG/cassandra.yaml" + _sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \ + -r 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' fi done @@ -69,7 +81,8 @@ if [ "$1" = 'cassandra' ]; then var="CASSANDRA_${rackdc^^}" val="${!var}" if [ "$val" ]; then - sed -ri 's/^('"$rackdc"'=).*/\1 '"$val"'/' "$CASSANDRA_CONFIG/cassandra-rackdc.properties" + _sed-in-place "$CASSANDRA_CONFIG/cassandra-rackdc.properties" \ + -r 's/^('"$rackdc"'=).*/\1 '"$val"'/' fi done fi diff --git a/3.0/docker-entrypoint.sh b/3.0/docker-entrypoint.sh index 60e6631..6f08ce7 100755 --- a/3.0/docker-entrypoint.sh +++ b/3.0/docker-entrypoint.sh @@ -26,6 +26,16 @@ _ip_address() { ' } +# "sed -i", but without "mv" (which doesn't work on a bind-mounted file, for example) +_sed-in-place() { + local filename="$1"; shift + local tempFile + tempFile="$(mktemp)" + sed "$@" "$filename" > "$tempFile" + cat "$tempFile" > "$filename" + rm "$tempFile" +} + if [ "$1" = 'cassandra' ]; then : ${CASSANDRA_RPC_ADDRESS='0.0.0.0'} @@ -45,8 +55,9 @@ if [ "$1" = 'cassandra' ]; then : ${CASSANDRA_SEEDS:="cassandra"} fi : ${CASSANDRA_SEEDS:="$CASSANDRA_BROADCAST_ADDRESS"} - - sed -ri 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' "$CASSANDRA_CONFIG/cassandra.yaml" + + _sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \ + -r 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' for yaml in \ broadcast_address \ @@ -61,7 +72,8 @@ if [ "$1" = 'cassandra' ]; then var="CASSANDRA_${yaml^^}" val="${!var}" if [ "$val" ]; then - sed -ri 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' "$CASSANDRA_CONFIG/cassandra.yaml" + _sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \ + -r 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' fi done @@ -69,7 +81,8 @@ if [ "$1" = 'cassandra' ]; then var="CASSANDRA_${rackdc^^}" val="${!var}" if [ "$val" ]; then - sed -ri 's/^('"$rackdc"'=).*/\1 '"$val"'/' "$CASSANDRA_CONFIG/cassandra-rackdc.properties" + _sed-in-place "$CASSANDRA_CONFIG/cassandra-rackdc.properties" \ + -r 's/^('"$rackdc"'=).*/\1 '"$val"'/' fi done fi diff --git a/3.11/docker-entrypoint.sh b/3.11/docker-entrypoint.sh index 60e6631..6f08ce7 100755 --- a/3.11/docker-entrypoint.sh +++ b/3.11/docker-entrypoint.sh @@ -26,6 +26,16 @@ _ip_address() { ' } +# "sed -i", but without "mv" (which doesn't work on a bind-mounted file, for example) +_sed-in-place() { + local filename="$1"; shift + local tempFile + tempFile="$(mktemp)" + sed "$@" "$filename" > "$tempFile" + cat "$tempFile" > "$filename" + rm "$tempFile" +} + if [ "$1" = 'cassandra' ]; then : ${CASSANDRA_RPC_ADDRESS='0.0.0.0'} @@ -45,8 +55,9 @@ if [ "$1" = 'cassandra' ]; then : ${CASSANDRA_SEEDS:="cassandra"} fi : ${CASSANDRA_SEEDS:="$CASSANDRA_BROADCAST_ADDRESS"} - - sed -ri 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' "$CASSANDRA_CONFIG/cassandra.yaml" + + _sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \ + -r 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' for yaml in \ broadcast_address \ @@ -61,7 +72,8 @@ if [ "$1" = 'cassandra' ]; then var="CASSANDRA_${yaml^^}" val="${!var}" if [ "$val" ]; then - sed -ri 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' "$CASSANDRA_CONFIG/cassandra.yaml" + _sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \ + -r 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' fi done @@ -69,7 +81,8 @@ if [ "$1" = 'cassandra' ]; then var="CASSANDRA_${rackdc^^}" val="${!var}" if [ "$val" ]; then - sed -ri 's/^('"$rackdc"'=).*/\1 '"$val"'/' "$CASSANDRA_CONFIG/cassandra-rackdc.properties" + _sed-in-place "$CASSANDRA_CONFIG/cassandra-rackdc.properties" \ + -r 's/^('"$rackdc"'=).*/\1 '"$val"'/' fi done fi diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 60e6631..6f08ce7 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -26,6 +26,16 @@ _ip_address() { ' } +# "sed -i", but without "mv" (which doesn't work on a bind-mounted file, for example) +_sed-in-place() { + local filename="$1"; shift + local tempFile + tempFile="$(mktemp)" + sed "$@" "$filename" > "$tempFile" + cat "$tempFile" > "$filename" + rm "$tempFile" +} + if [ "$1" = 'cassandra' ]; then : ${CASSANDRA_RPC_ADDRESS='0.0.0.0'} @@ -45,8 +55,9 @@ if [ "$1" = 'cassandra' ]; then : ${CASSANDRA_SEEDS:="cassandra"} fi : ${CASSANDRA_SEEDS:="$CASSANDRA_BROADCAST_ADDRESS"} - - sed -ri 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' "$CASSANDRA_CONFIG/cassandra.yaml" + + _sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \ + -r 's/(- seeds:).*/\1 "'"$CASSANDRA_SEEDS"'"/' for yaml in \ broadcast_address \ @@ -61,7 +72,8 @@ if [ "$1" = 'cassandra' ]; then var="CASSANDRA_${yaml^^}" val="${!var}" if [ "$val" ]; then - sed -ri 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' "$CASSANDRA_CONFIG/cassandra.yaml" + _sed-in-place "$CASSANDRA_CONFIG/cassandra.yaml" \ + -r 's/^(# )?('"$yaml"':).*/\2 '"$val"'/' fi done @@ -69,7 +81,8 @@ if [ "$1" = 'cassandra' ]; then var="CASSANDRA_${rackdc^^}" val="${!var}" if [ "$val" ]; then - sed -ri 's/^('"$rackdc"'=).*/\1 '"$val"'/' "$CASSANDRA_CONFIG/cassandra-rackdc.properties" + _sed-in-place "$CASSANDRA_CONFIG/cassandra-rackdc.properties" \ + -r 's/^('"$rackdc"'=).*/\1 '"$val"'/' fi done fi