Установка переменных среды с помощью кукол - программирование
Подтвердить что ты не робот

Установка переменных среды с помощью кукол

Я использую бродягу с марионеткой для создания виртуальных машин для среды разработки. Я хотел бы просто установить несколько переменных окружения в .pp файле. Использование виртуального окна и бродячего базового блока для 64-битного Ubuntu.

У меня есть это сейчас.

$bar = 'bar'

class foobar {
   exec { 'foobar':
     command => "export Foo=${bar}",
   }
}

но при инициализации я получаю сообщение об ошибке: Не удалось найти команду 'export'.

Кажется, что это должно быть достаточно просто, если я пропустил какой-то запрос или путь для типа exec? Я заметил, что в документации есть параметр среды для настройки переменных среды, должен ли я использовать это?

4b9b3361

Ответ 1

Если вам нужны только переменные, доступные в марионеточном забеге, что случилось с:

Exec { environment => [ "foo=$bar" ] }

?

Ответ 2

Самый простой способ сделать это - поместить ваши 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

Ответ 3

То, как я обошел это, также использовать /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 вернет бар

Ответ 4

Вы можете попробовать следующее, которое устанавливает переменную окружения для этого exec:

class foobar {
   exec { 'foobar' :
     command => "/bin/bash -c \"export Foo=${bar}\"",
   }
}

Ответ 5

Вы можете установить переменную окружения, определив ее в строке в /etc/environment и вы можете обеспечить строку внутри файла, используя file_line в puppet. Объедините эти два в следующее решение:

file_line { "foo_env_var":
    ensure  => present,
    line    => "Foo=${bar}",
    path    => "/etc/environment",
}

Ответ 6

Я знаю, что это старый вопрос, но мне удалось установить значение 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.

Ответ 7

Примерно так будет работать при сохранении существующего содержимого файла /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',
}