【问题标题】:Chef multiple conditions厨师多重条件
【发布时间】:2017-11-16 06:19:58
【问题描述】:

我有以下厨师/powershell 代码:

# Configure Registry Keys
powershell_script 'Configure Registry Keys' do
    code <<-EOH

    # Set the default location for data files
    Set-ItemProperty -Path "HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer" -Name DefaultData -Value "D:\\Program Files\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQL\\DATA"

    # Set the default location for log files
    Set-ItemProperty -Path "HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer" -Name DefaultLog -Value "L:\\Program Files\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQL\\DATA"

    # Set the default location for backup files
    Set-ItemProperty -Path "HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer" -Name BackupDirectory -Value "B:\\sqlbackups"

    restart-service *sql* -force
    EOH
    guard_interpreter :powershell_script
    not_if "(Get-ItemProperty \"HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer\").PSObject.Properties.Name -contains \"DefaultData\""
    not_if "(Get-ItemProperty \"HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer\").PSObject.Properties.Name -contains \"DefaultLog\""
    not_if "(Get-ItemProperty \"HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer\").PSObject.Properties.Name -contains \"BackupDirectory\""
 end

但是当我运行它时它无法运行:

 * powershell_script[Configure Registry Keys] action run (skipped due to not_if)

这是因为其中一个键存在,而另外两个不存在。

如果其中任何一个键不存在,我希望创建这些键。似乎有多个 not_ifs,如果它们中的任何一个导致 $true 然后它被跳过。

我想要的是,如果其中任何一个返回 $false 然后执行。

我试图将我的 not_if 切换为 only_if 但这似乎有同样的问题(正好相反)

那么如何将多个 not_if 或 only_if 语句连接在一起,以便它们都必须返回 $false(或全部 $true - 取决于是否使用 only_if)

希望这是有道理的,但如果没有,请告诉我:)

【问题讨论】:

  • @theincorrigible1 我不确定这有什么帮助? (顺便说一句,我读过)。我什至没有在上述文档中看到任何支持多个“not_if”或“only_if”的迹象。 (我在其他地方发现了 - 通过谷歌搜索。)

标签: windows powershell chef-infra


【解决方案1】:

这是对其中任何一个不存在的测试:

not_if "$Name=(Get-ItemProperty 'HKLM:\\Software\\Microsoft\\Microsoft SQL Server\\MSSQL14.MSSQLSERVER\\MSSQLServer').PSObject.Properties.Name; $Name -contains 'DefaultData' -and $Name -contains 'DefaultLog' -and $Name -contains 'BackupDirectory'"

【讨论】:

  • 确实有效(谢谢!)。在这种情况下,您可以将所有内容合并到一个单独的 powershell 语句中,但是在不可能的情况下(由于条件的复杂性),是否可以通过多个“not_if”(或“only_if”)以某种方式完成相同的结果)?
  • @Brad 我不确定,我只是看了一眼文档来帮助你。如果这对您有所帮助,请将其标记为未来搜索者的答案。
  • 所提供的答案解决了这个确切的问题(所以我确实感谢答案)但没有回答你如何(或者你可以)如何连接的潜在问题厨师中有多个 only_if 或 not_if 语句?在这种情况下,您可以编写一个“单行”来放入一个 not_if,但如果这不可能,因为我必须检查多个在单行中不起作用的复杂条件。
  • 如果您有多个复杂的条件,听起来您的问题范围过于复杂@Brad 看起来厨师不支持您尝试做的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多