使用 puppet 自动安装 msodbcsql

Automate installation of msodbcsql with puppet

要安装使用 PHP Microsoft SQL Linux 驱动程序所需的 mssql-tools 附带的 msodbcsql,需要以下命令

sudo ACCEPT_EULA=Y apt-get install mssql-tools

然而,当用 Puppet 安装这个时,失败了,当前使用的 puppet 代码

package { 'mssql-tools'      : ensure => latest, }

但是这个returns一个错误:

ERROR: The EULA was not accepted. Installation aborted.

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

Exec { environment => [ "ACCEPT_EULA=Y" ] }

微软的安装说明在这里:

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/

看来这是一项要求的功能; 运行 具有环境值的包实体。

但是由于存在功能冻结,因此不会在 puppet 中实现 4.x (https://projects.puppetlabs.com/issues/6400)

解决方法是不使用包实体,而是使用执行实体:

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

如果软件包已经安装,unless 用于使 not 幂等运行。

此方法的缺点是它仅在使用 apt-get 时有效,如果您希望此方法也适用于其他系统,您应该提供 $osfamily with if 语句以使用正确的包管理器。