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

Правильный способ добавления команд в rc.local выше «выхода 0» с помощью марионетки?

Будучи марионеточным новичком, я сейчас работаю над сценарием развертывания, который запустит несколько 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",
}