Puppetにインストールされている場合にのみサービスを有効にする方法は?

Puppetにインストールされている場合にのみサービスを有効にする方法は?

onlyifパラメータを使用したと言いますが、そのサービスタイプにはそのパラメータが存在しないようです。

インストール後にのみこのサービスを有効にするにはどうすればよいですか?バイナリインストーラとしてインストールされているので、インストールディレクトリがあるかどうかをテストしてください。

class scom {
    service { 'scx-cimd':
        ensure => running,
        enable => true,
        hasstatus => true,
        hasrestart => true,
        onlyif => "test -f /opt/microsoft/scx"
    }
}

サービスにonlyifパラメータがないため、現在のエラーメッセージは「無効なパラメータonlyif」です。インストールディレクトリが存在する場合にのみこのサービスを有効にするにはどうすればよいですか?

答え1

サービスの種類(3.x2.x)にはexec型(3.x2.x

目的のタスクを実行する方法は2つあります。最初の方法は、タスクを実行する一般的で好ましい方法です。 2番目の方法も機能するハッキングです。理想的には、サービスのchkconfigは別々のランチャーでなければなりませんが、すでにこのように構成されていても、サービスをchkconfigingしても何の害もありません。

オプション1.サービスがインストールされていることを確認し、サービスタイプの条件を追加するファクトを作成します。

#service_scx_installed.rb
Factor.add('service_scx_installed') は
  実行するコードの設定
    ファイルが存在する? ('/opt/microsoft/scx')
  終わり
終わり

#scom.pp
クラス不良{
  $service_scx_installedの場合{
    サービス{'scx-cimd':
        =>実行を確認してください。
        有効=>実際には、
        状態=>事実、
        再開=>実際には、
    }
  }
}

オプション2.すべてのロジックをラージランチャーに入れます。

exec { '開始とchkconfig scxサービス':
  コマンド => 'chkconfig scx サービスが開きます。サービスscxが再起動されます。
  onlyif => ['test -f /opt/microsoft/scx', '!Service scx status'],
  プロバイダ => "シェル",
}

関連情報