как передать параметры в файл bash из terraform
Я использую cloud-init для запуска команд на моем экземпляре с использованием пользовательских данных. Я хочу создать пароль для ноутбука Jupyter, который я хочу запустить как systemd.
это мой терраформ main.tf
resource "oci_core_instance" "jupyterlab_instance" {
metadata = {
ssh_authorized_keys = var.ssh_public_key_file
user_data = base64encode(file(var.bootstrap_file) "123456")
}
bootstrap.sh
function systemd_jupyter_instance() {
echo "setting up systemd for jupyter at localhost:8888"
# password=$(python -c "from IPython.lib.security import passwd; print(passwd('PASS'))")
cat <<EOF > /etc/systemd/system/jupyterInst.service
[Unit]
Description=Jupyter instance
[Service]
User=opc
Group=opc
WorkingDirectory=/etc/jupyter/
ExecStart=/usr/local/bin/jupyter-notebook --ip=0.0.0.0 --port 8888 --NotebookApp.password=$1
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl is-active --quiet jupyterInst && sudo systemctl stop jupyterInst
sudo systemctl enable --now jupyterInst
sudo systemctl status jupyterInst
}
function main() {
systemd_jupyter_instance
}
main
Я пробовал это, и у меня не может быть места при передаче user_data. я пыталсяremote-exec
provisioner, но у меня возникли проблемы с подключением к моему экземпляру, потому что мне придется передать свой закрытый ключ в формате .tf, которого я хочу избежать.
Любая помощь приветствуется. Спасибо
1 ответ
В этом случае я бы предложил использоватьtemplatefile
встроенная функция [1]. Для этого необходимо внести небольшие изменения как в ресурс, так и в скрипт пользовательских данных. В блоке ресурсов его нужно изменить на:
resource "oci_core_instance" "jupyterlab_instance" {
metadata = {
ssh_authorized_keys = var.ssh_public_key_file
user_data = base64encode(tamplatefile(var.bootstrap_file,
password = "123456"
))
}
Затем в самом файле вам придется удалить$1
и добавьте следующее:
#!/bin/bash
systemd_jupyter_instance() {
echo "setting up systemd for jupyter at localhost:8888"
# password=$(python -c "from IPython.lib.security import passwd; print(passwd('PASS'))")
cat <<EOF > /etc/systemd/system/jupyterInst.service
[Unit]
Description=Jupyter instance
[Service]
User=opc
Group=opc
WorkingDirectory=/etc/jupyter/
ExecStart=/usr/local/bin/jupyter-notebook --ip=0.0.0.0 --port 8888 --NotebookApp.password=${password}
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl is-active --quiet jupyterInst && sudo systemctl stop jupyterInst
sudo systemctl enable --now jupyterInst
sudo systemctl status jupyterInst
}
main() {
systemd_jupyter_instance
}
main
Обычно имя файла будет иметь.tpl
расширение, чтобы указать, что это шаблон.
РЕДАКТИРОВАТЬ: Согласно комментариям, добавлен шебанг в начале шаблона.
[1] https://www.terraform.io/language/functions/templatefile