]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
cloud: Execute user-data scripts at the end of initialization
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 19 May 2022 09:40:25 +0000 (09:40 +0000)
committerPeter Müller <peter.mueller@ipfire.org>
Mon, 30 May 2022 19:21:59 +0000 (19:21 +0000)
This is useful when the user-data needs to reboot an instance.
Previously, some initialization did not happen which is now being done
first before the user-data script is being executed.

This gives users more flexibility about what they are doing in those
scripts.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/initscripts/helper/aws-setup
src/initscripts/helper/azure-setup
src/initscripts/helper/exoscale-setup
src/initscripts/helper/gcp-setup
src/initscripts/helper/oci-setup

index a40d4beeb64f62b76215b5a3684bd0d3f2f0ce8e..f14f4eb57894180614e69beaae0e639e70df4e24 100644 (file)
@@ -118,25 +118,6 @@ import_aws_configuration() {
                fi
        done
 
-       # Download the user-data script only on the first boot
-       if [ ! -e "/var/ipfire/main/firstsetup_ok" ]; then
-               # Download user-data
-               local user_data="$(get user-data)"
-
-               # Save user-data script to be executed later
-               if [ "${user_data:0:2}" = "#!" ]; then
-                       echo "${user_data}" > /tmp/aws-user-data.script
-                       chmod 700 /tmp/aws-user-data.script
-
-                       # Run the user-data script
-                       local now="$(date -u +"%s")"
-                       /tmp/aws-user-data.script &>/var/log/user-data.log.${now}
-
-                       # Delete the script right away
-                       rm /tmp/aws-user-data.script
-               fi
-       fi
-
        # Import network configuration
        # After this, no network connectivity will be available from this script due to the
        # renaming of the network interfaces for which they have to be shut down
@@ -259,6 +240,22 @@ import_aws_configuration() {
                        echo "2,ACCEPT,INPUTFW,ON,std_net_src,ALL,ipfire,RED1,,TCP,,,ON,,,TGT_PORT,444,,,,,,,,,,,00:00,00:00,,AUTO,,dnat,,,,,second"
                ) >> /var/ipfire/firewall/input
 
+               # Download user-data
+               local user_data="$(get user-data)"
+
+               # Save user-data script to be executed later
+               if [ "${user_data:0:2}" = "#!" ]; then
+                       echo "${user_data}" > /tmp/aws-user-data.script
+                       chmod 700 /tmp/aws-user-data.script
+
+                       # Run the user-data script
+                       local now="$(date -u +"%s")"
+                       /tmp/aws-user-data.script &>/var/log/user-data.log.${now}
+
+                       # Delete the script right away
+                       rm /tmp/aws-user-data.script
+               fi
+
                # This script has now completed the first steps of setup
                touch /var/ipfire/main/firstsetup_ok
        fi
index 1eff57799e59affd33e197d3f30f3331a2144814..7a4422a35320721640b43a9ecb3933b711af9bfa 100644 (file)
@@ -141,25 +141,6 @@ import_azure_configuration() {
                fi
        done
 
-       # Download the user-data script only on the first boot
-       if [ ! -e "/var/ipfire/main/firstsetup_ok" ]; then
-               # Download user-data
-               local user_data="$(get customData)"
-
-               # Save user-data script to be executed later
-               if [ "${user_data:0:2}" = "#!" ]; then
-                       echo "${user_data}" > /tmp/azure-user-data.script
-                       chmod 700 /tmp/azure-user-data.script
-
-                       # Run the user-data script
-                       local now="$(date -u +"%s")"
-                       /tmp/azure-user-data.script &>/var/log/user-data.log.${now}
-
-                       # Delete the script right away
-                       rm /tmp/azure-user-data.script
-               fi
-       fi
-
        # Import network configuration
        # After this, no network connectivity will be available from this script due to the
        # renaming of the network interfaces for which they have to be shut down
@@ -279,6 +260,22 @@ import_azure_configuration() {
                        echo "2,ACCEPT,INPUTFW,ON,std_net_src,ALL,ipfire,RED1,,TCP,,,ON,,,TGT_PORT,444,,,,,,,,,,,00:00,00:00,,AUTO,,dnat,,,,,second"
                ) >> /var/ipfire/firewall/input
 
+               # Download user-data
+               local user_data="$(get customData)"
+
+               # Save user-data script to be executed later
+               if [ "${user_data:0:2}" = "#!" ]; then
+                       echo "${user_data}" > /tmp/azure-user-data.script
+                       chmod 700 /tmp/azure-user-data.script
+
+                       # Run the user-data script
+                       local now="$(date -u +"%s")"
+                       /tmp/azure-user-data.script &>/var/log/user-data.log.${now}
+
+                       # Delete the script right away
+                       rm /tmp/azure-user-data.script
+               fi
+
                # This script has now completed the first steps of setup
                touch /var/ipfire/main/firstsetup_ok
        fi
index e9295cc9c2cb8373d9e720f19ca9923157f59a48..02fdda2a355d1e5c95cc55785cc91a7614e0a966 100644 (file)
@@ -83,25 +83,6 @@ import_exoscale_configuration() {
                chown setup.nobody "/home/setup/.ssh/authorized_keys"
        fi
 
-       # Download the user-data script only on the first boot
-       if [ ! -e "/var/ipfire/main/firstsetup_ok" ]; then
-               # Download user-data
-               local user_data="$(get user-data)"
-
-               # Save user-data script to be executed later
-               if [ "${user_data:0:2}" = "#!" ]; then
-                       echo "${user_data}" > /tmp/user-data.script
-                       chmod 700 /tmp/user-data.script
-
-                       # Run the user-data script
-                       local now="$(date -u +"%s")"
-                       /tmp/user-data.script &>/var/log/user-data.log.${now}
-
-                       # Delete the script right away
-                       rm /tmp/user-data.script
-               fi
-       fi
-
        # Import any previous settings for the local interfaces
         eval $(/usr/local/bin/readhash <(grep -E "^(GREEN|ORANGE)_.*=" /var/ipfire/ethernet/settings 2>/dev/null))
 
@@ -208,6 +189,22 @@ import_exoscale_configuration() {
                        echo "2,ACCEPT,INPUTFW,ON,std_net_src,ALL,ipfire,RED1,,TCP,,,ON,,,TGT_PORT,444,,,,,,,,,,,00:00,00:00,,AUTO,,dnat,,,,,second"
                ) >> /var/ipfire/firewall/input
 
+               # Download user-data
+               local user_data="$(get user-data)"
+
+               # Save user-data script to be executed later
+               if [ "${user_data:0:2}" = "#!" ]; then
+                       echo "${user_data}" > /tmp/user-data.script
+                       chmod 700 /tmp/user-data.script
+
+                       # Run the user-data script
+                       local now="$(date -u +"%s")"
+                       /tmp/user-data.script &>/var/log/user-data.log.${now}
+
+                       # Delete the script right away
+                       rm /tmp/user-data.script
+               fi
+
                # This script has now completed the first steps of setup
                touch /var/ipfire/main/firstsetup_ok
        fi
index 9351949317e49267d1dba058dfc93733098ab72d..4f5148c3e2447a5772b04e2d2dee0bef13a6ebc3 100644 (file)
@@ -118,25 +118,6 @@ import_gcp_configuration() {
                fi
        done <<<"$(get instance/attributes/ssh-keys)"
 
-       # Download the user-data script only on the first boot
-       if [ ! -e "/var/ipfire/main/firstsetup_ok" ]; then
-               # Download a startup script
-               local script="$(get instance/attributes/startup-script)"
-
-               # Execute the script
-               if [ "${script:0:2}" = "#!" ]; then
-                       echo "${script}" > /tmp/gcp-startup.script
-                       chmod 700 /tmp/gcp-startup.script
-
-                       # Run the script
-                       local now="$(date -u +"%s")"
-                       /tmp/gcp-startup.script &>/var/log/startup-script.log.${now}
-
-                       # Delete the script right away
-                       rm /tmp/gcp-startup.script
-               fi
-       fi
-
        # Import network configuration
        # After this, no network connectivity will be available from this script due to the
        # renaming of the network interfaces for which they have to be shut down
@@ -249,6 +230,22 @@ import_gcp_configuration() {
                        echo "2,ACCEPT,INPUTFW,ON,std_net_src,ALL,ipfire,RED1,,TCP,,,ON,,,TGT_PORT,444,,,,,,,,,,,00:00,00:00,,AUTO,,dnat,,,,,second"
                ) >> /var/ipfire/firewall/input
 
+               # Download a startup script
+               local script="$(get instance/attributes/startup-script)"
+
+               # Execute the script
+               if [ "${script:0:2}" = "#!" ]; then
+                       echo "${script}" > /tmp/gcp-startup.script
+                       chmod 700 /tmp/gcp-startup.script
+
+                       # Run the script
+                       local now="$(date -u +"%s")"
+                       /tmp/gcp-startup.script &>/var/log/startup-script.log.${now}
+
+                       # Delete the script right away
+                       rm /tmp/gcp-startup.script
+               fi
+
                # This script has now completed the first steps of setup
                touch /var/ipfire/main/firstsetup_ok
        fi
index 782fde5a2b4fd607beb85891b7b839eb281db21b..312014b74c2bd7f23cdab0f4198337d1fbc1f8db 100644 (file)
@@ -147,28 +147,6 @@ import_oci_configuration() {
                fi
        done <<<"$(get instance/metadata/ssh_authorized_keys)"
 
-       # Download the user-data script only on the first boot
-       if [ ! -e "/var/ipfire/main/firstsetup_ok" ]; then
-               # 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
-                       chmod 700 /tmp/user-data.script
-
-                       # Run the script
-                       local now="$(date -u +"%s")"
-                       /tmp/user-data.script &>/var/log/user-data.log.${now}
-
-                       # Delete the script right away
-                       rm /tmp/user-data.script
-               fi
-       fi
-
        # Import network configuration
        # After this, no network connectivity will be available from this script due to the
        # renaming of the network interfaces for which they have to be shut down
@@ -285,6 +263,25 @@ import_oci_configuration() {
                        echo "2,ACCEPT,INPUTFW,ON,std_net_src,ALL,ipfire,RED1,,TCP,,,ON,,,TGT_PORT,444,,,,,,,,,,,00:00,00:00,,AUTO,,dnat,,,,,second"
                ) >> /var/ipfire/firewall/input
 
+               # 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
+                       chmod 700 /tmp/user-data.script
+
+                       # Run the script
+                       local now="$(date -u +"%s")"
+                       /tmp/user-data.script &>/var/log/user-data.log.${now}
+
+                       # Delete the script right away
+                       rm /tmp/user-data.script
+               fi
+
                # This script has now completed the first steps of setup
                touch /var/ipfire/main/firstsetup_ok
        fi