2015-01-26 36 views
0

好吧,我有一個調用Opscode MySQL cookbook的食譜。如何在Chef Ruby塊中執行MySQL

我可以創建數據庫,但我不確定如何在廚師食譜中創建具有讀/寫權限的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 

AND - 它失敗在這裏

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

錯誤提到'GRANT REPLICATION SLAVE',它不在配方片段中。 – coderanger 2015-01-26 18:48:00

+0

剛編輯它 - 抱歉沒有完整的信息! – 2015-01-26 18:56:33

+0

如何設置複製的示例在mysql cookbook中給出。請參閱https://github.com/chef-cookbooks/mysql/blob/master/test/fixtures/cookbooks/mysql_replication_test/recipes/default.rb#L48 – 2015-01-26 19:46:01

回答

1

您在錯誤的行上有]%x[]必須圍繞整個命令字符串。

+0

是 - 語法錯誤。感謝CODERANGER! – 2015-01-26 20:02:45