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

14

Je veux gérer les partitions montées à partir de marionnettes, ce qui inclut à la fois la modification /etc/fstabet la création des répertoires utilisés comme points de montage. Le mounttype de ressource se met fstabà jour très bien, mais son utilisation filepour créer les points de montage est un peu délicate.

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

Voici ce que j'utilise en ce moment:

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

Dans le cas où cela compte, j'utilise puppet-0.25.4-1.fc13.noarch.rpm et puppet-server-0.25.4-1.fc13.noarch.rpm.


PS undeffonctionne bien pour le propriétaire, le groupe et les autorisations, mais pas pour SELinux. Si les partitions sont déjà montées, la marionnette 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 autorisations de la partition montée sont:

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

tandis que les autorisations du point de montage créé par la marionnette sont:

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

PPS J'ai signalé un bug pour ce comportement étrange.

Cristian Ciupitu
la source

Réponses:

9

Vous pouvez dire à Puppet de ne pas gérer un métaparamètre donné en le réglant sur 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éé en tant qu'utilisateur et groupe puppetddémarré en tant que (vraisemblablement root: wheel) et avec un umask par défaut. Puppet ne se souciera pas de ce que ceux-ci sont définis au moment de la création ou lors des exécutions suivantes.


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

Dan Carley
la source
undefa fait l'affaire. Les répertoires sont créés avec l'autorisation suivante, rwxr-xr-x. root root system_u:object_r:mnt_t:s0ce qui me convient.
Cristian Ciupitu
1
Veuillez ajouter selrange => undef, selrole => undef, seltype => undef, seluser => undef,à la réponse.
Cristian Ciupitu
N'y aurait-il pas un risque pour les marionnettes à essayer de gérer la racine du système de fichiers avec "assure => monté"?
7

Pas vraiment une réponse mais cela a été corrigé dans la marionnette 2.6.7: http://projects.puppetlabs.com/issues/3999

neal
la source
Oui, vous avez raison, j'ai en quelque sorte oublié cette question. Je vous remercie!
Cristian Ciupitu
2

J'ai un fait personnalisé (fonctionne avec Linux uniquement ATM) qui retournera tous les supports locaux actuellement montés sur un système. C'est horriblement simple, mais fonctionne pour moi - on dirait que vous pourriez également en trouver une utilité. Quoi qu'il en soit, je l'ai jeté sur github: https://github.com/justintime/puppet/tree/master/justintime-localmounts

Justin Ellison
la source