Как управлять смонтированными разделами (fstab + точки монтирования) из кукольного


14

Я хочу управлять смонтированными разделами из puppet, что включает в себя как изменение, так /etc/fstabи создание каталогов, используемых в качестве точек монтирования. Тип mountресурса обновляется fstabпросто отлично, но использование fileдля создания точек монтирования немного сложнее.

Например, по умолчанию владельцем каталога является root, и если корень (/) подключенного раздела имеет другого владельца, puppet попытается изменить его, а я этого не хочу. Я знаю, что могу установить владельца этого каталога, но почему меня должно волновать, что находится на смонтированном разделе? Все, что я хочу сделать, это установить его. Есть ли способ заставить puppet не заботиться о разрешениях каталога, используемого в качестве точки монтирования?

Вот что я сейчас использую:

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

В случае, если это имеет значение, я использую puppet-0.25.4-1.fc13.noarch.rpm и puppet-server-0.25.4-1.fc13.noarch.rpm.


PS undefотлично работает для владельца, группы и прав, но не для SELinux. Если разделы уже смонтированы, марионетка жалуется:

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'

Разрешения смонтированного раздела:

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

в то время как разрешения для точки монтирования, созданные puppet:

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

PPS Я сообщил об ошибке для этого странного поведения.

Ответы:


9

Вы можете указать Puppet не управлять данным метапараметром, установив его в undef.

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

В этом случае, если каталог не существует до монтирования, он будет создан как пользователь и группа, которые puppetdбыли запущены как (предположительно root: wheel) и с umask по умолчанию. Puppet не будет заботиться о том, что они установлены во время создания или при любых последующих запусках.


В качестве альтернативы, если вы хотите обменять небольшую сложность на уверенность, вы можете использовать пользовательский факт, чтобы определить, что такое активные монтирования, и оператор switch, чтобы установить разрешения для каталога в зависимости от того, установлен он до или после подключения.


undefсделал свое дело. Каталоги создаются со следующим разрешением, rwxr-xr-x. root root system_u:object_r:mnt_t:s0что меня устраивает.
Кристиан Чиупиту

1
Пожалуйста, добавьте selrange => undef, selrole => undef, seltype => undef, seluser => undef,к ответу.
Кристиан Чиупиту

Не будет ли у марионетки риск управлять корневым каталогом файловой системы с помощью «sure => mount»?


2

У меня есть пользовательский факт (работает только с Linux ATM), который будет возвращать все монтированные в настоящий момент локальные монтирования в системе. Это ужасно просто, но работает для меня - похоже, вам это тоже пригодится. Во всяком случае, я бросил его на GitHub: https://github.com/justintime/puppet/tree/master/justintime-localmounts

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.