簡體   English   中英

重構 ensure_packages 以切換已安裝包的版本

[英]refactor ensure_packages to switch version of installed packages

我在 Debian linux 上按版本成功安裝了幾個 PHP 模塊,如下所示:

  $php_version = '7.3'

  ensure_packages([
    "php$php_version-xml",
    "php$php_version-zip",
    "php$php_version-curl",
    "php$php_version-mbstring",
    "libapache2-mod-php$php_version",
  ],
    {
      'ensure' => 'present',
    }
  )

現在我想准備從 PHP 7.3 到 7.4 的更新。 這基本上有效,但 7.3 軟件包保持安裝狀態。 我想修改代碼以刪除舊包。 我正在尋找一種方法來重用模塊包列表進行卸載。

我在想這樣的簽名

class profile::software::apache (
  $php_version    = '7.4',
  $php_remove     = ['7.0‘, ‘7.3'],
  #...
) {

$myPackages = [
    "php$php_version-xml",
    "php$php_version-zip",
    "php$php_version-curl",
    "php$php_version-mbstring",
    "libapache2-mod-php$php_version",
  ]

ensure_packages($myPackages,
    {
      'ensure' => 'present',
    }
  )

  $php_remove.each | String $php_version | { 
    ensure_packages($myPackages,
      {
        'ensure' => 'absent',
      }
    )
   }
}

有辦法解決這個問題嗎?

謝謝

我能夠通過使用木偶的迭代函數來解決這個問題。

根據這兩個參數,我構建了一個 hash,其中包含要處理的版本鍵和用於安裝或刪除給定版本的值。 現在我可以對每個 hash 進行迭代,重用該結構:

class profile::software::apache (
  $php_version    = '7.4',
  $php_remove     = ['7.0‘, ‘7.3'],
  #...
) {
  # build a hash of PHP Versions with a value of either present or absent
  # and iterate over it with each
  $phpInstallHash = { $php_version => 'present' }
  #notify { "Value of phpRemove: ${php_remove}": }
  if $php_remove {
    # We have the array, use the map function to build remove hash
    $phpRemoveHash = $php_remove.map |$version| {
      { $version => 'absent' }
    }
    $phpFullHash = $phpInstallHash + $phpRemoveHash
  } else {
    $phpFullHash = $phpInstallHash
  }
  #notify { "phpHash to iterate over to install/uninstall: ${phpFullHash}": }

  #iterate over the result installing/uninstalling
  $phpFullHash.each | $php_version, $ensure_value | {
    ensure_packages([
      "php$php_version-xml",
      "php$php_version-zip",
      "php$php_version-curl",
      "php$php_version-mbstring",
      "libapache2-mod-php$php_version",
    ],
      {
        'ensure' => $ensure_value,
        require  => [Class['apt::update'],
          Apt::Source['source_php_sury'],
        ],
        notify   => Class['apache::service'],
      }
    )

  }
}

hth

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM