如何在puppet上隐藏“失败的依赖关系”日志

我想避免(或至less隐藏)木偶上的“失败的依赖关系”日志。

我只想在exec要求为真时才部署文件。 它正在工作,但木偶显示了很多错误/警告日志:

Error: /usr/bin/test -e /home/USER returned 1 instead of one of [0] Error: /Stage[main]/Users::Config/Exec[/usr/bin/test -e /home/USER]/returns: change from notrun to 0 failed: /usr/bin/test -e /home/USER returned 1 instead of one of [0] Notice: /Stage[main]/Users::Config/Exec[check_ssh_dir]: Dependency Exec[/usr/bin/test -e /home/USER] has failures: true Warning: /Stage[main]/Users::Config/Exec[check_ssh_dir]: Skipping because of failed dependencies Notice: /Stage[main]/Users::Config/File[/home/USER/.ssh]: Dependency Exec[/usr/bin/test -e /home/USER] has failures: true Warning: /Stage[main]/Users::Config/File[/home/USER/.ssh]: Skipping because of failed dependencies Notice: /Stage[main]/Users::Config/File[/home/USER/.bashrc]: Dependency Exec[/usr/bin/test -e /home/USER] has failures: true Warning: /Stage[main]/Users::Config/File[/home/USER/.bashrc]: Skipping because of failed dependencies Notice: /Stage[main]/Users::Config/File[/home/USER/.bash_profile]: Dependency Exec[/usr/bin/test -e /home/USER] has failures: true Warning: /Stage[main]/Users::Config/File[/home/USER/.bash_profile]: Skipping because of failed dependencies Notice: /Stage[main]/Users::Config/File[/home/USER/.ssh/authorized_keys]: Dependency Exec[/usr/bin/test -e /home/USER] has failures: true Warning: /Stage[main]/Users::Config/File[/home/USER/.ssh/authorized_keys]: Skipping because of failed dependencies 

这是我的config.pp:

 class users::config ($user) { exec {"/usr/bin/test -e /home/${user}": } exec {"check_ssh_dir": command => '/bin/true', onlyif => "/usr/bin/test -e /home/${user}/.ssh", require => Exec["/usr/bin/test -e /home/${user}"], } file {"/home/${user}/.ssh": ensure => directory, owner => "${user}", group => "domain users", mode => "700", require => Exec['check_ssh_dir'], } file {"/home/${user}/.bashrc": source => [ "puppet:///modules/users/${user}/bashrc", "puppet:///modules/users/basics/bashrc"], owner => "${user}", group => "domain users", mode => "640", require => Exec["/usr/bin/test -e /home/${user}"], } file {"/home/${user}/.bash_profile": source => [ "puppet:///modules/users/${user}/bash_profile", "puppet:///modules/users/basics/bash_profile"], owner => "${user}", group => "domain users", mode => "640", require => Exec["/usr/bin/test -e /home/${user}"], } file {"/home/${user}/.ssh/authorized_keys": source => [ "puppet:///modules/users/${user}/ssh/authorized_keys", "puppet:///modules/users/basics/ssh/authorized_keys"], owner => "${user}", group => "domain users", mode => "600", require => Exec["check_ssh_dir"], } } 

我正在使用木偶4.3。

感谢您的帮助。

如果不使用事实或实现自定义提供者,这是不可能的。 可以肯定的是,通过exec资源,你可以这样做:

 exec { 'test-user-exists: command => '/bin/true', onlyif => "/usr/bin/test -e /home/${user}" } ~> exec { 'conditional-command': command => '/usr/bin/my-command', refreshonly => true, } 

但是,您将无法获得有关a命令结果的条件file资源。 最简单的select是创build一个事实。 就像是:

 Facter.add(:avail_users) do setcode do IO. readlines('/etc/passwd'). map { |x| x.split(':')[0] } end end 

然后你可以检查$user是否在if块的数组$::avail_users中。 确保你没有stringify_facts

我发现如何解决我的问题感谢@艺术家:

我创造了一个只列出家庭的新事实:

 Facter.add(:list_home) do setcode do Facter::Core::Execution.exec('/bin/ls /home/').split("\n") end end 

而且我已经修改了我的清单来遍历每个家庭:

 class users::config { $::list_home.each |String $user| { exec {"check_ssh_dir_${user}": command => '/bin/true', onlyif => "/usr/bin/test -e /home/${user}/.ssh", } file {"/home/${user}/.ssh": ensure => directory, owner => "${user}", group => "domain users", mode => "700", require => Exec["check_ssh_dir_${user}"], } file {"/home/${user}/.bashrc": source => [ "puppet:///modules/users/${user}/bashrc", "puppet:///modules/users/basics/bashrc"], owner => "${user}", group => "domain users", mode => "640", } file {"/home/${user}/.bash_profile": source => [ "puppet:///modules/users/${user}/bash_profile", "puppet:///modules/users/basics/bash_profile"], owner => "${user}", group => "domain users", mode => "640", } file {"/home/${user}/.ssh/authorized_keys": source => [ "puppet:///modules/users/${user}/ssh/authorized_keys", "puppet:///modules/users/basics/ssh/authorized_keys"], owner => "${user}", group => "domain users", mode => "600", } } } 

现在我没有失败,由于依赖关系。