oci: user-data: Try to decode base64 content

Terraform only supports sending any shell scripts encoded in base64
which is however not required by Oracle. Therefore we have to test if
the script is encoded or not.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Reviewed-by: Peter Müller <peter.mueller@ipfire.org>
This commit is contained in:
Michael Tremer
2022-02-21 17:24:56 +00:00
committed by Peter Müller
parent efb999548a
commit d5538121d7

View File

@@ -34,6 +34,24 @@ get() {
wget -qO - "http://169.254.169.254/opc/v1/${file}"
}
try_base64_decode() {
local input="${1}"
local tmp="$(mktemp)"
# Try to decode this and return output if successful
if base64 -d <<< "${input}" > "${tmp}" 2>/dev/null; then
echo "$(<${tmp})"
# Otherwise just return the input
else
echo "${input}"
fi
# Cleanup
unlink "${tmp}"
}
to_address() {
local n="${1}"
@@ -134,6 +152,9 @@ import_oci_configuration() {
# Download a startup script
local script="$(get instance/metadata/user_data)"
# Try to decode this
script="$(try_base64_decode "${script}")"
# Execute the script
if [ "${script:0:2}" = "#!" ]; then
echo "${script}" > /tmp/user-data.script