Как заменить строку в файле с помощью puppet
Содержание
Как правило, пакеты 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, которые мне нужно получить. Я хотел использовать.
Читайте также: