I'm having a really hard time figuring out how to install mysql cookbook (https://supermarket.chef.io/cookbooks/mysql) I've followed the instructions, but it's the first time i use Vagrant and Chef, and I keep getting stuck while installing the recipe
this is my vagrant file: http://pastebin.com/9Fgts4J6
this is my cheffile (I use librarian): http://pastebin.com/EfxPrC9S
this is my custom recipe 'mysql_config' located in my_cookbooks/mysql_config/recipes/default.rb: http://pastebin.com/Zh5Y4z8b
this is the error I'm getting:
==> default: ================================================================================
==> default: Error executing action `create` on resource 'template[default :create /etc/mysql-default/conf.d/default.cnf]'
==> default: ================================================================================
==> default:
==> default: Chef::Mixin::Template::TemplateError
==> default: ------------------------------------
==> default: undefined method `name' for nil:NilClass
this is my console output when running vagrant up: http://pastebin.com/ekkhHHru
Seems like i'm missing some configuration, but I don't know which and where to put it, I've searched for tutorials, but the mysql_cookbook and vagrant changed a lot lately, so i couldn't find any good ones. Any help on this would be greately appreciated
Vagrant file:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "puphpet/debian75-x64"
config.vm.synced_folder "../."
config.vm.provision "shell" do |s|
s.path = "provision/setup.sh"
end
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = ["./cookbooks", "./my_cookbooks"]
chef.add_recipe "mysql_config"
chef.json = {
"mysql_config" => {
"name" => "localhost"
}
}
end
end
Custom recipe:
mysql_service 'default' do
port '3306'
version '5.5'
name 'localhost'
initial_root_password 'p4ssw0rd'
action [:create, :start]
end
mysql_config 'default' do
source 'my.cnf.erb'
notifies :restart, 'mysql_service[default]'
action :create
end
Output of my console:
iMacBert:Vagrant bert$ vagrant reload --provision
==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'puphpet/debian75-x64' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/bert/Vagrant
default: /tmp/vagrant-chef-3/chef-solo-1/cookbooks => /Users/bert/Vagrant/cookbooks
default: /tmp/vagrant-chef-3/chef-solo-2/cookbooks => /Users/bert/Vagrant/my_cookbooks
==> default: Running provisioner: shell...
default: Running: /var/folders/y5/hhjgvl5j22g54t22yw8g7mbm0000gp/T/vagrant-shell20150108-3959-gkjuye.sh
==> default: stdin: is not a tty
==> default: Provisioning virtual machine...
==> default: Running provisioner: chef_solo...
default: Installing Chef (latest)...
Generating chef JSON and uploading...
==> default: Running chef-solo...
==> default: stdin: is not a tty
==> default: [2015-01-08T07:40:57+00:00] INFO: Forking chef instance to converge...
==> default: [2015-01-08T07:40:57+00:00] INFO: *** Chef 12.0.3 ***
==> default: [2015-01-08T07:40:57+00:00] INFO: Chef-client pid: 6289
==> default: [2015-01-08T07:40:58+00:00] INFO: Setting the run_list to ["recipe[mysql_config]"] from CLI options
==> default: [2015-01-08T07:40:58+00:00] INFO: Run List is [recipe[mysql_config]]
==> default: [2015-01-08T07:40:58+00:00] INFO: Run List expands to [mysql_config]
==> default: [2015-01-08T07:40:58+00:00] INFO: Starting Chef Run for packer-virtualbox-iso.vagrantup.com
==> default: [2015-01-08T07:40:58+00:00] INFO: Running start handlers
==> default: [2015-01-08T07:40:58+00:00] INFO: Start handlers complete.
==> default: [2015-01-08T07:41:27+00:00] INFO: service[localhost :create mysql] stopped
==> default: [2015-01-08T07:41:27+00:00] INFO: file[localhost :create /etc/mysql/my.cnf] backed up to /var/chef/backup/etc/mysql/my.cnf.chef-20150108074127.236557
==> default: [2015-01-08T07:41:27+00:00] INFO: file[localhost :create /etc/mysql/my.cnf] deleted file at /etc/mysql/my.cnf
==> default: [2015-01-08T07:41:27+00:00] INFO: link[localhost :create /usr/share/my-default.cnf] created
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /etc/mysql-localhost] created directory /etc/mysql-localhost
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /etc/mysql-localhost] owner changed to 105
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /etc/mysql-localhost] group changed to 107
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /etc/mysql-localhost] mode changed to 750
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /etc/mysql-localhost/conf.d] created directory /etc/mysql-localhost/conf.d
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /etc/mysql-localhost/conf.d] owner changed to 105
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /etc/mysql-localhost/conf.d] group changed to 107
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /etc/mysql-localhost/conf.d] mode changed to 750
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /run/mysql-localhost] created directory /run/mysql-localhost
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /run/mysql-localhost] owner changed to 105
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /run/mysql-localhost] group changed to 107
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /run/mysql-localhost] mode changed to 755
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /var/log/mysql-localhost] created directory /var/log/mysql-localhost
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /var/log/mysql-localhost] owner changed to 105
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /var/log/mysql-localhost] group changed to 107
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /var/log/mysql-localhost] mode changed to 750
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /var/lib/mysql-localhost] created directory /var/lib/mysql-localhost
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /var/lib/mysql-localhost] owner changed to 105
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /var/lib/mysql-localhost] group changed to 107
==> default: [2015-01-08T07:41:27+00:00] INFO: directory[localhost :create /var/lib/mysql-localhost] mode changed to 750
==> default: [2015-01-08T07:41:27+00:00] INFO: template[localhost :create /etc/mysql-localhost/my.cnf] created file /etc/mysql-localhost/my.cnf
==> default: [2015-01-08T07:41:27+00:00] INFO: template[localhost :create /etc/mysql-localhost/my.cnf] updated file contents /etc/mysql-localhost/my.cnf
==> default: [2015-01-08T07:41:27+00:00] INFO: template[localhost :create /etc/mysql-localhost/my.cnf] owner changed to 105
==> default: [2015-01-08T07:41:27+00:00] INFO: template[localhost :create /etc/mysql-localhost/my.cnf] group changed to 107
==> default: [2015-01-08T07:41:27+00:00] INFO: template[localhost :create /etc/mysql-localhost/my.cnf] mode changed to 600
==> default: [2015-01-08T07:41:27+00:00] INFO: bash[localhost :create initialize mysql database] ran successfully
==> default: [2015-01-08T07:41:27+00:00] INFO: bash[localhost :create initialize mysql database] sending run action to bash[localhost :create initial records] (delayed)
==> default: [2015-01-08T07:41:30+00:00] INFO: bash[localhost :create initial records] ran successfully
==> default: [2015-01-08T07:41:30+00:00] INFO: template[localhost :start /etc/init.d/mysql-localhost] created file /etc/init.d/mysql-localhost
==> default: [2015-01-08T07:41:30+00:00] INFO: template[localhost :start /etc/init.d/mysql-localhost] updated file contents /etc/init.d/mysql-localhost
==> default: [2015-01-08T07:41:30+00:00] INFO: template[localhost :start /etc/init.d/mysql-localhost] owner changed to 0
==> default: [2015-01-08T07:41:30+00:00] INFO: template[localhost :start /etc/init.d/mysql-localhost] group changed to 0
==> default: [2015-01-08T07:41:30+00:00] INFO: template[localhost :start /etc/init.d/mysql-localhost] mode changed to 755
==> default: [2015-01-08T07:41:30+00:00] INFO: service[localhost :start mysql-localhost] enabled
==> default: [2015-01-08T07:41:32+00:00] INFO: service[localhost :start mysql-localhost] started
==> default: [2015-01-08T07:41:32+00:00] INFO: directory[default :create /etc/mysql-default/conf.d] created directory /etc/mysql-default/conf.d
==> default: [2015-01-08T07:41:32+00:00] INFO: directory[default :create /etc/mysql-default/conf.d] owner changed to 105
==> default: [2015-01-08T07:41:32+00:00] INFO: directory[default :create /etc/mysql-default/conf.d] group changed to 107
==> default: [2015-01-08T07:41:32+00:00] INFO: directory[default :create /etc/mysql-default/conf.d] mode changed to 750
==> default:
==> default: ================================================================================
==> default: Error executing action `create` on resource 'template[default :create /etc/mysql-default/conf.d/default.cnf]'
==> default: ================================================================================
==> default:
==> default: Chef::Mixin::Template::TemplateError
==> default: ------------------------------------
==> default: undefined method `name' for nil:NilClass
==> default:
==> default: Resource Declaration:
==> default: ---------------------
==> default:
==> default: # In /tmp/vagrant-chef-3/chef-solo-1/cookbooks/mysql/libraries/provider_mysql_config.rb
==> default:
==> default:
==> default: 38: template "#{new_resource.name} :create #{include_dir}/#{new_resource.config_name}.cnf" do
==> default: 39: path "#{include_dir}/#{new_resource.config_name}.cnf"
==> default: 40: owner new_resource.owner
==> default: 41: group new_resource.group
==> default:
==> default: 42: mode '0640'
==> default: 43: variables(new_resource.variables)
==> default: 44: source new_resource.source
==> default: 45: cookbook new_resource.cookbook
==> default:
==> default: 46: action :create
==> default: 47: end
==> default:
==> default: 48: end
==> default:
==> default:
==> default: Compiled Resource:
==> default: ------------------
==> default: # Declared in /tmp/vagrant-chef-3/chef-solo-1/cookbooks/mysql/libraries/provider_mysql_config.rb:38:in `block in <class:MysqlConfig>'
==> default:
==> default: template("default :create /etc/mysql-default/conf.d/default.cnf") do
==> default: action [:create]
==> default: retries 0
==> default: retry_delay 2
==> default:
==> default: default_guard_interpreter :default
==> default: path "/etc/mysql-default/conf.d/default.cnf"
==> default: backup 5
==> default: atomic_update true
==> default:
==> default: source "my.cnf.erb"
==> default:
==> default: declared_type :template
==> default: cookbook_name :mysql_config
==> default: owner "mysql"
==> default:
==> default: group "mysql"
==> default:
==> default: mode "0640"
==> default:
==> default: end
==> default:
==> default:
==> default: Template Context:
==> default: -----------------
==> default: on line #1
==> default: 1: # Chef generated my.cnf for instance mysql-<%= @config.name %>
==> default:
==> default: 2:
==> default: 3: [client]
==> default:
==> default: 4: <% if @config.charset %>
==> default: 5: default-character-set = <%= @config.charset %>
==> default:
==> default:
==> default: [2015-01-08T07:41:32+00:00] INFO: Running queued delayed notifications before re-raising exception
==> default:
==> default: ================================================================================
==> default: Error executing action `create` on resource 'mysql_config[default]'
==> default: ================================================================================
==> default:
==> default:
==> default: Chef::Mixin::Template::TemplateError
==> default: ------------------------------------
==> default: undefined method `name' for nil:NilClass
==> default:
==> default:
==> default: Resource Declaration:
==> default: ---------------------
==> default: # In /tmp/vagrant-chef-3/chef-solo-2/cookbooks/mysql_config/recipes/default.rb
==> default:
==> default:
==> default:
==> default: 17: mysql_config 'default' do
==> default: 18: source 'my.cnf.erb'
==> default: 19: notifies :restart, 'mysql_service[default]'
==> default:
==> default: 20: action :create
==> default: 21: end
==> default:
==> default:
==> default:
==> default: Compiled Resource:
==> default: ------------------
==> default: # Declared in /tmp/vagrant-chef-3/chef-solo-2/cookbooks/mysql_config/recipes/default.rb:17:in `from_file'
==> default:
==> default: mysql_config("default") do
==> default:
==> default: action [:create]
==> default: updated true
==> default: updated_by_last_action true
==> default: retries 0
==> default:
==> default: retry_delay 2
==> default:
==> default: default_guard_interpreter :default
==> default: declared_type :mysql_config
==> default:
==> default: cookbook_name :mysql_config
==> default: recipe_name "default"
==> default: source "my.cnf.erb"
==> default: group "mysql"
==> default: owner "mysql"
==> default: instance "default"
==> default:
==> default: config_name "default"
==> default: end
==> default:
==> default:
==> default: Template Context:
==> default: -----------------
==> default: on line #1
==> default: 1: # Chef generated my.cnf for instance mysql-<%= @config.name %>
==> default: 2:
==> default:
==> default: 3: [client]
==> default: 4: <% if @config.charset %>
==> default:
==> default: 5: default-character-set = <%= @config.charset %>
==> default:
==> default:
==> default: [2015-01-08T07:41:32+00:00] INFO: Running queued delayed notifications before re-raising exception
==> default: [2015-01-08T07:41:32+00:00] ERROR: Running exception handlers
==> default: [2015-01-08T07:41:32+00:00] ERROR: Exception handlers complete
==> default: [2015-01-08T07:41:32+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> default: [2015-01-08T07:41:32+00:00] ERROR:
==> default:
==> default: Chef::Mixin::Template::TemplateError (undefined method `name' for nil:NilClass) on line #1:
==> default:
==> default: 1: # Chef generated my.cnf for instance mysql-<%= @config.name %>
==> default: 2:
==> default: 3: [client]
==> default: 4: <% if @config.charset %>
==> default: 5: default-character-set = <%= @config.charset %>
==> default:
==> default: (erubis):1:in `block in evaluate'
==> default: /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/erubis-2.7.0/lib/erubis/evaluator.rb:74:in `instance_eval'
==> default: /opt/chef/embedded/lib/ruby/gems/2.1.0/gems/erubis-2.7.0/lib/erubis/evaluator.rb:74:in `evaluate'
==> default: /opt/chef/embedded/apps/chef/lib/chef/mixin/template.rb:126:in `_render_template'
==> default: /opt/chef/embedded/apps/chef/lib/chef/mixin/template.rb:112:in `render_template'
==> default: /opt/chef/embedded/apps/chef/lib/chef/provider/template/content.rb:43:in `file_for_provider'
==> default: /opt/chef/embedded/apps/chef/lib/chef/file_content_management/content_base.rb:40:in `tempfile'
==> default: /opt/chef/embedded/apps/chef/lib/chef/provider/file.rb:451:in `tempfile'
==> default: /opt/chef/embedded/apps/chef/lib/chef/provider/file.rb:337:in `do_generate_content'
==> default: /opt/chef/embedded/apps/chef/lib/chef/provider/file.rb:148:in `action_create'
==> default: /opt/chef/embedded/apps/chef/lib/chef/provider.rb:145:in `run_action'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource.rb:582:in `run_action'
==> default: /opt/chef/embedded/apps/chef/lib/chef/runner.rb:49:in `run_action'
==> default: /opt/chef/embedded/apps/chef/lib/chef/runner.rb:81:in `block (2 levels) in converge'
==> default: /opt/chef/embedded/apps/chef/lib/chef/runner.rb:81:in `each'
==> default: /opt/chef/embedded/apps/chef/lib/chef/runner.rb:81:in `block in converge'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/resource_list.rb:83:in `block in execute_each_resource'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/stepable_iterator.rb:116:in `call'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/stepable_iterator.rb:116:in `call_iterator_block'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/stepable_iterator.rb:85:in `step'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/stepable_iterator.rb:104:in `iterate'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/stepable_iterator.rb:55:in `each_with_index'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/resource_list.rb:81:in `execute_each_resource'
==> default: /opt/chef/embedded/lib/ruby/2.1.0/forwardable.rb:183:in `execute_each_resource'
==> default: /opt/chef/embedded/apps/chef/lib/chef/runner.rb:80:in `converge'
==> default: /opt/chef/embedded/apps/chef/lib/chef/provider/lwrp_base.rb:61:in `recipe_eval_with_update_check'
==> default: /opt/chef/embedded/apps/chef/lib/chef/provider/lwrp_base.rb:45:in `block in action'
==> default: /opt/chef/embedded/apps/chef/lib/chef/provider.rb:145:in `run_action'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource.rb:582:in `run_action'
==> default: /opt/chef/embedded/apps/chef/lib/chef/runner.rb:49:in `run_action'
==> default: /opt/chef/embedded/apps/chef/lib/chef/runner.rb:81:in `block (2 levels) in converge'
==> default: /opt/chef/embedded/apps/chef/lib/chef/runner.rb:81:in `each'
==> default: /opt/chef/embedded/apps/chef/lib/chef/runner.rb:81:in `block in converge'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/resource_list.rb:83:in `block in execute_each_resource'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/stepable_iterator.rb:116:in `call'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/stepable_iterator.rb:116:in `call_iterator_block'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/stepable_iterator.rb:85:in `step'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/stepable_iterator.rb:104:in `iterate'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/stepable_iterator.rb:55:in `each_with_index'
==> default: /opt/chef/embedded/apps/chef/lib/chef/resource_collection/resource_list.rb:81:in `execute_each_resource'
==> default: /opt/chef/embedded/lib/ruby/2.1.0/forwardable.rb:183:in `execute_each_resource'
==> default: /opt/chef/embedded/apps/chef/lib/chef/runner.rb:80:in `converge'
==> default: /opt/chef/embedded/apps/chef/lib/chef/client.rb:315:in `converge'
==> default: /opt/chef/embedded/apps/chef/lib/chef/client.rb:400:in `block in run'
==> default: /opt/chef/embedded/apps/chef/lib/chef/client.rb:399:in `catch'
==> default: /opt/chef/embedded/apps/chef/lib/chef/client.rb:399:in `run'
==> default: /opt/chef/embedded/apps/chef/lib/chef/application.rb:261:in `block in fork_chef_client'
==> default: /opt/chef/embedded/apps/chef/lib/chef/application.rb:249:in `fork'
==> default: /opt/chef/embedded/apps/chef/lib/chef/application.rb:249:in `fork_chef_client'
==> default: /opt/chef/embedded/apps/chef/lib/chef/application.rb:215:in `block in run_chef_client'
==> default: /opt/chef/embedded/apps/chef/lib/chef/local_mode.rb:38:in `with_server_connectivity'
==> default: /opt/chef/embedded/apps/chef/lib/chef/application.rb:201:in `run_chef_client'
==> default: /opt/chef/embedded/apps/chef/lib/chef/application/solo.rb:245:in `block in interval_run_chef_client'
==> default: /opt/chef/embedded/apps/chef/lib/chef/application/solo.rb:234:in `loop'
==> default: /opt/chef/embedded/apps/chef/lib/chef/application/solo.rb:234:in `interval_run_chef_client'
==> default: /opt/chef/embedded/apps/chef/lib/chef/application/solo.rb:224:in `run_application'
==> default: /opt/chef/embedded/apps/chef/lib/chef/application.rb:58:in `run'
==> default: /opt/chef/embedded/apps/chef/bin/chef-solo:25:in `<top (required)>'
==> default: /usr/bin/chef-solo:40:in `load'
==> default: /usr/bin/chef-solo:40:in `<main>'
==> default: [2015-01-08T07:41:32+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.
iMacBert:Vagrant bert$
I'm having the same problem. I don't know enough about Chef templating to understand why @config isn't set, but it is definitely nil, which is what is throwing the error. You can't even leave the source option blank because the mysql cookbook will go looking for a default.cnf.erb which doesn't exist and just throw a slightly different error. Instead, you have to give essentially an empty source as Ernie said.
However, then you have a totally empty conf file, so if we figure this out we'll have to go looking for it again. Instead, I did this:
<% if [email protected]? %>
<% if @config.name %># Chef generated my.cnf for instance mysql-<%= @config.name %><% end %>
[client]
default-character-set = <%= @config.charset %>
<% end %>
<% if @config.port %>
port = <%= @config.port %>
<% end %>
<% if @socket_file %>
socket = <%= @socket_file %>
<% end %>
[mysql]
<% if @config.charset %>
default-character-set = <%= @config.charset %>
<% end %>
[mysqld]
<% if @config.run_user %>
user = <%= @config.run_user %>
<% end %>
<% if @pid_file %>
pid-file = <%= @pid_file %>
<% end %>
<% if @socket_file %>
socket = <%= @socket_file %>
<% end %>
<% if @config.bind_address %>
bind-address = <%= @config.bind_address %>
<% end %>
<% if @config.port %>
port = <%= @config.port %>
<% end %>
<% if @data_dir %>
datadir = <%= @data_dir %>
<% end %>
<% if @tmp_dir %>
tmpdir = <%= @tmp_dir %>
<% end %>
<% if @lc_messages_dir %>
lc-messages-dir = <%= @lc_messages_dir %>
<% end %>
<% if @error_log %>
log-error = <%= @error_log %>
<% end %>
<% if @include_dir %>
!includedir <%= @include_dir %>
<% end %>
[mysqld_safe]
<% if @socket_file %>
socket = <%= @socket_file %>
<% end %>
<% end %>
So now we don't get errors, but as soon as we can figure out how to properly set @config, we can remove this block and it's matching endblock
<% if [email protected]? %>
and be on our way!
I will update this answer if I can figure out how to get the @config variable working.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With