Ответ 1
Если вам нужны только переменные, доступные в марионеточном забеге, что случилось с:
Exec { environment => [ "foo=$bar" ] }
?
Я использую бродягу с марионеткой для создания виртуальных машин для среды разработки. Я хотел бы просто установить несколько переменных окружения в .pp файле. Использование виртуального окна и бродячего базового блока для 64-битного Ubuntu.
У меня есть это сейчас.
$bar = 'bar'
class foobar {
exec { 'foobar':
command => "export Foo=${bar}",
}
}
но при инициализации я получаю сообщение об ошибке: Не удалось найти команду 'export'.
Кажется, что это должно быть достаточно просто, если я пропустил какой-то запрос или путь для типа exec? Я заметил, что в документации есть параметр среды для настройки переменных среды, должен ли я использовать это?
Если вам нужны только переменные, доступные в марионеточном забеге, что случилось с:
Exec { environment => [ "foo=$bar" ] }
?
Самый простой способ сделать это - поместить ваши env vars в /etc/environment, это гарантирует, что они доступны для всего (или почти все).
Что-то вроде этого:
class example($somevar) {
file { "/etc/environment":
content => inline_template("SOMEVAR=${somevar}")
}
}
Причина наличия параметрируемого класса - значит, вы можете настроить его с помощью hiera с автоматическим поиском переменных (http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup)... если вы "прилипание чего-либо в /etc/environment, обычно лучше всего, если вы действительно сделаете его специфичным для среды.
Примечание: я тестировал это только на ubuntu
То, как я обошел это, также использовать /etc/profile.d:
$bar = 'bar'
file { "/etc/profile.d/my_test.sh":
content => "export Foo=${bar}",
mode => 755
}
Это гарантирует, что каждый раз, когда вы входите в систему (ex ssh), переменная $MYVAR экспортируется в вашу среду. После того, как вы примените макет и логин (ex ssh localhost), echo $Foo вернет бар
Вы можете попробовать следующее, которое устанавливает переменную окружения для этого exec
:
class foobar {
exec { 'foobar' :
command => "/bin/bash -c \"export Foo=${bar}\"",
}
}
Вы можете установить переменную окружения, определив ее в строке в /etc/environment
и вы можете обеспечить строку внутри файла, используя file_line
в puppet. Объедините эти два в следующее решение:
file_line { "foo_env_var":
ensure => present,
line => "Foo=${bar}",
path => "/etc/environment",
}
Я знаю, что это старый вопрос, но мне удалось установить значение PS1
prompt и добавить его в мой файл .bashrc
следующим образом:
$PS1 = '\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \$ '
и внутри класса:
exec {"vagrant-prompt":
unless => "grep -F 'export PS1=\"${PS1}\"' ${HOME_DIR}/.bashrc",
command => "echo 'export PS1=\"${PS1}\"' >> ${HOME_DIR}/.bashrc",
user => "${APP_USER}",
}
-F
делает grep
интерпретирует его как фиксированную строку. В противном случае он не найдет его и не добавит в файл .bashrc
.
Примерно так будет работать при сохранении существующего содержимого файла /etc/environment:
/code/environments/{environment}/manifests/environment/variable.pp:
define profile::environment::variable (
$variable_name,
$value,
$ensure => present,
) {
file_line { $variable_name:
path => '/etc/environment',
ensure => $ensure,
line => "$variable_name=$value",
match => "$variable_name=",
}
}
Использование (в теле манифеста узла):
profile::environment::variable { 'JAVA_HOME':
variable_name => 'JAVA_HOME',
value => '/usr/lib/jvm/java-1.8.0',
}