2015-01-26 2 views
0

Хорошо, у меня есть рецепт, который вызывает Cookbook Opscode MySQL.Как выполнить MySQL в блоке Ruby Chef

Я могу создать базу данных, но я не уверен, как создать пользователя MySQL с правами чтения/записи в рецепте шеф-повара.

Вот мой рецепт:

include_recipe 'percona' #this is an example 

mysql_secret = Chef::EncryptedDataBagItem.load_secret("#{node[:percona][:encrypted_data_bag_secret_file]}") 
mysql_creds = Chef::EncryptedDataBagItem.load("passwords", "mysql", mysql_secret) 
pdns_password='[email protected]@[email protected]$!' 
mysql_connection_info = { 
    :host => "127.0.0.1", 
    :username => 'root', 
    :password => mysql_creds["root"] 
} 

# 
# Only write to master pdb01 
# 
if node.name =~ /pdb01/ 
    dbs=['serv'] 
    # Create application database 
    dbs.each do |db| 
     ruby_block "create_#{db}_db" do 
      block do 
      %x[mysql -uroot -e "CREATE DATABASE #{db};"] 
      end 
      not_if "mysql -u root -e \"SHOW DATABASES LIKE '#{db}'\" | grep #{db}"; 
      action :create 
     end 
    end 
end 
# Grant mysql privileges 
dbs.each do |db| 
    ruby_block "add_servo_#{db}permissions" do 
     block do 
      %x[mysql -u root -e "GRANT SELECT,INSERT,UPDATE,DELETE \ 
      ON #{db}.* TO 'serv'@'127.0.0.1' IDENTIFIED BY '#{servo_password}';"] 
      end 
      not_if "mysql -u root -e \"SELECT user, host FROM mysql.user\" | \ 
       grep serv | grep #{db}" 
      action :create 
     end 
end 
# 
# Create pdb02 slave replication 
# 

if node.name =~ /pdb02/ 
    dbs=['serv','serv_app' 
    # Create application database 
    dbs.each do |db| 
     ruby_block "create_#{db}_db" do 
      block do 
      %x[mysql -uroot -e "CREATE DATABASE #{db};"] 
      end 
      not_if "mysql -u root -e \"SHOW DATABASES LIKE '#{db}'\" | grep #{db}"; 
      action :create 
     end 
    end 
    dbs.each do |db| 
     ruby_block "add_serv_#{db}permissions" do 
      block do 
       %x[mysql -u root -e "GRANT SELECT,INSERT,UPDATE,DELETE \ 
       ON #{db}.* TO 'repl'@'127.0.0.1' IDENTIFIED BY 'replpass';"] 
       GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'replpass'; 
       end 
       not_if "mysql -u root -e \"SELECT user, host FROM mysql.user\" | \ 
        grep repl | grep #{db}" 
       action :create 
      end 
    end 
end 

И - он не здесь:

SyntaxError 
    ----------- 
    /tmp/kitchen/cache/cookbooks/cb-dataBases/recipes/pdb.rb:55: syntax error, unexpected tIDENTIFIER, expecting ']' 

     dbs.each do |db| 
     ^
    /tmp/kitchen/cache/cookbooks/cb-dataBases/recipes/pdb.rb:69: syntax error, unexpected '.' 
    ... GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY... 
    ...        ^
    /tmp/kitchen/cache/cookbooks/cb-dataBases/recipes/pdb.rb:69: `@'' is not allowed as an instance variable name 
    /tmp/kitchen/cache/cookbooks/cb-dataBases/recipes/pdb.rb:69: syntax error, unexpected $end, expecting keyword_end 
    ...ICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'replpass'; 
    ...        ^

Что я делаю неправильно?

+0

В этой ошибке упоминается «СООТВЕТСТВИЕ ГРАНТОВ», который отсутствует в фрагменте рецепта. – coderanger

+0

только что отредактировал его - извините за отсутствие полной информации! –

+0

Пример настройки репликации приведен в кулинарной книге mysql. См. Https://github.com/chef-cookbooks/mysql/blob/master/test/fixtures/cookbooks/mysql_replication_test/recipes/default.rb#L48 –

ответ

1

У вас есть ] на неправильной линии. %x[] должен быть вокруг всей командной строки.

+0

Yep - синтаксические ошибки. СПАСИБО КОДЕРАНГЕР! –

Смежные вопросы