Назад | Перейти на главную страницу

Требовать файл для монтирования, а также обновить файл после монтирования?

Я пытаюсь убедиться, что каталог существует для монтирования, а затем также обновляю разрешения этого каталога после монтирования. Я получаю следующую ошибку:

err: Failed to apply catalog: Cannot alias File[pre_eos_mount] to ["/var/tmp/eos"] at /etc/puppet/modules/mymodule/manifests/eos.pp:29; resource ["File", "/var/tmp/eos"] already declared at /etc/puppet/modules/mymodule/manifests/eos.pp:47

Я бы хотел сделать что-то вроде этого:

file { $eos_mount :
    ensure  => 'directory',
    mode    => '1777',
    owner   => 'root',
    group   => 'root',
  }

  mount { $eos_mount :
    ensure  => 'mounted',
    device  => $lv_device,
    fstype  => $fstype,
    options => 'defaults,noatime,nodiratime',
    require => File[$eos_mount],
    notify  => File['post_eos'],
  }

  file { 'post_eos' :
    path    => $eos_mount,
    ensure  => 'directory',
    mode    => '1777',
    owner   => 'root',
    group   => 'root',
  }

Как можно гарантировать права доступа к папке после ее монтирования?

В марионетке 3+ вы можете изменить существующий ресурс следующим образом:

См. Документацию Вот Больше подробностей

file { $eos_mount :
  ensure  => 'directory',
  mode    => '1777',
  owner   => 'root',
  group   => 'root',
}

mount { $eos_mount :
  ensure  => 'mounted',
  device  => $lv_device,
  fstype  => $fstype,
  options => 'defaults,noatime,nodiratime',
  require => File[$eos_mount],
  notify  => File['post_eos'],
}

File[$eos_mount] {
  path    => $eos_mount,
  ensure  => 'directory',
  mode    => '1777',
  owner   => 'root',
  group   => 'root',
}

Я бы предпочел использовать модуль: puppet-name_service_lookups и сделайте что-нибудь вроде:

$user_info = getpwnam($owner) 
$user_uid = $user_info['uid'] 
$group_info = getgrnam($group) 
$group_gid = $group_info['gid'] 

и в опциях для монтирования выполните:

options => "defaults,noatime,nodiratime,uid=${user_uid},gid=${group_gid}",

Насколько я понял из ошибки проблема в том, что вы уже определили ресурс file {'/var/tmp/eos': } где-то раньше, поэтому мастер марионеток не позволит вам скомпилировать каталог, потому что ресурс должен быть уникальным (тип ресурса + имя $).

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