【问题标题】:How do I upgrade a Chef SQL Server Cookbook to use Enterprise Edition?如何升级 Chef SQL Server Cookbook 以使用企业版?
【发布时间】:2015-10-03 08:06:45
【问题描述】:

我有一本来自GitHub 的厨师食谱。它安装 SQL Server 2012 标准版。我们的 DBA 已升级我们的数据库代码以利用只能在 SQL Server 2012 企业版上找到的功能。由于此说明书用于生成我们的测试环境,因此我们现在必须更改此说明书以部署 SQL Server 2012 Enterprise。

查看说明书中的helper.rb文件,

require 'chef/mixin/shell_out'

module SqlServer
  class Helper
    extend Chef::Mixin::ShellOut

    def self.firewall_rule_enabled?(rule_name=nil)
      cmd = shell_out("netsh advfirewall firewall show rule \"#{rule_name}\"")
      cmd.stderr.empty? && (cmd.stdout =~ /Enabled:\s*Yes/i)
    end

    def self.sql_server_url(version, x86_64)
      if x86_64
        case version
        when '2008R2'
          'http://download.microsoft.com/download/D/1/8/D1869DEC-2638-4854-81B7-0F37455F35EA/SQLEXPR_x64_ENU.exe'
        when '2012'
          'http://download.microsoft.com/download/8/D/D/8DD7BDBA-CEF7-4D8E-8C16-D9F69527F909/ENU/x64/SQLEXPR_x64_ENU.exe'
        end
      else
        case version
        when '2008R2'
          'http://download.microsoft.com/download/D/1/8/D1869DEC-2638-4854-81B7-0F37455F35EA/SQLEXPR32_x86_ENU.exe'
        when '2012'
          'http://download.microsoft.com/download/8/D/D/8DD7BDBA-CEF7-4D8E-8C16-D9F69527F909/ENU/x86/SQLEXPR_x86_ENU.exe'
        end
      end
    end

它似乎从

获取安装媒体

http://download.microsoft.com/download/8/D/D/8DD7BDBA-CEF7-4D8E-8C16-D9F69527F909/ENU/x64/SQLEXPR_x64_ENU.exe

当我查看 MSDN(我们可以访问)时,我看不到企业版可以作为 .EXE 下载,只能作为 .ISO 下载。

假设我对 ISO 具有完全访问权限,我如何更改此说明书以从 ISO 而不是 EXE 进行部署?

【问题讨论】:

    标签: sql-server-2012 installation chef-infra virtual-machine cookbook


    【解决方案1】:

    重写server.rb的后半部分

    从 repo 下载 ISO

    remote_file 'C:\LocalPath' do
      source
    end
    

    挂载 ISO(也可以使用 Chef 内置的挂载资源)

    powershell_script 'mount_it' do
      code <<-EOH
        Mount-DiskImage -ImagePath "C:\PATH\TO\ISO\FILE"
      EOH
    end
    

    使用MixLib::ShellOut 并获取驱动器名称(如果您没有使用驱动器号进行硬编码安装),请将##### 部分替换为卷名称。

    output = Mixlib::ShellOut.new('(gwmi -Class Win32_LogicalDisk | Where-Object {$_.VolumeName -eq "#####"}).DeviceID')
    drive_name = output.run_command.stdout
    

    一旦您知道安装 ISO 的驱动器,那么您将能够找到安装 .EXE 文件的本地路径。

    使用windows_packagepowershell_script 块安装

    【讨论】:

    • 天啊,下载整个 ISO 吗?为什么不从厨师食谱中提取 ISO 中的 .exe?
    • 使用可能涉及合规性问题的第三方软件进行提取。欢迎您将其添加到您发布的答案中。干得好,天丝白。
    • 或使用您在此处描述的相同方法...这是读取 ISO 文件以获取所需的 .exe 文件的问题,我认为传输 80% 内容的 ISO 没有兴趣没用。 (顺便在cmets里已经讲过这个了)
    • 总的来说,我发现代码示例对 SO 用户的帮助比在此处和那里放置 cmets 更多,但我感谢您在此方面的合作。很棒的工作。
    • 挂载iso文件并进入x64/Setup目录的代码示例(如果你在x64机器上)并选择你想要的正确的.msi? FWIW,SO 不是帮助论坛,这一点(从 ISO 提取文件)更适合 superuser.stackexchange.com。谢谢你的赞美。
    【解决方案2】:

    引用 link 中的属性文件

    # Set these to specify the URL, checksum, and package name. Otherwise, the cookbook will
    # use default values based on the value of node['sql_server']['version'] and the
    # server architecture (x86 or x64).
    
    default['sql_server']['server']['url'] = nil
    default['sql_server']['server']['checksum'] = nil
    default['sql_server']['server']['package_name'] = nil
    

    因此,您只需将这些值设置为包装说明书中的本地包(例如在内部 http 服务器上),此说明书即可安装企业版。

    【讨论】:

    • 但我所拥有的是 ISO……而且我认为这本食谱需要一个 EXE。我该如何做出改变?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多