]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
aws: Add support for a script that can be executed at first boot
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 Jul 2018 15:19:46 +0000 (16:19 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 Jul 2018 15:19:46 +0000 (16:19 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/initscripts/helper/aws-setup
src/initscripts/system/aws

index d8c7a358cb4015a65bf009b29956b7f1c194de53..e16678339ace508afde72f15c8a8741d52f4ce58 100644 (file)
@@ -6,7 +6,7 @@
 get() {
        local file="${1}"
 
-       wget -qO - "http://169.254.169.254/latest/meta-data/${file}"
+       wget -qO - "http://169.254.169.254/latest/${file}"
 }
 
 to_address() {
@@ -64,7 +64,7 @@ find_interface() {
 }
 
 import_aws_configuration() {
-       local instance_id="$(get instance-id)"
+       local instance_id="$(get meta-data/instance-id)"
 
        boot_mesg "Importing AWS configuration for instance ${instance_id}..."
 
@@ -72,7 +72,7 @@ import_aws_configuration() {
        echo "${instance_id}" > /var/run/aws-instance-id
 
        # Initialise system settings
-       local hostname=$(get local-hostname)
+       local hostname=$(get meta-data/local-hostname)
 
        # Set hostname
        if ! grep -q "^HOSTNAME=" /var/ipfire/main/settings; then
@@ -94,10 +94,10 @@ import_aws_configuration() {
 
        # Import SSH keys for setup user
        local line
-       for line in $(get "public-keys/"); do
+       for line in $(get "meta-data/public-keys/"); do
                local key_no="${line%=*}"
 
-               local key="$(get public-keys/${key_no}/openssh-key)"
+               local key="$(get meta-data/public-keys/${key_no}/openssh-key)"
                if [ -n "${key}" ] && ! grep -q "^${key}$" "/home/setup/.ssh/authorized_keys" 2>/dev/null; then
                        mkdir -p "/home/setup/.ssh"
                        chmod 700 "/home/setup/.ssh"
@@ -109,6 +109,9 @@ import_aws_configuration() {
                fi
        done
 
+       # Download user-data
+       local user_data="$(get user-data)"
+
        # Import any DNS server settings
        eval $(/usr/local/bin/readhash <(grep -E "^DNS([0-9])=" /var/ipfire/ethernet/settings 2>/dev/null))
 
@@ -119,24 +122,24 @@ import_aws_configuration() {
        : > /var/ipfire/ethernet/settings
 
        local mac
-       for mac in $(get network/interfaces/macs/); do
+       for mac in $(get meta-data/network/interfaces/macs/); do
                # Remove trailing slash
                mac="${mac//\//}"
 
-               local device_number="$(get "network/interfaces/macs/${mac}/device-number")"
-               local interface_id="$(get "network/interfaces/macs/${mac}/interface-id")"
+               local device_number="$(get "meta-data/network/interfaces/macs/${mac}/device-number")"
+               local interface_id="$(get "meta-data/network/interfaces/macs/${mac}/interface-id")"
 
                # First IPv4 address
-               local ipv4_address="$(get "network/interfaces/macs/${mac}/local-ipv4s" | head -n1)"
+               local ipv4_address="$(get "meta-data/network/interfaces/macs/${mac}/local-ipv4s" | head -n1)"
                local ipv4_address_num="$(to_integer "${ipv4_address}")"
 
                # Get VPC subnet
-               local vpc="$(get "network/interfaces/macs/${mac}/vpc-ipv4-cidr-block")"
+               local vpc="$(get "meta-data/network/interfaces/macs/${mac}/vpc-ipv4-cidr-block")"
                local vpc_netaddress="${vpc%/*}"
                local vpc_netaddress_num="$(to_integer "${vpc_netaddress}")"
 
                # Get subnet size
-               local subnet="$(get "network/interfaces/macs/${mac}/subnet-ipv4-cidr-block")"
+               local subnet="$(get "meta-data/network/interfaces/macs/${mac}/subnet-ipv4-cidr-block")"
 
                local prefix="${subnet#*/}"
                local netmask="$(prefix2netmask "${prefix}")"
@@ -174,7 +177,7 @@ import_aws_configuration() {
                                ) >> /var/ipfire/ethernet/settings
 
                                # Import aliases for RED
-                               for alias in $(get "network/interfaces/macs/${mac}/local-ipv4s" | tail -n +2); do
+                               for alias in $(get "meta-data/network/interfaces/macs/${mac}/local-ipv4s" | tail -n +2); do
                                        echo "${alias},on,"
                                done > /var/ipfire/ethernet/aliases
                                ;;
@@ -246,6 +249,12 @@ import_aws_configuration() {
 
                # This script has now completed the first steps of setup
                touch /var/ipfire/main/firstsetup_ok
+
+               # 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
+               fi
        fi
 
        # All done
index 6fce670a03a79e8d75332bf677068ae78c5c6a35..896b3b17a1dd3c2471c7b6f4923356ba2847edec 100644 (file)
@@ -60,6 +60,14 @@ case "${1}" in
                # End DHCP client immediately
                dhclient -sf /etc/rc.d/helper/aws-setup -r "${intf}" &>/dev/null
 
+               # Run AWS user-data script
+               if [ -x "/tmp/aws-user-data.script" ]; then
+                       /tmp/aws-user-data.script
+
+                       # Delete the script right away
+                       rm /tmp/aws-user-data.script
+               fi
+
                exit 0
                ;;