Skip to main content
User data
Last update:

User data

User data — user configuration parameters of the server operating system. They are described as scripts in cloud-config format (text files with YAML syntax) or as a bash script. The scripts are automatically Base64 encoded, transferred to the server, and executed by the cloud-init agent when the operating system is first started. The use of user data helps automate server configuration.

Specify user data can be done at the operating system installation stage.

Read more about cloud-config and bash script formats in the instructions User data formats cloud-init documentation.

In scripts, you can pass both individual operating system configuration parameters and entire sequences of parameters. For example:

Check out the other examples in the manual Cloud config examples cloud-init documentation.

Specify user data

You can only specify user data when installing the Linux operating system by auto-installation. The script text is added to the field User data.

After the automatic installation is complete, the text in the field User data can't be changed.

The maximum size of a script with data that is not Base64 encoded is 16 KB.

Examples of user data

Set time zone

An example script for setting the Europe/Moscow time zone:

#cloud-config

timezone: Europe/Moscow

Create a directory and upload files to it

An example script to create a directory and upload a file to it over the network:

#cloud-config

runcmd:
- mkdir /run/newdir
- [ wget, "http://example.com", -O, /run/newdir/index.html ]

Update repositories and install packages

Sample script to install pwgen and pastebinit:

#cloud-config

package_update: true
packages:
- pwgen
- pastebinit

Place the SSH key on the server

Sample script:

#cloud-config

ssh_authorized_keys:
- ssh-rsa AAAAB3N…V7NZ user1@host
- ssh-rsa AAAAB3N…NtHw== user2@server

Customize the configuration file

Sample script for the resolv.conf domain name resolver:

#cloud-config

manage_resolv_conf: true
resolv_conf:
nameservers: ['4.4.4.4', '8.8.8.8']
searchdomains:
- foo.example.com
- bar.example.com
domain: example.com
options:
rotate: true
timeout: 1

Disable internet access

Sample script:

#!/bin/bash
ip addr show
public_interface=$(ip -4 addr show | awk '/inet/ && !/127.0.0.1/ && !/192\.0\.2\.0/ && !/10\./ && !/198\.(1[6-9]|2[0-9]|3[0-1])\./ && !/192\.168\./ {print $NF}')
if [ -n "$public_interface" ]; then
ip link set down dev "$public_interface"
else
echo "Public interface not found."
fi