Будучи марионеточным новичком, я сейчас работаю над сценарием развертывания, который запустит несколько foreverjs услуги от rc.local
во время загрузки.
Меня беспокоит то, что в Ubuntu rc.local
поставляется с exit 0
внизу файла.
Я не увидеть путь использования stdlib file_line
директива, чтобы убедиться, что мои строки появляются выше команда выхода (или в любом другом месте, в случае необходимости).
Я могу сделать это с exec
block и какой-то уродливый sed, но в марионетке должен быть более стандартный и элегантный способ?
Вы можете использовать Модуль PuppetLabs Concat для динамической вставки деталей в rc.local
файл, например:
Определите файл как файл concat и добавьте заголовок (hash-bang, комментарий «управляется Puppet» и т. Д.) - обратите внимание, что приведенное ниже может не сработать, я не уверен, что Puppet обрабатывает новую строку с головы!
concat { '/etc/rc.local':
ensure => present,
}
concat::fragment { '00_rc.local_header':
target => '/etc/rc.local'
content => '#!/bin/bash\n# This file is manageed by Puppet, do not modify!',
order => '01'
}
Добавьте свои собственные детали, убедившись, что вы указали правильный target
и order
значение, которое выше, чем ваш заголовок:
concat::fragment { '05_rc.local_custom':
target => '/etc/rc.local',
content => template('path/to/template.erb'),
order => '05'
}
concat::fragment { '15_rc.local_custom_2':
target => '/etc/rc.local',
source => 'puppet:///modules/mymodule/myfile.txt',
order => '06'
}
Добавить exit 0
нижний колонтитул:
concat::fragment { '99_rc.local_footer':
target => '/etc/rc.local',
content => 'exit 0\n',
order => '99'
}
Et fin!
Ты можешь использовать concat::fragment
через несколько подклассов (а также несколько модулей, хотя это действительно не рекомендуется!), пока вы установите правильный target
значение, и у вас есть этот файл, объявленный как concat
ресурс. В order
Параметр позволяет размещать элементы в файле.
Проверить Readme использования модуля для большего.
Если у вас установлена служба cron, вы можете использовать ее для этой цели, указав время @reboot. Что упрощает управление с помощью puppet, так это то, что вы можете просто создать отдельный файл в /etc/cron.d вместо того, чтобы пытаться редактировать один монолитный файл.
Я проверил, что работает следующее:
file { "/etc/cron.d/at_startup_myscript":
content => "@reboot root /usr/local/bin/myscript.sh \n",
}