У меня возникли некоторые проблемы с моим модулем Timezone в Puppet.
Короче говоря, я прохожу стажировку, и мой босс дал мне задание: исправить автоматическое создание виртуальной машины.
При создании используется файл .yaml с подробностями о виртуальной машине внутри (ЦП, ОЗУ, IP, резервное копирование и т. Д.), Затем создается html-страница с файлом makefile с подробностями о виртуальной машине и 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: Все ВМ - дебианцы (с 7 по 9).
The Forge и его участники (одним из которых являюсь я) уже проделали большую тяжелую работу по созданию модулей для сообщества, так что людям, подобным вам и вашему «наставнику», не придется этого делать. Использование модулей - одна из основных сильных сторон использования Puppet (или любого другого инструмента автоматизации). Я сам давно научился использовать мощь кузницы вместо написания собственной кодовой базы Puppet.
Модули Forge (по большому счету) протестированы и проверены на работу. На написание вашего кода уйдет немало времени, он (я полагаю) не будет протестирован так же, как модуль Forge, и поэтому не будет (я полагаю) таким же заслуживающий доверия как модуль Forge. Это не означает, что код, который вы (или кто-то другой) пишете внутри компании, не будет хорошим кодом и не будет работать так, как задумано, но «стояние на плечах гигантов» должно позволить вам тратить свое время более эффективно, выполняя ту работу, которую вы должен выполнять роль системного инженера или разработчика, а не выполнять простые задачи по настройке.
Ваш менеджер должен ценить ваше время, и если вы хотите изучить Puppet, вы всегда можете проверить некоторые модули Forge на GitHub, чтобы увидеть, как они работают, или попытаться исправить некоторые ошибки и отправить запросы на слияние разработчикам.
В этом ключе правильное решение использовать модуль Forge, такой как саз / часовой пояс.
После установки модуля достаточно просто назначить класс узлу, добавить эту конфигурацию в 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,
}
}