Custom Scripts
Custom Scripts are scripts that use the cloud-config
format, designed to be run by the cloud-init process. These scripts are generally used for the initial configuration of a server and run on the first boot.
Put simply, deploying a server with a custom script allows you to run arbitrary commands and change several aspects of the server during provisioning.
Here are a few examples of what you can do with a very simple custom script:
- Define machine hostname
- Add SSH keys
- Change user passwords
File format
UNIX-like systems
If you're using a UNIX-like O.S. such as Linux, your scripts must be written using the YAML file format, which uses whitespace and new-lines to delimit lists, associative arrays, and values.
These files are generally fairly intuitive and easy to understand, but there are a few things you need to keep in mind when using them. Here is a good getting started guide from the guys at Ansible that can help.
Windows systems
For Windows images, you'll have to use the cloud-baseinit convention. This is just a fancy way of saying that your custom scripts will have to be written as if you were using the Powershell. Here's a straightforward example:
mkdir c:/test New-Item c:/test/test.txt Set-Content c:/test/test.txt 'Hello World'
Adding a custom script
- When creating a new server, click on New custom script. (Or go to Servers > Custom Scripts)
- The name of your script needs to be preceded by a number and a dash. We use this to define the order of the scripts that you select. For instance, a script named
01-Script
will run before02-Script
because 01 takes priority over 02. - Click on add and proceed with deploying your server.
Variables
On June 22nd, 2020, Maxihost introduced Variables to custom scripts. Variables can be used to automatically replace placeholders on your custom scripts with data that is only available during or right after deployment.
Variables are wrapped in double curly brackets ({{ VAR }}
). Here are the available variables that can be used by any Custom Script.
Variable | Value |
{{ HOSTNAME }} |
The normalized hostname you chose |
{{ PASSWORD }} |
Root password of the deployed server |
{{ USERDISTRO }} |
Distro name. Examples: ubuntu, centos, windows |
{{ MACADR }} |
Mac Address |
{{ WANIP }} |
Wan IP address |
{{ SSH }} |
Array of SSH keys you chose to deploy your server with. |
Examples
Here's an example of a custom script that uses the {{ PASSWORD }} variable to change the root password and allow for root logins.
#cloud-config user: root chpasswd: {expire: false} password: {{ PASSWORD }} disable_root: false ssh_pwauth: true runcmd: - echo "PermitRootLogin yes" >> /etc/ssh/sshd_config - systemctl restart ssh
You can find more great examples on cloud-init's docs here.