puppet с несколькими монтированиями NFS на одном сервере

У меня есть несколько точек монтирования NFS на одном сервере, но в разных каталогах. бывший:

    x.x.x.x:/stats   /data/stats
    x.x.x.x:/scratch   /data/scratch
    x.x.x.x:/ops   /data/ops    

Но когда я пытаюсь запустить puppet, он добавляет следующее в мой файл fstab. (неправильное назначение монтирования)

x.x.x.x:/scratch   /data/stats       nfs     defaults,nodev,nosharecache     0       0
x.x.x.x:/scratch   /data/ops  nfs     defaults,nodev,nosharecache     0       0
x.x.x.x:/scratch   /data/scratch     nfs     defaults,nodev,nosharecache     0       0

Он использует последний вариант монтирования на всех смонтированных разделах. поэтому я провел небольшое исследование и обнаружил следующую ошибку.

 https://tickets.puppetlabs.com/browse/DOCUMENT-242

Затем добавил опцию nosharecache, но все равно не повезло. это мой кукольный код

class profile::mounts::stats {
  # Hiera lookups
  $location = hiera('profile::mounts::stats::location')
  $location2 = hiera('profile::mounts::stats::location2')
   tag        'new_mount'

 file { '/data/stats':
ensure  => directory,
owner   => 'root',
group   => 'root',
mode    => '0755',
require => File['/data'],
tag     => 'new_mount',
}

  mount { '/data/stats':
ensure  => mounted,
fstype  => 'nfs',
device  => $location,
options => 'defaults,nodev,nosharecache',
require => File['/data/stats'],
tag     => 'new_mount'
}



file { '/data/ops':
  ensure  => directory,
  owner   => 'root',
  group   => 'mail',
  mode    => '0775',
  require => File['/data'],
  tag     => 'new_mount',
}

 mount { '/data/ops':
ensure  => mounted,
fstype  => 'nfs',
device  => $location2,
options => 'defaults,nodev,nosharecache',
require => File['/data/ops'],
tag     => 'new_mount',
}

file { '/data/scratch':
ensure  => directory,
owner   => 'root',
group   => 'mail',
mode    => '0775',
require => File['/data'],
tag     => 'new_mount',
}

 mount { '/data/scratch':
ensure  => mounted,
fstype  => 'nfs',
device  => $location2,
options => 'defaults,nodev,nosharecache',
require => File['/data/scratch'],
tag     => 'new_mount',
}

 }

 }

Мой поиск hieara выглядит следующим образом

profile::mounts::stats::location: x.x.x.x:/stats
profile::mounts::stats::location2: x.x.x.x:/scratch

почему это вызывает неожиданное поведение?


person Tharanga Abeyseela    schedule 11.07.2017    source источник


Ответы (1)


Я скомпилировал этот код и вижу несколько проблем:

Вы не включили ресурс File['/data'], но я предполагаю, что он у вас есть где-то еще?

После компиляции вижу это в каталоге:

$ cat myclass.json | jq '.resources | .[] | select(.type == "Mount") | [.title, .parameters]'
[
  "/data/stats",
  {
    "ensure": "mounted",
    "fstype": "nfs",
    "device": "x.x.x.x:/stats",
    "options": "defaults,nodev,nosharecache",
    "require": "File[/data/stats]",
    "tag": "new_mount"
  }
]
[
  "/data/ops",
  {
    "ensure": "mounted",
    "fstype": "nfs",
    "device": "x.x.x.x:/scratch",
    "options": "defaults,nodev,nosharecache",
    "require": "File[/data/ops]",
    "tag": "new_mount"
  }
]
[
  "/data/scratch",
  {
    "ensure": "mounted",
    "fstype": "nfs",
    "device": "x.x.x.x:/scratch",
    "options": "defaults,nodev,nosharecache",
    "require": "File[/data/scratch]",
    "tag": "new_mount"
  }
]

Итак, вы монтируете /data/ops и /data/scratch на $location2. Это упущение? Это не соответствует тому, что, по вашим словам, вы пытались достичь.

В противном случае я не смогу воспроизвести то, что, по вашим словам, вы наблюдаете.

Есть ли что-нибудь кроме Puppet, редактирующего файл fstab? Вы пробовали этот код на новой коробке?

person Alex Harvey    schedule 12.07.2017
comment
Да, я также понятия не имею, в чем разница между желаемым и фактическим поведением из вопроса, но лучше всего предположить, что он использует неправильную переменную для устройства на этом ресурсе монтирования, как вы описываете. - person Matt Schuchard; 12.07.2017
comment
Спасибо, ребята, мне удалось решить эту проблему, добавив параметр монтирования nosharecache nfs на корневой уровень (требуется класс => File['/data'], теперь он монтируется правильно. теперь нужно удалить другие /etc/fstab неправильные записи и снова запустить марионетку :) - person Tharanga Abeyseela; 13.07.2017