Vagrant после / до проблемы запуска сценария запуска сценария - PullRequest
0 голосов
/ 27 марта 2019

Я довольно новичок в Vagrant, но получил базовый навык.Тем не менее существует проблема после обновления Vagrant до версии 2.2.4.Я запускаю сценарий базовой оболочки для установки sql db и необходимых конфигураций, а затем мне нужно запустить другой скрипт после того, как все готово, чтобы создать db и заполнить его данными.Также, когда среда разрушается, вызывается другой триггер для выгрузки дБ для последующей загрузки.

Часть, относящаяся к Vagrantfile:

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.ssh.insert_key = true

  config.vm.define "db" do |db|
    db.vm.hostname = "local-db-dev"
    db.vm.network "private_network", ip: "192.168.100.20"
    db.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--cpus", "1" ]
      vb.customize ["modifyvm", :id, "--memory", "512"]
      vb.customize ["modifyvm", :id, "--name", "DB dev"]
    end
    db.vm.synced_folder "./dbBackup", "/srv/dbBackup", owner: "vagrant", group: "vagrant", type: "nfs"
    db.vm.provision :shell, path: "bootstrap-db.sh"

    db.trigger.after :up do |trigger|
      trigger.info = "DB up procedure ..."
      trigger.run = {path: "./dbBackup/bootstrap-db_up.sh"}
    end

    db.trigger.before :destroy, :halt, :suspend do |trigger|
      trigger.info = "DB down procedure ..."
      trigger.run = {path: "./dbBackup/bootstrap-db_down.sh"}
    end
  end
end

bootstrap-db_down.sh:

#!/usr/bin/env bash
export MYSQL_PWD="pass"

USER="user"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="/srv/dbBackup/$TIMESTAMP"
mkdir -p "$BACKUP_DIR"

databases=`mysql -u $USER -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`

for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "sys" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
        echo "Dumping database: $db"
        mysqldump -u $USER --databases $db > "$BACKUP_DIR/backupdb.$db.sql"
    fi
done

Все хорошо, пока не будет вызван триггер и не будет выполнен скрипт.Например, есть первая команда 'mkdir' перед триггером уничтожения.Ответ на исполнение - отказано в разрешении.Изменил его на «sudo mkdir», но тогда ответ таков: sudo неизвестен.

Я явно недостаточно опытен, чтобы понимать разрешения в этом случае.


РЕДАКТИРОВАТЬ:Некоторый прогресс

Благодаря комментарию Мэтта Шухарда удалось проверить, что на самом деле происходит с каталогом, и увидел, что я не могу получить доступ к каталогу таким образом.Изменение в запущенном скрипте улучшило ситуацию, позволив мне создать папку, но теперь я получаю следующее исключение: «bash: mysql: команда не найдена».Думаю, я не до конца понимаю, как и где запускается мой сценарий.

Отредактировано bootstrap-db_down.sh:

#!/usr/bin/env bash
export MYSQL_PWD="rooter"
USER="root"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="./dbBackup/$TIMESTAMP"
mkdir "$BACKUP_DIR"

databases=`mysql -u $USER -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`

for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "sys" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
        echo "Dumping database: $db"
        mysqldump -u $USER --databases $db > "$BACKUP_DIR/backupdb.$db.sql"
    fi
done

РЕДАКТИРОВАТЬ: окончательное решение

Наконец-то понял.Проблема снова возникла между стулом и клавиатурой.

Я просто не понимал разницы между trigger.run и trigger.run_remote, поэтому я попытался запустить скрипт локально, но ожидал, что это повлияет на удаленное управление.Я добавлю соответствующие примеры кода на тот случай, если кто-то наткнется на подобную проблему.

Часть, относящаяся к Vagrantfile:

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.ssh.insert_key = true

  config.vm.define "db" do |db|
    db.vm.hostname = "local-db-dev"
    db.vm.network "private_network", ip: "192.168.100.20"
    db.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--cpus", "1" ]
      vb.customize ["modifyvm", :id, "--memory", "512"]
      vb.customize ["modifyvm", :id, "--name", "DB dev"]
    end
    db.vm.synced_folder "./dbBackup", "/srv/dbBackup", owner: "vagrant", group: "vagrant", type: "nfs"
    db.vm.provision :shell, path: "bootstrap-db.sh"

    db.trigger.after :up do |trigger|
      trigger.info = "DB up procedure ..."
      trigger.run_remote = {inline: "/srv/dbBackup/bootstrap-db_up.sh"}
    end

    db.trigger.before :destroy, :halt, :suspend do |trigger|
      trigger.info = "DB down procedure ..."
      trigger.run_remote = {inline: "/srv/dbBackup/bootstrap-db_down.sh"}
    end
  end
end

bootstrap-db_down.sh:

#!/usr/bin/env bash
export MYSQL_PWD="pass"

USER="user"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="/srv/dbBackup/$TIMESTAMP"
mkdir -p "$BACKUP_DIR"

databases=`mysql -u $USER -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`

for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "sys" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
        echo "Dumping database: $db"
        mysqldump -u $USER --databases $db > "$BACKUP_DIR/backupdb.$db.sql"
    fi
done
...