У меня установлен saz-sudo и я создал на нем модуль site_sudo (надеюсь). Вот что у меня в файле site_sudo / manifest / init.pp:
class { 'site_sudo': }
sudo::conf { 'web':
source => 'puppet:///files/etc/sudoers',
}
sudo::conf { 'syseng':
priority => 10,
content => "%sysadm ALL=(ALL) NOPASSWD: ALL",
}
include sudo
Независимо от того, что я делаю, файл sudoers на целевой машине всегда перезаписывается файлом sudoers.rhel6 из модуля saz-sudo.
Я тоже использую common.yaml:
classes:
- site_sudo
Согласно ПРОЧТИ МЕНЯ, вам нужно отправить параметр в sudo
класс:
class { 'sudo':
config_file_replace => true,
}
вместо простого
include sudo
который сшибает /etc/sudoers
так как заявил.
Это точная копия из вашего файла? В class { 'site_sudo': }
строка будет включать этот класс в конфигурацию, а не определять класс, как вы должны делать в init.pp
для модуля. Это предотвратит применение остальной конфигурации в файле (поскольку этот файл оценивается только для загрузки этого класса; другие строки не будут оцениваться, как в случае import
заявление).
Вместо этого это должно выглядеть так:
class site_sudo {
include sudo
sudo::conf { 'web':
source => 'puppet:///files/etc/sudoers',
}
sudo::conf { 'syseng':
priority => 10,
content => "%sysadm ALL=(ALL) NOPASSWD: ALL",
}
}
Проверьте ПРОЧТИ МЕНЯ и класс sudo :: configs.
Используемое соглашение довольно странное (ИМХО, проще было бы просто добавить хэш-параметр к классу sudo) ... но, похоже, он неплохо работает с Hiera.
Для ваших примерных значений:
classes:
- sudo
- sudo::configs
sudo::configs:
'syseng':
'priority' : 10
'content' : "%sysadm ALL=(ALL) NOPASSWD: ALL"
saz / sudo предназначен для использования файла sudoers.d и #include его. Вот почему он перезаписывает ваш файл sudoers новым, чтобы убедиться, что это правильный файл. Эти объявления sudo :: conf приведут к тому, что файл будет отображаться в /etc/sudoers.d вместо непосредственного изменения / etc / sudoers.