1 votes

Comment masquer les journaux "échec des dépendances" sur Puppet

Je voudrais éviter (ou du moins masquer) les journaux de "dépendances échouées" sur puppet.

Je veux déployer des fichiers uniquement si les exigences d'exécution sont remplies. Ça fonctionne mais puppet affiche beaucoup de journaux d'erreur / avertissement :

Erreur : /usr/bin/test -e /home/USER a retourné 1 au lieu de l'une des valeurs [0]
Erreur : /Stage[main]/Users::Config/Exec[/usr/bin/test -e /home/USER]/returns: changement de notrun à 0 échoué : /usr/bin/test -e /home/USER a retourné 1 au lieu de l'une des valeurs [0]
Notice : /Stage[main]/Users::Config/Exec[check_ssh_dir] : L'exécution de dépendance Exec[/usr/bin/test -e /home/USER] a échoué : true
Avertissement : /Stage[main]/Users::Config/Exec[check_ssh_dir] : Ignoré en raison de dépendances échouées
Notice : /Stage[main]/Users::Config/File[/home/USER/.ssh] : L'exécution de dépendance Exec[/usr/bin/test -e /home/USER] a échoué : true
Avertissement : /Stage[main]/Users::Config/File[/home/USER/.ssh] : Ignoré en raison de dépendances échouées
Notice : /Stage[main]/Users::Config/File[/home/USER/.bashrc] : L'exécution de dépendance Exec[/usr/bin/test -e /home/USER] a échoué : true
Avertissement : /Stage[main]/Users::Config/File[/home/USER/.bashrc] : Ignoré en raison de dépendances échouées
Notice : /Stage[main]/Users::Config/File[/home/USER/.bash_profile] : L'exécution de dépendance Exec[/usr/bin/test -e /home/USER] a échoué : true
Avertissement : /Stage[main]/Users::Config/File[/home/USER/.bash_profile] : Ignoré en raison de dépendances échouées
Notice : /Stage[main]/Users::Config/File[/home/USER/.ssh/authorized_keys] : L'exécution de dépendance Exec[/usr/bin/test -e /home/USER] a échoué : true
Avertissement : /Stage[main]/Users::Config/File[/home/USER/.ssh/authorized_keys] : Ignoré en raison de dépendances échouées

Voici mon fichier 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"],
    }
}

J'utilise puppet 4.3.

Merci pour votre aide.

2voto

Mark Stahler Points 1154

Cela n'est pas vraiment possible sans utiliser des faits ou en implémentant un fournisseur personnalisé. Pour être sûr, avec les ressources exec, vous pouvez faire quelque chose comme ceci :

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

Mais vous ne pourrez pas avoir des ressources file conditionnelles sur le résultat d'une commande. L'option la plus simple est de créer un fait. Quelque chose comme :

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

Ensuite, vous pouvez vérifier si $user se trouve dans le tableau $::avail_users dans un bloc if. Assurez-vous de ne pas avoir stringify_facts activé.

0voto

Skullone Points 195

J'ai trouvé comment résoudre mon problème grâce à @Artefacto :

J'ai créé un nouveau fact qui liste simplement les dossiers d'accueil :

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

Et j'ai modifié mon manifeste pour itérer sur chaque dossier d'accueil :

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

Maintenant je n'ai plus d'échec dû aux dépendances.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X