使用 puppet 自动安装 msodbcsql

Qwo*_*rty 7 php linux sql-server puppet

要安装使用 PHP Microsoft SQL Driver for Linux 所需的 mssql-tools 附带的 msodbcsql,需要以下命令

sudo ACCEPT_EULA=Y apt-get install mssql-tools
Run Code Online (Sandbox Code Playgroud)

但是,当使用 Puppet 安装时,会失败,当前使用的 puppet 代码

package { 'mssql-tools'      : ensure => latest, }
Run Code Online (Sandbox Code Playgroud)

但这会返回一个错误:

ERROR: The EULA was not accepted. Installation aborted.
Run Code Online (Sandbox Code Playgroud)

Puppet 需要什么才能成功安装这个包。我已经尝试在调用 package 命令之前设置环境变量。

Exec { environment => [ "ACCEPT_EULA=Y" ] }
Run Code Online (Sandbox Code Playgroud)

微软的安装说明在这里:

https://blogs.msdn.microsoft.com/sqlnativeclient/2017/02/04/odbc-driver-13-1-for-linux-released/

这是驱动程序页面:

https://www.microsoft.com/en-us/sql-server/developer-get-started/php/ubuntu/

Qwo*_*rty 4

看来这是一个被要求的功能;使用环境值运行包实体。

但由于有一个功能冻结,这不会在 puppet 4.x 中实现(https://projects.puppetlabs.com/issues/6400

解决方法是不使用包实体而是使用 exec 实体:

exec { "/usr/bin/apt-get -yq install msodbcsql":
  environment => "ACCEPT_EULA=Y",
  unless => "/usr/bin/dpkg -l msodbcsql | tail -1 | grep ^ii",
}
Run Code Online (Sandbox Code Playgroud)

其中 except 用于使其幂等,以便在已安装软件包的情况下不运行。

此方法的缺点是,只有在使用 apt-get 时才有效,如果您希望它也能在其他系统上工作,您应该提供一个$osfamilywith if 语句来使用正确的包管理器。