как передать параметры в файл 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-execprovisioner, но у меня возникли проблемы с подключением к моему экземпляру, потому что мне придется передать свой закрытый ключ в формате .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

Другие вопросы по тегам