1

un-tar でモジュールをインストールする人形スクリプトを作成しようとしています。すでに un tar になっている場合は、パペットが失敗するようにします。以下のコードを実行しようとしましたが、ディレクトリがなくても常に失敗します。

/opt/sk が存在するかどうかを確認していますが、存在しない場合はインストールに進みます。

define splunk::fail($target)
{
    $no = 'true'
    case $no {
         default : { notice($no) }#fail('sk is already installed.')}
    }
}

define splunk::forwarder( $filename , $target )
{
    file{"$target/sk":
        ensure => present
    }

    splunk::fail{"NO":
        target => '/opt/',
        require => File[$target],
    }

    file{"$target/A.tgz":
        source => $filename ,
        replace => false ,
    }

    exec{"NO1":
        command => "tar xzvf A.tgz" ,
        cwd => $target ,
        require => File["$target/A.tgz"] ,
    }

    exec{"Clean":
        command => "rm -rf A.tgz" ,
        cwd => target ,
        require => Exec["NO1"],
    }
}

splunk::forwarder {"non":
    filename => 'puppet:///modules/splunk/files/NO.tgz' ,
    target => '/opt/',
}

ありがとう

4

2 に答える 2

2

custom_factを定義し、 failリソースと組み合わせて使用​​します。

ruby ディレクトリで、たとえばコンテンツを含む/usr/lib/ruby/vendor_ruby/facterファイルを定義します。tmp_exist.rb

# tmp_exist.rb

Facter.add('tmp_exist') do
  setcode do
     File.exist? '/root/tmp'
  end
end

次に、パペット マニフェストで使用します。たとえば、stdlib のstr2bool関数と組み合わせました。

class test {

  if !str2bool($::tmp_exist) {
    fail('TMP NOT EXIST')
  }

  if !str2bool($::foo_exist) {
    fail('FOO NOT EXIST')
  }
}

include test

/root作成のみのtmpファイルで。

その結果、次のようになります。

エラー: ノード dbmaster の /etc/puppet/deploy/tests/test.pp:8 に FOO NOT EXIST があります

更新:回答を更新しました。Chris Pitman は正しかったです。私の以前のソリューションは、puppet master または puppet apply でのみ機能します。puppet でカスタム関数file_existsを定義する方法を説明した記事も見つけました。それも役に立つかもしれません。

于 2015-07-20T12:57:07.047 に答える
0

exec の「creates」属性を使用する必要があります。次に例を示します。

exec { 'install':
  command => "tar zxf ${package}",
  cwd     => $some_location,
  path    => $path,
  creates => "${some_location}/my_package",
}

「${some_location}/my_package」が存在しない場合、Puppet は「install」のみを実行します。

于 2015-07-23T13:39:52.087 に答える