2015-06-04 29 views
4

我目前正在開發一些基本的Puppet清單和模塊,以在我的服務器部署完成後安裝我的應用程序依賴項。它的基本的東西,一套房: -Augeas在Puppet for mysql配置失敗

  • OS - > Ubuntu的LTS 14.04
  • Nginx的
  • PHP5-FPM
  • MySQL的

簡單,對不對?

大部分情況一切都很順利;直到我偶然發現使用Augeas更新配置文件與我的自定義配置項目的能力。我已經設置PHP配置項沒有任何問題,因此:

augeas { 'php.ini': 
    require => [ 
     Package['php5-fpm'], 
     Package['libaugeas-ruby'], 
    ], 
    notify => Service['php5-fpm'], 
    context => '/files/etc/php5/fpm/php.ini', 
    changes => [ 
     'set PHP/cgi.fix_pathinfo 0', 
    ], 
} 

這工作得很好。沒有問題。

不過,現在我已經來到了MySQL的配置文件,我用下面的(這幾乎是複製和粘貼工作)

augeas { 'my.cnf': 
    require => [ 
     Package['mysql-server'], 
     Package['libaugeas-ruby'], 
    ], 
    notify => Service['mysql'], 
    context => '/files/etc/mysql/my.cnf', 
    changes => [ 
     'set mysqld/bind-address 0.0.0.0', 
    ], 
} 

不幸的是,這僅僅是行不通的。我查看了augeas有關隨附鏡頭的文檔,沒有問題。以下是Puppet apply命令的初始輸出。

Error: /Stage[main]/Mysql/Augeas[my.cnf]: Could not evaluate: Save failed with return code false, see debug 

下一個邏輯步驟當然是查看調試信息。其中有以下信息。

Debug: Augeas[my.cnf](provider=augeas): sending command 'set' with params ["/files/etc/mysql/my.cnf/mysqld/bind-address", "0.0.0.0"] 
Debug: Augeas[my.cnf](provider=augeas): Put failed on one or more files, output from /augeas//error: 
Debug: Augeas[my.cnf](provider=augeas): /augeas/files/etc/mysql/my.cnf/error = put_failed 
Debug: Augeas[my.cnf](provider=augeas): /augeas/files/etc/mysql/my.cnf/error/path = /files/etc/mysql/my.cnf 
Debug: Augeas[my.cnf](provider=augeas): /augeas/files/etc/mysql/my.cnf/error/lens = /usr/share/augeas/lenses/dist/mysql.aug:39.13-.60: 
Debug: Augeas[my.cnf](provider=augeas): /augeas/files/etc/mysql/my.cnf/error/message = Failed to match 

回答

1

好吧,我已經設法讓SOMETHING發生了;但沒有充分理解發生了什麼。

之前問上面的問題,我查了可用的股票的鏡頭,我看到在列表中的PHP和MySQL的鏡頭都在http://augeas.net/stock_lenses.html

無論是環節的工作,應該是帶你通過對文檔 - 所以,知道PHP鏡頭以'set section/setting value'類型的方式工作,我認爲它與MySQL鏡頭相同。

並非如此。以下語法適用於我。

augeas { 'my.cnf': 
    require => [ 
     Package['mysql-server'], 
     Package['libaugeas-ruby'], 
    ], 
    notify => Service['mysql'], 
    context => '/files/etc/mysql/my.cnf', 
    changes => [ 
     "set target[.='mysqld']/bind-address 0.0.0.0", 
    ], 
} 

以下兩個資源是我找到信息的地方。如果任何人有任何其他文件,他們可以指向我,我會感激不盡。

這給了我的語法大概應該是什麼樣的想法: - https://www.adammalone.net/post/playing-augeas-fun-and-profit#.VXAEy1yqpBc

和線條62-65這個腳本的重申這對我來說: - https://github.com/example42/puppet-mysql/blob/master/manifests/augeas.pp

+0

是,MySQL的鏡頭有不同的佈局,由於技術原因,所以你正在做的工作,如果'mysqld'部分已經存在於文件中。爲了完全安全,您應該添加一個'set target [。='mysqld'] mysqld'作爲第一項更改,以便在添加值之前創建潛在的缺失部分。 –

+0

好的,謝謝你的提示。雖然,鑑於我正在使用的配置文件,我保證會有一個mysqld部分 - 否則我真的沒有槳的小河。 :-) 非常感激! – jellis