2017-03-06 171 views
1

这是我的MongoDB的菜谱食谱:厨师:延迟服务通知

node.default['mongodb3']['version'] = '3.4.2' 
node.default['mongodb3']['repo'] = 'https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/' 

node.default['mongodb3']['config']['mongod']['net']['port'] = 30158 
node.default['mongodb3']['config']['mongod']['net']['bindIp'] = 'localhost' 
node.default['mongodb3']['config']['mongod']['security']['authorization'] = 'enabled' 

include_recipe 'mongodb3::default' 

cookbook_file "/tmp/setupUsers.js" do 
    source "mongo/setupUsers.js" 
    mode 0755 
end 

execute "Add Mongo Users" do 
    command "mongo localhost:30158 /tmp/setupUsers.js" 
end 

正如你可以看到:

  1. 我安装蒙戈3.4和
  2. 我试图执行mongo localhost:30158 /tmp/setupUsers.js

    ==> default: * execute[Add Mongo Users] action run 
    ==> default: 
    ==> default:  [execute] MongoDB shell version v3.4.2 
    ==> default:    connecting to: localhost:30158 
    ==> default:    2017-03-06T10:56:56.875+0000 W NETWORK [thread1] Failed to connect to 127.0.0.1:30158, in(checking socket 
    for error after poll), reason: Connection refused 
    ==> default:    2017-03-06T10:56:56.879+0000 E QUERY [thread1] Error: couldn't connect to server localhost:30158, connec 
    tion attempt failed : 
    ==> default:    [email protected]/mongo/shell/mongo.js:237:13 
    ==> default:    @(connect):1:6 
    ==> default:    exception: connect failed 
    ==> default: 
    ==> default:  ================================================================================ 
    ==> default:  Error executing action `run` on resource 'execute[Add Mongo Users]' 
    ==> default:  ================================================================================ 
    ==> default: 
    ==> default:  Mixlib::ShellOut::ShellCommandFailed 
    ==> default:  ------------------------------------ 
    ==> default:  Expected process to exit with [0], but received '1' 
    ==> default:  ---- Begin output of mongo localhost:30158 /tmp/setupUsers.js ---- 
    ==> default:  STDOUT: MongoDB shell version v3.4.2 
    ==> default:  connecting to: localhost:30158 
    ==> default:  2017-03-06T10:56:56.875+0000 W NETWORK [thread1] Failed to connect to 127.0.0.1:30158, in(checking socket for error 
    after poll), reason: Connection refused 
    ==> default:  2017-03-06T10:56:56.879+0000 E QUERY [thread1] Error: couldn't connect to server localhost:30158, connection attem 
    pt failed : 
    ==> default:  [email protected]/mongo/shell/mongo.js:237:13 
    ==> default:  @(connect):1:6 
    ==> default:  STDERR: exception: connect failed 
    ==> default:  ---- End output of mongo localhost:30158 /tmp/setupUsers.js ---- 
    ==> default:  Ran mongo localhost:30158 /tmp/setupUsers.js returned 1 
    ==> default: 
    ==> default:  Resource Declaration: 
    ==> default:  --------------------- 
    ==> default:  # In /var/chef/cache/cookbooks/berk/recipes/security.rb 
    ==> default: 
    ==> default:  6: execute "Add Mongo Users" do 
    ==> default:  7: command "mongo localhost:30158 /tmp/setupUsers.js" 
    ==> default:  8: end 
    ==> default: 
    ==> default:  Compiled Resource: 
    ==> default:  ------------------ 
    ==> default:  # Declared in /var/chef/cache/cookbooks/berk/recipes/security.rb:6:in `from_file' 
    ==> default: 
    ==> default:  execute("Add Mongo Users") do 
    ==> default:  action [:run] 
    ==> default:  retries 0 
    ==> default:  retry_delay 2 
    ==> default:  default_guard_interpreter :execute 
    ==> default:  command "mongo localhost:30158 /tmp/setupUsers.js" 
    ==> default:  backup 5 
    ==> default:  returns 0 
    ==> default:  user nil 
    ==> default:  declared_type :execute 
    ==> default:  cookbook_name "berk" 
    ==> default:  recipe_name "security" 
    ==> default:  end 
    ==> default: 
    ==> default:  Platform: 
    ==> default:  --------- 
    ==> default:  x86_64-linux 
    ==> default: 
    

    正如你所看到的,这似乎mongod的服务未在输出信息的末尾还没有运行,不过,师傅告诉:

不过,我从厨师收到此消息我试图重新启动延迟服务通知。

==> default: [2017-03-06T10:56:56+00:00] INFO: Running queued delayed notifications before re-raising exception 
==> default: [2017-03-06T10:56:56+00:00] INFO: template[/etc/mongod.conf] sending restart action to service[mongod] (delayed) 
==> default: Recipe: mongodb3::default 
==> default: * service[mongod] action restart 
==> default: [2017-03-06T10:56:57+00:00] INFO: service[mongod] restarted 
==> default: 
==> default:  - restart service service[mongod] 
==> default: [2017-03-06T10:56:57+00:00] INFO: template[/opt/wildfly/standalone/configuration/standalone-full.xml] sending restart act 
ion to service[wildfly] (delayed) 

为什么直到厨师配置结束后才能启动此服务?我需要在mongod服务启动后连接到mongo

我看了一下mongodb3的食谱。 According to this line(mongodb3配方的默认配方),服务应立即开始。

编辑

我使用mongodb3配方。 mongodb3默认食谱:

service 'mongod' do 
    case node['platform'] 
    when 'ubuntu' 
     if node['platform_version'].to_f >= 15.04 
     provider Chef::Provider::Service::Systemd 
     elsif node['platform_version'].to_f >= 14.04 
     provider Chef::Provider::Service::Upstart 
     end 
    end 
    supports :start => true, :stop => true, :restart => true, :status => true 
    action :enable 
    subscribes :restart, "template[#{node['mongodb3']['mongod']['config_file']}]", :delayed 
    subscribes :restart, "template[#{node['mongodb3']['config']['mongod']['security']['keyFile']}", :delayed 
end 

回答

2

我没有看到service[mongod]在你的食谱任何地方,但我想你了以下行某处:

service 'mongod' do 
    action [:enable, :start] 
end 

此时厨师启动该服务,但它可能需要一些时间才能完全运行并响应请求。厨师不会等待,并继续运行食谱。

你可以尝试execute[Add Mongo Users]几次,直到成功为止是这样的:

execute "Add Mongo Users" do 
    command "mongo localhost:30158 /tmp/setupUsers.js" 
    retries 6 #times 
    retry_delay 10 #seconds 
end 

这会给你的服务一分钟开始,前厨师将失败。

重要提示:你也应该想出一些防范execute[Add Mongo Users],因为否则它会运行在每个厨师跑。

编辑(后显示service[mongod]资源。)

它不具备开始行动,这就是为什么它没有启动。所以加上

service 'mongod' do 
    action :start 
end 

execute[Add Mongo Users]之前的某处资源。

+0

谢谢@Draco。为了添加一些细节,我在后面添加了'mongodb3 cookbook'默认配方执行的代码。在服务开始之前,我觉得有点难以等待。有什么方法可以订阅,直到启动过程结束?为什么mongod服务启动过程延迟到Chef启动结束? – Jordi

+0

的'服务[mongod的]'你引用,只有_enable_作用,所以它只是确保该服务在引导时启动,但它不会立即启动它。注释(线137)https://github.com/sunggun-yu/chef-mongodb3/blob/master/recipes/default.rb#L137显然是错误的。 –

+0

那么,为什么mongod启动? – Jordi