В моем марионеточном скрипте у меня есть 2 вызова exec, которые выполняют разные командные файлы.
exec {
command => 'file1.bat'
}
exec {
command => 'file2.bat'
}
Если file1.bat устанавливает переменную среды, используя SET
SET VAR1=someVal
он недоступен из file2.bat, чего я ожидал.
Однако, если я использую SETX
SETX VAR1 someVal -m
он по-прежнему недоступен в file2.bat.
Единственный способ сделать изменения переменных доступными для file2.bat - это установить переменную непосредственно в реестре (используя reg ADD) в file1.bat, а затем запросить ее (используя reg QUERY) в file2.bat. Есть лучший способ сделать это?
Я не могу объединить file1.bat и file2.bat в один скрипт, потому что они используются независимо в другом месте.
Задайте переменную в манифесте марионетки и создайте пакетные сценарии из файлов шаблонов с переменными, где в противном случае вы бы использовали переменную ОС.
Например, строка из моего файла postfix.erb:
myhostname = <%= fqdn %>
Для получения большого ресурса актуального кода на практике см. Вы когда-нибудь задумывались, как настроены серверы Викимедиа?. Вы можете проверить репозиторий с помощью git
.
file { "file1 batch script":
path => "/whatever/you/want/file1.bat",
content => template("file1.erb");
}
->
exec {
command = file1.bat
}
file { "file2 batch script":
path => "/whatever/you/want/file2.bat",
content => template("file2.erb");
}
->
exec {
command = file1.bat
}
Ознакомьтесь с некоторыми значениями ERB в качестве примеров.
Любые переменные среды можно прочитать с помощью сценария, как если бы вы запустили его напрямую. Кроме того, марионетка может устанавливать переменные среды для выполнения команды в блоке exec. Проверьте Отнесение марионеточного типа для получения дополнительной информации.
Что касается импорта переменных в марионетку, читайте дальше нестандартные факты.