Как заменить строку в файле с помощью puppet

Обновлено: 04.07.2024

Содержание

Как правило, пакеты puppet входят в стандартные репозитории операционных систем, и называются puppet и puppet-server. Их установка требует наличия ruby.

Основными файлами конфигурации являются auth.conf, puppet.conf (англ.) и fileserver.conf, расположенные по умолчанию в /etc/puppet

Для того, чтобы puppet работал:

  • у клиента должна быть возможность соединиться с мастером по IP адресу и имени компьютера (последнее особенно важно, так как SSL сертификаты подписываются с учётом указанного имени). Для этого может потребоваться у клиента в файле /etc/hosts прописать строку с IP адресом и именем host или корректная настройка dns-сервера:
  • должны быть открыты исходящие соединения для Puppet на порту 8140 для работы и 8139 для передачи обратных отчётов (или фаервол полностью отключен);
  • должны быть синхронизированы часы (из практических соображений, так как часть команд может задаваться с привязкой ко времени и используемое SSL шифрование тоже имеет привязку к времени существования сертификатов).

Для того чтобы клиенту знать, где собственно искать мастера, необходимо в файле puppet.conf добавить строку:

вы заставите клиента при аутентификации на мастере всегда представляться как workstation. Данная настройка упрощает управление, позволяя задавать имена, соответствующие определённой целевой группе клиентов.

Запрос сертификата у сервера и тестовый запуск puppet (без активации службы), но при этом происходит подключение к серверу и применение всех доступных конфигураций можно выполнить как:

В первой попытке соединиться с мастером клиенту будет отказано по причине отсутствия подписанного SSL сертификата, поэтому, получив отказ, клиент оставит запрос на его получение. Посмотреть список запросов можно с помощью команды:

Подписать сертификат и, соответственно, разрешить доступ клиенту можно командой:

В версиях менее третьей надо было использовать эти команды в двух вариантах, заменив puppet cert = puppetca.

Может содержать следующие настройки:

Их иногда называют рецептами, представляют собой текстовые файлы с расширением .pp (По умолчанию выполняется $confdir/manifests/site.pp). В манифесте могут и должны содержаться:

  • Классы (class)
  • Узлы (node)
  • Ресурсы (то есть типы file, user и др.)
  • Ссылки на другие манифесты (import)

Встроенные переменные становятся доступными благодаря утилите facter, устанавливаемой вместе с puppet, которая берёт информацию из системы. Если набрать в командной строке facter, то можно получить полный список доступных переменных. Вот некоторые из них:

При вызове класса freebsd для файлов атрибут group изменится на wheel, а вот атрибут owner не будет проверяться вообще. Значение атрибутов можно не заменять а добавлять:

Но таких конструкций лучше избегать, так как это может привести к циклам. Следующий пример позволяет этого избежать и сохраняет правило, когда один ресурс объявляется только один раз:

Позволяет управлять файлами и директориями.

Позволяет управлять подключенными репозиториями, посредством изменения /etc/yum.conf. Большинство параметров аналогичны man yum.conf.

Позволяет управлять системными службами.

Позволяет выполнять консольные команды, скрипты непосредственно при запуске puppet.

При этом onlyif может проверять массив команд и выполнить основную команду только тогда, когда все команды массива выполнятся:

Позволяет управлять планировщиком cron в Linux. К сожалению, удалить или изменить созданные вами вручную задания не сможет, так как определяет свои задания по вставляемому перед ними комментарию.

Позволяет управлять пользователями.

Позволяет управлять группами пользователей.

Обращение в коде puppet к классам будет выглядеть как:

Для того, чтобы модуль вообще заработал достаточно иметь папку с именем модуля, папку с манифестами и начальным манифестом init.pp.
По аналогии выстраиваем под_под_классы и под_под_…под_классы, пока не надоест.
Требуется, чтобы в каждом из файлов «класс1» … «под_класс1» был один и только один класс с соответствующим именем: «имя_модуля::класс1» … «имя_модуля::класс1::под_класс1». При этом файл init.pp должен содержать класс с именем «имя_модуля».
Получить доступ к файлам модуля можно, например, по адресу puppet:///modules/имя_модуля/.
Из директории lib можно запускать исполняемые файлы с Ruby-кодом, чтобы расширить возможности Puppet и Facter (поставщика переменных).

Окружения (environments) нужны для полного разделения конфигураций. У каждого окружения свои модули и манифесты. Это можно сравнить с использованием разных серверов puppet master.

Если не указано, с версии 4.0 будет использоваться окружение production.

В версиях 3.5, 3.6, 3.7 Open Source, 3.8 для использования «directory environments» прописываем в секцию [main] или [master] файла /etc/puppet/puppet.conf:

В более новых версиях указывать ничего не нужно.

В конфигурации агента (секция [agent] в файле /etc/puppet/puppet.conf) надо указать, какое окружение он будет использовать, например:

После подключения, используются манифесты из каталога окружения, например, /etc/puppet/environments/production/manifests/.

В манифестах можно использовать переменную $environment с именем текущего окружения.

У меня есть файл html, и я хочу использовать Puppet, чтобы заменить этот файл пустым файлом с тем же именем. Мне интересно, возможно ли для Puppet удалить все содержимое файла?

E.g. Это правильный способ, чтобы удалить строку в кукол?

1 ответ

У меня есть файлы от Custom Document Library Action до Alfresco , и когда я нажимаю эту кнопку, открывается новая страница с applet (javascript), чтобы внести изменения в файл, но я делаю изменения в base64 и до appear на экране с помощью этого : var stringPDF = <object.

Я настраиваю некоторую конфигурацию сервера в своей компании, и у нас есть несколько внутренних репозиториев, которые работают через ssh через bzr, которые мне нужно получить. Я хотел использовать puppet-vcsrepo, чтобы вытащить их, и я увидел, что у него есть способ использовать файл ключей, чтобы.

Если вы знаете, что существует файл /path/to/file.html , и хотите убедиться, что этот файл существует и пуст, это легко:

Если вы хотите убедиться , что строка в этом файле будет удалена с помощью file_line , у вас есть два способа сделать это, когда установлен ensure => absent .

Один из них-установить match => . и match_for_absence => true , как в следующем примере:

Обратите внимание, что параметр line => . будет принят, но проигнорирован в приведенном выше примере.

Второй способ использования ensure => absent -указать line => . , и никакого совпадения:

Обратите внимание, что при обеспечении отсутствия строк таким образом, поведение по умолчанию на этот раз заключается в том, чтобы всегда удалять все совпадающие строки, и это поведение нельзя отключить.

См.Также в коде здесь и здесь , а также в модульных тестах.

Я также поднял запрос на вытягивание , чтобы добавить эти примеры file_line в официальные документы здесь, поскольку это не было должным образом задокументировано ранее.

Спасибо за вопрос.

Похожие вопросы:

У меня есть сценарий, в котором мне нужно заменить определенные строки в файле атрибутов в поваренной книге пользовательским вводом из сценария Bash. В текущей настройке puppet это делается просто с.

В настоящее время я пишу пользовательский тип Ruby для Puppet и должен загрузить содержимое файла, который находится в том же модуле в папке 'files'. Есть ли функция, доступная от поставщика.

Я делал это в прошлом. Я не знаю, почему я не могу сделать это таким образом ниже. Я использую CentOS 7 для сервера Puppet Master. Я использую Windows Server 2012 с Puppet Agent. Все содержимое ниже.

У меня есть файлы от Custom Document Library Action до Alfresco , и когда я нажимаю эту кнопку, открывается новая страница с applet (javascript), чтобы внести изменения в файл, но я делаю изменения.

Я настраиваю некоторую конфигурацию сервера в своей компании, и у нас есть несколько внутренних репозиториев, которые работают через ssh через bzr, которые мне нужно получить. Я хотел использовать.

Читайте также: