Шеф-повар создает массив базы данных

#mysql #ruby #bash #chef-infra

#mysql #ruby #bash #шеф-повар-инфра

Вопрос:

Я пытаюсь создать базу данных с помощью массива.Я определяю массив базы данных. и затем создаю базу данных из элементов массивов.

Это мой рецепт шеф-повара для создания базы данных в mysql.

 array-  database=["testy1","testy2"]
script 'set Create database ' do
  interpreter 'bash'
  user 'root'
  cwd '/tmp'
  code <<-EOH

 mysql -uroot -p'#{pw}' -Be "CREATE DATABASE #{database}"
 EOH
  not_if "mysql -u root -p'#{pw}' -Be 'SHOW DATABASES' | grep #{database};"
end
  

STDERR: mysql: [Предупреждение] Использование пароля в интерфейсе командной строки может быть небезопасным.
ОШИБКА 1064 (42000) в строке 1: у вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘[testy1, testy2]’ в строке 1
—- Конечный вывод «bash» «/tmp/chef-script20190402-6843-gm0k0u» —-
Запустил «bash» «/tmp/chef-script20190402-6843-gm0k0u», вернул 1
Ожидаемым результатом будет создание баз данных testy1 и test2.

Комментарии:

1. Вероятно, вам нужно выполнить итерацию по этому списку базы данных вместо того, чтобы использовать его как есть.

2. Спасибо, но я не могу выполнить итерацию в виде отдельных значений.

3. Подсказка: database.each do |db| или что-то в этом роде.

Ответ №1:

хотя database cookbook не рекомендуется, вы можете попробовать и посмотреть, решит ли это вашу проблему. в документации chef есть руководство по созданию веб-приложения cookbook, использующего database cookbook.

что касается вашей проблемы, вам следует создать конфигурацию клиента mysql ( my.cnf ), которая позволит вам запускать mysql команду без указания учетных данных для входа (имя пользователя и пароль).