cyclecloud/user-data.yaml.tpl (111 lines of code) (raw):
#cloud-config
apt:
sources:
cyclecloud:
source: "deb [signed-by=$KEY_FILE] https://packages.microsoft.com/repos/cyclecloud bionic main"
key: |
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (GNU/Linux)
mQENBFYxWIwBCADAKoZhZlJxGNGWzqV+1OG1xiQeoowKhssGAKvd+buXCGISZJwT
LXZqIcIiLP7pqdcZWtE9bSc7yBY2MalDp9Liu0KekywQ6VVX1T72NPf5Ev6x6DLV
7aVWsCzUAF+eb7DC9fPuFLEdxmOEYoPjzrQ7cCnSV4JQxAqhU4T6OjbvRazGl3ag
OeizPXmRljMtUUttHQZnRhtlzkmwIrUivbfFPD+fEoHJ1+uIdfOzZX8/oKHKLe2j
H632kvsNzJFlROVvGLYAk2WRcLu+RjjggixhwiB+Mu/A8Tf4V6b+YppS44q8EvVr
M+QvY7LNSOffSO6Slsy9oisGTdfE39nC7pVRABEBAAG0N01pY3Jvc29mdCAoUmVs
ZWFzZSBzaWduaW5nKSA8Z3Bnc2VjdXJpdHlAbWljcm9zb2Z0LmNvbT6JATUEEwEC
AB8FAlYxWIwCGwMGCwkIBwMCBBUCCAMDFgIBAh4BAheAAAoJEOs+lK2+EinPGpsH
/32vKy29Hg51H9dfFJMx0/a/F+5vKeCeVqimvyTM04C+XENNuSbYZ3eRPHGHFLqe
MNGxsfb7C7ZxEeW7J/vSzRgHxm7ZvESisUYRFq2sgkJ+HFERNrqfci45bdhmrUsy
7SWw9ybxdFOkuQoyKD3tBmiGfONQMlBaOMWdAsic965rvJsd5zYaZZFI1UwTkFXV
KJt3bp3Ngn1vEYXwijGTa+FXz6GLHueJwF0I7ug34DgUkAFvAs8Hacr2DRYxL5RJ
XdNgj4Jd2/g6T9InmWT0hASljur+dJnzNiNCkbn9KbX7J/qK1IbR8y560yRmFsU+
NdCFTW7wY0Fb1fWJ+/KTsC4=
=J6gs
-----END PGP PUBLIC KEY BLOCK-----
package_update: true
packages:
# Needed for CycleCloud CLI. Must specify python3.8-venv, python3-venv does not work.
- python3.8-venv
# These are needed, but failing when installing here. See runcmd.
#- openjdk-8-jdk
# Will "install" (download package), but will not be operational. See runcmd.
# Tested with this specific version
#- cyclecloud8=8.3.0-3062
runcmd:
#
# Install CycleCloud
#
# Manually install CycleCloud as it will fail during install due to Java 11 being installed as default and not working with apt
- apt-get install -yq openjdk-8-jdk
- update-java-alternatives -s java-1.8.0-openjdk-amd64
- apt-get install -yq cyclecloud8=8.3.0-3062
# Find temp install dir. I've found it to be 490f4cc0-d326-4f4b-b48e-26e6320f3acb, but including to avoid brittleness
# Because /opt/cycle_server/config/ already exists, you need to force install
- bash `find /opt/cycle_server/.installer -maxdepth 1 -type d | grep '/opt/cycle_server/.installer/'`/install.sh --force
- /opt/cycle_server/cycle_server await_startup
# Install CycleCloud CLI
- unzip /opt/cycle_server/tools/cyclecloud-cli.zip -d /tmp
- python3 /tmp/cyclecloud-cli-installer/install.py -y --installdir /home/${cyclecloud_admin_name}/.cycle --system
# Separate command to avoid potential quote / double quote / var expansion troubles
- cmd="/usr/local/bin/cyclecloud initialize --loglevel=debug --batch --url=http://localhost:8080 --verify-ssl=false --username=${cyclecloud_admin_name} --password='${cyclecloud_admin_password}'"
# Must run as user or CycleCloud will attempt to install in /root/.cycle
- runuser -l ${cyclecloud_admin_name} -c "$cmd"
- runuser -l ${cyclecloud_admin_name} -c '/usr/local/bin/cyclecloud account create -f /opt/cycle_server/azure_subscription.json'
- rm -f /opt/cycle_server/config/data/cyclecloud_account.json.imported
# Import slurm cluster into CyleCloud
# - Assume files have been copied to /home/${cyclecloud_admin_name}/{cyclecloud-projects, slurm}
# Upload projects to CycleCloud "locker". These will be used to configure nodes in the cluster.
- for proj in /home/${cyclecloud_admin_name}/cyclecloud-projects/cc_*; do cd $proj; echo $proj; /usr/local/bin/cyclecloud project upload '${cyclecloud_subscription_name}-storage' --config /home/${cyclecloud_admin_name}/.cycle/config.ini; done
# Copy Slurm config so CycleCloud is aware of it
- cp /home/${cyclecloud_admin_name}/slurm/slurm-*.txt /opt/cycle_server/config/data
# Import Slurm config to create cluster in CycleCloud
- /usr/local/bin/cyclecloud import_cluster slurm -f /home/${cyclecloud_admin_name}/slurm/slurm.txt -p /home/${cyclecloud_admin_name}/slurm/slurm.json --config /home/${cyclecloud_admin_name}/.cycle/config.ini
write_files:
- path: /opt/cycle_server/config/java_home
content: |
/usr/local/openjdk-8
- path: /opt/cycle_server/config/data/cyclecloud_account.json
content: |
[
{
"AdType": "Application.Setting",
"Name": "cycleserver.installation.initial_user",
"Value": "${cyclecloud_admin_name}"
},
{
"AdType": "AuthenticatedUser",
"Name": "${cyclecloud_admin_name}",
"RawPassword": "${cyclecloud_admin_password}",
"Superuser": true
},
{
"AdType": "Credential",
"CredentialType": "PublicKey",
"Name": "${cyclecloud_admin_name}/public",
"PublicKey": "${cyclecloud_admin_public_key}"
},
{
"AdType": "Application.Setting",
"Name": "cycleserver.installation.complete",
"Value": true
}
]
- path: /opt/cycle_server/azure_subscription.json
content: |
{
"Environment": "public",
"AzureRMUseManagedIdentity": true,
"AzureResourceGroup": "${cyclecloud_rg}",
"AzureRMApplicationId": " ",
"AzureRMApplicationSecret": " ",
"AzureRMSubscriptionId": "${azure_subscription_id}",
"AzureRMTenantId": " ${azure_tenant_id}",
"DefaultAccount": true,
"Location": "${cyclecloud_location}",
"Name": "${cyclecloud_subscription_name}",
"Provider": "azure",
"ProviderId": "${azure_subscription_id}",
"RMStorageAccount": "${cyclecloud_storage_account}",
"RMStorageContainer": "${cyclecloud_storage_container}",
"AcceptMarketplaceTerms": true
}