Como esconder logs de “dependências com falha” no fantoche

1

Gostaria de evitar (ou ocultar pelo menos) logs de "dependências com falha" no fantoche.

Eu quero implantar arquivos apenas se os requisitos de exec forem verdadeiros. Está funcionando, mas o fantoche mostra muitos registros de erros / avisos:

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

Aqui está o meu 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"],
    }
}

Estou usando o fantoche 4.3.

Obrigado por ajudar.

    
por Skullone 24.02.2016 / 22:12

2 respostas

0

Eu descobri como resolver meu problema graças ao @Artefacto:

Eu criei um novo fato que apenas lista casas:

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

E modifiquei meu manifesto para fazer uma iteração em cada casa:

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",
        }
    }
}

Agora não falhei devido a dependências.

    
por 29.02.2016 / 21:33
2

Isso não é realmente possível sem o uso de fatos ou a implementação de um provedor personalizado. Para ter certeza, com exec recursos você pode fazer algo assim:

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

Mas você não poderá ter recursos condicionais de file no resultado do comando a. A opção mais fácil é criar um fato. Algo como:

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

Em seguida, você pode verificar se $user estava na matriz $::avail_users em um bloco if . Verifique se você não tem stringify_facts ativado.

    
por 26.02.2016 / 10:46

Tags