14 votes

Comment gérer les partitions montées (fstab + points de montage) à partir de Puppet ?

Je souhaite gérer les partitions montées à partir de Puppet, ce qui inclut à la fois la modification de l'architecture de la partition et la création d'une nouvelle partition. /etc/fstab et la création des répertoires utilisés comme points de montage. Les mount mise à jour des types de ressources fstab est très bien, mais l'utilisation de file pour créer les points de montage est un peu difficile.

Par exemple, par défaut, le propriétaire du répertoire est racine et si la racine (/) de la partition montée a un autre propriétaire, Puppet essaiera de le changer, ce que je ne souhaite pas. Je sais que je peux définir le propriétaire de ce répertoire, mais pourquoi devrais-je me soucier de ce qui se trouve sur la partition montée ? Tout ce que je veux, c'est la monter. Existe-t-il un moyen de faire en sorte que Puppet ne se préoccupe pas des autorisations du répertoire utilisé comme point de montage ?

C'est ce que j'utilise actuellement :

define extra_mount_point(
    $device,
    $location = "/mnt",
    $fstype = "xfs",
    $owner = "root",
    $group = "root",
    $mode = 0755,
    $seltype = "public_content_t"
    $options = "ro,relatime,nosuid,nodev,noexec",
) {
    file { "${location}/${name}":
        ensure  => directory,
        owner   => "${owner}",
        group   => "${group}",
        mode    => $mode,
        seltype => "${seltype}",
    }

    mount { "${location}/${name}":
        atboot  => true,
        ensure  => mounted,
        device  => "${device}",
        fstype  => "${fstype}",
        options => "${options}",
        dump    => 0,
        pass    => 2,
        require => File["${location}/${name}"],
    }
}

extra_mount_point { "sda3": 
    device   => "/dev/sda3",
    fstype   => "xfs",
    owner    => "ciupicri",
    group    => "ciupicri",
    $options => "relatime,nosuid,nodev,noexec",
}

Au cas où cela aurait de l'importance, j'utilise Puppet-0.25.4-1.fc13.noarch.rpm et Puppet-server-0.25.4-1.fc13.noarch.rpm.


P.S. undef fonctionne bien pour le propriétaire, le groupe et les autorisations, mais pas pour SELinux. Si les partitions sont déjà montées, Puppet se plaint :

puppetd[18052]: Failed to set SELinux context system_u:object_r:public_content_t:s0 on /mnt/sda3
puppetd[18052]: (/File[/mnt/sda3]/seluser) seluser changed 'unconfined_u' to 'system_u'
puppetd[18052]: Failed to set SELinux context unconfined_u:object_r:mnt_t:s0 on /mnt/sda3
puppetd[18052]: (/File[/mnt/sda3]/seltype) seltype changed 'public_content_t' to 'mnt_t'

Les permissions de la partition montée sont les suivantes :

drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /mnt/sda3/

tandis que les permissions du point de montage créé par Puppet sont :

 drwxr-xr-x. root root system_u:object_r:mnt_t:s0       /mnt/sda3/

P.P.S. J'ai signalé une insecte pour ce comportement étrange.

9voto

Dan Carley Points 24959

Vous pouvez demander à Puppet de ne pas gérer un métaparamètre donné en lui attribuant la valeur suivante undef .

file { "${location}/${name}":
    ensure                  => directory,
    owner                   => undef,
    group                   => undef,
    mode                    => undef,
    selinux_ignore_defaults => true,
}

Dans ce cas, si le répertoire n'existe pas avant le montage, il sera créé avec l'utilisateur et le groupe qui ont été choisis pour le montage. puppetd a été démarré en tant que (vraisemblablement root:wheel) et avec un umask par défaut. Puppet ne se préoccupe pas de la valeur de ces paramètres au moment de la création ou lors d'exécutions ultérieures.


Par ailleurs, si vous souhaitez échanger un peu de complexité contre de l'assurance, vous pouvez utiliser un fait personnalisé pour déterminer quels sont les montages actifs et une instruction de commutation pour définir les autorisations du répertoire selon qu'il est pré-monté ou post-monté.

7voto

Siddy Pratt Points 1

Ce n'est pas vraiment une réponse, mais cela a été corrigé dans Puppet 2.6.7 : http://projects.puppetlabs.com/issues/3999

2voto

Jim In Texas Points 775

J'ai un fait personnalisé (qui ne fonctionne qu'avec Linux) qui renvoie tous les montages locaux actuellement montés sur un système. C'est horriblement simple, mais ça marche pour moi -- on dirait que vous pourriez en trouver l'utilité aussi. Quoi qu'il en soit, je l'ai mis sur github : https://github.com/justintime/Puppet/tree/master/justintime-localmounts

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