Configuration 如何使用Puppet在php.ini中设置config=value?

Configuration 如何使用Puppet在php.ini中设置config=value?,configuration,puppet,ini,augeas,Configuration,Puppet,Ini,Augeas,我在做木偶的第一步时遇到了一个问题。我已经在Linux服务器上安装了PHP,我想对PHP.ini文件做一些轻微的更改。我不想用存储库中的一个文件覆盖整个ini文件,只需更改/创建一个简单的配置值 我想确保php.ini中的属性upload\u max\u filesize的值为10M 如何实现这一点?基本上有三种选择: 在puppet中使用augeas支持(您需要安装ruby augeas库),如: 您可以使用“augtool ls/files/etc/php.ini”查看部分,以了解augea

我在做木偶的第一步时遇到了一个问题。我已经在Linux服务器上安装了PHP,我想对
PHP.ini
文件做一些轻微的更改。我不想用存储库中的一个文件覆盖整个
ini
文件,只需更改/创建一个简单的配置值

我想确保
php.ini
中的属性
upload\u max\u filesize
的值为
10M


如何实现这一点?

基本上有三种选择:

  • 在puppet中使用augeas支持(您需要安装ruby augeas库),如:

    您可以使用“augtool ls/files/etc/php.ini”查看部分,以了解augeas是如何解析文件的,并使用它来计算出所需的路径

  • 您可以使用exec。比如:

    define set_php_var($value) {
      exec { "sed -i 's/^;*[[:space:]]*$name[[:space:]]*=.*$/$name = $value/g' /etc/php.ini":
        unless  => "grep -xqe '$name[[:space:]]*=[[:space:]]*$value' -- /etc/php.ini",
        path    => "/bin:/usr/bin",
        require => Package[php],
        notify  => Service[httpd];
      }
    }
    set_php_var {
      "post_max_size":       value => '10M';
      "upload_max_filesize": value => '10M';
    }
    
    不幸的是,此解决方案不理解php.ini中的部分,因此添加一个尚未存在的变量将需要额外的工作。如果一个变量出现在多个部分中(但我正在查看的示例似乎都有唯一的变量名),那么这将是错误的。这应该适用于存在但用分号注释掉的变量

  • 将原始php.ini文件复制到puppet存储库中,并将该文件与
    source=>”一起使用puppet:///...“
    content=>template(…)
    来完全替换文件,正如您所指出的,您不希望这样做

  • 我的首选选项是不使用php.ini,让puppet在php的conf.d目录中创建一个文件,以覆盖要更改的值

    对php.ini所做的更改越少,将来升级php.ini时,当您需要将更改与包提供程序更改合并时,就越容易看到发生了什么

    file {'/etc/php5/conf.d/upload_limits.conf':
      ensure => present,
      owner => root, group => root, mode => 444,
      content => "post_max_size = 10M \nupload_max_filesize = 10M \n",
    }
    

    您还可以使用stdlib模块中的文件行资源

    file_line{ 'php_upload_max_filesize':
      path => '/path/to/php.ini',
      line => "upload_max_filesize = 10M",
    }
    

    如果不存在与该行完全匹配的行,则会将该行附加到文件中,并且由于配置值的最后一个实例优先于文件中较早的实例,因此该行将起作用。当我只有几件事要改变时,我就是这样做的

    如果您使用Apache作为web服务器,另一种方法是在Apache virtualhost文件(可能位于Puppet manifests目录的某个地方)中设置php变量

    例如:

    <VirtualHost *:80>
      ServerName app.dev
      DocumentRoot /srv/app/public
      ## etc...
    
      php_value upload_max_filesize 10M
    
    </VirtualHost>
    
    
    服务器名app.dev
    DocumentRoot/srv/app/public
    ##等等。。。
    php\u值上传\u最大\u文件大小10M
    

    这实际上并没有改变php.ini,但根据您的设置,这可能是实现相同效果的一种简单方法。

    作为更新,puppet现在似乎包括或提供了一种叫做augeas的东西,专门设计用于实现这类功能。虽然我自己并没有实际使用过它,所以不确定它有多容易使用。这是一个非常好和干净的方法,我喜欢!虽然这种方法不是独立于操作系统的。@JimmyKane,你在考虑哪个操作系统?@Xeoncross以前的评论是错误的。在操作系统中可能是正确的。他专注于另一个问题。感谢您在Debian/Ubuntu上提到,您应该调用文件
    upload\u limits.ini
    ,然后通过
    php5enmod upload\u limits
    启用它。在Puppetforge中有太多关于augeas的参考资料,现在问题是使用哪一个,我也使用了这个@freiheit@ankurverma:特定的木偶模块将完成此任务。然而,我实际上指的不是puppet模块,而是ruby库。根据您的系统,一个名为“ruby augeas”、“rubygem ruby augeas”或“libaugeas ruby”的包。您在rubyforge上找到的puppet模块似乎正确地安装了这些模块,因此只要您将其包含在主配置和客户端配置中,它就会工作。我安装了我提到的模块,并且正在尝试使用此文件中的AUGEA:请查看此文件并对其进行阴影处理,因为我不理解为什么这不起作用,另外,在我的测试节点中,文件资源正在执行,但Augeas没有,还有一件事是,由于Augeas不工作,我没有得到更新的配置文件。@ankurverma:你真的应该问一个新问题。您在该示例中所做的工作不会很好,因为您告诉puppet对同一个文件执行两个相互冲突的操作。还可以使用
    file\u line
    match
    参数来确保只有一行
    upload\u max\u filesize=…
    存在。See非常适合与puppet和puppetlabs apache(不支持直接PHP配置)一起使用
    <VirtualHost *:80>
      ServerName app.dev
      DocumentRoot /srv/app/public
      ## etc...
    
      php_value upload_max_filesize 10M
    
    </VirtualHost>