Я пытаюсь использовать JClouds-Chef API для оба загрузить и настроить только что подготовленные виртуальные машины Linux в нашем vCenter. Наша команда DevOps (наши «повара») недавно представила концепцию среды во всех наших рецептах, и мне сказали, что теперь мне нужно обновить код JClouds-Chef для создания новых сред на лету. . В настоящее время у меня есть следующий код, который просто указывает существующую среду для использования:
// Here, "node.getEnvironment()" might return "ourapp_dev" or "ourapp_test", etc.
bootstrapConfig bootstrapConfig = BootstrapConfig.builder()
.environment(node.getEnvironment()).runList(runlist).build();
Но теперь я должен сам создавать среду на лету, а не использовать существующую среду, которая уже доступна на нашем сервере Chef.
Мне сказали, что я могу использовать Environment
, чтобы сделать это создание. И это определенно выглядит именно так, учитывая то, как настроен API. Однако я не могу найти никаких рабочих примеров, и, не являясь "шеф-поваром", мне трудно увидеть здесь лес за деревьями.
Вот среда, которую мне сказали, что мне нужно будет использовать в качестве шаблона:
name "{appname}_dev"
description "{appname} Dev Environment"
cookbook_versions({
"our_app" => "= 0.2.0",
"our_logs" => "= 0.1.0"
})
default_attributes(
"our_app" => {
"port" => "{port}",
"app_name" => "{appname}",
"config_vars" => {
"useFizz" => "true",
"host" => "devourapp",
"context" => "devourapp/{appname}"
},
"jar_file_url" => "http://ourartifactory/ourrepo/com/us/{appname}/%5BRELEASE%5D/{appname}-%5BRELEASE%5D.jar"
},
our_logs" => {
"some_resource" => "{appname}",
"log_server" => "logstash.example.com"
}
)
По-видимому, все, что находится в фигурных скобках { }
, является переменной, которую мне нужно каким-то образом передать. Так, например, {appname}
может быть fizzbuz
, и в этом случае первая строка выше должна быть разрешена как:
name "fizzbuzz_dev"
и т. д. Я могу заранее определить имена этих переменных в коде Java:
String appname = getAppName();
String port = getPort();
// etc.
Проблема в том, что я не могу понять, как использовать Environment
API для воспроизведения приведенной выше конфигурации, особенно когда речь идет о внедрении appname
и port
в качестве переменных. Есть идеи?