Почему Puppet переключает среду, а затем возвращается обратно?

Почему Puppet переключает среду, а затем возвращается обратно?

Это с Puppet 5.5.22 и Foreman 1.22.0-develop. Я знаю, что это устаревшая установка Foreman и Puppet, но пока я не заменю их новыми версиями (скоро предстоящий проект), мне придется иметь дело именно с ними.

# puppet agent -tv
Notice: Local environment: 'production' doesn't match server specified node environment 'development', switching agent to 'development'.
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Loading facts
Notice: Local environment: 'development' doesn't match server specified environment 'test', restarting agent run with environment 'test'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Loading facts
Info: Caching catalog for servername.example.com
Info: Applying configuration version '1694623566'
Notice: Applied catalog in 12.93 seconds

Я понимаю, что исходная локальная среда 'production' может быть либо из /etc/puppet/puppet.conf, либо является средой по умолчанию, если в этом файле не указано никакой среды. В этом случае это последнее (среда не указана локально).

Среда узла «development» была установлена ​​для этого хоста в Foreman (ENC или внешний классификатор узлов для этой установки Puppet) и является желаемым правильным назначением среды.

Среда «тест» — это среда, которую Foreman устанавливает в широком смысле для всех наших хостов в данный момент, и это среда, в которой находился этот конкретный хост до того, как я изменил его через пользовательский интерфейс Foreman на «разработка». (Другими словами, «тест» — это на самом деле наша производственная среда; среда, называемая «производство», в данный момент не используется.)

Я попытался обратиться к документации Foreman, но не нашел ничего об основах работы назначений среды; документация представляла собой лишь обзор пользовательского интерфейса, который бесполезен для устранения неполадок.


Вероятно, это связано с тем, что здесь есть еще одна странность: servername.example.com появляетсядваждыв пользовательском интерфейсе Формана.

Власть Имя Операционная система Кукольная среда Модель Группа хостов Последний отчет Действия
[прялка] имя сервера Debian [версия] разработка [имя_блейд-сервера] имя_группы_хостов [пустой] [Кнопка «Изменить»]
[значок питания, серый] имя сервера Debian [версия] тест Стандартный ПК [информация о версии] [пустой] 6 минут назад [Кнопка «Изменить»]

Если я попытаюсь изменить среду для любой записи, нажав кнопку «Изменить», то при нажатии кнопки «Отправить» рядом с полем «Имя» появится красная надпись «уже занято», как будто я пытаюсь создать новую запись хоста.

Однако если вместо этого я выберу хост с флажком слева от списка, а затем перейду наверх и выберу «Выбрать действие» -> «Изменить среду», то этопоявляетсядля работы. Затем обе записи показывают "development" в пользовательском интерфейсе. Но следующий запуск Puppet на servername даст вывод, показанный в верхней части этого поста, а затем после этого обновления пользовательского интерфейса Foreman снова покажет одну запись с "development" и одну запись с "test".

Что может быть причиной этого? Как мне назначить хосты средам и заставить их работать?

решение1

Я решил эту проблему.

В нашей настройке Puppet есть некоторая идиосинкразия, заключающаяся в том, что где-то все еще есть некий затянувшийся остаток конфигурации Puppet 3 — не уверен, где именно, но запись сервера в списке, которая вернется к "тестовому", также показала своего puppet master как старый сервер puppet. Тот сервер puppet больше не существует, НО новый сервер foreman также имеет это имя. Довольно сложно, и я не совсем понимаю, откуда взялись две разные записи, но я исправил назначение flapping-окружения следующим образом:

  1. Удаление обеих записей хоста в пользовательском интерфейсе Foreman (обязательно внимательно прочитайте сообщение с подтверждением и убедитесь, что это НЕ приведет к удалению хоста(ов) или дисков, и что в подтверждении указаны только две предполагаемые записи хоста).
  2. На сервере puppet (т.е. войдя на сервер Foreman через командную строку), запуститеpuppet cert clean servername.example.com
  3. На servername.example.com удаление каталога /var/lib/puppet/ssl/(я использовал find /var/lib/puppet/ssl/ -delete, хотя это rm -rf /var/lib/puppet/ssl/сработает так же хорошо.)
  4. На servername.example.com отредактируйте файл, /etc/puppet/puppet.confчтобы установить environment = developmentпод [agent]заголовком.
  5. Повторный запуск puppet на servername.example.com с puppet agent -tv.

Это позволило правильно применить код из среды разработки без каких-либо предупреждений о несоответствующих средах, а пользовательский интерфейс Foreman теперь отображает только одну запись для этого сервера и правильно указывает, что его среда — development.

Связанный контент