Неверное местное время, распространяемое в Puppet 4.8
У меня возникли некоторые проблемы с моим модулем Timezone в Puppet.
Таким образом, чтобы сделать это кратким и ясным, я нахожусь в стажировке, и мой босс дал мне задание: исправить автоматическое создание виртуальной машины.
При создании используется файл.yaml с подробной информацией о виртуальной машине (ЦП, ОЗУ,IP, резервное копирование и т. Д.), А затем создается HTML-страница с make-файлом с подробной информацией о виртуальной машине и xenconf (файл cfg).
Когда создается виртуальная машина, существует сценарий, который устанавливает некоторые пакеты (чья марионетка).
Теперь у меня есть некоторые проблемы:
У ВМ нет хорошего времени, они все в UTC, и мы хотим их по местному времени Парижа (Европа). Сначала я попытался распространить файл напрямую, но после некоторых исследований это не помогло, я попытался использовать ссылку, но ссылка не верная, у меня есть символическая ссылка на UTC вместо Европы / Парижа. Вот мой файл init.pp для моего класса часовых поясов:
#
# config de ntpd
#
# $Id: init.pp 5149 2015-07-01 16:11:29Z k***.a**** $
#
# Configuration de la timezone
class timezone {
# Fichier de configuration
file { 'timezone':
path => '/etc/timezone',
ensure => file,
source => 'puppet:///modules/timezone/timezone',
}
## Fichier de configuration
# file { 'localtime':
# path => '/etc/localtime',
# ensure => file,
# source => 'puppet:///modules/timezone/Europe/Paris',
# }
file { '/etc/localtime':
require => Package["tzdata"],
ensure => link,
force => yes,
target => '/usr/share/zoneinfo/Europe/Paris',
}
exec { 'update_date':
command => 'dpkg-reconfigure -f noninteractive tzdata',
path => '/usr/local/bin/:/bin/',
#refreshonly => true,
}
}
Есть некоторые команды, которые я пробовал, чтобы проверить мою ссылку:
ls -F : localtime@
root@testcreationvm:/etc# file localtime
localtime: symbolic link to /usr/share/zoneinfo/Etc/UTC
У меня есть еще одна проблема с этим модулем, это то, как я могу выполнить приведенную выше команду (dpkg-reconfigure -f noninteractive tzdata), один раз при создании и после этого каждый раз, когда файл или ссылка изменяются.
Спасибо заранее:)
PS: Все виртуальные машины являются Debian (от 7 до 9).
2 ответа
Forge и его участники (из которых я один) уже проделали большую работу по созданию модулей для сообщества, так что такие люди, как вы и ваш "наставник", не должны этого делать. Использование модулей является одним из основных преимуществ использования Puppet (или любого другого инструмента автоматизации). Я сам давно научился использовать силу Кузницы вместо того, чтобы писать свою собственную кодовую базу Puppet.
Модули Forge (в общем и целом) протестированы и проверены на работоспособность. Для написания вашего кода потребуется немало времени, он не будет (как я полагаю) протестировать так же, как и модуль Forge, и, следовательно, не будет (как я полагаю) столь же надежным, как модуль Forge. Это не означает, что код, который вы (или другие внутри) пишете, не будет хорошим кодом и будет работать так, как задумано, но "стоя на плечах гигантов" должен позволить вам более эффективно тратить свое время на выполнение работы, которую вы должны быть системным инженером или разработчиком, а не выполнять простые задачи по настройке.
Ваш менеджер должен ценить ваше время, и если вы хотите изучать Puppet, вы всегда можете проверить некоторые модули Forge на GitHub, чтобы увидеть, как они работают, или попробовать исправить некоторые ошибки и отправить запросы на извлечение сопровождающим.
В этом ключе правильное решение - использовать модуль Forge, такой как saz / timezone.
После установки модуля достаточно просто присвоить класс узлу, добавить эту конфигурацию в Hiera и позволить модулю позаботиться обо всем остальном. Вам вообще не нужно заглядывать в код модуля.
Например:
---
classes:
- timezone
timezone::timezone: 'Europe/Paris'
Пожалуйста, не стесняйтесь указывать менеджеру на этот ответ, если у него есть какие-либо вопросы.
Я обнаружил, почему он не работает, часовой пояс модуля не был должным образом объявлен в common.yaml, в папке hieradata, в производственной среде.
Вот мой файл common.yaml (часть):
base:
- adminkey
- apt
- assimilate
- cacti
- exim4
- facteraddon
- fsck
- initramfs
- locales
- monit
- motd
- nagios
- needrestart
- ntpd
- puppet
- rc
- resolv
- root
- snmpd
- sshd
- sudo
- timezone
- users
dom0:
- hostsfile
- kernels
- xen_tools
etc ...
И есть мой класс часовой пояс:
class timezone {
# Fichier de configuration
file { 'timezone':
path => '/etc/timezone',
ensure => file,
source => 'puppet:///modules/timezone/timezone',
}
file { '/etc/localtime':
ensure => link,
target => '/usr/share/zoneinfo/Europe/Paris',
force => yes,
}
}