当木偶中存在文件时失败

时间:2015-07-20 12:12:30

标签: puppet puppet-enterprise

我正在尝试编写一个将通过un-tar安装模块的puppet脚本。我想要木偶失败,如果它已经没有焦油。我尝试在代码下面做,但即使目录不存在也总是失败。

我正在检查/ 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/',
}

由于

2 个答案:

答案 0 :(得分: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:{/ p>中的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

更新:我更新了我的回答。克里斯皮特曼是对的,我之前的解决方案只适用于木偶大师或木偶申请。 我还发现了一篇描述如何在puppet中定义自定义函数file_exists的文章。这也可能有所帮助。

答案 1 :(得分: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'。