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

Неверное местное время, распространяемое Puppet 4.8

У меня возникли некоторые проблемы с моим модулем 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,
    }
}