Додавання рядків до / etc / profile з лялькою?


16

Я використовую лялечку для встановлення поточного JDK і tomcat.

package {
    [ "openjdk-6-jdk", "openjdk-6-doc", "openjdk-6-jre",
      "tomcat6", "tomcat6-admin", "tomcat6-common", "tomcat6-docs", 
      "tomcat6-user" ]:
    ensure => present,
}

Тепер я хотів би додати

JAVA_HOME="/usr/lib/java"
export JAVA_HOME

щоб /etc/profile, просто вийти з цього шляху. Я ще не знайшов прямої відповіді в документах. Чи є рекомендований спосіб зробити це?

Як правило, як я можу лялькові помістити цей файл туди або змінити цей файл? Я використовую маріонетку для одного вузла (в автономному режимі) просто для того, щоб випробувати його та зберегти журнал налаштування сервера .


1
Якщо ви потрапляєте в Лялечку, перегляньте в Приклад42 наявність вбудованих модулів. Вони не завжди працюють так, як хотілося б, але вони злагоджені та стабільні. github.com/example42/puppet-modules
kashani

Відповіді:


26

Додайте файл /etc/profile.d/із суфіксом .sh. Він буде розміщений як частина / etc / profile у Red Hat та Debian та похідних, не можна сказати про інші дистрибутиви. Взагалі кажучи, якщо це взагалі можливо, краще додати фрагменти, а не замінювати розподілені файли, оскільки це, як правило, більш безпечно.

Отже, в ляльці робиться наступне:

file { "/etc/profile.d/set_java_home.sh":
    ensure => present,
    source => ...[whatever's appropriate for your setup]...,
    ...
}

Це те, що ви шукаєте, або вам потрібна детальніше?


1
Це також працює на OpenSUSE та Gentoo.
Kamil Kisiel

1
Спасибі, це чудово. Зрозуміло, що це майже працює, просто потрібно знайти відповідний спосіб посилання на файл щодо .ppджерела.
miku

1
Припустимо, що Лялька 0,25 або краще джерело => лялечка: /// $ modulename / $ файл з реальним системним шляхом $ namename / files / $ file
kashani

2
IIRC 2.6.5 і пізніше надсилає попередження про анулювання, якщо ви використовуєте лялечку: /// $ namename / files / $ file name notation. це має виглядати маріонетковим: /// модулі / $ modulename / files / $ filename
ztron

42

Рішення марки є найкращим для додавання матеріалів до профілю кожного, але якщо вам коли-небудь потрібно переконатися, що деякі файли містяться у файлі, у Puppet Labs є чудовий модуль, який називається stdlib, який включає file_line, який буде робити все, що вам потрібно. Раніше я використовував ехо і греп у типі exec, щоб зробити це, але file_line набагато простіше і чистіше.

Ось допомога для цього:

Ensures that a given line is contained within a file. The implementation
matches the full line, including whitespace at the beginning and end. If
the line is not contained in the given file, Puppet will add the line to
ensure the desired state. Multiple resources may be declared to manage
multiple lines in the same file.

Example:

file_line { 'sudo_rule':
   path => '/etc/sudoers',
   line => '%sudo ALL=(ALL) ALL',
}
file_line { 'sudo_rule_nopw':
   path => '/etc/sudoers',
   line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',
}

In this example, Puppet will ensure both of the specified lines are
contained in the file /etc/sudoers.

2
Переконайтеся, що у вас увімкнено плагінсинхронізацію на клієнті, інакше це, здається, мовчки не вдасться.
gak

1
ось документ з прямим якорем forge.puppetlabs.com/puppetlabs/stdlib#resources
Франческо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.