根据事实通过带参数的人偶启动应用程序

Start the app through the puppet with params based on the fact

我在 init.pp 中有一个角色启动了我的应用程序:

systemd::service {'app':
    user => 'java',
    exec => "${java_home}/bin/java \
    -server \
    '-XX:OnOutOfMemoryError=\'kill -9 %%p\'' \
    -Dmw.config=/etc/app/app.config \
    -cp /usr/share/app/app.jar ru.app.main.Main app",
}

较新版本的 app.jar 启动方式不同。有一种方法,停止节点上的 puppet,从 consul 中注销节点,用新的 init.pp 启动 puppet,然后将该节点放回 consul。但这就是感觉不对。

有没有办法在其中放置一些 "if" 以便我能够根据我的应用程序版本或任何其他版本来回平滑过渡场地?

找到了

if $app_v2 == 'true' {
        systemd::service {'app':
            user => 'java',
            exec => "${java_home}/bin/java \
            -server \
            '-XX:OnOutOfMemoryError=\'kill -9 %%p\'' \
            -Dmw.config=/etc/app/app_new.config \
            -cp /usr/share/app/app.jar ru.app.main.App app",
        }
    } else {
        systemd::service {'app':
            user => 'java',
            exec => "${java_home}/bin/java \
            -server \
            '-XX:OnOutOfMemoryError=\'kill -9 %%p\'' \
            -Dmw.config=/etc/app/app.config \
            -cp /usr/share/app/app.jar ru.app.main.Main app",
        }
    }

为了获得 app_v2 标志,添加到 /lib/facter/app_v2.rb

require 'facter'

Facter.add(:app_v2) do
  confine :kernel => :Linux
  setcode do
    result = false
    if Facter::Core::Execution.exec('dpkg -l | grep app|awk \'{print}\'| cut -c1') == '2'
      result = true
    end
    result
  end
end